SSH与过期的Kerberos密码一起使用

我已经安装了SSH – 使用Kerberos V5进行单点login。 当用户密码过期时,会返回“ 警告:密码已过期”。 '并允许用户login! 我甚至在/etc/pam.d/password-auth进行了更改,使得pam_krb5.so位于pam_unix.so之上:

身份validation堆栈:

 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 

请提出任何更改以防止用户使用过期密码login。

日志:

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: [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]) – 

编辑:

根据提供的account堆栈的内容,如果pam_localuser.so成功,则看起来像pam_krb5.so将被跳过。 这是未应用密码老化限制的最可能原因。


以下是我们迄今所知道的:

  • logging的消息确认用户的密码已过期。
  • 尽pipe如此, pam_krb5仍然能够成功进行身份validation。

我怀疑你的问题是你没有正确configurationaccount堆栈。 在那里有几个不同的pam_krb5实现,并不是所有的实现在auth栈里面的密码老化检查:

http://linux.die.net/man/8/pam_krb5

当用户login时,模块的身份validationfunction会执行简单的密码检查,并且如果可能的话,会获取Kerberos 5凭证,并将其caching以供以后使用。 当应用程序请求初始化凭证(或打开会话)时,通常会创build票证文件。 当应用程序随后请求删除凭证或closures会话时,模块将删除票证文件。 当应用程序请求账户pipe理时,如果该模块没有参与authentication用户,它将通知libpam忽略该模块。 如果模块参与authentication用户,它将检查过期的用户密码并使用被authentication的用户的.k5login文件来validation用户的授权,这个文件应该是模块可以访问的。

无论身份validation是否成功, account堆栈的作用是强制执行访问策略。 这很重要,因为在使用基于密钥的身份validation时, auth堆栈经常被绕过。 个别开发者决定在auth上下文中调用模块时,密码老化是否也会导致失败。

相反,由Russ Allbery(我的首选)维护的pam_krb5实现将在auth栈中捕获这个。

https://www.eyrie.org/~eagle/software/pam-krb5/pam-krb5.html

帐户

提供pam_acct_mgmt()的实现。 它所做的只是执行与上述pam_authenticate()实现相同的授权检查。