Введение
В этой лабораторной работе вы освоите основные приемы повышения безопасности Linux-системы с помощью внедрения и применения надежных политик паролей. Вы настроите системные правила сложности паролей: зададите минимальную длину и потребуете использовать различные типы символов, включая прописные и строчные буквы, а также цифры. Кроме того, вы настроите политики срока действия паролей, чтобы учетные данные регулярно обновлялись. Это снижает риски, связанные с скомпрометированными паролями, благодаря изменению основных конфигурационных файлов системы.
После настройки политики вы проверите, что строгие требования к паролям применяются к новым учетным записям. Затем лабораторная работа перейдет от профилактических мер безопасности к обнаружению инцидентов: вы научитесь отслеживать системные журналы аутентификации. Анализируя эти журналы, вы сможете выявлять подозрительную активность, например повторные неудачные попытки входа, которые могут указывать на атаку методом перебора или другие попытки несанкционированного доступа.
Настройка локальной политики сложности и срока действия паролей в Linux
На этом этапе вы научитесь повышать безопасность Linux-системы с помощью надежной политики паролей. Надежная политика паролей контролирует два ключевых параметра: сложность и срок действия. Правила сложности затрудняют подбор паролей, требуя сочетания разных типов символов, а правила срока действия заставляют пользователей периодически менять пароли, снижая риск использования скомпрометированных учетных данных. Для настройки этих политик вы воспользуетесь стандартными утилитами Linux и измените системные конфигурационные файлы.
Сначала рассмотрим сложность паролей. В современных системах на базе Debian, например Ubuntu, качество паролей контролируется модулем pam_pwquality. Его конфигурация хранится в файле /etc/security/pwquality.conf.
Для начала изучим настройки по умолчанию. Используйте команду cat, чтобы просмотреть содержимое конфигурационного файла. С помощью grep мы исключим закомментированные и пустые строки, чтобы сделать вывод более понятным.
grep -vE '^#|^$' /etc/security/pwquality.conf
Вы можете увидеть некоторые настройки по умолчанию или обнаружить, что активные параметры в файле отсутствуют. Теперь настроим более строгую политику. Для редактирования файла потребуются права администратора, поэтому воспользуемся sudo и редактором nano.
sudo nano /etc/security/pwquality.conf
Добавьте в файл следующие строки. Они потребуют, чтобы пароль содержал не менее 10 символов, как минимум одну цифру, одну прописную и одну строчную букву. Кроме того, проверки будут выполняться и в тех случаях, когда администратор задает пароль другого пользователя.
minlen = 10
dcredit = -1
ucredit = -1
lcredit = -1
enforce_for_root
Разберем эти параметры:
minlen = 10: устанавливает минимальную допустимую длину пароля — 10 символов.dcredit = -1: требует как минимум одну цифру. Отрицательное значение означает «не менее одной».ucredit = -1: требует как минимум одну прописную букву.lcredit = -1: требует как минимум одну строчную букву.enforce_for_root: не позволяет администратору игнорировать не пройденную проверку качества пароля. Это необходимо, посколькуsudo adduserзадает пароль нового пользователя с правами root.
После добавления строк сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и Enter.
Теперь настроим срок действия паролей. Эти параметры определяют минимальный и максимальный срок использования пароля. Значения по умолчанию для новых учетных записей хранятся в /etc/login.defs.
Используйте grep, чтобы найти соответствующие параметры в этом файле.
grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE' /etc/login.defs
Вы увидите значения по умолчанию. Для PASS_MAX_DAYS часто задается очень большое число, что фактически отключает истечение срока действия пароля.
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 99999
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 0
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 7
Настроим срок действия пароля в 9000 дней. Откройте файл с помощью sudo nano.
sudo nano /etc/login.defs
Найдите строку PASS_MAX_DAYS и измените значение с 99999 на 9000. Также можно установить для PASS_MIN_DAYS значение 7, чтобы пользователи не могли менять пароль слишком часто.
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 9000
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 7
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 14
Сохраните файл и выйдите из nano. Настройки в /etc/login.defs применяются к пользователям, созданным после внесения изменений. Чтобы применить политику к существующему пользователю, например labex, воспользуемся командой chage.
Сначала проверим текущие параметры срока действия пароля пользователя labex.
sudo chage -l labex
В выводе будет указано, что срок действия пароля не ограничен.
Last password change : Jul 22, 2023
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
Теперь используйте chage с параметром -M, чтобы установить для пользователя labex максимальный срок действия пароля равным 9000 дням.
sudo chage -M 9000 labex
Проверьте результат, снова просмотрев информацию о сроке действия пароля пользователя.
sudo chage -l labex
Теперь вы увидите обновленную дату истечения срока действия пароля и максимальный срок, равный 9000 дням. Это означает, что политика срока действия успешно применена.
Last password change : Jul 22, 2023
Password expires : Jan 01, 2048
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 9000
Number of days of warning before password expires : 7
Теперь вы успешно настроили политики сложности и срока действия паролей в Linux-системе.
Применение надежных паролей к новым учетным записям
На этом этапе вы проверите, что настроенные ранее политики сложности и срока действия паролей применяются к новым учетным записям. Лучший способ проверки — создать нового пользователя и попытаться задать ему пароль, нарушающий установленные правила. Это позволит увидеть, как модуль pam_pwquality и системные настройки по умолчанию совместно защищают новые учетные записи сразу после их создания.
Мы воспользуемся командой adduser — удобным интерактивным сценарием для создания пользователей в системах на базе Debian. Создадим пользователя с именем testuser.
sudo adduser testuser
Система сразу предложит задать пароль для нового пользователя. Именно на этом этапе будет проверяться наша политика.
Сначала попробуем задать простой и ненадежный пароль, нарушающий установленные правила. Когда появится запрос нового пароля, введите password и нажмите Enter.
Adding user `testuser' ...
Adding new group `testuser' (1001) ...
Adding new user `testuser' (1001) with home directory `/home/testuser' ...
Copying files from `/etc/skel' ...
New password:
Поскольку password нарушает наши правила — он слишком короткий и не содержит прописных букв или цифр, — система отклонит его. Точное сообщение может отличаться, но оно будет начинаться с BAD PASSWORD, после чего система снова запросит пароль.
BAD PASSWORD: The password fails the dictionary check
New password:
Пароль нарушает сразу несколько правил, однако перед повторным запросом система сообщает только одну причину отказа.
Одно лишь предупреждение еще не означает отказ. Отказ подтверждается только в том случае, если команда снова запрашивает новый пароль. Параметр enforce_for_root, добавленный на предыдущем этапе, гарантирует, что процесс adduser, запущенный с повышенными привилегиями, не сможет принять ненадежный пароль.
Совет: если вы случайно создали пользователя, удалите его с помощью
sudo deluser testuserи повторите попытку.
Теперь задайте пароль, соответствующий всем требованиям. Введите N7vQ2mR9xK4p и нажмите Enter. Затем система попросит повторно ввести пароль для подтверждения.
New password:
Retype new password:
passwd: password updated successfully
Готово! Система приняла надежный пароль. Затем она запросит дополнительные сведения о пользователе. Для каждого запроса можно просто нажать Enter, чтобы принять значения по умолчанию.
Changing the user information for testuser
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
Пользователь testuser создан. Проверить его наличие можно с помощью команды id.
id testuser
Команда покажет идентификатор пользователя, идентификатор группы и членство в группах.
uid=1001(testuser) gid=1001(testuser) groups=1001(testuser)
Теперь убедимся, что политика срока действия паролей из /etc/login.defs автоматически применена к новому пользователю. Используйте команду chage, чтобы просмотреть информацию о сроке действия пароля пользователя testuser.
sudo chage -l testuser
В выводе будет указано, что параметр Maximum number of days between password change равен 9000, как и было настроено.
Last password change : Jul 22, 2023
Password expires : Jan 01, 2048
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 9000
Number of days of warning before password expires : 14
Наконец, удалим тестового пользователя, чтобы не оставлять лишние учетные записи в системе. Команда deluser удалит учетную запись пользователя.
sudo deluser testuser
Система подтвердит удаление пользователя.
Removing user `testuser' ...
Warning: group `testuser' has no more members.
Done.
Вы успешно создали нового пользователя, проверили применение политики паролей и убедились, что стандартные правила срока действия были автоматически назначены.
Мониторинг журналов аутентификации для обнаружения неудачных попыток входа
На этом этапе вы научитесь отслеживать системные журналы аутентификации для выявления потенциальных угроз безопасности, например атак методом перебора. Регулярный анализ журналов — важная часть администрирования системы, позволяющая обнаруживать подозрительную активность. Неудачные попытки входа являются одним из ключевых признаков попыток несанкционированного доступа. Вы сымитируете неудачный вход, а затем воспользуетесь стандартными командами Linux для поиска и анализа соответствующих записей журнала.
В системах на базе Debian, например Ubuntu, события аутентификации — как успешные, так и неудачные — обычно записываются в файл /var/log/auth.log. Для чтения этого файла необходимы права администратора.
Сначала сгенерируем неудачную попытку входа. Это можно безопасно сделать с помощью команды su (переключение пользователя): попробуем перейти в собственную учетную запись labex, намеренно указав неправильный пароль.
su labex
Система запросит пароль. Введите любой неправильный пароль, например wrongpassword, и нажмите Enter.
Password:
su: Authentication failure
Повторим операцию еще раз, чтобы сформировать последовательность неудачных попыток.
su labex
Снова введите неправильный пароль. Теперь, когда в журнале появились новые записи, изучим файл журнала аутентификации. С помощью sudo и команды tail просмотрим последние строки /var/log/auth.log, где находятся самые свежие события.
sudo tail /var/log/auth.log
Вы увидите несколько новых строк, связанных с неудачными попытками su. Вывод будет примерно таким: в нем указаны время, процесс (su) и сообщение об ошибке.
Jul 22 16:45:01 labex-vm su[12345]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost= user=labex
Jul 22 16:45:01 labex-vm su[12345]: FAILED SU (to labex) labex on /dev/pts/0
Jul 22 16:45:15 labex-vm su[12346]: pam_unix(su:auth): authentication failure; logname=labex uid=1000 euid=0 tty=/dev/pts/0 ruser=labex rhost= user=labex
Jul 22 16:45:15 labex-vm su[12346]: FAILED SU (to labex) labex on /dev/pts/0
Ручной поиск по журналам может занять много времени. Гораздо эффективнее использовать grep для фильтрации по определенным ключевым словам. Найдем все строки, содержащие authentication failure.
sudo grep "authentication failure" /var/log/auth.log
Команда выведет только строки, соответствующие указанному шаблону, поэтому обнаружить созданные неудачные попытки будет проще.
Теперь создадим простой сценарий оболочки для автоматизации мониторинга. Он будет проверять журнал на наличие ошибок и выводить сводку. В каталоге ~/project создайте с помощью nano файл log_monitor.sh.
nano log_monitor.sh
Введите в редактор следующий сценарий Bash. Он использует grep с параметром -c, чтобы подсчитать количество неудачных попыток входа, а затем выводит соответствующее сообщение о состоянии.
#!/bin/bash
LOG_FILE="/var/log/auth.log"
FAILURE_COUNT=$(sudo grep -c "authentication failure" $LOG_FILE)
echo "--- Authentication Log Monitor ---"
if [ "$FAILURE_COUNT" -gt 0 ]; then
echo "WARNING: Found $FAILURE_COUNT failed login attempts."
else
echo "OK: No failed login attempts found."
fi
echo "--------------------------------"
Сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и Enter.
Затем сделайте новый сценарий исполняемым с помощью команды chmod.
chmod +x log_monitor.sh
Наконец, запустите сценарий мониторинга и просмотрите результат.
./log_monitor.sh
Поскольку вы создали неудачные попытки входа, сценарий обнаружит их и выведет предупреждение с точным количеством.
--- Authentication Log Monitor ---
WARNING: Found 2 failed login attempts.
--------------------------------
Теперь вы умеете имитировать и обнаруживать неудачные попытки аутентификации, а также создавать простой сценарий мониторинга — важный навык для поддержания безопасности системы.
Итоги
В этой лабораторной работе вы научились повышать безопасность Linux-системы с помощью настройки надежной локальной политики паролей. Вы изменили файл /etc/security/pwquality.conf, чтобы с помощью модуля pam_pwquality обеспечить соблюдение правил сложности паролей. В частности, была задана минимальная длина пароля и обязательное наличие хотя бы одной цифры, одной прописной и одной строчной буквы, что защищает учетные данные от простого подбора.
Кроме того, вы изучили, как применять строгие политики паролей при создании новых учетных записей. Лабораторная работа также охватила важный навык мониторинга системных журналов аутентификации для обнаружения и анализа событий безопасности, например повторных неудачных попыток входа, которые могут указывать на потенциальную атаку.



