Как удалить пользователя в Linux (и удалить все следы)

Удаление пользователя в Linux требует большего, чем вы думаете. Если вы системный администратор, вам нужно удалить все следы учетной записи и доступа к ней из ваших систем. Мы покажем вам шаги, которые нужно предпринять.
Если вы просто хотите удалить учетную запись пользователя из своей системы и не беспокоитесь о завершении любых запущенных процессов и других задач очистки, выполните действия, описанные в разделе «Удаление учетной записи пользователя» ниже. Вам понадобится команда deluser
в дистрибутивах на основе Debian и команда userdel
в других дистрибутивах Linux.
Учетные записи пользователей в Linux
С тех пор, как в начале 1960-х годов появились первые системы с разделением времени, которые принесли с собой возможность для нескольких пользователей работать на одном компьютере, возникла необходимость изолировать и отделить файлы и данные каждого пользователя от всех других пользователей. Так появились учетные записи пользователей и пароли.
Учетные записи пользователей имеют административные издержки. Их необходимо создавать, когда пользователю впервые требуется доступ к компьютеру. Их необходимо удалить, когда этот доступ больше не требуется. В Linux существует последовательность шагов, которые необходимо выполнить, чтобы правильно и методично удалить пользователя, его файлы и его учетную запись с компьютера.
Если вы системный администратор, то эта ответственность ложится на вас. Вот как это сделать.
Наш сценарий
Существует множество причин, по которым может потребоваться удаление учетной записи. Сотрудник может перейти в другую команду или вообще покинуть компанию. Аккаунт мог быть создан для краткосрочного сотрудничества с посетителем из другой компании. Команды распространены в академических кругах, где исследовательские проекты могут охватывать отделы, разные университеты и даже коммерческие организации. По завершении проекта системный администратор должен выполнить уборку и удалить ненужные учетные записи.
Худший сценарий — это когда кто-то уходит под облако из-за проступка. Такие события обычно происходят внезапно, без предупреждения. Это оставляет системному администратору очень мало времени на планирование и срочно блокирует, закрывает и удаляет учетную запись с резервной копией файлов пользователя на случай, если они потребуются для какой-либо криминалистической экспертизы после закрытия.
В нашем сценарии мы представим, что пользователь, Эрик, сделал что-то, что требует его немедленного удаления из помещения. В данный момент он об этом не знает, он все еще работает и залогинился. Как только вы дадите добро охране, его выпроводят из здания.
Все готово. Все глаза на вас.
Проверьте логин
Давайте посмотрим, действительно ли он вошел в систему, и если да, то со сколькими сессиями он работает. Команда who
выведет список активных сеансов.
who

Эрик вошел в систему один раз. Посмотрим, какие процессы он запускает.
Проверка процессов пользователя
Мы можем использовать команду ps
, чтобы вывести список процессов, запущенных этим пользователем. Параметр -u
(пользователь) позволяет указать ps
ограничить свой вывод процессами, работающими под управлением этой учетной записи пользователя.
ps -u eric

Мы можем увидеть те же процессы с дополнительной информацией, используя команду top
. top
также имеет параметр -U
(пользователь), чтобы ограничить вывод процессами, принадлежащими одному пользователю. Обратите внимание, что на этот раз это заглавная буква «U».
top -U eric

Мы можем видеть использование памяти и ЦП каждой задачей и можем быстро найти что-либо с подозрительной активностью. Мы собираемся принудительно завершить все его процессы, поэтому безопаснее всего уделить время быстрому просмотру процессов, а также проверить и убедиться, что другие пользователи не причинят неудобства, когда вы закроете учетную запись пользователя eric
процессов.

Не похоже, что он много делает, просто использует less
для просмотра файла. Мы можем продолжить. Но прежде чем мы убьем его процессы, мы заморозим учетную запись, заблокировав пароль.
Блокировка учетной записи
Мы заблокируем учетную запись до того, как завершим процессы, потому что, когда мы завершим процессы, пользователь выйдет из системы. Если мы уже изменили его пароль, он не сможет снова войти в систему.
Зашифрованные пароли пользователей хранятся в файле /etc/shadow
. Обычно вы не беспокоитесь об этих следующих шагах, но чтобы вы могли видеть, что происходит в файле /etc/shadow
, когда вы блокируете учетную запись, мы немного отклонимся. Мы можем использовать следующую команду, чтобы просмотреть первые два поля записи для пользовательской учетной записи eric
.
sudo awk -F: '/eric/ {print $1,$2}' /etc/shadow

Команда awk анализирует поля текстовых файлов и при необходимости манипулирует ими. Мы используем параметр -F
(разделитель полей), чтобы сообщить awk
, что файл использует двоеточие «:
» для разделения полей. Мы собираемся найти строку с шаблоном «eric». Для совпадающих строк мы напечатаем первое и второе поля. Это имя учетной записи и зашифрованный пароль.
Запись для учетной записи пользователя eric печатается для нас.
Чтобы заблокировать учетную запись, мы используем команду passwd
. Мы воспользуемся опцией -l
(блокировка) и передадим имя учетной записи пользователя для блокировки.
sudo passwd -l eric

Если мы еще раз проверим файл /etc/passwd
, мы увидим, что произошло.
sudo awk -F: '/eric/ {print $1,$2}' /etc/shadow

