Управление учетными записями пользователей Linux с помощью useradd, usermod и userdel

CompTIABeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы изучите ключевые навыки управления учетными записями пользователей в операционной системе Linux. Вы на практике отработаете полный цикл администрирования: от создания и обеспечения безопасности новых аккаунтов до изменения их свойств и, наконец, их безопасного удаления. Этот практический опыт является фундаментальным для любого системного администратора, отвечающего за поддержку многопользовательской среды Linux.

Вы начнете с использования команды useradd для создания нового пользователя и его домашнего каталога, а затем защитите учетную запись с помощью passwd. Далее вы изучите различия между командами su и su - при переключении между пользователями, а также научитесь блокировать и разблокировать учетные записи. Вы также измените атрибуты пользователя, такие как политики устаревания паролей с помощью chage и членство в группах с помощью usermod. Завершится работа демонстрацией того, как правильно удалять пользователя и связанные с ним данные с помощью команды userdel.

Создание и защита пользователя с помощью useradd и passwd

На этом этапе вы научитесь создавать новую учетную запись пользователя с помощью команды useradd, а затем защищать ее, устанавливая пароль командой passwd. Это базовые административные задачи при управлении системой Linux.

Для начала создадим нового пользователя с именем student1. Команда useradd требует привилегий суперпользователя (root), поэтому перед ней нужно добавить sudo.

Выполните следующую команду в терминале:

sudo useradd -m student1

Опция -m очень важна: она указывает useradd создать домашний каталог пользователя, который по умолчанию будет находиться в /home/student1. Если не использовать -m, пользователь будет создан, но у него не будет личного пространства для хранения файлов.

После выполнения команды система создает записи для нового пользователя в нескольких критически важных файлах. Вы можете проверить это, используя команду grep для поиска строк, начинающихся с student1, в файлах /etc/passwd, /etc/shadow и /etc/group. Поскольку файл /etc/shadow доступен для чтения только суперпользователю, необходимо использовать sudo:

sudo grep ^student1 /etc/passwd /etc/shadow /etc/group

Ваш вывод должен выглядеть примерно так. Идентификаторы пользователя (UID) и группы (GID) могут отличаться, но структура останется прежней:

/etc/passwd:student1:x:5001:5001::/home/student1:/bin/sh
/etc/shadow:student1:!:20265:0:99999:7:::
/etc/group:student1:x:5001:

Разберем этот вывод:

  • /etc/passwd: Этот файл содержит основную информацию об учетных записях. Символ x во втором поле указывает на то, что зашифрованный пароль хранится не здесь, а в целях безопасности в файле /etc/shadow.
  • /etc/shadow: Этот файл содержит защищенную информацию об аккаунтах. Второе поле изначально будет содержать ! или *, что означает, что пароль еще не установлен и вход в систему под этой учетной записью невозможен.
  • /etc/group: Автоматически была создана новая группа с именем student1, которая стала основной группой для этого пользователя.

Теперь, когда пользователь существует, необходимо установить пароль, чтобы сделать учетную запись активной и безопасной. Для этого мы воспользуемся командой passwd. Как и useradd, она требует sudo при изменении пароля другого пользователя.

sudo passwd student1

Система предложит вам ввести, а затем повторно ввести новый пароль для student1. В рамках этой лабораторной работы используйте пароль student1pass. Обратите внимание, что в целях безопасности вводимые символы не будут отображаться на экране.

New password:
Retype new password:
passwd: password updated successfully

После установки пароля давайте снова проверим файл /etc/shadow, чтобы увидеть изменения. Не забудьте про sudo:

sudo grep ^student1 /etc/shadow

Теперь вывод изменится. Заполнитель ... представляет собой длинную уникальную строку символов.

student1:$y$j9T$lUM1RtLPQdrCOHmaFf1po/$xqNw.5dz54yR9whxsID9teI28/BOyvKocK5dA9X7GoD:20265:0:99999:7:::

