У меня есть настройка SSH - единый вход с использованием kerberos V5. Когда срок действия пароля пользователя истек, он возвращается 'Предупреждение: срок действия пароля истек.'и позволяет пользователю войти в систему! Я даже внес изменения в /etc/pam.d/password-auth
такой, что pam_krb5.so
приходит выше pam_unix.so
:
Стек аутентификации:
auth requisite pam_krb5.so uid >= 500
#Google authentication configuration module
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth requisite pam_google_authenticator.so
auth [success=1 default=ignore] pam_unix.so nullok try_first_pass
auth required pam_deny.so
auth requisite pam_succeed_if.so uid >= 0 quiet
Стек счета:
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_krb5.so uid >= 500
account required pam_permit.so
Предложите какие-либо изменения, чтобы запретить пользователям с просроченными паролями входить в систему.
ЖУРНАЛ :
krb5kdc.log
Jun 03 11:34:29 <HOST-NAME> krb5kdc[1752](info): AS_REQ (4 etypes {18 17 16 23}) 192.168.181.40: CLIENT KEY EXPIRED: testyoga@EXAMPLE.COM for krbtgt/EXAMPLE.COM@EXAMPLE.COM, Password has expired
Jun 03 11:34:47 <HOST-NAME> krb5kdc[1752](info): AS_REQ (4 etypes {18 17 16 23}) 192.168.181.40: ISSUE: authtime 1464933887, etypes {rep=18 tkt=18 ses=18}, testyoga@EXAMPLE.COM for kadmin/changepw@EXAMPLE.COM –
/var/log/auth.log
/var/log/auth.log : /var/log/auth.log : pam_krb5[24516]: authentication succeeds for 'testyoga' (testyoga@EXAMPLE.COM) –
Исходя из содержания предоставленного account
стек, похоже pam_krb5.so
будет пропущено, если pam_localuser.so
удается. Это наиболее вероятная причина того, что ограничения на устаревание пароля не применяются.
Вот что нам известно на данный момент:
pam_krb5
успешно проходит аутентификацию, несмотря на это.Я подозреваю, что ваша проблема в том, что у вас нет account
стек правильно настроен. Есть несколько различных реализаций pam_krb5
там, и не все из них реализуют проверку устаревания пароля внутри auth
стек:
http://linux.die.net/man/8/pam_krb5
Когда пользователь входит в систему, функция аутентификации модуля выполняет простую проверку пароля и, если возможно, получает учетные данные Kerberos 5, кэшируя их для дальнейшего использования. Когда приложение запрашивает инициализацию учетных данных (или открывает сеанс), создаются обычные файлы билетов. Когда приложение впоследствии запрашивает удаление учетных данных или закрытие сеанса, модуль удаляет файлы билетов. Когда приложение запрашивает управление учетной записью, если модуль не участвовал в аутентификации пользователя, оно сигнализирует libpam игнорировать модуль. Если модуль действительно участвовал в аутентификации пользователя, он проверит срок действия пароля пользователя. и проверьте авторизацию пользователя с помощью файла .k5login аутентифицируемого пользователя, который, как ожидается, будет доступен для модуля.
Работа account
стек предназначен для обеспечения соблюдения политик доступа независимо от того, была ли аутентификация успешной. Это важно, так как auth
стек часто обходится при использовании аутентификации на основе ключа. Отдельные разработчики должны решить, должно ли устаревание пароля также приводить к сбою при вызове модуля в auth
контекст.
И наоборот, pam_krb5
реализация, поддерживаемая Рассом Олбери (я предпочитаю), поймала бы это в auth
стек.
https://www.eyrie.org/~eagle/software/pam-krb5/pam-krb5.html
учетная запись
Предоставляет реализацию pam_acct_mgmt (). Все, что он делает, это выполняет ту же проверку авторизации, что и реализация pam_authenticate (), описанная выше.