В начале зашифрованного пароля добавлен восклицательный знак. Он не перезаписывает первый символ, он просто добавляется в начало пароля. Это все, что требуется, чтобы пользователь не мог войти в эту учетную запись.
Теперь, когда мы предотвратили повторный вход пользователя в систему, мы можем завершить его процессы и выйти из системы.
Уничтожение процессов
Существуют разные способы уничтожения пользовательских процессов, но показанная здесь команда широко доступна и является более современной реализацией, чем некоторые альтернативы. Команда pkill
найдет и уничтожит процессы. Мы передаем сигнал KILL и используем параметр -u
(user).
sudo pkill -KILL -u eric

Вы возвращаетесь в командную строку в явно разочаровывающей манере. Чтобы убедиться, что что-то произошло, давайте еще раз проверим who
:
who

Его сессия закончилась. Он вышел из системы, и его процессы были остановлены. Это сняло некоторую безотлагательность ситуации. Теперь мы можем немного расслабиться и продолжить зачистку, пока охрана подходит к столу Эрика.
Архивирование домашнего каталога пользователя
Не исключено, что в таком сценарии в будущем потребуется доступ к файлам пользователя. Либо в рамках расследования, либо просто потому, что их замене может потребоваться сослаться на работу своего предшественника. Мы будем использовать команду tar
, чтобы заархивировать весь их домашний каталог.
Варианты, которые мы используем:
- c: создайте архивный файл.
- f: использовать указанное имя файла в качестве имени архива.
- j: использовать сжатие bzip2.
- v: предоставление подробного вывода по мере создания архива.
sudo tar cfjv eric-20200820.tar.bz /home/eric

Большая часть вывода на экран будет прокручиваться в окне терминала. Чтобы проверить, создан ли архив, используйте команду ls
. Мы используем параметры -l
(длинный формат) и -h
(удобочитаемый).
ls -lh eric-20200802.tar.bz

Создан файл размером 722 МБ. Это можно скопировать в безопасное место для последующего просмотра.
Удаление заданий cron
Нам лучше проверить, не запланированы ли задания cron
для учетной записи пользователя eric
. Задание cron
— это команда, которая запускается в определенное время или через определенные промежутки времени. Мы можем проверить, запланированы ли какие-либо задания cron
для этой учетной записи пользователя, используя ls
:
sudo ls -lh /var/spool/cron/crontabs/eric

Если что-то существует в этом месте, это означает, что для этой учетной записи пользователя в очереди стоят задания cron
. Мы можем удалить их с помощью этой команды crontab
. Параметр -r
(удалить) удалит задания, а параметр -u
(пользователь) сообщит crontab
, чьи задания нужно удалить.
sudo crontab -r -u eric

Задания удаляются молча. Насколько нам известно, если бы Эрик подозревал, что его собираются выселить, он мог бы запланировать злонамеренную работу. Этот шаг является лучшей практикой.
Удаление заданий печати
Возможно, у пользователя были ожидающие задания на печать? На всякий случай мы можем очистить очередь печати от любых заданий, принадлежащих учетной записи пользователя eric
. Команда lprm
удаляет задания из очереди печати. Параметр -U
(имя пользователя) позволяет удалить задания, принадлежащие указанной учетной записи пользователя:
lprm -U eric

Задания удаляются, и вы возвращаетесь в командную строку.
Удаление учетной записи пользователя
Мы уже создали резервные копии файлов из каталога /home/eric/
, поэтому мы можем продолжить и удалить учетную запись пользователя и удалить каталог /home/eric/
. в то же время.
Используемая команда зависит от того, какой дистрибутив Linux вы используете. Для дистрибутивов Linux на основе Debian используется команда deluser
, а для остальных систем Linux — userdel
.
На самом деле в Ubuntu доступны обе команды. Я наполовину ожидал, что один будет псевдонимом другого, но это разные двоичные файлы.
type deluser
type userdel

Хотя они оба доступны, рекомендуется использовать deluser
в дистрибутивах, производных от Debian:
«userdel
— это низкоуровневая утилита для удаления пользователей. В Debian администраторы обычно должны вместо этого использовать deluser
(8)».
Это достаточно ясно, поэтому команда для использования на этом компьютере с Ubuntu — deluser
. Поскольку мы также хотим, чтобы их домашний каталог был удален, мы используем флаг --remove-home
:
sudo deluser --remove-home eric

Для дистрибутивов, отличных от Debian, следует использовать команду userdel
с флагом --remove
:
sudo userdel --remove eric
Все следы учетной записи пользователя eric
удалены. Мы можем проверить, что каталог /home/eric/
был удален:
ls /home

Группа eric
также была удалена, поскольку в ней была единственная запись пользователя eric
. Мы можем легко это проверить, передав содержимое /etc/group
через grep
:
sudo less /etc/group | grep eric

Это обертка
Эрика за его грехи больше нет. Служба безопасности все еще выводит его из здания, а вы уже защитили и заархивировали его файлы, удалили его учетную запись и очистили систему от любых остатков.
Точность всегда важнее скорости. Убедитесь, что вы обдумываете каждый шаг, прежде чем сделать его. Вы не хотите, чтобы кто-то подошел к вашему столу и сказал: «Нет, другой Эрик».