Обратите внимание, что второе поле теперь содержит длинную сложную строку. Это хэшированная (зашифрованная) версия пароля, который вы только что установили. Теперь учетная запись активна и готова к использованию.

Переключение между пользователями и понимание различий в окружении: su против su -

На этом этапе вы узнаете, как переключиться на другую учетную запись пользователя в текущей сессии терминала с помощью команды su (substitute user). Вы также поймете критическую разницу между использованием su с флагом - (или --login) и без него, что существенно влияет на окружение пользователя.

Сначала проверим ваше текущее окружение под пользователем labex. Выполните эти команды, чтобы увидеть текущего пользователя, домашний каталог и рабочую директорию:

whoami
echo $HOME
pwd

Вы увидите следующий вывод, подтверждающий, что вы — пользователь labex в каталоге проекта:

labex
/home/labex
/home/labex/project

Теперь переключимся на пользователя student1, созданного ранее. Используйте команду su, за которой следует имя пользователя. Вам потребуется ввести пароль student1pass.

su student1

После ввода пароля ваша сессия работает от имени student1. Однако окружение загружено не полностью. Давайте снова выполним те же команды диагностики.

whoami
echo $HOME
pwd

Обратите внимание на результат:

student1
/home/student1
/home/labex/project

О чем это говорит:

  • whoami: Вы действительно стали student1.
  • echo $HOME: Переменная окружения HOME теперь указывает на домашний каталог нового пользователя (student1).
  • pwd: Вы все еще находитесь в том же каталоге, где были до переключения (/home/labex/project).

Такое поведение может вызвать проблемы, так как скрипты и приложения часто полагаются на переменную HOME для поиска конфигурационных файлов, что может привести к ошибкам.

Теперь введите exit, чтобы вернуться в оболочку пользователя labex.

exit

Далее попробуем переключиться снова, но на этот раз с флагом -. Этот флаг указывает su запустить оболочку входа (login shell), что имитирует полноценный вход пользователя в систему. Это означает, что будет загружено полное окружение student1, включая его домашний каталог и профиль оболочки.

su - student1

Снова введите пароль (student1pass). Теперь выполните диагностические команды:

whoami
echo $HOME
pwd

Сравните этот вывод с предыдущей попыткой:

student1
/home/student1
/home/student1

Различия существенны:

  • whoami: Вы по-прежнему student1.
  • echo $HOME: Переменная HOME указывает на /home/student1.
  • pwd: Ваш текущий рабочий каталог автоматически изменился на домашний каталог пользователя student1.

Это доказывает, что su - <имя_пользователя> — рекомендуемый способ переключения пользователей в командной строке, так как он обеспечивает чистое и предсказуемое окружение, предотвращая проблемы с путями и правами доступа.

Чтобы завершить этот этап, введите exit, чтобы вернуться в исходную сессию labex.

exit

Блокировка и разблокировка учетных записей с помощью passwd -l и passwd -u

На этом этапе вы научитесь временно отключать учетную запись пользователя путем ее блокировки и снова активировать ее разблокировкой. Это стандартная административная процедура в ситуациях, когда нужно запретить пользователю вход в систему, не удаляя при этом его аккаунт и файлы.

Сначала заблокируем учетную запись student1. Для этого используется команда passwd с опцией -l (lock). Это действие требует прав администратора, поэтому используйте sudo.

sudo passwd -l student1

Команда подтвердит, что пароль был заблокирован. Сообщение может немного отличаться, но оно укажет на успех операции.

passwd: password for user student1 changed.

Но что на самом деле делает «блокировка»? Давайте снова заглянем в файл /etc/shadow.

sudo grep ^student1 /etc/shadow

Вы заметите небольшое, но важное изменение. Перед строкой зашифрованного пароля теперь стоят один или два восклицательных знака (!). Заполнитель ... представляет остальную часть вашего уникального хэша.

