Наши партнеры

UnixForum





Библиотека сайта 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]

Удаление аккаунта и файлов пользователя