我偶尔会遇到这种情况:系统维护不善,导致账户被锁定。问题是,锁定账户的方式多种多样,每种方式都有各自的解锁方法。
这并不是说帐户被不当锁定,只是出乎意料,但找到正确的锁来重置很困难。
我最近一次攻击该问题是在 SUSE 系统上,结果是密码已过期(最初并不知道这一点,因为登录尝试不是通过提供此类反馈的系统进行的),并且由于登录尝试失败而被锁定。
是否有一份包含所有不同可能的帐户锁定的列表以及如何禁用它们?我打算将实际故障(例如主目录访问问题、损坏的 PAM 库等)排除在本问题范围之外。
答案1
你可以用它passwd
来收集一些信息,例如帐户是否被锁定
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
passwd
和实用chage
程序还列出了许多帐户锁。
您可以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
答案2
一般来说,不是的。
Iain 的回答很好地总结了如何查询密码时效系统,但遗漏了各种内容。例如:
- 尝试通过 ssh 登录的人可能会被
sshd
配置中的指令禁止。 - 系统可以配置为只允许某个网络组的成员登录。
- 本地
PAM
配置可能要求明确的组成员身份才能登录,或者可能只允许特定列表的用户。 - 看似锁定的帐户实际上可能是主目录访问问题。
- 有人可能创建了
/etc/nologin
,对于某些应用程序(例如ssh
),这将锁定所有用户。
换句话说,锁定帐户的方式有很多,而这些方式与文件无关passwd
。最好的办法是检查/var/log/secure
或适合发行版的本地模拟。
答案3
除了上述的passwd
chage
和getent
,还有pam_tally2
如果登录失败的次数超过了允许的限制(在 /etc/pam.d/password-auth 中设置),您必须先执行上述操作,pam_tally2 --user=foo --reset
然后才能再次登录。
答案4
以下脚本将为您提供所有用户及其状态(已锁定或未锁定)的简短描述
cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'