Настройка учетных записей пользователей и привилегий Sudo в Linux

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

Введение

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

Сначала вы воспользуетесь командой chage для установки правил истечения срока действия паролей и командой passwd для контроля доступа к учетным записям. Затем вы повысите безопасность системы, отключив возможность прямого входа по протоколу SSH для пользователя root. Наконец, вы изучите два способа предоставления расширенных прав: добавление пользователя в группу wheel для общего доступа к sudo и создание настраиваемых, детализированных правил с помощью команды visudo для безопасного делегирования конкретных административных задач.

Управление политиками паролей пользователей с помощью chage

На этом этапе вы научитесь управлять политиками паролей пользователей, используя команду chage. Принудительное соблюдение политик паролей, таких как установка срока действия, является критически важной мерой безопасности для защиты учетных записей от несанкционированного доступа. Команда chage (сокращение от «change age») позволяет просматривать и изменять информацию о сроке действия паролей.

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

sudo useradd -m testuser

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

sudo passwd testuser

Вы увидите подтверждение того, что пароль был успешно обновлен.

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

Теперь, когда у нас есть testuser, давайте посмотрим настройки срока действия пароля по умолчанию. Используйте команду chage с опцией -l (list):

sudo chage -l testuser

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

Last password change     : <date>
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

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

  • -m 7: Пользователь должен подождать минимум 7 дней, прежде чем снова менять пароль.
  • -M 90: Срок действия пароля истечет через 90 дней.
  • -W 14: Пользователь получит предупреждение за 14 дней до истечения срока действия пароля.

Вы можете применить все эти настройки одной командой chage:

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

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

sudo chage -l testuser

Вывод должен отражать новую политику, которую вы только что установили.

Last password change     : <date>
Password expires     : <date + 90 days>
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

Еще одна полезная команда для быстрой проверки статуса пароля пользователя — passwd -S. Попробуем применить ее к testuser:

sudo passwd -S testuser

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

testuser PS <date> 7 90 14 -1

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

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

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

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

sudo passwd -l testuser

Вы должны увидеть подтверждающее сообщение:

passwd: password expiry information changed.

Чтобы убедиться, что учетная запись заблокирована, снова проверьте ее статус с помощью команды passwd -S.

sudo passwd -S testuser

Обратите внимание на поле статуса в выводе. Оно должно начинаться с L (Locked), что указывает на отключение входа по паролю.

testuser L <date> 7 90 14 -1

Попробуем переключиться на учетную запись testuser, чтобы подтвердить, что она недоступна. Используйте команду su (substitute user). Вам будет предложено ввести пароль testuser.

su - testuser

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

Password:
su: Authentication failure

Теперь разблокируем учетную запись. Это делается с помощью опции passwd -u (unlock).

sudo passwd -u testuser

Вы снова увидите подтверждение:

passwd: password expiry information changed.

Проверим статус разблокировки с помощью passwd -S:

sudo passwd -S testuser

Статус теперь должен быть PS (Password Set), что означает, что учетная запись активна и имеет действующий пароль.

testuser PS <date> 7 90 14 -1

Наконец, попробуем снова войти под пользователем testuser.

su - testuser

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

Password:
testuser@<hostname>:~$

Чтобы вернуться к исходной сессии пользователя labex, просто введите exit и нажмите Enter.

exit

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

Защита учетной записи Root путем отключения входа по SSH

На этом этапе вы повысите безопасность своей системы, отключив возможность прямого входа по SSH для пользователя root. Разрешение удаленного входа под root-аккаунтом является серьезным риском, так как предоставляет злоумышленникам прямую цель с максимальными привилегиями. Лучшая практика — входить в систему как обычный пользователь, а затем использовать sudo для выполнения административных задач.

Сначала вам нужно отредактировать конфигурационный файл демона SSH, который находится по пути /etc/ssh/sshd_config. Мы воспользуемся текстовым редактором nano. Поскольку это защищенный системный файл, необходимо использовать sudo.

sudo nano /etc/ssh/sshd_config

В редакторе nano найдите строку, содержащую PermitRootLogin. Вы можете воспользоваться функцией поиска, нажав Ctrl+W, введя PermitRootLogin и нажав Enter.

Примечание: В некоторых операционных системах или браузерных средах сочетание клавиш Ctrl+W может конфликтовать с горячими клавишами браузера. Если вы не можете использовать Ctrl+W для поиска, прокрутите файл вручную до строки PermitRootLogin, которая обычно находится в разделе аутентификации.

