为什么 sudo 也要计数
多数加固只给 SSH 登录加了失败锁定,提权路径却常常漏掉:攻击者拿到普通账号后可以放心地对 sudo 连续猜口令,直到命中管理员的弱口令。把 pam_faillock 接进 sudo 的 PAM 栈,等于给提权路径也补上同一道锁。
基本信息
| 适用平台 | Linux(sudo 与 pam_faillock) |
|---|---|
| 配置文件 | /etc/pam.d/sudo(Debian 系为 sudo 与 common-auth 组合) |
| 关键参数 | pam_faillock 的 preauth 与 authfail 两行 |
| 基线 | 提权路径的认证失败同样计入锁定 |
典型使用场景
- 终端加固基线:把提权路径纳入与登录路径一致的锁定策略
- 内网渗透自查:验证普通账号连续猜 sudo 口令是否会被锁定
- 事件调查:确认攻击者是否曾对 sudo 进行过大量尝试
- 策略统一:避免出现「SSH 有锁定、sudo 无锁定」的策略洼地
sudo 的 PAM 接入(示例)
sudo 的 PAM 接入(示例)
# /etc/pam.d/sudo 参考内容(按发行版调整)
# auth required pam_faillock.so preauth
# auth include system-auth
# auth [default=die] pam_faillock.so authfail
# account include system-auth
# 查看当前 sudo 的 PAM 配置
cat /etc/pam.d/sudo 2>/dev/null || cat /etc/pam.d/sudo-i 2>/dev/null验证
验证
# 切换到测试账号,连续输错 sudo 口令,观察计数变化
# su - testuser
# sudo -k; sudo -l (故意输错多次)
faillock --user testuser改动前后要点
| 要点 | 说明 | 风险 |
|---|---|---|
| 备份原文件 | 改动前 diff 或复制 sudo 的 PAM 配置 | 无备份则回滚困难 |
| 保留已 root 的会话 | 配置有误时仍可修复 | 否则可能完全无法提权 |
| 发行版差异 | Debian 走 common-auth,RHEL 走 system-auth | 照抄配置会导致 sudo 不可用 |
| 阈值共享 | SSH 与 sudo 共用失败计数 | 策略过严会导致正常用户被锁 |
不同发行版的 sudo PAM 文件差异很大:改动前先 diff 备份,改完立刻用另一个会话验证,确认可正常提权与解锁。
PAM 语法错误会让 sudo 完全不可用:动手前保留一个已获得 root 权限的会话,验证通过再退出,这是这类变更的通用纪律。
上线后要验证两件事:连续输错 sudo 口令是否被锁定,以及解锁流程是否可用。只验证其中一项,出问题时仍会手忙脚乱。
把改动写进变更记录并标注生效范围:登录路径与提权路径的策略在不同发行版上落点不同,留档能显著缩短下次排障时间。