student1:!$y$j9T$...:20265:0:99999:7:::

Этот префикс ! делает сохраненный хэш пароля недействительным, из-за чего система не может сопоставить ни один пароль, вводимый пользователем. В результате вход становится невозможным. Проверим это, попытавшись переключиться на student1:

su - student1

Система запросит пароль, но даже если вы введете правильный (student1pass), вход не удастся.

Password:
su: Authentication failure

Это подтверждает, что аккаунт успешно заблокирован. Теперь разблокируем его. Чтобы снова активировать учетную запись, просто выполните обратный процесс с опцией -u (unlock).

sudo passwd -u student1

Команда снова подтвердит изменение.

passwd: password for user student1 changed.

Проверим /etc/shadow в последний раз, чтобы убедиться, что аккаунт разблокирован.

sudo grep ^student1 /etc/shadow

Вывод показывает, что префикс ! исчез, восстановив исходный хэш пароля.

student1:$y$j9T$...:20265:0:99999:7:::

Учетная запись снова активна. Вы можете убедиться в этом, успешно переключившись на пользователя student1. Введите пароль student1pass при запросе.

su - student1

Теперь вы вошли в систему как student1. Введите exit, чтобы вернуться в сессию labex.

exit

Изменение срока действия пароля и членства в группах с помощью chage и usermod

На этом этапе вы перейдете к управлению более сложными свойствами пользователей. Вы научитесь применять политики безопасности паролей с помощью chage для контроля срока их действия, а также управлять членством в группах с помощью usermod для контроля прав доступа.

Сначала изучим информацию о сроке действия пароля для учетной записи student1. Команда chage (change age) с флагом -l (list) выводит эти подробности.

sudo chage -l student1

В выводе отобразятся настройки по умолчанию. Даты будут соответствовать моменту создания пользователя.

Last password change     : Dec 08, 2024
Password expires     : never
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 0
Maximum number of days between password change  : 99999
Number of days of warning before password expires : 7

В целях безопасности рекомендуется требовать от пользователей периодической смены пароля. Установим политику: пароль должен меняться каждые 90 дней (-M 90), его можно менять не чаще одного раза в 7 дней (-m 7), а пользователь должен получить предупреждение за 14 дней до истечения срока (-W 14).

sudo chage -M 90 -m 7 -W 14 student1

Теперь снова просмотрите настройки, чтобы подтвердить изменения:

sudo chage -l student1

Вывод отразит новую политику:

Last password change     : Dec 08, 2024
Password expires     : Mar 08, 2025
Password inactive     : never
Account expires      : never
Minimum number of days between password change  : 7
Maximum number of days between password change  : 90
Number of days of warning before password expires : 14

Далее изменим членство в группах. Пользователь принадлежит к основной группе и может входить в несколько дополнительных (вторичных) групп. Просмотреть группы пользователя можно командой id.

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1)

Это показывает, что основной группой student1 является student1 (gid=5001), и он пока не состоит в дополнительных группах.

Создадим новую группу developers и добавим в нее student1. Сначала создайте группу:

sudo groupadd developers

Теперь добавьте student1 в эту группу с помощью usermod. Флаги -aG имеют решающее значение: -G указывает дополнительные группы, а -a (append) добавляет пользователя в группу, не удаляя его из существующих.

sudo usermod -aG developers student1

Снова проверьте группы пользователя:

id student1

Теперь в выводе присутствует группа developers:

uid=5001(student1) gid=5001(student1) groups=5001(student1),1002(developers)

Что произойдет, если забыть флаг -a? Давайте создадим еще одну группу testers и добавим в нее student1, используя только -G.

sudo groupadd testers
sudo usermod -G testers student1

Проверьте группы еще раз:

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1),1003(testers)