Скорее всего, вы найдете строку, похожую на эту:

#PermitRootLogin prohibit-password

Или значение может быть установлено в yes. Ваша задача — изменить эту строку на PermitRootLogin no. Обязательно удалите символ # в начале строки, если он есть, так как этот символ закомментирует строку, делая ее неактивной. Итоговая строка должна выглядеть именно так:

PermitRootLogin no

После внесения изменений сохраните файл и выйдите из nano. Нажмите Ctrl+X, затем Y для подтверждения сохранения и Enter для подтверждения имени файла.

Чтобы новая конфигурация вступила в силу, необходимо перезапустить службу SSH. Используйте для этого команду service:

sudo service ssh restart

Команда не выведет никаких сообщений при успешном выполнении. Чтобы убедиться, что служба работает правильно, проверьте ее статус:

sudo service ssh status

Вы должны увидеть, что служба находится в состоянии running.

Теперь проверим, работает ли изменение. Попробуем подключиться по SSH к этой же машине под пользователем root (используя localhost). Сначала установите пароль для пользователя root, чтобы тест был корректным. Используйте password в качестве пароля.

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

Теперь попробуйте подключиться по SSH как root:

ssh root@localhost

Соединение должно быть немедленно отклонено с ошибкой «Permission denied». Это подтверждает, что ваша настройка безопасности работает правильно.

root@localhost: Permission denied (publickey,password).

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

Предоставление доступа к Sudo через группу wheel

На этом этапе вы изучите стандартный метод предоставления административных привилегий: добавление пользователя в специальную группу (обычно wheel или sudo), которая заранее настроена на доступ к sudo. Этот подход более удобен и масштабируем, чем добавление записей для каждого отдельного пользователя в файл sudoers. Мы продолжим использовать учетную запись testuser.

Сначала убедимся, что у testuser в данный момент нет прав sudo. Переключитесь на учетную запись testuser. Пароль — password.

su - testuser

Теперь, находясь под пользователем testuser, попробуйте выполнить команду, требующую прав root, например whoami через sudo. Вам будет предложено ввести пароль testuser.

sudo whoami

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

[sudo] password for testuser:
testuser is not in the sudoers file.  This incident will be reported.

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

exit

Далее нам нужно отредактировать конфигурацию sudoers, чтобы предоставить доступ к sudo всем членам группы wheel. Самый безопасный способ редактирования этой конфигурации — использование команды visudo, которая проверяет синтаксис перед сохранением, предотвращая возможную блокировку доступа к системе из-за ошибок.

sudo visudo

Это откроет файл /etc/sudoers в текстовом редакторе (обычно vi или nano). Найдите строку, относящуюся к группе %wheel. Вероятно, она будет закомментирована символом #.

## %wheel ALL=(ALL) ALL

или

## %wheel ALL=(ALL:ALL) ALL

Вам нужно раскомментировать эту строку, удалив # в начале. Результат должен выглядеть так:

%wheel ALL=(ALL) ALL

Если вы находитесь в редакторе vi, используйте клавиши управления курсором, чтобы перейти к символу #, нажмите x, чтобы удалить его, затем введите :wq и нажмите Enter для сохранения и выхода. Если вы в nano, просто удалите #, нажмите Ctrl+X, затем Y и Enter.

Теперь, когда группа wheel наделена полномочиями, добавьте в нее пользователя testuser. Используйте команду usermod с опциями -aG, где -a означает добавление (append), а -G указывает дополнительную группу.

sudo usermod -aG wheel testuser

Чтобы убедиться, что testuser теперь является членом группы wheel, используйте команду groups:

groups testuser

В выводе должна появиться группа wheel в списке групп пользователя testuser.

testuser : testuser wheel

Наконец, проверим, работают ли новые права. Снова переключитесь на testuser.

su - testuser

Попробуйте снова выполнить команду через sudo. Введите password при запросе.

sudo whoami

На этот раз команда должна выполниться успешно и вывести root, подтверждая, что у testuser теперь есть привилегии sudo.

[sudo] password for testuser:
root

Введите exit, чтобы вернуться в сессию labex. Вы успешно предоставили доступ к sudo, добавив пользователя в группу wheel.

Создание настраиваемых правил Sudo с помощью visudo

На этом этапе вы выйдете за рамки общих групповых разрешений и научитесь создавать детализированные правила sudo. Это необходимо для реализации принципа наименьших привилегий, когда пользователям предоставляются только те права, которые им необходимы для выполнения своих обязанностей. Мы будем использовать псевдонимы (aliases) в файле sudoers, чтобы определить набор пользователей и набор команд, а затем связать их в одном правиле.

