开发工具

在Linux系统中,用户账户可能因密码过期、管理员手动锁定或登录失败策略而被锁定。以下是确定用户是否被锁定的几种方法:


一、检查 /etc/shadow 文件

1. 查看密码字段状态

sudo grep "用户名" /etc/shadow


锁定标志:

如果密码字段以 ! 或 !! 开头,表示账户被锁定。


示例输出:

user1:!!$6$...:19485:0:99999:7:::
# ↑ 这里的`!!`表示用户被锁定


2. 解释字段含义

/etc/shadow 的字段格式为:

用户名:加密密码:最近修改密码日期:密码最小有效期:密码最大有效期:警告期:宽限期:账户过期日期:保留字段

密码字段为空::: 表示账户无密码(可能未锁定,但无法密码登录)。

密码字段为!或!!:账户被锁定。



二、使用 passwd 命令

1. 查看账户状态

sudo passwd -S 用户名


输出示例:

user1 L 2023-10-01 0 99999 7 -1 (密码已锁定)
# ↑ 第二列的 `L` 表示账户被锁定


状态标识:

L:锁定(Locked)
NP:无密码(No Password)
PS:密码已设置(Password Set)



三、检查账户过期时间

1. 查看账户有效期

sudo chage -l 用户名


输出示例:

Account expires : Jan 01, 2024
# ↑ 若此处显示过去日期,表示账户已过期并被锁定



四、检查登录失败锁定(如pam_faillock)

1. 查看登录失败记录

# 使用 pam_faillock(适用于RHEL/CentOS/Fedora)
sudo faillock --user 用户名

# 使用 pam_tally2(旧版系统)
sudo pam_tally2 --user=用户名


输出示例:

user1:
When          Type   Source          Valid
2023-10-05 14:30:12 TTY   pts/0           3
# ↑ 显示失败登录次数,超过阈值会被锁定



五、验证账户登录状态

1. 尝试切换用户

sudo su - 用户名


若返回:

Your account has expired; please contact your system administrator

表示账户已过期被锁定。


2. 尝试SSH登录

ssh 用户名@localhost


若返回:

Account locked due to XX failed logins

表示因多次登录失败被临时锁定。



六、总结锁定原因


锁定类型检查方法
手动锁定/etc/shadow 中密码字段含 ! 或 !!,或 passwd -S 显示 L 状态
密码过期chage -l 显示密码或账户已过期
登录失败策略faillock 或 pam_tally2 显示失败次数超限
无登录权限(Shell)/etc/passwd 中Shell为 /sbin/nologin 或 /bin/false(非锁定但禁止登录)


解锁账户方法

1、手动解锁:

sudo passwd -u 用户名    # 移除密码字段的`!`
sudo usermod -U 用户名  # 同上(部分系统)


2、重置密码有效期:

sudo chage -E -1 用户名  # 取消账户过期时间


3、清除登录失败记录:

sudo faillock --user 用户名 --reset
sudo pam_tally2 --user=用户名 --reset


通过以上方法,可快速诊断用户账户的锁定状态及原因。