Это краткое руководство объясняет, как заставить пользователей использовать надёжные пароли с помощью подключаемых модулей аутентификации (PAM) в Debian, Ubuntu и других системах на базе DEB.

Безопасность сервера Linux имеет очень важное значение для защиты ваших данных, а также вашего времени от рук взломщиков.

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

Введение

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

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

Однако некоторые пользователи, не владеющие техникой, не понимают или не заботятся о безопасности.

Они продолжают использовать легко предсказуемые пароли, такие как pass123, welcome123, Welcome@1 и т.д., которые можно легко взломать за несколько попыток.

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

Это руководство было официально протестировано в Ubuntu 22.04 LTS и ее предыдущих редакциях. Хотя инструкции, опубликованные здесь, одинаковы для Debian и других дистрибутивов на базе Debian и Ubuntu и т.д.

Настройка политики использования сильных паролей на Debian, Ubuntu

Подключаемые модули аутентификации (PAM) установлены по умолчанию в системах на базе DEB.

Однако вам необходимо установить дополнительный модуль libpam-cracklib.

Для этого выполните следующую команду в Терминале:

1
$ sudo apt install libpam-cracklib

В системах на базе Debian политики паролей определяются в файле /etc/pam.d/common-password.

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

1
$ sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

Теперь отредактируйте файл /etc/pam.d/common-password:

1
$ sudo nano /etc/pam.d/common-password

Найдите следующую строку и отредактируйте или измените ее, как показано ниже.

Если следующей строки не существует, просто добавьте ее.

1
password required pam_cracklib.so try_first_pass retry=3 minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1 difok=2 reject_username

Давайте разберем эту строку и посмотрим, что будет делать каждая опция.

  • try_first_pass retry=N - Максимальное количество повторных попыток смены пароля. N указывает на число. По умолчанию этот параметр равен 1.
  • minlen=N - Минимально допустимый размер нового пароля (плюс один, если кредиты не отключены, что является значением по умолчанию). В дополнение к количеству символов в новом пароле, за каждый символ (другой, верхний, нижний и цифру) дается кредит (+1 в длину). Значение по умолчанию равно 9.
  • lcredit=N - Определить максимальный кредит за содержание строчных букв в пароле. Значение по умолчанию равно 1.
  • ucredit=N - Определить максимальное количество заглавных букв в пароле. Значение по умолчанию равно 1.
  • dcredit=N - Определить максимальный кредит для содержания цифр в пароле. Значение по умолчанию равно 1.
  • ocredit=N - Определить максимальный кредит для содержания других символов в пароле. Значение по умолчанию равно 1.
  • ifok=N - Определить количество символов, которые должны отличаться от предыдущего пароля.
  • reject_username - Запретить пользователям использовать свое имя в качестве пароля.

Надеюсь, вы получили основное представление о вышеупомянутых параметрах.

Как определено в приведенном выше файле, пользователи теперь должны использовать пароль с показателем сложности пароля, равным 12. Один “кредит” будет даваться за 1 строчную букву, 1 кредит за 1 заглавную букву, 1 кредит за минимум 2 цифры и 1 кредит за 1 другой символ.

Однако вы можете отключить кредиты, присвоив им отрицательные значения, и заставить пользователя использовать комбинацию различных символов минимальной длины.

Посмотрите следующий пример:

1
password required pam_cracklib.so minlen=8 lcredit=-1 ucredit=-1 dcredit=-2 ocredit=-1 difok=2 reject_username

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

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

Пользователь root может использовать любой тип пароля.

Не используйте пользователя root для администрирования сервера. Создайте для этого не привилегированного пользователя с помощью команд useradd и usermod.

Проверьте сложность пароля

После того как вы определили политику паролей, проверьте, работает она или нет.

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

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

1
$ passwd
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Пример вывода:

Changing password for itsecforu.
Current password: 
New password: 
BAD PASSWORD: it does not contain enough DIFFERENT characters
New password: 
BAD PASSWORD: it is based on a dictionary word
New password: 
Retype new password: 
BAD PASSWORD: is too simple
New password: 
BAD PASSWORD: is too simple
New password: 
BAD PASSWORD: is too simple
passwd: Have exhausted maximum number of retries for service
passwd: password unchanged

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

Теперь попробуйте установить пароль, который соответствует фактическим требованиям политики паролей (т.е. 12 символов, включая как минимум 1 строчный, 1 прописной, 2 цифры, 1 другой символ).

Для генерации паролей можно воспользоваться утилитой pwgen или любой другой утилитой.

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

Регулярная смена пароля

Команда change позволяет указать количество дней до даты принудительной смены пароля. Эта информация используется системой для определения момента, когда пользователь должен его изменить. Эти настройки находятся в /etc/login.defs. Чтобы отключить старение пароля введите следующую команду:

1
$ change -l имя_пользователя

Чтобы получить информацию о строке годности пароля введите команду:

Также вы можете все настроить вручную, в файле /etc/shadow:

1
{пользователь}:{пароль}:{последнее_изменение}:{максимум_дней}:{минимум_дней}:{Предупреждение}:{деактивировать}:{строк_годности}:
  • Минимум дней - минимальный интервал между сменами паролей, то есть насколько часто пользователь может менять пароль.
  • Максимум дней - сколько дней будет годен пароль, по истечении этого срока пользователь будет вынужден поменять пароль.
  • Предупреждение - количество дней после которых пользователь будет предупрежден, что ему нужно сменить пароль.
  • Срок_годности - количество дней с первого января 1970 когда аккаунт будет полностью отключен.

Рекомендуется использовать такую команду, вместо редактирования файла /etc/shadow вручную:

1
$ chage -M 60 -m 7 -W 7 имя_пользователя

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

Логирование и аудит

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

Вы можете смотреть логи с помощью таких утилит, как logwatch или logcheck. Они очень сильно упрощают чтение логов. Вы можете просматривать не весь файл, а только интересующие вас события, а также отправлять себе уведомление на электронный адрес.

Наблюдайте за системой с помощью службы auditd. Программа записывает на диск все события аудита которые вас интересуют. Все настройки аудита хранятся в файле /etc/audit.rules при запуске системы сервис прочитывает все правила из этого файла. Вы можете его открыть и настроить все как нужно или же воспользоваться отдельной утилитой - auditctl. Можно настроить такие моменты:

  • События запуска и выключения системы
  • Дата и время события
  • Пользовательские события (например доступ к определенному файлу)
  • Тип события (редактирование, доступ, удаление, запись, обновление и т д)
  • Удачность или сбой при выполнении события
  • Запись событий изменения настроек сети
  • Запись изменения пользователей и групп
  • Мониторинг изменений файлов

Выводы

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

На этом пока все.