Введение
В ходе данной лабораторной работы вы изучите ключевые методы управления учетными записями пользователей и привилегиями 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. Такой подход позволяет соблюдать принцип наименьших привилегий, предоставляя пользователям только те полномочия, которые необходимы им для выполнения своих задач.



