linux锁定与解锁用户核心是控制登录权限:1.用passwd -l或usermod -l禁密码登录(/etc/shadow加!!);2.改shell为/sbin/nologin彻底禁交互式登录;3.配pam模块pam_faillock.so实现输错自动锁定。

Linux 中锁定与解锁用户登录权限,核心是控制其能否通过认证环节进入交互式会话。这不是单一命令的事,而是按需选择不同机制:有的只禁密码、有的彻底屏蔽 Shell、有的靠失败计数自动触发。关键看你要阻断什么、保留什么。
用 passwd 或 usermod 禁用密码登录
这是最常用、最轻量的临时封禁方式,适合怀疑密码泄露或需短期停用账户的场景。
-
锁定:运行
sudo passwd -l username或sudo usermod -L username。两者效果一致——都在/etc/shadow中该用户的密码字段前加!!,使密码校验永远失败 -
解锁:对应执行
sudo passwd -u username或sudo usermod -U username,移除!!即可恢复密码登录 - 注意:此操作不影响 SSH 密钥登录、
sudo -u执行命令、cron 任务或服务进程,仅针对密码认证
改登录 Shell 彻底禁止交互式登录
当你需要完全阻止用户启动任何 shell(包括 su、ssh -t、console 登录),又想保留其文件归属和权限时,修改 Shell 是最干净的做法。
-
锁定:执行
sudo usermod -s /sbin/nologin username(RHEL/CentOS/SUSE)或sudo usermod -s /bin/false username(Debian/Ubuntu)。系统在登录流程早期就退出,不进入 PAM 认证阶段 -
解锁:还原为正常 shell,例如
sudo usermod -s /bin/bash username - 该方式对所有交互式登录生效,但不影响非交互式调用(如
sudo -u username script.sh)
启用 PAM 自动失败锁定(防暴力破解)
系统默认不锁定账户,必须手动配置 PAM 模块才能实现“输错 N 次即锁”。现代发行版推荐用 pam_faillock.so,而非已废弃的 pam_tally2。
- 编辑
/etc/pam.d/sshd(仅限 SSH)或/etc/pam.d/common-auth(Debian/Ubuntu)//etc/pam.d/system-auth(RHEL/CentOS),在 auth 段开头添加三行(顺序不可变): auth [default=ignore] pam_faillock.so preauth silent deny=5 unlock_time=900 fail_interval=60auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=60auth [default=ok] pam_faillock.so authsucc- 输错 5 次后锁定 15 分钟;查看状态用
faillock --user username;手动清空计数用faillock --user username --reset
其他辅助方式:过期、检查与验证
补充手段可用于生命周期管理或快速确认状态。
-
立即过期账户:运行
sudo chage -E 0 username,让账户在/etc/shadow中的过期字段变为 0,登录时提示“account expired” -
查看锁定状态:用
sudo passwd -S username,输出中LK表示密码被锁,PS表示正常,NP表示无密码 -
验证是否生效:切换到目标用户测试(
su - username)或从另一终端尝试 SSH 登录,避免在当前会话中误锁自己











