auditd 不支持用户自定义动态插件,其扩展需通过 audispd 外部处理器、logrotate 离线分析或 filebeat/fluentd 双层采集实现;推荐优先使用 audispd 链式插件,确保安全合规与实时性。

利用 audispd 外部事件处理器(推荐)
auditd 内置 audispd(Audit Event Dispatcher)服务,支持配置外部程序作为事件处理器,这是最标准、最安全的扩展方式。
- 编写一个守护进程或短生命周期程序(如 Python/Go/C 脚本),监听 audispd 的 socket 或 stdin(取决于配置)
- 在
/etc/audisp/plugins.d/your-plugin.conf中启用插件:active = yes<br>direction = out<br>path = /usr/local/bin/your-audit-processor<br>args = --format=json --output=elk<br>type = chain
- 确保程序能解析 auditd 的二进制或文本格式事件(推荐启用
-f 2输出为序列化格式,或用ausearch --input-stdin辅助解析) - 处理逻辑示例:过滤 type==SYSCALL 的关键调用、提取 pid/uid/executable、添加上下文标签、转发至 Kafka/HTTP/Syslog
配合 ausearch + logrotate 实现离线分析推送
适用于低频、高可靠性场景(如合规审计归档),不依赖实时管道。
- 配置 auditd 日志轮转(
/etc/audit/audit.rules+/etc/audit/rules.d/规则) - 用
logrotate在日志切片后触发脚本:postrotate<br> /usr/local/bin/push-audit-log.sh /var/log/audit/audit.log.1<br>endscript
- 脚本中用
ausearch -i -f /var/log/audit/audit.log.1格式化输出,再经 jq 过滤、curl 推送 - 注意:需校验日志完整性(如 sha256sum)、避免重复推送(记录已处理文件名或 inode)
使用 auditd + fluentd/filebeat 双层采集(生产常用)
借助成熟日志收集器弥补 auditd 原生能力短板,解耦采集与投递。
- 保持 auditd 默认写入
/var/log/audit/audit.log - 配置 filebeat(或 fluentd)监控该文件,启用
multiline.pattern合并多行事件(audit.log 每条记录以type=...开头) - 利用 processor 对字段做提取(如 grok 解析
msg=".*exe=\"([^\"]+)\".*") - 输出端对接 Elasticsearch、Loki、S3 或自定义 webhook,支持重试、限速、TLS 加密
- 优势:运维熟悉、生态丰富、支持 ACK 与背压,适合大规模部署
注意事项与避坑点
绕过 auditd 架构直接读取 netlink 或 /proc 监控属于高危操作,应避免。
- 不要 kill 或替换 auditd 主进程 —— 它是内核 audit subsystem 的唯一用户态代理
- 外部处理器(audispd plugin)必须快速响应,超时(默认 3s)会导致事件丢弃;建议异步写队列+批量提交
- SELinux 策略可能限制新进程访问 auditd socket(
audit_socket类型)或日志文件,需对应赋权 - 测试时用
logger "test msg"+ausearch -m avc -ts recent验证链路连通性











