Лабораторная работа "Управление пользователями" - efanov/mephi GitHub Wiki
В данной работе изучаются принципы организации многопользовательской работы, а также команды, предназначенные для управления бюджетами пользователей.
Выполните все примеры и разберитесь, как они устроены.
Идентификация — это процедура распознавания пользователя по его личному идентификатору.
Аутентификация — это процедура проверки подлинности пользователя (пользователь доказывает, что он тот, за кого себя выдаёт).
- Команды управления пользователями и паролями пользователей:
useradd
,userdel
,usermod
,chage
,passwd
- Команды управления группами:
groupadd
,groupdel
,groupmod
- Команды для повышения привилегий:
sudo
,su
- Конфигурационные файлы:
/etc/passwd
,/etc/shadow
,/etc/group
,/etc/default/useradd
,/etc/login.defs
,/etc/sudoers
В текстовом файле /etc/passwd
содержится список пользователей.
Каждая строка этого файла описывает одного пользователя и представляет собой запись, состоящую из семи полей, разделенных двоеточием.
Формат файла представлен на рисунке:
Текстовый файл /etc/shadow
для управления паролями пользователей.
Он принадлежит пользователю root и не доступен на чтение и запись обычным пользователям.
Каждая строка этого файла соответствует одному пользователю системы и представляет собой запись, состоящую из девяти полей, разделенных двоеточием.
Основная функция файла /etc/shadow – хранить хэш-суммы паролей пользователей системы.
Для вычисления хэш-суммы пароля должна использоваться криптографическая хэш-функция.
Формат файла представлен на рисунке:
Пользователи объединяются в группы для более гибкого управления доступом к файлам.
Пользователь должен входить как минимум в одну группу — такую группу называют основной (primary).
Также пользователь может входить в несколько дополнительных (supplementary) групп.
Список групп хранится в текстовом файле /etc/group
.
Каждая строка этого файла описывает одну группу и представляет собой запись, состоящую из четырех полей, разделенных двоеточием.
Формат файла представлен на рисунке:
Рассмотрим основные команды.
Для создания пользователя предназначена команда useradd
.
С помощью опций команды можно явно задать каждую характеристику пользователя.
Если опции не заданы, берутся значения по умолчанию из файлов /etc/default/useradd
и /etc/login.defs
.
После создания домашней директории пользователя в нее копируется содержимое директории /etc/skel
, в которую системный администратор может поместить файлы, которые по умолчанию должны присутствовать у каждого пользователя.
Изучите содержимое этих конфигурационных файлов и папок самостоятельно.
Команда useradd
по умолчанию создает записи для нового пользователя в трех основных файлах.
Для пользователя создана новая индивидуальная группа, в которую входит только данный пользователь.
Пароль пользователю по умолчанию не устанавливается, поэтому его нужно установить явно командой passwd
.
Для модификации пользователя используется команда usermod. Ее опции в основном повторяют опции команды useradd.
Иногда пользователю требуется возможность аутентификации по паролю, но не требуется работать в командной оболочке.
Например, на почтовом сервере пользователи должны иметь учетные записи, чтобы подключаться из почтовых клиентов.
Тогда в качестве входной оболочки можно установить программу /sbin/nologin
.
Для удаления пользователя используется команда userdel
.
По умолчанию команда userdel
только удаляет учетную запись пользователя, но не затрагивает его файлы.
Для изменения пароля пользователя, а также временных атрибутов пароля используется команда passwd
.
Чтобы заставить пользователя сменить пароль при следующем входе в систему, можно выполнить команду passwd -e
или chage -d 0
.
В результате, в поле даты последнего изменения пароля будет записан 0
.
Чтобы заблокировать вход пользователя в систему по паролю, можно использовать команды usermod
с опцией -L
или passwd
с опцией -l
.
Для разблокировки используются флаги -U
и -u
соответственно.
После создания учетной записи пользователя в поле, где хранится хэш-сумма пароля, записан восклицательный знак, что не позволяет пользователю войти в систему без пароля. При блокировке пользователя хэш-сумма пароля не изменяется, но в начало записывается восклицательный знак. При разблокировании пользователя восклицательный знак просто удаляется. Убедитесь в этом самостоятельно.
Как видно, возможности команд usermod, passwd и chage пересекаются, что позволяет системному администратору выбрать свой стиль общения с системой.
Перед тем, как добавить пользователя в группу, её необходимо создать.
Для создания группы используется команда groupadd
.
В большинстве операционных систем существует некий суперпользователь, обладающий всеми полномочиями в системе.
В RedHat Enterprise Linux таким пользователем является root
.
Этот пользователь имеет право отменять обычные привилегии на файловой системе и используется для управления и администрирования системы.
Для выполнения таких задач, как установка и удаление программного обеспечения, управление системными файлами и каталогами, пользователь должен повысить свои права до уровня пользователя root
.
Неограниченные привилегии влекут за собой большую ответственность.
Пользователь root
способен легко нанести ущерб системе: удалить файлы и директории, пользователей, добавить бэкдоры и так далее.
Рекомендуется управлять системой от лица обычного пользователя и повышать свои привилегии до root
только в случае необходимости.
Для повышения своих привилегий используются такие программы, как sudo
, su
или Polkit.
Команда su - <username>
позволяет войти под пользователем <username>
.
Если имя пользователя не указано, подразумевается root
:
su -
Команда sudo
позволяет выполнить другую команду от лица суперпользователя или другого пользователя в зависимости от настроек в конфигурационном файле /etc/sudoers
.
В отличие от su
, sudo
требует ввода пароля текущего пользователя, а не пользователя, от лица которого запрашивается доступ:
sudo cat /etc/shadow
# [sudo] password for <username>:
Все действия с использованием sudo
по умолчанию записываются в файл /var/log/secure
.
Войдите в систему от лица обычного пользователя. Изучите своё окружение, выполнив следующие команды:
id
pwd
echo $HOME
echo $PATH
Повысьте свои привилегии, сменив пользователя на root
.
Снова изучите своё окружение.
su
id
pwd
echo $HOME
echo $PATH
Для выхода выполните команду exit
или нажмите <Ctrl-D>
.
Теперь выполните su -
вместо su
и проделайте всё то же самое.
Что делает опция -
?
Войдите в систему от лица обычного пользователя.
Попробуйте вывести последние 5 строк файла /var/log/messages
.
Воспользуйтесь sudo
, чтобы решить задачу.
Сделайте резервную копию файла /etc/motd
, назовите её /etc/motdOLD
.
Попробуйте выполнить
sudo echo "Welcome to Linux!" >> /etc/motd
Объясните вывод.
Добавьте в файл /etc/motd
строку "Welcome to Linux!".
Проверьте, что при входе в систему Вы получаете введённое выше сообщение.
Восстановите файл /etc/motd
из резервной копии.
В качестве примера работы с файлом /etc/passwd
рассмотрим shell
-скрипт, который выводит на экран информацию о пользователях, у которых в качестве оболочки установлен Bash.
Для разбиения записей на отдельные поля используется тот факт, что поля разделяются символом :
.
Поэтому если переопределить переменную IFS
(Internal Field Separator), Bash будет читать отдельные поля, как отдельные слова, разделенные символом-разделителем:
grep 'bash$' /etc/passwd |
while IFS=: read user passwd uid gid name homedir shell
do
printf "%16s: %s\n" \
User "$user" \
Password "$passwd" \
"User ID" "$uid" \
"Group ID" "$gid" \
Name "$name" \
"Home directory" "$homedir" \
Shell "$shell"
echo
done
Предположим, что сегодня 31 января, и в системе создан пользователь, который будет работать над проектом в течение шести месяцев (180 дней).
Команда date
позволяет вычислить дату, которая наступит через определенное количество дней после текущего дня.
Срок действия учетной записи для нового пользователя можно ограничить 180 днями.
Пароль требуется менять не реже, чем каждые три месяца (90 дней).
Минимальный срок действия пароля не установлен.
За пять дней до обязательной смены пароля пользователю начнут выдаваться предупреждения.
Если пользователь не поменяет свой пароль, то в течение 10 дней он сможет войти в систему со старым паролем и установить новый пароль.
Команда chage -l
выводит текущие настройки пароля пользователя.
date
# Вывод: Mon 31 Jan 2022 02:50:12 PM MSK
date -d +180days +%Y-%m-%d
# Вывод: 2022-07-30
sudo chage -E $(date -d +180days +%Y-%m-%d) ivan
# Нет вывода
sudo chage -m 0 -M 90 -W 5 -I 10 ivan
# Нет вывода
sudo chage -l ivan
# Вывод:
# Last password change : Jan 31, 2022
# Password expires : May 01, 2022
# Password inactive : May 11, 2022
# Account expires : Jul 30, 2022
# Minimum number of days between password change : 0
# Maximum number of days between password change : 90
# Number of days of warning before password expires : 5
sudo grep ivan /etc/shadow
# Вывод: ivan:$6$ZjdXqIs4BlbjqkBs$7oRI476rdxWEr-iysR0UYScdvaLrHO2uq9msYpVxnxeO0zuaeDTvpmfedb8oLC8kDBz9FPrrzRLn70y9//f06x.:19023:0:90:5:10:19203:
Видно, что в записи для пользователя в файле /etc/shadow
установлены соответствующие поля.
Например, число 19023
означает количество дней с 1 января 1970 г. по 31 января 2022 г.
Так как информация о пользователе хранится в простых текстовых файлах, управлять учетными записями можно и вручную. Для этого необходимо выполнить следующие действия:
- Выбрать отличительные характеристики пользователя: логическое имя, идентификатор пользователя UID, идентификатор группы пользователя GID.
- Создать запись в
/etc/passwd
. - Создать запись в
/etc/group
. - Создать домашнюю директорию пользователя по шаблону
/home/<username>
- Скопировать в домашнюю директорию файлы, которые должны присутствовать у пользователя и, в том числе, выполняться при входе пользователя в систему.
- Изменить владельца и группу домашней директории со всем ее содержимым на вновь созданного пользователя и его группу. При необходимости изменить права к домашней директории.
- Создать запись в
/etc/shadow
в соответствии с политикой безопасности организации по управлению паролями (например, как часто надо пользователю менять свой пароль). - Установить пользователю пароль.
Подсказка
Для создания записи в/etc/shadow
можно воспользоваться командой openssl passwd
.
Проделайте эти шаги и создайте пользователя вручную.
Используйте изученные в работе команды, чтобы создать пользователя.
Сравните результаты.
Рассмотрим пример, когда удаляется только учетная запись пользователя, но после создания нового пользователя последний получает доступ к файлам пользователя, который был удален.
sudo useradd old
id old
# Вывод: uid=1003(old) gid=1004(old) groups=1004(old)
ls -l /home/
# Часть вывода: drwx------. 2 old old 62 Sep 26 20:52 old
sudo userdel old
ls -l /home
# Часть вывода: drwx------. 2 1003 1004 62 Sep 26 20:52 old
sudo useradd new
id new
# Вывод: uid=1003(new) gid=1004(new) groups=1004(new)
ls -l /home
# Часть вывода:
# drwx------. 2 new new 62 Sep 26 20:54 new
# drwx------. 2 new new 62 Sep 26 20:52 old
Чтобы предотвратить подобные ситуации, рекомендуется не удалять пользователя, а блокировать его учетную запись. Дополнительно можно придерживаться правил, следующих ниже.
При создании нового пользователя явно указывать его UID:
sudo useradd -u 1002 user2
При удалении пользователя перемещать все его файлы в специально выделенную директорию, а его домашнюю директорию удалять:
find / -user user1 -exec mv {} /new/location; 2>/dev/null
sudo userdel -r user1
Чтобы найти файлы, которые не принадлежат никакому пользователю, можно выполнить следующую команду:
find / -nouser -o -nogroup 2>/dev/null
Пусть вам необходимо
- Создать группу
consultants
с GID40000
, создать в ней пользователей для Ивана, Полины и Дмитрия. Основная группа должна быть группой с именем пользователя - Задать каждому пользователю пароль
default
- Потребовать смены пароля пользователей каждые 30 дней, за исключением Полины — ей 15 дней
- Аккаунты должны истечь через 90 дней
- После первого входа пользователи должны сменить свой пароль
Решите эту задачу.
- В каком файле хранятся данные о пользователях?
- Назовите команды для создания/удаления/изменения пользователя/группы.
- Как повысить свои привилегии?
- Какой командой пользователь может изменить свой пароль?
- Как добавить пользователя в ещё одну дополнительную группу?
Защита работы проходит в формате беседы с преподавателем.
Для успешной защиты необходимо ответить на вопросы по формату изученных файлов и продемонстрировать умение управления пользователями и группами путём решения задач в реальном времени.