大量 sudo session 日志刷屏的 pam_limits 与 rsyslog 限流方案

14次阅读

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

大量 sudo session 日志刷屏的 pam_limits 与 rsyslog 限流方案

大量 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-sessionsudo 中都存在),会导致日志翻倍。建议统一收敛到一处,并确保无重复或冲突参数。

  • 运行 grep -r "pam_limits.so" /etc/pam.d/ 查看所有加载点
  • 确认 /etc/security/limits.conf/etc/security/limits.d/*.conf 是否有异常配置(如通配符或空行引发重复解析)
  • 临时测试可注释非必要位置的 pam_limits.so 行,观察日志是否减少

不复杂但容易忽略。核心就是两步:去掉 PAM 里的 debug,再给 rsyslog 加个节流阀。多数场景下,第一项就足够解决问题。

text=ZqhQzanResources