好吧,我们都关心安全,所以用户应该定期更改密码(谁说密码就像内衣?)。
在 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 天是可行的,但是:
- 这需要额外的工作。
- 安全审计员可能不会高兴。
是否存在一个系统范围的参数,只有当用户确实有密码时才会提示用户更改过期密码?
答案1
如果用户不记得密码,那肯定是因为他们不需要使用密码。我建议使用 LDAP 等集中式身份验证系统,这样每个用户只有一个密码,就可以访问一切。
这解决了几个问题:
- 您不必担心管理每个主机上的单独密码
- 用户实际上会记住他们的密码,因为他们需要它们
- 您可以在一个中心位置(LDAP 目录)管理密码策略,并让用户在需要时在那里更改密码(想想在几天前警告他们密码到期的电子邮件等......)
- 您拥有集中的用户管理,在需要创建新帐户或禁用旧帐户时可以节省每个人的时间(谁从未听说过“尽快在所有系统上禁用该用户的帐户”?)
答案2
根据SU 上的这个答案即使密码已过期,用户仍然应该能够使用其私钥登录。
我认为“关键”是用户确实有一个密码会过期。私钥只是他们登录的另一种方式。我相信,除非您禁用基于密码的登录(设置PasswordAuthentication
在 sshd_config 中),否则用户仍然可以使用他们的密码登录。
sshd_config 中还有另一个设置PermitEmptyPasswords
,其默认值为“否”。如果您删除用户的密码,则登录的唯一方法应该是使用其私钥。由于此时没有密码,因此密码可能不会过期。
不过这只是基于 ssh。还有其他区域需要查看,例如控制台和 su。我不确定它们如何处理空密码。
作为最后的手段,您可以始终在 cron 上放置一个 bash 脚本来检查哪些用户有密钥并相应地设置其到期日期。我也会做相反的事情:如果用户没有密钥,请确保他们的到期日期不会太远。
就我个人而言,我会让每个人都拥有公钥/私钥对。
答案3
因此您可以通过以下方式查询信息
chage -l username
您可以使用以下命令覆盖系统范围的默认值
chage -I -1 -m 0 -M 99999 -E -1 username
我认为您无法设置任何内容表明..用户没有密码,因此请忽略它。
答案4
您是否在使用传统的 unix passwd/shadow 文件?如果是,您是否尝试过UsePAM
在 sshd 配置中禁用它?
我UsePAM
在 OpenSSH 5.8_p1 上测试了禁用功能,如果用户的帐户已过期,则通过 PasswordAuthentication 的用户会被正确拒绝,并会被正确要求更改密码;使用密钥登录时不会询问任何内容(UsePAM
启用后我可以确认,使用密钥时,系统仍会要求更改密码。)