auditd规则过多会显著拖慢系统,典型表现为CPU持续偏高、内存缓慢上涨、ausearch响应变慢、日志每小时暴涨超100MB;需分层排查:先确认是否由规则引发,再定位全路径递归、模糊execve、缺失arch过滤三类低效规则,最后通过基准测试验证并闭环优化。

auditd 规则过多会显著拖慢系统,典型表现是 CPU 持续偏高、内存缓慢上涨、ausearch 响应变慢、日志文件每小时暴涨超 100MB。排查不能只看进程状态,要分层验证:先确认是否真由规则引发,再定位低效规则,最后闭环验证优化效果。
快速确认 auditd 是否成为性能瓶颈
执行以下命令组合,5 分钟内即可判断问题是否出在 auditd:
- 查内存占用(单位 MB):
ps -eo pid,%mem,rss,comm | grep auditd | awk '{printf "%.0f MB\n", $3/1024}'—— 若持续 >300MB,需警惕 - 查队列积压:
sudo auditctl -s | grep "backlog\|queue"—— backlog_used 接近 backlog_max(默认 64)说明事件处理不过来 - 查 I/O 写入压力:
sudo iotop -o -b -n 1 | grep auditd—— write B/s 长期 >2MB/s 表明日志写入过载 - 查规则总数:
sudo auditctl -l | wc -l—— 超过 100 条时,性能风险明显上升
识别三类高危低效规则模式
真正拖慢系统的往往不是规则数量本身,而是特定写法。重点检查以下结构:
-
全路径递归监控:如
-w /var/log/ -p rwxa—— 会监控所有子目录和滚动日志,高频写入场景极易打满队列;应改为只监控关键文件,例如-w /var/log/secure -p wa -k auth_secure -
模糊路径 + execve 全捕获:如
-a always,exit -S execve -F path=/bin/—— 匹配所有/bin/*执行,包括lsdate等高频命令;应替换为白名单,例如-a always,exit -F path=/usr/bin/sudo -k sudo_exec -
缺失 arch 过滤的系统调用规则:如
-a always,exit -S connect—— 同时捕获 32 位与 64 位调用,重复记录且漏审关键上下文;必须显式加-F arch=b64(x86_64 系统)或-F arch=b32
用基准测试验证规则影响
不要凭感觉删规则,要用可复现数据说话。按顺序执行:
- 清空并禁用:
sudo auditctl -e 0 && sudo auditctl -D - 模拟稳定负载:
stress-ng --cpu 2 --io 1 --timeout 30s - 采集基线数据(CPU、内存、延迟):
top -b -n 10 -d 1 | grep auditd、smem -P auditd -c "pss"、time for i in {1..50}; do ls /etc/passwd > /dev/null; done 2>&1 | tail -1 - 加载待测规则集,重复上述负载与采集,对比三项指标变化幅度 —— 若平均延迟增加超 15% 或 PSS 内存增长超 15MB,该规则组需重构
精简后必须做的收尾动作
删减规则只是第一步,还需同步调整配置防止反弹:
- 降低日志刷盘频率:
echo "freq = 100" | sudo tee -a /etc/audit/auditd.conf(配合flush = INCREMENTAL_ASYNC) - 增大事件队列:
echo "q_depth = 4000" | sudo tee -a /etc/audit/auditd.conf,再sudo systemctl restart auditd - 强制轮转旧日志:
sudo auditctl -s && sudo truncate -s 0 /var/log/audit/audit.log,避免残留大文件干扰后续分析 - 用最小规则集落地:
/etc/audit/rules.d/min.rules中只保留 /etc/shadow、/etc/passwd、sshd_config、sudo、su、connect(端口 22/443)等 7 条以内核心规则











