如何find一个Unix用户帐户被locking的所有方法

我偶尔发现自己处于一个不受支持的系统有一个账户被locking的情况。 问题在于,有多种方式可以locking帐户,每个帐户都有自己的解锁方法。

这并不是说账户被意外locking的不正确,而是find正确的locking来重置是困难的。

我最近对这个问题的攻击是在SUSE系统上,结果certificate密码已经过期(最初并不知道,因为login尝试不是通过提供这种反馈的系统),然后也被locking由于login尝试失败。

是否有一个列表中的所有不同的可能的帐户locking以及如何禁用它们? 我打算实际的破碎,如主目录访问问题,腐败PAM库等,超出了这个问题的范围。

你可以使用passwd收集一些信息,例如,如果一个帐户被locking

 passwd -S user user LK 2012-11-06 0 99999 7 -1 (Password locked.) (CentOS) user L 01/22/2013 0 99999 7 -1 (Ubuntu) 

chage实用程序将提供有关帐户上各种计时器的信息,例如未过期的密码

 chage -l user Last password change : Nov 12, 2012 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 

为过期的密码

 chage -l user Last password change : password must be changed Password expires : password must be changed Password inactive : password must be changed Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 22 Number of days of warning before password expires : 33 

passwdchage公用程序还列出了许多帐户锁。

您可以使用getent将信息直接从相关数据库中提取以供检查

 getent passwd user user:x:505:505::/home/passtest:/sbin/nologin <-- denied login getent shadow user user:!!:0:0:22:33:44:: <-- this is locked 

一般来说:不。

Iain的回答是如何查询密码老化系统的一个很好的总结,但错过了各种各样的东西。 例如:

  • 有人试图通过sshlogin可能会被sshdconfiguration中的指令禁止。
  • 系统可能被configuration为只允许某个networking组的成员login。
  • 本地PAMconfiguration可能需要明确的组成员login,或者可能只允许特定的用户列表。
  • 看起来像一个locking的帐户可能会成为主目录访问问题。
  • 有人可能已经创build了/etc/nologin ,对于某些应用程序(例如ssh )会locking所有用户。

换句话说,有一个帐户被locking的许多方法与passwd文件无关。 你最好的办法是检查/var/log/secure或分发适当的本地模拟。

除了前面提到的, passwd chagegetent ,还有pam_tally2

如果失败的login尝试次数超过了允许的限制(在/etc/pam.d/password-auth中设置),则必须先执行pam_tally2 --user=foo --reset然后才能再次login。

下面的脚本会给你一个简短的描述所有的用户和他们的状态(locking或不locking)

 cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'