账号为什么会被锁定
Linux 的认证模块可以配置连续失败次数上限与锁定时长,达到阈值后账号在一段时间内拒绝登录,这是抵御口令爆破的基础手段。被锁定的判断依据通常写在失败记录里,可以通过查询工具看到失败次数、最近一次失败时间与来源地址。
解锁之前先看来源
锁定的成因有两类:运维自己输错口令,或外部在使用字典大规模尝试。前者直接清空失败计数即可;后者如果只解锁不处理来源,解锁后的账号会立刻被继续爆破,甚至产生一批重复的锁定与解锁记录。因此先看失败来源分布,再决定是否同时做访问控制。
基本信息
| 常见机制 | 认证模块的失败计数与新老版本对应工具 |
|---|---|
| 策略文件 | /etc/security 下的模块配置或全局策略文件 |
| 查询范围 | 失败次数、锁定状态、失败来源 |
| 权限要求 | root |
典型使用场景
- 运维连续输错口令导致账号被临时锁定,需要立即恢复
- 多台服务器同时收到登录失败告警,需要确认是否为爆破
- 安全加固后首次出现锁定,验证策略参数是否符合预期
- 服务账号因来源地址变更被锁定,需要排查原因
- 制定失败锁定策略时评估锁定时间与阈值是否合理
查看状态
查看状态
faillock --user <用户名> # 失败记录与是否处于锁定状态
faillock # 不加参数可查看全部记录
pam_tally2 --user <用户名> 2>/dev/null # 老版本发行版的对应工具
lastb | head # 失败登录来源概览
grep -r 'deny\|unlock_time' /etc/security/ 2>/dev/null | head解锁与策略调整
解锁与策略调整
faillock --user <用户名> --reset # 清空该用户的失败计数
# 老版本:pam_tally2 --user <用户名> --reset
# 策略示例(具体文件按发行版与模块版本确定):
# deny=5 连续失败 5 次锁定
# unlock_time=900 锁定 900 秒后自动解锁
# 修改后在目标环境验证一次,避免只改文档不改生效配置判断与处置
| 判断项 | 现象 | 处置方向 |
|---|---|---|
| 失败来源 | 单个来源地址反复失败 | 考虑对该来源做访问限制 |
| 失败来源 | 大量分散来源尝试 | 判定为爆破,纳入安全事件流程 |
| 失败时间 | 集中在几秒内 | 自动化尝试特征明显 |
| 锁定状态 | 计数达到阈值且未过期 | 确认非攻击后重置计数 |
| 策略参数 | 锁定时间过长影响运维 | 在安全要求范围内调整参数 |
解锁前先查看失败来源,批量失败很可能来自外部爆破,只解锁不处置来源会立刻再次被锁。把锁定时间改成零相当于允许无限尝试,调整前先确认安全要求是否允许。