Linux账户锁定需先准确识别风险(如同一IP短时高频失败、账号枚举、非工作时间活跃等),再手动执行usermod -L或passwd -l禁用密码登录,并清理SSH公钥;更彻底则改shell为/sbin/nologin;长期防护应配置pam_faillock.so实现自动锁定。

锁定存在安全风险的用户,不是简单执行一条命令就完事,关键在于“识别准确”+“阻断有效”+“不留后门”。Linux 本身不自动锁定账户,必须人工或通过策略主动干预。
先确认是否真有风险
别一看到失败登录就锁,得看上下文:
- 同一IP在5分钟内失败超5次:用grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr快速筛查
- 日志里频繁出现Invalid user或User unknown:说明在暴力枚举账号,比单纯输错密码更危险
- 凌晨2–4点大量连接尝试:即使单次失败不多,也建议标记关注
- 用户刚登录就执行ls /root、whoami、id等命令:可能已被入侵,需立即响应
快速手动锁定(适合应急)
确认风险后,立刻切断密码登录路径:
- sudo usermod -L username:在/etc/shadow密码字段前加!,最常用、见效快
- sudo passwd -l username:效果类似,密码字段前加!!,语义更明确
- 注意:这两种方式只禁密码登录,不阻止SSH密钥登录。若该用户配了密钥,还需检查~/.ssh/authorized_keys并删掉对应公钥
彻底禁止登录(推荐长期措施)
仅锁密码不够稳妥,攻击者可能绕过。更可靠的方式是让系统拒绝任何交互式登录:
- sudo usermod -s /sbin/nologin username:把用户shell改成/sbin/nologin,登录时直接退出,并可配合/etc/nologin.txt显示提示信息
- 验证是否生效:查看/etc/passwd中该用户行,末尾应为/sbin/nologin
- 恢复登录只需改回原shell,如/bin/bash
启用自动防护(防患未然)
靠人工盯日志总有延迟,建议配置PAM自动锁定:
- 编辑/etc/pam.d/sshd,添加:
auth [default=die] pam_faillock.so preauth silent deny=5 unlock_time=300
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=300 - 含义:5次失败即锁定,5分钟后自动解锁;设unlock_time=0则永久锁定,需手动重置
- 查看状态:faillock --user username;清空计数:faillock --user username --reset
- 提醒:该策略对密码认证有效,对密钥登录无效,务必确保密钥管理本身安全


















