auditd日志需用ausearch/auparse解析,因其由多type子记录组成;关键字段包括auid、exe、key等;ausearch支持语义查询,aureport生成可读报表,-i参数必加。

auditd 日志不是普通文本日志,不能靠 cat 或 grep 直接“读懂”。它的价值在于结构化字段和上下文关联,关键是要用对工具、理解字段含义、聚焦业务意图。
audit.log 的真实结构:别被“一行一条”误导
每条审计记录实际由多个 type=xxx 子记录组成,共享同一时间戳和序列号(如 audit(1712345678.123:45678)),共同描述一个完整事件。常见组合包括:
-
SYSCALL:触发动作的系统调用(如execve、openat) -
CWD:当时进程的工作目录 -
PATH:被操作的文件路径(可能有多个,尤其涉及符号链接或重命名) -
EXECVE:执行命令的完整参数(argv[0]到argv[n]) -
PROCTITLE:进程标题,有时含敏感参数(需 hex 解码)
直接 awk '{print $5}' 切字段会出错——因为字段顺序不固定、空格分隔不可靠、部分值含空格(如 comm="ls -la")。必须依赖 ausearch 或 auparse 解析。
核心字段怎么看才有效
真正用于溯源和判断风险的字段,不是全看,而是抓重点:
-
auid=:原始登录用户 ID,即使
sudo su -也不变,是跨权限操作溯源的唯一锚点 -
uid=/euid=:真实用户 ID 和有效用户 ID,
uid != euid基本等于提权行为 -
exe=:实际执行的二进制绝对路径,比
comm=更可信(comm可被篡改) -
key=:你定义的规则标签,如
key="sudo_exec"或key="account_passwd",是快速筛选的入口 -
tty= / ses=:终端类型与会话 ID,可结合
loginuid追踪 SSH 会话链
用 ausearch 精准定位,而不是翻日志
ausearch 是专为 audit.log 设计的查询引擎,支持语义化条件,避免手动解析:
- 查某用户所有 sudo 行为:
ausearch -ui 1001 -m EXECVE -i | grep -i "sudo\|su" - 找修改
/etc/passwd的全部记录:ausearch -f /etc/passwd -i - 查今天所有失败的文件写入:
ausearch --start today -m SYSCALL --failed -i | grep "syscall.*write\|open.*w" - 还原某次 execve 的完整上下文(含 PATH/CWD/PROCTITLE):
ausearch -m EXECVE -i --input-logs | aureport -f -i
用 aureport 汇总出结论,不是堆数据
报表不是罗列日志,而是回答具体问题:
- 谁在频繁改配置?→
aureport -k config_change -i --summary - 哪些命令被反复执行失败?→
aureport -f --failed --summary -ts yesterday - 高危操作集中在哪些时段?→
aureport -ts "09:00" -te "17:00" -k cmd_rm -i - 导出供 SIEM 分析?→
aureport -au --format csv > user_actions.csv
记住:-i 参数必须加,它能把数字 syscall、UID、GID 转成可读名称;没它,报表基本不可用。










