Политика паролей в Oracle Enterprise Linux
В данном материале рассматривается политика паролей операционной системы Oracle Enterprise Linux, а также способы управления этой политикой.
Политика паролей – это набор правил, которые должны соблюдаться, когда пользователь операционной системы первый раз устанавливает или в будущем меняет свой пароль. Она является важным фактором информационной безопасности, поскольку пользовательские пароли часто становятся основной причиной нарушения безопасности информационных систем. В связи с этим, большинство компаний включают политику паролей в свои документы, например, такие документы как «Политика парольной защиты» или «Политика информационной безопасности» и т.п. В этом случае параметры всех пользователей (учетных записей) и их пароли должны соответствовать утвержденным в компании документам по парольной политике.
Парольная политика обычно определяет срок истечения пароля, его длину, сложность, количество неудачных входов в систему и т.д.
В данном материале рассматривается парольная политика на примере операционной системы Oracle Enterprise Linux (далее – OEL). Информация актуальная для версий OEL 7 и OEL 8. Для реализации парольной политики OEL можно использовать функцию подключаемых модулей аутентификации (PAM), которая упрощает применение строгой аутентификации пользователей и политики паролей, включая правила сложности, длины, возраста, срока действия и повторного использования предыдущих паролей. Также можно настроить PAM на блокирование доступа пользователей после большого количества неудачных попыток входа в систему (ввода неправильных паролей), в нерабочее время или если открыто слишком много одновременных сессий.
PAM обладает высокой степенью гибкости за счет использования различных модулей с настраиваемыми параметрами. Например, модуль проверки целостности пароля по умолчанию pam_pwquality.so проверяет надежность пароля. Конфигурационный файл PAM (/etc/pam.d/system-auth) содержит следующие записи:
[oracle@dushanbe ~]$ cat /etc/pam.d/system-auth %PAM-1.0 This file is auto-generated. User changes will be destroyed the next time authconfig is run. auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth required pam_deny.so account required pam_unix.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account required pam_permit.so password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so -session optional pam_systemd.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so [oracle@dushanbe ~]$
Выше жирным шрифтом отмечены строки, отвечающие за различные проверки надежности пароля. Далее каждая из них рассматривается по отдельности.
Строка:
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
задействует модуль pam_pwquality.so с соответствующими параметрами. Параметр try_first_pass означает, что система не будет запрашивать у пользователя его текущий пароль, даже если он ввел его для того же модуля или для предыдущего модуля в сессии. Параметр local_users_only указывает игнорировать пользователей, которых нет в локальном файле /etc/passwd. Параметрretry= определяет количество попыток пользователя для выбора нового пароля. Параметр authok_type= определяет подсказки при запросе паролей. По умолчанию они следующие: “New UNIX password: ” и “Retype UNIX password: “. Например, при необходимости в тексте подсказки слово UNIX может быть заменено на другое благодаря параметру authok_type, по умолчанию этот параметр пуст.
Согласно настройкам модуля по умолчанию, длина пароля должна составлять минимум шесть символов, из которых пять символов должны отличаться от предыдущего пароля. Модуль проверяет качество паролей только для пользователей, которые определены в /etc/passwd. Значения по умолчанию для модуля явно не прописываются, однако можно просмотреть закомментированный файл конфигурации модуля pam_pwquality.so для того, чтобы иметь представление о параметрах, которые можно использовать в конфигурационном файле PAM. Файл конфигурации модуля pam_pwquality.so можно найти по следующему пути – /etc/security/pwquality.conf и содержит следующие строки:
[oracle@dushanbe ~]$ cat /etc/security/pwquality.conf #Configuration for systemwide password quality limits #Defaults: # #Number of characters in the new password that must not be present in the #old password. #difok = 5 # #Minimum acceptable size for the new password (plus one if #credits are not disabled which is the default). (See pam_cracklib manual.) #Cannot be set to lower value than 6. #minlen = 9 # #The maximum credit for having digits in the new password. If less than 0 #it is the minimum number of digits in the new password. #dcredit = 1 # #The maximum credit for having uppercase characters in the new password. #If less than 0 it is the minimum number of uppercase characters in the new #password. #ucredit = 1 # #The maximum credit for having lowercase characters in the new password. #If less than 0 it is the minimum number of lowercase characters in the new #password. #lcredit = 1 # #The maximum credit for having other characters in the new password. #If less than 0 it is the minimum number of other characters in the new #password. #ocredit = 1 # #The minimum number of required classes of characters for the new #password (digits, uppercase, lowercase, others). #minclass = 0 # #The maximum number of allowed consecutive same characters in the new # # password. The check is disabled if the value is 0. maxrepeat = 0 # #The maximum number of allowed consecutive characters of the same class in the #new password. #The check is disabled if the value is 0. #maxclassrepeat = 0 # #Whether to check for the words from the passwd entry GECOS string of the #user. #The check is enabled if the value is not 0. #gecoscheck = 0 # #Path to the cracklib dictionaries. Default is to use the cracklib default. #dictpath =
Рассматривается следующая строка:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
В строке выше настраивается модуль pam_unix.so. Он проверяет пароль, ранее указанный в сессии, перед запросом необходимого пароля (pam_pwquality уже выполнит такую проверку для пользователей, определенных в /etc/passwd), использует хэширование SHA-512 для пароля и файла /etc/shadow, и разрешает доступ, если существующий пароль равен null. Конфигурируется модуль с помощью элементов файла shadow, отвечающего за хранение паролей (expire, last_change, max_change, min_change, warn_change). Ключевое слово try_first_pass означает, что система не будет запрашивать у пользователя его существующий пароль, даже если он ввел его для того же модуля или для предыдущего модуля в сессии. Nullok указывает на то, что пользователь может изменить свой пароль, если существующий пароль равен null.
Администратор может изменять параметры модуля и тем самым регулировать парольные политики. Например, можно регулировать проверку, которая выполняется, когда пользователь меняет свой пароль. Параметры изменятся в конфигурационном файле PAM (/etc/pam.d/system-auth). Для примера, попробуем настройку со следующими данными. В примере ниже, строка для модуля pam_pwquality.so определяет, что пользователь получает три попытки выбрать новый подходящий пароль по требованиям системы (retry=3), состоящий минимум из восьми символов (minlen=8), из которых пять символов должны отличаться от предыдущего пароля (difok=5), и который должен содержать как минимум одну букву верхнего регистра, одну букву нижнего регистра, одну цифру и один неалфавитно-цифровой символ (minclass=4). В зависимости от значений, minclass модуль осуществляет разные проверки (Если minclass установлен на 2, пароль, содержащий все строчные, все прописные, все цифры или любой другой класс символов, не будет работать. Если minclass равен 2, то для пароля необходимо использовать символы из двух классов, например, прописные и строчные, или строчные и цифры).
password required pam_pwquality.so retry=3 minlen=8 difok=5 minclass=4 password required pam_unix.so use_authtok sha512 shadow remember=5 password required pam_deny.so
Строка для pam_unix.so указывает, что модуль не выполняет проверку паролей (use_authtok), использует хэширование SHA-512 для паролей и файла /etc/shadow (sha512), а также сохраняет информацию о пяти предыдущих паролях для каждого пользователя в файле /etc/security/opasswd (remember=5). Поскольку nullok не указан, пользователь не может изменить свой пароль, если существующий пароль равен null.
Еще одной полезной настройкой может оказаться установление срока истечения паролей. Чтобы указать, как будут истекать сроки паролей пользователей, необходимо отредактировать настройки в файле /etc/login.defs. Эти настройки описаны в следующей таблице.
НАСТРОЙКА | ОПИСАНИЕ |
PASS_MAX_DAYS | Максимальное количество дней, в течение которых пароль может использоваться до его смены. Значение по умолчанию – 99 999 дней. |
PASS_MIN_DAYS | Минимальное количество дней, которое допускается между сменами пароля. Значение по умолчанию – 0 дней. |
PASS_WARN_AGE | Количество дней, предупреждающих об истечении срока действия пароля. Значение по умолчанию – 7 дней. |
Пример 1. Предполагается, что имеется пользователь oracle. И парольная политика пользователя, использующаяся по умолчанию – системная. Текущие настройки проверяются в файле /etc/pam.d/system-auth:
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so
Выполняется смена пароля для пользователя oracle:
[oracle@dushanbe ~]$ passwd Changing password for user oracle. Changing password for oracle. (current) UNIX password: New password: BAD PASSWORD: The password is shorter than 8 characters New password: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic New password: BAD PASSWORD: The password is the same as the old one passwd: Have exhausted maximum number of retries for service [oracle@dushanbe ~]$
Далее каждая ошибка описывается по отдельности.
В примере ниже, для пользователя oracle пароль назначается student:
[oracle@dushanbe ~]$ passwd Changing password for user oracle. Changing password for oracle. (current) UNIX password: New password: BAD PASSWORD: The password is shorter than 8 characters
Система выдает ошибку о том, что новый назначаемый пароль не может быть менее 8 символов.
Выполняется следующая попытка назначить пользователю oracle пароль 123456789.
[oracle@dushanbe ~]$ passwd Changing password for user oracle. Changing password for oracle. (current) UNIX password: New password: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Ошибка говорит о том, что новый назначаемый пароль не может быть набором одинаковых цифр/букв, либо набором цифр от 1 до 10.
Третья попытка – назначить пользователю oracle такой же пароль, который у него сейчас имеется.
[oracle@dushanbe ~]$ passwd Changing password for user oracle. Changing password for oracle. (current) UNIX password: New password: BAD PASSWORD: The password is the same as the old one
Система выдает ошибку о том, что новый назначаемый пароль не может быть таким же, как текущий.
В конце система выдала следующее сообщение:
passwd: Have exhausted maximum number of retries for service
Данное сообщение говорит о том, что после третьей безуспешной попытки смены пароля операционная система с опцией retry=3 завершает процесс смены пароля и закрывает режим работы с утилитой passwd. Для новой попытки смены пароля необходимо запустить утилиту passwd и заново попробовать сменить пароль, удовлетворяющий требования парольной безопасности.
Ниже назначается новый пароль, который соответствует требованиям системы, например, пароль – students1234.
[oracle@dushanbe ~]$ passwd
Changing password for user student.
Changing password for student.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Система позволила успешно сменить пароль.
Пример 2. Предполагается, что в соответствии с новой политикой паролей, необходимо, чтобы длина пароля была не менее 10 символов (minlen=10), и чтобы новый пароль содержал, как минимум одну букву верхнего регистра, одну букву нижнего регистра, одну цифру и один неалфавитно-цифровой символ (minclass=4). Также ограничивается неуспешные попытки смены пароля одной (retry=1). Следующим образом выполняется изменение файла /etc/pam.d/system-auth:
password requisite pam_pwquality.so local_users_only retry=1 minlen=10 minclass=4 password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok password required pam_deny.so
При необходимости, запустить команду authconfig –updateall под пользователем с правами администратора для применения новых настроек.
В примере ниже выполняется смена пароля для проверки новых правил политики безопасности паролей. Пользователю oracle назначается пароль, который не соответствует новой политике, например, пароль – Tst!msu20
[oracle@dushanbe ~]$ passwd Changing password for user student. Changing password for student. (current) UNIX password: New password: BAD PASSWORD: The password is shorter than 10 characters passwd: Have exhausted maximum number of retries for service
Система выдала ошибку о том, что новый назначаемый пароль не может быть менее 10 символов.
Назначается новый пароль, который содержит более 10 символов и тем самым удовлетворяет новым требованиям, например, пароль – Test!msu2022
[oracle@dushanbe ~]$ passwd Changing password for user student. Changing password for student. (current) UNIX password: New password: Retype new password: passwd: all authentication tokens updated successfully.
Результат команды показывает, что пароль успешно изменен.
На этом завершается краткое описание политики паролей в Oracle Enterprise Linux.