失败锁定在防什么
连续认证失败达到阈值后临时锁定账号,是在线暴力破解最直接的阻断手段:攻击者每次尝试都会消耗窗口,而正常用户误输几次口令只是短暂等待。它保护的是登录入口本身,与口令复杂度互补——复杂度让口令难猜,锁定让猜测次数受限。RHEL 8 与 Debian 10 之后的发行版统一从 /etc/security/faillock.conf 读取参数。
基本信息
| 加固项 | 登录失败处理 |
|---|---|
| 适用平台 | Linux(RHEL 8+、Debian 10+,PAM) |
| 风险等级 | 中 |
| 配置文件 | /etc/security/faillock.conf |
| 基线 | deny 不超过 5 次,解锁时间按业务权衡 |
典型使用场景
- 等保身份鉴别:条款要求配置登录失败处理功能与结束会话条件
- 公网服务器加固:SSH 口令认证仍开启时,锁定是必要的兜底
- 账号安全排查:确认某账号是否因失败次数过多被锁定
- 故障处理:用户反馈登不上,先看是否触发锁定而不是先改口令
- 批量整改:与口令复杂度策略同步下发,一次到位
faillock.conf 基线
faillock.conf 基线
deny = 5 # 连续失败 5 次触发锁定
fail_interval = 900 # 统计窗口 900 秒
unlock_time = 900 # 锁定 900 秒后自动解锁
audit # 记录到审计日志
silent # 不在屏幕上回显失败计数PAM 接线与核查
PAM 接线与核查
# /etc/pam.d/system-auth 或 common-auth
# auth required pam_faillock.so preauth
# auth [default=die] pam_faillock.so authfail
# account required pam_faillock.so
faillock --user alice # 查看某账号的失败计数
faillock --user alice --reset # 手动解锁(确认非攻击后使用)关键参数读法
| 参数 | 含义 | 设置建议 |
|---|---|---|
| deny | 触发锁定的失败次数 | 5 次以内,兼顾安全与误输 |
| fail_interval | 统计失败的滑动窗口秒数 | 与 deny 一起评估,窗口过短易失效 |
| unlock_time | 自动解锁等待秒数 | 为 0 表示永久锁定,需管理员解锁,慎用 |
| audit | 把失败事件写入审计日志 | 建议开启,便于事后分析 |
| silent | 屏幕不回显失败次数 | 避免把剩余尝试次数暴露给攻击者 |
unlock_time 设为 0 表示永久锁定,只能由管理员手动解锁:一旦被批量尝试就会把正常用户一起卡住,运维成本很高。设置前先评估业务对登录可用性的要求,并约定解锁流程与责任人。
faillock 只统计本机认证失败:来自多台主机的分布式爆破,单机计数可能永远到不了阈值,需要配合边界限制或集中认证策略。另外只有走 PAM 的认证才会被计数,密钥登录不经过这条路;用 authselect(旧版 authconfig)管理 PAM 比直接编辑 pam.d 更不容易在升级时被覆盖。
生效后的验证方式
配置完成后用测试账号连续输错口令,确认出现锁定提示,再用 faillock --user 看计数,最后解锁并确认恢复正常登录。这一轮验证同时覆盖了策略生效与解锁流程,比只看配置文件可靠得多。验证用的账号与计数记录一并留档,作为条款符合性的证据。