Механизм работы политик паролей

Механизм работы политик паролей#

Механизм политик паролей в ПКД очень гибкий: для каждой группы пользователей можно создать свою собственную политику паролей. Список политик с их приоритетами хранится в контейнере с DN «cn=cosTemplates,cn=accounts,{base_dn}=ald,{base_dn}=company,{base_dn}=local», параметры политик вынесены отдельно в «cn=kerberos,{base_dn}=ald,{base_dn}=company,{base_dn}=local». Связь между записями осуществляется через значение атрибута krbPwdPolicyReference. При удалении группы пользователей все связанные с ней записи политики паролей удаляются автоматически.

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

  • из «cn=cosTemplates, ...» отбираются политики, под действие которых попадает текущий пользователь в соответствии с его участием в группах. Параметры политики берутся из «cn=kerberos, ...» по ссылке из атрибута krbPwdPolicyReference;

  • если на пользователя не распространяется действие ни одной политики, ему будет назначена глобальная политика по умолчанию (global_policy);

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

Выбор политики в зависимости от приоритета:

Параметр

Политика для группы А (приоритет 0)

Политика для группы B (приоритет 1)

Результат (используются параметров для группы А)

Максимальный срок действия

60 дней

90 дней

60 дней

Минимальная длина

10 символов

0 (без ограничений)

10 символов

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

Параметры политик паролей:

Параметр политики

Значение глобальной политики по умолчанию

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

krbMaxPwdLife = 90 Пароль активен 90 дней, после чего будет предложено сменить его

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

krbMinPwdLife = 1 После смены пароля, пользователь должен подождать 1 час перед повторной сменой

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

krbPwdHistoryLength = 0 Запрет на повторное использование паролей не налагается

Классы символов — этот параметр указывает, сколько разных классов символов должно быть использовано в пароле. Все возможные символы подразделяются на следующие пять классов: - цифры; - буквы нижнего регистра; - буквы верхнего регистра; - символы UTF-8; - все остальные символы, не вошедшие ни в одну из предыдущих групп. Использование одного и того же символа более двух раз подряд уменьшает количество классов на один, например, у пароля «Secret11pwd» будет три класса (большие буквы + маленькие буквы + цифры), а у пароля «Secret111pwd» их станет два (минус штраф за повторы символа «1»). Если повторяющиеся символы окажутся в конце пароля, то последний из них не будет учитываться, поэтому на пароль «Secretpwd111» штраф налагаться не будет.

krbPwdMinDiffChars = 0 Значение по умолчанию — 0. Это говорит об отсутствии каких либо требований к сложности пароля

Минимальная длина задает минимально допустимое количество символов в пароле

krbPwdMinLength = 8 Пользователь не может использовать пароль короче 8 символов

Максимальное количество ошибок определяет, сколько раз пользователь может неправильно ввести пароль, прежде чем его аккаунт будет временно заблокирован. Блокировка выполняется только на текущем контроллере, на другие сервера эта информация не передается.

krbPwdMaxFailure = 6 Пользователь будет заблокирован после 7 неверно введенных паролей подряд

Интервал сброса ошибок задает период в секундах, по истечении которого счетчик неудачных попыток входа будет сброшен

krbPwdFailureCountInterval = 60 Если после 6 неудачных попыток введения пароля подряд пользователь подождет 1 минуту, у него будет еще 6 попыток до временной блокировки учетной записи

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

krbPwdLockoutDuration = 600 Заблокированный пользователь не сможет выполнить вход в систему в течение 10 минут

Следствием интеграции с MIT Kerberos является возможность использования таких атрибутов, как krbPasswordExpiration, krbPrincipalExpiration и krbLastSuccessfulAuth. Например, при изменении пароля через панель управления для него автоматически устанавливается срок истечения действия пароля krbPasswordExpiration, поэтому пользователь не может использовать этот пароль до тех пор, пока не установит новый. Если необходимо снять это ограничение, воспользуйтесь командой ipa user-mod:

ipa user-mod alexander.kuznetsov --password-expiration 20250101115110Z

Эта же команда позволит установить срок действия учетной записи, после которого пользователю станет недоступна Kerberos аутентификация:

ipa user-mod alexander.kuznetsov --principal-expiration='20230717040953Z'

Логирование даты последнего входа можно включить изменением конфигурации сервера, для этого потребуется посмотреть текущие настройки и установить новое значение параметра ipaconfigstring, исключив из него значение «KDC:Disable Last Success»:

ipa config-show | grep паролей
Возможности подключаемого модуля паролей: AllowNThash, KDC:Disable Last Success
ipa config-mod --ipaconfigstring='AllowNThash'
ipactl restart
kinit admin
ipa user-show admin --all --raw | grep krbLastSuccessful
krbLastSuccessfulAuth: 20230608094515Z