SSH 使用过期的 Kerberos 密码

Cha*_*uli 5 ssh kerberos pam

我已经设置了 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
Run Code Online (Sandbox Code Playgroud)

账户栈:

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
Run Code Online (Sandbox Code Playgroud)

请提出任何更改建议,以防止密码过期的用户登录。

日志 :

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 –
Run Code Online (Sandbox Code Playgroud)

/var/log/auth.log

/var/log/auth.log : /var/log/auth.log : pam_krb5[24516]: authentication succeeds for 'testyoga' (testyoga@EXAMPLE.COM) –
Run Code Online (Sandbox Code Playgroud)

And*_*w B 3

编辑:

根据提供的堆栈内容,如果成功account,看起来将被跳过。这是未应用密码时效限制的最可能原因。pam_krb5.sopam_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() 实现相同的授权检查。