我已经设置了 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
请建议任何更改以防止密码过期的用户登录。
日志 :
日志
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: [email protected] for krbtgt/[email protected], 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}, [email protected] for kadmin/[email protected] –
/var/log/auth.log
/var/log/auth.log : /var/log/auth.log : pam_krb5[24516]: authentication succeeds for 'testyoga' ([email protected]) –
答案1
编辑:
根据提供的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
由 Russ Allbery 维护的实现(我喜欢的)会在auth
堆栈中捕获此问题。
https://www.eyrie.org/~eagle/software/pam-krb5/pam-krb5.html
帐户
提供 pam_acct_mgmt() 的实现。它所做的就是执行与上述 pam_authenticate() 实现相同的授权检查。