密码过期时阻止RSAauthentication

我在CentOS 7上build立了FreeIPA服务器,当密码过期时,我想通过SSH来阻止RSAauthentication。 默认情况下,当我过期的用户密码,他们login,他们被迫改变他们的密码。 但是,如果同一用户也在使用RSA身份validation,则服务器会让他们进入而不会强制他们更改密码。 我已经search了与FreeIPA,PAM和SSH相关的主题,似乎无法find我正在寻找的答案。

当用户的密码过期时,有什么办法阻止通过SSH的RSA密钥authentication?

你可以使用chage或者usermod来调用脚本,例如:usermod –expiredate …如果我不得不使用类似于下面伪代码的shell脚本:

if `chage -l user_account_you_want_expired_etc | awk '/expires/{print "relevant fields}'` >= expiration then usermod -s /sbin/nologin USERNAME fi 

这些东西(请注意,你是非工作的,但有一些东西给你一个框架)。如果从awk过期(grep'd)大于或等于我想要/需要的,那么将shell更改为NOLOGIN“。

如果您使用PAM为用户创build会话( usePAM yes ),则不允许用户使用过期的密码login。

在Unix上很好的描述(好吧,这是相反的问题,但可能对你有帮助)。

如果您已将客户端注册到FreeIPA,则其PAM堆栈将被configuration为使用SSSD守护进程。 所讨论的PAM模块是pam_sss,它与SSSD守护进程进行通信来执行检查。 SSSD知道IPA属性,并应该在用户被locking时正确拒绝会话。

 # ipa user-disable abbra ----------------------------- Disabled user account "abbra" ----------------------------- # grep UsePAM /etc/ssh/sshd_config UsePAM yes # journalctl -u sshd -f ..... Feb 29 17:21:23 a.example.com systemd[1]: Started OpenSSH server daemon. Feb 29 17:21:33 a.example.com sshd[20209]: pam_sss(sshd:account): system info: [The user account is locked on the server] Feb 29 17:21:33 a.example.com sshd[20209]: pam_sss(sshd:account): Access denied for user abbra: 6 (Permission denied) Feb 29 17:21:33 a.example.com sshd[20209]: fatal: Access denied for user abbra by PAM account configuration [preauth] 

对于启用的用户,你会有这样的事情:

 # ipa user-enable abbra ---------------------------- Enabled user account "abbra" ---------------------------- # journalctl -u sshd -f .... Feb 29 18:03:27 a.example.com sshd[22302]: Accepted publickey for abbra from XYZW port 54540 ssh2: KEY... 

当密码被标记为过期时(通过设置其他用户,即pipe理员,或通过应用特定的密码策略),SSSD忽略密码需要更改的事实,因为此时它只运行一个帐户阶段,检查。

过去曾经有一些要求添加这样的逻辑的请求,其中一个反对的观点是,如果您使用一种types的身份validation(公钥),为什么账户状态应该基于另一个身份validation的状态types。 其中有一个逻辑,但是也许最好添加一个密码策略,允许逻辑将帐户状态与密码的状态联系起来。

如果您对密码政策感兴趣,我build议您打开一张FreeIPA的门票请求,并说明您的使用案例。