首页/安全/安全加固速查/sudo 组认证失败锁定
口令与认证策略55 条

sudo 组认证失败锁定

特权提权路径也要计入失败锁定:把 pam_faillock 接进 sudo 的 PAM 栈,防住“先猜 sudo 口令”的定向爆破。

安全加固速查安全更新于 2026-10-13

为什么 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 口令是否被锁定,以及解锁流程是否可用。只验证其中一项,出问题时仍会手忙脚乱。
把改动写进变更记录并标注生效范围:登录路径与提权路径的策略在不同发行版上落点不同,留档能显著缩短下次排障时间。

易错点

  • 直接把网上的配置抄进 sudo 的 PAM 文件:发行版路径与包含关系不同,直接导致 sudo 失效
  • 忘记 SSH 与 sudo 共享计数:阈值设得过严,运维自己频繁被锁
  • 改完不做验证:问题在下次需要提权时才暴露,处置时机往往不巧
  • 不备份原配置:回滚只能靠记忆重建,风险成倍

数据来源与参考

  • man 8 pam_faillock(sudo 场景)
  • sudoers 安全实践

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