Библиотека сайта rus-linux.net
Как в Linux удалить пользовательский аккаунт вместе с домашней директорией
Оригинал: How to Delete User Accounts with Home Directory in Linux
Автор: Aaron Kili
Дата публикации: 4 декабря 2015 года
Перевод: А. Кривошей
Дата перевода: ноябрь 2016 г.
Системному администратору Linux может потребоваться удалить пользовательский аккаунт, который долгое время не используется, или если пользователь покинул компанию, либо по каким-либо другим причинам.
При удалении аккаунта пользователя в Linux также важно удалить его домашнюю директорию, чтобы освободить дисковое пространство.
1. Для демонстрационных целей сначала я создам два пользовательских аккаунта с домашними директориями в своей системе с помощью команды adduser - для пользователей tecmint и linuxsay
# adduser tecmint # passwd tecmint # adduser linuxsay # passwd linuxsay
Вместо команды adduser можно использовать команду useradd, они предназначены для одного и того же.
2. Теперь давайте посмотрим, как удалить аккаунт пользователя в Linux с помощью команд deluser (для Debian и его производных) и userdel (для систем на базе RedHat/CentOS)
Директивы в конфигурационном файле для команд deluser и userdel определяют, как они работают с пользовательскими файлами и директориями.
Давайте посмострим на конфигурационный файл для команды deluser, расположенный в /etc/deluser.conf для производных Debian, таких как Ubuntu, Kali, Mint; и расположенный в /etc/login.defs для RHEL/CentOS/Fedora.
Значения в этих файлах заданы по умолчанию и могут быть изменены в соответствии с вашими нуждами.
# vi /etc/deluser.conf [В Debian и его производных] # vi /etc/login.defs [В системах на базе RedHat/CentOS]
3. Если пользователь авторизован на сервере, он пользуется различными службами и запускает разные процессы. Необходимо помнить, что полностью удалить пользователя можно только тогда, когда он не авторизован на сервере.
Блокирование пользовательского аккаунта в Linux
Сначала заблокируем пользовательский аккаунт, чтобы пользователь не имел доступа в систему. Это предотвратит запуск процессов в системе от его имени. Для этого используется команда passwd с ключом –lock:
# passwd --lock tecmint Locking password for user tecmint. passwd: Success
Поиск и завершение всех запущенных процессов пользователя
Далее необходимо найти все работающие процессы этого пользователя и завершить их, определив PID процессов, принадлежащих нашему пользователю:
# pgrep -u tecmint 1947 1959 2091 2094 2095 2168 2175 2179 2183 2188 2190 2202 2207 2212 2214
Затем вы можете вы можете вывести список процессов с более подробной информацией:
# ps -f --pid $(pgrep -u tecmint) UID PID PPID C STIME TTY STAT TIME CMD tecmint 1947 1 0 10:49 ? SLl 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login tecmint 1959 1280 0 10:49 ? Ssl 0:00 mate-session tecmint 2091 1959 0 10:49 ? Ss 0:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session /usr/bin/im-launch mate-session tecmint 2094 1 0 10:49 ? S 0:00 /usr/bin/dbus-launch --exit-with-session /usr/bin/im-launch mate-session tecmint 2095 1 0 10:49 ? Ss 0:00 //bin/dbus-daemon --fork --print-pid 6 --print-address 9 --session tecmint 2168 1 0 10:49 ? Sl 0:00 /usr/lib/dconf/dconf-service tecmint 2175 1959 0 10:49 ? Sl 0:02 /usr/bin/mate-settings-daemon tecmint 2179 1959 0 10:49 ? Sl 0:47 marco tecmint 2183 1 0 10:49 ? Sl 0:00 /usr/lib/gvfs/gvfsd tecmint 2188 1959 0 10:49 ? Sl 0:00 mate-panel tecmint 2190 1 0 10:49 ? Sl 0:00 /usr/lib/gvfs/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes tecmint 2202 1 0 10:49 ? S<l 0:20 /usr/bin/pulseaudio --start --log-target=syslog tecmint 2207 1959 0 10:49 ? S 0:00 /bin/sh /usr/bin/startcaja tecmint 2212 1 0 10:49 ? Sl 0:03 /usr/bin/python /usr/lib/linuxmint/mintMenu/mintMenu.py tecmint 2214 1 0 10:49 ? Sl 0:11 /usr/lib/mate-panel/wnck-applet
После того, как вы нашли все запущенные процессы пользователя, вы можете завершить их с помощью команды killall:
# killall -9 -u tecmint
-9 - это номер для сигнала SIGKILL, вместо него можно использовать ключ -KILL.
Замечание: в последних релизах RedHat/CentOS 7.x и Fedora 21+ вы можете получить следующую ошибку:
-bash: killall: command not found
Для ее предотвращения необходимо установить соответствующий пакет, как показано ниже:
# yum install psmisc [В RedHat/CentOS 7.x] # dnf install psmisc [В Fedora 21+ ]
Резервное копирование данных пользователя перед удалением
Далее вы можете сделать резервную копию пользовательских файлов, если нужно. Для создания архива с резервной копией домашней директории пользователя я использовал утилиту tar:
# tar jcvf /user-backups/tecmint-home-directory-backup.tar.bz2 /home/tecmint
Удаление аккаунта и файлов пользователя
Теперь вы можете безопасно удалить пользователя вместе с его домашней директорией. Для удаления всех файлов пользователя предназначена опция --remove-all-files:
# deluser --remove-home tecmint [On Debian and its derivatives] # userdel --remove tecmint [On RedHat/CentOS based systems]