好吧,我们都关心安全性,所以用户应该定期更换密码(谁说密码就像内衣?)。
在redhat和centos(5.x和6.x)上,可能会在45天后使每个真实的用户密码过期,并在7天之前发出警告。
/ etc / shadow条目然后看起来像:
testuser:$6$m8VQ7BWU$b3UBovxC5b9p2UxLxyT0QKKgG1RoOHoap2CV7HviDJ03AUvcFTqB.yiV4Dn7Rj6LgCBsJ1.obQpaLVCx5.Sx90:15588:1:45:7:::
它工作得很好,大多数用户经常更改他们的密码。
有些用户觉得不使用任何密码方便,但SSH公钥(我想鼓励他们)。
然后,45天后,他们忘记密码,并要求更改密码。
有没有办法来防止密码过期,当且仅当密码被禁用?
在/ etc / shadow中设置testuser:!!:15588:1:45:7:::
不起作用:要求testuser在45天后更改密码。
当然,将密码过期设置为99999天工作,但是:
是否有一个系统范围的参数,只会提示用户更改过期的密码,如果他真的有一个?
如果用户不记得他们的密码,那当然是因为他们不必使用它们。 我build议使用一个集中的身份validation系统,如LDAP,以便每个用户只有一个密码,让他访问的一切 。
这解决了一个问题:
所以你可以通过查询信息
chage -l username
您可以使用以下命令覆盖系统默认值
chage -I -1 -m 0 -M 99999 -E -1 username
我不认为有什么可以设置的说..用户没有密码,所以忽略它。
根据SU的这个答案 ,即使用户的密码已经过期,用户也应该能够用他们的私钥login。
我认为“关键”是用户确实有密码过期。 私钥是他们login的另一种方式。 我相信,除非您禁用基于密码的login(在sshd_config中设置为PasswordAuthentication
),否则用户仍然可以使用其密码login。
sshd_config中有另一个名为PermitEmptyPasswords
设置,默认为“no”。 如果你删除用户的密码,唯一的方法就是使用他们的私钥。 由于那时没有密码,所以也许不会过期。
这只是基于ssh。 还有其他地方可以看,如控制台和苏。 我不知道他们如何处理空密码。
作为最后的手段,你总是可以在cron上放置一个bash脚本来检查哪些用户有密钥,并相应地设置其到期date。 我也会做相反的事情:如果用户没有密钥,确保他们的到期date不是太遥远。
就我个人而言,我会让每个人使用公共/私人密钥对。
你使用传统的unix passwd / shadow文件吗? 如果是这样,你是否尝试禁用sshdconfiguration中的UsePAM
?
我testing了在OpenSSH 5.8_p1上禁用UsePAM
,并且通过PasswordAuthentication的用户如果他们的账户已经过期被正确拒绝,并且被正确地要求改变他们的密码; 并且在使用密钥login时没有任何问题(并且启用了UsePAM
时,我可以确认使用密钥时,系统仍然要求更改密码)。