这篇文章的内容非常详实,覆盖了PAM用户锁定的主要场景和命令。原博客的结构已经不错,但可以通过调整章节顺序、合并同类项、使标题更明确来让逻辑更清晰。

以下是修改建议和润色后的版本,你可以直接替换原内容:


PAM用户锁定与解锁完全指南

当Linux用户无法登录时,通常有三种可能:自动安全锁定(因多次失败尝试)、管理员手动锁定,或账户过期。本文将按此逻辑,帮你快速诊断并解除锁定。

⚠️ 重要提示:以下所有操作通常都需要 sudo 权限。在修改PAM配置文件前,务必保持一个已登录的root会话,以防配置错误导致无法登录系统。

1. 第一步:诊断锁定原因

在动手解锁前,建议先判断锁定类型。可以使用以下命令快速查看账户状态:

sudo passwd -S <用户名>
# 示例:sudo passwd -S alice

输出解读(以alice P 04/01/2025 0 99999 7 -1为例):
重点关注第二个字段的密码状态:

  • P:表示密码正常可用,账户未被手动锁定。问题可能出在自动安全锁定账户过期
  • LLK:表示密码被手动锁定(如通过 passwd -l)。请跳至第3节查看解锁方法。
  • NP:表示没有密码,无法登录。

如果密码状态为 P,但用户仍无法登录,请继续阅读第2节(自动锁定)和第4节(账户过期)。


2. 自动安全锁定与解除

当用户因多次输入错误密码被系统自动锁定时,相关信息由PAM模块记录。在不同Ubuntu版本中,使用的模块不同,请根据你的系统版本选择下方对应的小节进行操作。

2.1 对于 Ubuntu 22.04及更新版本:使用 faillock

faillockpam_faillock 模块的管理工具。

  • 查看所有用户的失败记录

    sudo faillock

    输出示例

    alice:
    When                Type  Source                                           Valid
    2025-04-01 10:23:15 RHOST ssh:notty                                        V
    2025-04-01 10:23:18 RHOST ssh:notty                                        V
    bob:
    When                Type  Source                                           Valid

    解读:输出按用户分组。对于用户 alice,列出了两次失败的尝试。如果失败次数达到或超过PAM配置的阈值(默认为3次),该用户即被锁定。用户 bob 则没有失败记录。

  • 查看指定用户

    sudo faillock --user alice
  • 解除锁定(清除失败记录)

    sudo faillock --user alice --reset

    此命令无成功提示。再次用 sudo faillock --user alice 查看,记录应已清空,用户即被解锁。

2.2 对于较旧版本(如Ubuntu 18.04及之前):使用 pam_tally2

pam_faillock 成为默认模块前,系统使用 pam_tally2

  • 查看所有用户的失败计数

    sudo pam_tally2

    输出示例

    Login           Failures Latest failure     From
    alice               3    04/01/25 10:23:18  ssh:notty

    解读:如果 Failures 列的数字(此处为3)达到了系统设定的阈值,则该用户当前处于锁定状态。

  • 查看指定用户

    sudo pam_tally2 --user alice
  • 解除锁定(重置计数)

    sudo pam_tally2 --user alice --reset

    输出示例

    Login           Failures Latest failure     From
    alice               3    04/01/25 10:23:18  ssh:notty

    解读:此命令会先显示被重置前的最后一次记录,然后清空计数。再次查看时,该用户将不再显示。


3. 手动锁定与解除

管理员可以使用以下命令手动锁定或解锁账户。这种锁定是持久性的,直到再次解锁。

3.1 使用 passwd 命令

  • 手动锁定用户

    sudo passwd -l alice

    原理是在 /etc/shadow 文件的密码哈希前加上 !,使其无法被认证。

  • 手动解锁用户

    sudo passwd -u alice
  • 查看账户状态(最常用):

    sudo passwd -S alice

    如前所述,输出第二个字段为 L 表示锁定,P 表示正常。

3.2 使用 usermod 命令

usermod 是更通用的用户管理命令,效果与 passwd 相同。

sudo usermod -L alice   # 锁定
sudo usermod -U alice   # 解锁

这些命令执行后通常没有输出,可通过 passwd -S 验证状态。


4. 账户过期检查与解除

如果账户因过期而无法登录,passwd -S 可能仍显示 P(密码有效)。此时需用 chage 命令查看账户时效。

  • 查看账户过期信息

    sudo chage -l alice

    输出解读:重点关注 Account expires 字段。如果是 never 表示永不过期;如果显示具体日期且已过,则账户过期。

  • 解除账户过期

    sudo chage -E -1 alice

    此命令将账户过期日期设为 never(永不过期)。


5. 附录:自动安全锁定的PAM配置

了解PAM配置文件能帮助你理解锁定的工作原理(如失败次数、解锁时间)。不同模块的配置方法如下:

5.1 配置 pam_faillock (适用于Ubuntu 22.04及更新版本)

配置文件通常位于 /etc/pam.d/ 下(如 sshdcommon-auth)。核心参数示例:

# 在相应配置文件中,添加或修改以下行
auth    required      pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=600

5.2 配置 pam_tally2 (适用于较旧版本)

# 示例:/etc/pam.d/sshd
auth    required      pam_tally2.so file=/var/log/tallylog deny=3 even_deny_root unlock_time=360
account required      pam_tally2.so

参数详解

  • deny=3:失败次数达到3次后锁定。
  • unlock_time=360:锁定后自动解锁的秒数(如360秒后自动解锁)。
  • even_deny_root:对root用户也生效此规则。

总结:故障排查流程图

  1. 查状态sudo passwd -S <用户名>

    • 状态为 L手动锁定 → 使用 sudo passwd -u <用户名> 解锁。
    • 状态为 P → 转至第2步。
  2. 查自动锁定 → 根据系统版本运行 sudo faillock <用户名>sudo pam_tally2 --user <用户名>

    • 失败记录自动锁定 → 运行相应 --reset 命令解锁。
    • 失败记录 → 转至第3步。
  3. 查账户过期sudo chage -l <用户名>

    • 已过期 → 使用 sudo chage -E -1 <用户名> 解除。
    • 未过期 → 检查SSH或具体应用的访问控制配置。

掌握这些命令及其输出,你就能准确诊断并解决大多数账户锁定问题。

最后修改:2026 年 03 月 16 日
如果觉得我的文章对你有用,请随意赞赏