linux账户锁定有三种互不兼容方式:passwd -l(修改shadow密码字段加!!)、pam_tally2(pam失败计数锁定)、/sbin/nologin(修改passwd shell字段);解锁须先用passwd -s确认状态,再按机制选择对应命令。

Linux 锁定用户不是“禁用密码”,而是阻断登录能力;解锁时必须先确认锁定方式,否则 pam_tally2 --reset 对 passwd -l 锁定的用户完全无效。
passwd -l 和 passwd -u 是最直接的账户锁定/解锁方式
这是修改 /etc/shadow 中密码字段的快捷操作:在密码哈希前加两个感叹号 !!,使系统拒绝任何基于密码的认证(包括 SSH 密码登录、su、login 等)。
-
passwd -l username执行后,username的密码字段变成!!$6$...,该用户无法通过密码认证登录 -
passwd -u username移除!!前缀,恢复原始哈希,用户可再次用原密码登录 - 执行后建议立刻用
passwd -S username验证状态:输出中第二列为LK表示已锁定,PS表示正常 - 注意:
passwd -l不影响 SSH 密钥登录(如果用户配置了AuthorizedKeysCommand或密钥仍有效),也不影响 root 切换到该用户(su - username无需密码验证)
pam_tally2 控制的是“失败次数触发的自动锁定”
这种锁定由 PAM 模块动态管理,和 passwd -l 无关,常见于启用了登录失败限制的系统(如 RHEL/CentOS/SUSE 默认未启用,但很多企业环境手动开启)。
- 锁定条件取决于
/etc/pam.d/system-auth或/etc/pam.d/password-auth中的配置,典型行如:auth [default=die] pam_tally2.so deny=3 unlock_time=300 - 用户连续输错 3 次密码后,
pam_tally2会在/var/log/tallylog记录失败计数,后续登录直接拒绝并提示Account locked due to X failed logins - 解锁必须用
pam_tally2 --user=username --reset,root 权限必需;passwd -u对此无效 - 查看当前计数:
pam_tally2 --user=username;注意旧版pam_tally命令在多数现代发行版中已被弃用
改 shell 为 /sbin/nologin 是静默式登录拦截
这不是“锁定账户”,而是让系统在登录流程早期就退出,不进入认证环节。适合长期停用、仅需保留文件归属的用户(如服务账户)。
- 编辑
/etc/passwd,将目标用户的 shell 字段从/bin/bash改为/sbin/nologin(SUSE/RHEL 系列)或/bin/false(部分 Debian 衍生版) - 该操作不影响
sudo -u username command或 cron 任务运行,只要进程不是交互式登录即可 - 解锁只需改回原 shell,例如
/bin/bash;不需要 root 密码重置或 PAM 操作 - 风险点:若用户有 SSH 密钥且
ForceCommand或AuthorizedKeysCommand配置不当,仍可能绕过 shell 检查
误判锁定类型是运维中最常踩的坑
看到 Account locked 就跑 pam_tally2 --reset,结果用户还是登不上——大概率是因为实际是 passwd -l 锁定的,而 pam_tally2 根本没在运行。
- 第一步永远是查状态:
passwd -S username看是否为LK;再看/etc/passwd最后一字段是否为/sbin/nologin - 第二步才查 PAM:
grep -r pam_tally2 /etc/pam.d/确认模块是否启用;pam_tally2 --user=username查计数是否非零 - 三种方式可共存,但优先级不同:shell 为
/sbin/nologin时,PAM 和 shadow 锁定都不会被触发——登录流程在 shell 检查阶段就终止了 - 没有“万能解锁命令”,
passwd -u、pam_tally2 --reset、改/etc/passwd必须按实际锁定机制选择