Сначала создадим ситуацию для проверки нашего правила. Запустим процесс от имени пользователя root. Для этого отлично подойдет команда top — простой монитор процессов. Мы запустим ее в фоновом режиме с помощью sudo. Перед запуском убедимся, что другие процессы top не запущены.

pgrep top || echo "No top processes running"
sudo top &

Вы увидите идентификатор процесса (PID) фоновой задачи. Нажмите Enter, если приглашение командной строки не появилось сразу.

[1] <PID>

Теперь создадим настраиваемое правило. Мы предоставим нашему пользователю testuser конкретную возможность завершать процессы с помощью команд kill и pkill. Откройте файл sudoers для редактирования с помощью команды visudo. Это единственный безопасный способ изменения данного файла.

sudo visudo

Это откроет /etc/sudoers в редакторе. Перейдите в конец файла. Добавьте следующие строки, чтобы определить псевдоним команд и псевдоним пользователей, а затем создайте правило, которое их связывает.

## Custom rule for junior administrators
Cmnd_Alias      KILL_CMDS = /usr/bin/kill, /usr/bin/pkill
User_Alias      JUNIOR_ADMINS = testuser

JUNIOR_ADMINS   ALL=(ALL) KILL_CMDS

Разберем эти строки:

  • Cmnd_Alias: Создает именованный список команд. Мы назвали его KILL_CMDS. Обратите внимание, что необходимо указывать полный путь к командам.
  • User_Alias: Создает именованный список пользователей. Мы назвали его JUNIOR_ADMINS.
  • Последняя строка — это само правило. Оно разрешает пользователям из списка JUNIOR_ADMINS выполнять команды из списка KILL_CMDS на всех хостах (ALL).

После добавления строк сохраните файл и выйдите из редактора.

Чтобы правильно протестировать это конкретное правило, мы должны сначала удалить testuser из группы wheel, чтобы отозвать полный доступ к sudo, предоставленный на предыдущем шаге. Это гарантирует чистоту нашего теста.

sudo gpasswd -d testuser wheel

Вы увидите подтверждение:

Removing user testuser from group wheel

Теперь проверим новые ограниченные права. Переключитесь на учетную запись testuser. Пароль — password.

su - testuser

Сначала убедитесь, что полный доступ к sudo пропал. Попробуйте запустить команду, которой нет в нашем псевдониме KILL_CMDS, например whoami.

sudo whoami

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

[sudo] password for testuser:
Sorry, user testuser is not allowed to execute '/usr/bin/whoami' as root on <hostname>.

Затем попробуйте одну из разрешенных команд. Используем pkill, чтобы остановить процесс top, запущенный ранее. Мы используем pkill -u root top, чтобы нацелиться именно на процесс top, запущенный от имени root.

sudo pkill -u root top

Эта команда должна выполниться успешно без каких-либо сообщений об ошибках. Чтобы подтвердить, что процесс top был завершен, вернитесь к пользователю labex и проверьте наличие процесса.

exit

Теперь проверьте, запущен ли процесс top.

pgrep -u root top

Команда не должна ничего выводить, подтверждая, что процесс был успешно завершен пользователем testuser. Вы успешно создали и протестировали детализированное правило sudo.

Резюме

В этой лабораторной работе вы изучили основные методы управления учетными записями пользователей и их политиками безопасности в среде Linux. Вы попрактиковались в использовании команды chage для принудительного применения правил срока действия паролей, таких как установка минимального и максимального времени жизни пароля и периодов предупреждения. Вы также узнали, как блокировать и разблокировать учетные записи пользователей с помощью команды passwd для контроля доступа к системе. Для повышения безопасности системы вы изменили конфигурацию демона SSH, чтобы отключить прямой вход пользователя root — это критически важная мера для защиты наиболее привилегированного аккаунта системы.

Кроме того, вы изучили методы безопасного делегирования административных прав с помощью sudo. Вы освоили стандартную практику предоставления полного доступа к sudo путем добавления пользователя в группу wheel с помощью команды usermod. Для более точного контроля вы использовали команду visudo для безопасного редактирования файла sudoers, создавая настраиваемые правила, которые позволяют конкретным пользователям выполнять определенные команды с повышенными привилегиями без необходимости знать пароль root. Такой подход позволяет соблюдать принцип наименьших привилегий, предоставляя пользователям только те полномочия, которые необходимы им для выполнения своих задач.