应关闭 pam_limits.so 的 debug 日志并为 rsyslog 添加速率限制;具体操作是删除 /etc/pam.d/sudo 等文件中的 debug 参数,并在 /etc/rsyslog.d/ 中配置 omrate limit 规则。

大量 sudo session 日志刷屏,通常是 pam_limits.so 模块在每次 sudo 执行时反复写入 syslog(如 rsyslog)导致的,尤其在脚本高频调用 sudo 或容器环境里特别明显。根本原因不是日志级别设太高,而是 PAM 模块默认开启 debug 日志且缺乏限流机制。解决方向有两个:一是关闭 pam_limits 的冗余日志,二是对 rsyslog 中相关日志做速率限制。
关闭 pam_limits 的 debug 日志输出
pam_limits.so 默认启用 debug 选项时,会为每次会话打印类似 pam_limits(limit): 'nofile' set to 1024 soft, 65536 hard 的日志。只要它出现在 /etc/pam.d/sudo 或 /etc/pam.d/common-session 中并带 debug,就会持续刷屏。
- 检查 PAM 配置文件中是否含
debug:运行grep -r "pam_limits.*debug" /etc/pam.d/ - 若存在,编辑对应文件(如
/etc/pam.d/sudo),将required pam_limits.so debug改为required pam_limits.so(删掉debug) - 无需重启服务,PAM 配置热生效;sudo 下次执行即不再输出该类日志
在 rsyslog 中对 pam_limits 日志限流
即使关掉 debug,某些系统版本或定制模块仍可能输出 info 级别的 limits 日志。这时可在 rsyslog 层做速率控制,避免打满磁盘或干扰其他日志。
- 新建限流规则文件:
/etc/rsyslog.d/50-pam-limits-limit.conf - 写入以下内容(以每分钟最多 5 条为例):
if $programname == 'sudo' and $msg contains 'pam_limits' then { :msg, contains, "pam_limits" stop } if $programname == 'sudo' and $msg contains 'pam_limits' then { action(type="omrate limit" rule="pam_limits_limit" burst="5" interval="60") action(type="omfile" file="/var/log/sudo-pam-limits.log") } - 重启 rsyslog:
systemctl restart rsyslog - 注意:
omrate limit是 rsyslog v8.1901+ 原生支持的模块,旧版本需启用imuxsock并配置$SystemLogRateLimitInterval全局限流,但粒度较粗
补充建议:检查是否误启了 multiple pam_limits 行
同一 PAM 配置中多次加载 pam_limits.so(例如在 common-session 和 sudo 中都存在),会导致日志翻倍。建议统一收敛到一处,并确保无重复或冲突参数。
- 运行
grep -r "pam_limits.so" /etc/pam.d/查看所有加载点 - 确认
/etc/security/limits.conf和/etc/security/limits.d/*.conf是否有异常配置(如通配符或空行引发重复解析) - 临时测试可注释非必要位置的
pam_limits.so行,观察日志是否减少
不复杂但容易忽略。核心就是两步:去掉 PAM 里的 debug,再给 rsyslog 加个节流阀。多数场景下,第一项就足够解决问题。









