要提取用户操作行为轨迹,关键不是堆日志,而是按“谁、在何时、从哪来、做了什么、动了什么”五个维度结构化还原动作链;auditd提供原始事件,aureport和ausearch才是拼出完整轨迹的拼图工具,需以auid锁定真实操作者、限定时间窗口、提取execve命令链、关联文件访问与权限变更,并用aureport生成可读报告。

要提取用户操作行为轨迹,关键不是堆日志,而是按“谁、在何时、从哪来、做了什么、动了什么”五个维度结构化还原动作链。auditd 提供原始事件,aureport 和 ausearch 才是拼出完整轨迹的拼图工具。
锁定目标用户与时间范围
先明确分析对象——不是看 UID 或当前用户名,而是用 auid(登录会话原始 UID) 锁定真实操作者。普通用户 su 或 sudo 切换后,UID 会变,但 auid 不变,这才是可追溯的“身份锚点”。
- 查目标用户的 auid:
id -u username或ausearch --loginuid $(id -u username) --start today | head -5 - 限定时间窗口更高效:用
--start yesterday、--start 06/10/2026 09:00或--interval 24h避免全量扫描 - 避免漏掉后台任务:加上
--session过滤可关联同一登录会话下的所有子进程
提取命令执行链(含参数)
execve 系统调用是命令执行的“唯一入口”,抓它就能还原完整操作路径,包括参数和 shell 脚本内嵌命令。
- 查某用户全部命令:
sudo ausearch -m execve -ui 1001 --raw | aureport -f -i - 还原带参数的完整命令行:
sudo ausearch -m execve -ui 1001 --start today --raw | awk -F': ' '{print $NF}' | sed 's/^.*comm="[^"]*".*exe="[^"]*".*key=.*$/&/' | grep -o 'comm="[^"]*".*args="[^"]*"' | sed 's/comm="//; s/" args="/ /; s/"$//' - 重点过滤高危动作:如
ausearch -m execve -ui 1001 | grep -E "(rm|chmod|chown|mv.*\/etc\/|cp.*\/etc\/)"
关联文件访问与权限变更
单看命令不够,必须叠加其操作的目标文件和上下文。比如用户执行了 vi /etc/passwd,实际触发的是 openat + write + close 等多个系统调用。
- 查该用户对敏感路径的操作:
sudo ausearch -ui 1001 -f /etc/passwd --raw | aureport -f -i - 合并命令与文件事件:
sudo ausearch -ui 1001 -m execve,file -ts today --raw | aureport -f -i - 识别提权行为:加规则
-a always,exit -F arch=b64 -S execve -F euid!=uid -k privilege_escalation,再用ausearch -k privilege_escalation快速定位
生成可读轨迹报告
aureport 不只是统计工具,配合字段筛选能输出接近操作回放的线性视图。
- 按时间排序的用户行为流水:
sudo aureport -ts today -m user_login,execve,file -i --summary | grep "user1" - 导出为结构化格式便于进一步处理:
sudo ausearch -ui 1001 -m execve,file -ts today --raw | aureport -f -i --output csv > user1_trace.csv - 补全终端与来源 IP:
ausearch -ui 1001 -m user_login -ts today --raw | aureport -l -i,再与 execve 日志按时间戳对齐











