如何查找 Unix 用户帐户被锁定的所有方式

如何查找 Unix 用户帐户被锁定的所有方式

我偶尔会遇到这种情况:系统维护不善,导致账户被锁定。问题是,锁定账户的方式多种多样,每种方式都有各自的解锁方法。

这并不是说帐户被不当锁定,只是出乎意料,但找到正确的锁来重置很困难。

我最近一次攻击该问题是在 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 chagegetent,还有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) }'

相关内容