root 要不要参与锁定
faillock 记录失败认证次数,超过阈值后锁定账户。默认策略下 root 不参与锁定,目的是避免管理员把自己锁死;开启 even_deny_root 能防 root 被逐点爆破,代价是一旦锁定,只能通过本地控制台或救援模式恢复。
基本信息
| 加固项 | root 认证加固 |
|---|---|
| 适用平台 | Linux(pam_faillock) |
| 配置文件 | /etc/security/faillock.conf |
| 关键参数 | even_deny_root、root_unlock_time、deny、unlock_time |
| 前置条件 | 存在带外管理或本地控制台 |
| 风险等级 | 中 |
典型使用场景
- 仍然允许 root 直接登录的服务器:建议开启锁定保护,防逐点爆破
- 已禁止 root 远程登录的环境:必要性下降,可把精力放在普通账户上
- 高价值主机:与 MFA、来源限制组合使用
- 合规核查:账户锁定策略需要覆盖到特权账户
- 事故复盘:确认锁定是否由攻击尝试而非运维误操作引发
开启与核查
开启与核查
# 让 root 也参与锁定,并单独设置较短的解锁时间
printf '%s\n' 'even_deny_root' 'root_unlock_time = 300' >> /etc/security/faillock.conf
# 清理历史失败计数,避免继承旧数据
faillock --user root --reset
# 查看当前失败与锁定状态
faillock --user root关键参数取值
| 参数 | 作用 | 取值建议 |
|---|---|---|
| deny | 连续失败多少次触发锁定 | 3 到 5 次,过低会放大误操作代价 |
| unlock_time | 普通账户自动解锁秒数 | 600 到 1800 |
| even_deny_root | 让 root 也参与锁定 | 按是否允许 root 登录决定 |
| root_unlock_time | root 的单独解锁时间 | 短于 unlock_time,便于紧急恢复 |
开启前确认存在带外管理或本地控制台:root 被锁又没有本地恢复手段时,只能进救援模式处理。
若已经配置 PermitRootLogin 禁止 root 远程登录,root 无法通过 SSH 被爆破,此时开启 even_deny_root 的收益明显下降。
锁定阈值设得过低会让运维的一次手误变成业务中断事件,先评估日常操作习惯再定值。
faillock 与 sshd 的 MaxAuthTries 是两层限制:前者按账户累计失败次数,后者按单条连接计数,配合使用才能同时覆盖自动化爆破与慢速尝试。
落地检查点
- 确认带外管理与本地控制台可用,明确恢复操作人
- 对比整改前后的失败计数与锁定状态,确认策略真的生效
- 把账户锁定事件接入日志告警,区分攻击尝试与运维误操作
- 记录 root_unlock_time 的取值依据,纳入变更评审