Заметьте, что student1 больше не состоит в группе developers. Использование usermod -G без -a заменяет все существующие дополнительные группы новым списком. Чтобы пользователь состоял в обеих группах, нужно либо перечислить их через запятую (-G developers,testers), либо использовать флаг добавления. Исправим это, правильно добавив student1 обратно в группу developers.

sudo usermod -aG developers student1

Проверьте итоговое состояние. Теперь пользователь должен быть членом обеих групп.

id student1
uid=5001(student1) gid=5001(student1) groups=5001(student1),1003(testers),1002(developers)

Удаление пользователей и их данных с помощью userdel и userdel -r

На этом этапе вы научитесь безвозвратно удалять учетные записи пользователей из системы с помощью команды userdel. Вы увидите важную разницу между простым удалением информации об аккаунте и удалением аккаунта вместе со всеми связанными файлами, такими как домашний каталог.

Чтобы продемонстрировать оба метода удаления, создадим второго пользователя с именем student2.

sudo useradd -m student2

Теперь у вас есть два пользователя для работы: student1 (из предыдущих шагов) и новый student2.

Начнем с удаления пользователя student1 без дополнительных опций. По умолчанию команда userdel удаляет записи пользователя из системных файлов (таких как /etc/passwd и /etc/shadow), но не удаляет его домашний каталог. Это полезно, если вам нужно заархивировать данные пользователя перед их окончательным уничтожением.

sudo userdel student1

Чтобы убедиться, что учетная запись удалена, попробуйте найти ее в /etc/passwd с помощью grep.

grep ^student1 /etc/passwd

Команда не выдаст никакого результата, что подтверждает удаление записи. Однако что с домашним каталогом? Проверим, существует ли еще /home/student1.

ls -ld /home/student1

Вы увидите, что каталог все еще на месте, хотя владельцем теперь значится число (старый UID пользователя), так как система больше не может сопоставить этот ID с именем.

drwxr-x--- 2 5001 5001 78 Jun 26 08:18 /home/student1

Теперь удалим пользователя student2, но на этот раз используем флаг -r (remove). Эта опция указывает userdel удалить домашний каталог пользователя и его почтовый ящик вместе с учетными записями. Это полное и необратимое удаление.

sudo userdel -r student2

Вы можете увидеть предупреждение о том, что почтовый ящик (mail spool) не найден — это нормально, так как пользователь никогда не получал почту:

userdel: student2 mail spool (/var/mail/student2) not found

Это предупреждение не является ошибкой — оно просто означает, что файла почтового ящика не существовало, что ожидаемо для нового пользователя.

Сначала убедитесь, что запись аккаунта исчезла из /etc/passwd. Как и прежде, команда не должна ничего вернуть.

grep ^student2 /etc/passwd

Затем, что самое важное, проверьте наличие домашнего каталога /home/student2.

ls -ld /home/student2

На этот раз команда завершится ошибкой, доказывая, что каталог был полностью удален вместе с учетной записью.

ls: cannot access '/home/student2': No such file or directory

Вы успешно освоили оба метода удаления пользователей, что дает вам гибкость: сохранять данные или безвозвратно стирать их в зависимости от ситуации.

Резюме

В этой лабораторной работе вы изучили основные команды для управления учетными записями пользователей в системе Linux. Вы начали с создания нового пользователя с помощью useradd -m, обеспечив создание домашнего каталога, и защитили аккаунт, установив пароль через passwd. Вы попрактиковались в переключении между пользователями с помощью su и su -, узнав о критической разнице между стандартной оболочкой и оболочкой входа. Вы также научились управлять доступом к аккаунту, блокируя и разблокируя его с помощью опций -l и -u команды passwd.

Далее вы перешли к изменению атрибутов существующих пользователей. Вы использовали chage для управления политиками устаревания паролей и usermod для изменения членства в группах. Наконец, вы изучили процесс удаления пользователей из системы, различая команду userdel, которая удаляет только учетную запись, и userdel -r, которая также удаляет домашний каталог и почтовый ящик пользователя для полной очистки системы.