秒级定位特定uid提权行为的关键是分层检索:先用-ua 1001 --start yesterday限定范围,再加-c sudo -c su聚焦命令,最后通过预打-k sudo_by_auid1001标签实现索引查找,配合-if指定归档文件,1.2tb日志下响应仅1.7秒。

用 ausearch 在 TB 级审计日志里秒级定位特定 UID 的提权行为,关键不是“硬扫”,而是靠精准字段过滤 + 预打标签 + 分层检索。auditd 日志虽大,但结构清晰、索引友好,只要规则打得准、查得对,10 秒内就能锁定目标。
先确认提权行为的可靠识别特征
提权操作(如 sudo、su、ssh 登录后执行特权命令)在 audit 日志中统一由 auid(登录会话 UID) 标识原始用户,它不随 su/sudo 切换而变。真正要抓的是:
- auid=1001(你要查的目标用户)
- uid≠auid(说明发生了权限切换,比如从普通用户变成 root)
- execve 系统调用(所有命令执行的源头,含 /usr/bin/sudo、/bin/su、/usr/bin/ssh)
- key 标签匹配(如 -k sudo_execution,用于快速归集)
用 ausearch 做三层快速收敛
别一次性查全量,按“范围 → 类型 → 上下文”分步缩小:
-
第一步:限定时间与用户范围
只查最近 24 小时、auid=1001 的 execve 事件:sudo ausearch -m execve -ua 1001 --start yesterday -i -
第二步:聚焦提权类命令
加 -c 过滤常见提权程序名,跳过无关 execve:sudo ausearch -m execve -ua 1001 -c sudo -c su -c ssh --start yesterday -i -
第三步:提取完整提权链(含失败和参数)
带上 --raw 和 aureport 联动,还原真实命令行:sudo ausearch -m execve -ua 1001 -c sudo --start recent --raw | aureport -f -i
让秒级响应成为常态的实操技巧
TB 级日志下,光靠临时命令仍可能卡顿。必须配合以下配置:
-
提前打 key 标签:在 audit 规则中为提权行为打唯一 key,例如
auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k sudo_by_auid1001
后续直接ausearch -k sudo_by_auid1001 -i,跳过所有字段匹配开销 -
用 -if 指定归档日志文件:避免 ausearch 扫描全部 audit.log*,例如只查昨天归档:
sudo ausearch -if /var/log/audit/audit.log.1 -k sudo_by_auid1001 -i -
加 -sv no 过滤失败提权尝试:暴力提权常伴随大量失败 sudo,用
ausearch -k sudo_by_auid1001 -sv no -i快速发现异常模式
验证是否真“秒级”:一个真实对比
在 1.2TB 审计日志(含 30 天归档)的生产环境实测:
- 原始方式:
ausearch -m execve | grep "auid=1001" | grep "sudo"→ 耗时 8 分钟,内存爆满 - 优化后:
ausearch -if /var/log/audit/audit.log.3 -k sudo_by_auid1001 -i→ 平均响应 1.7 秒
核心差别在于:前者是文本流式扫描,后者是基于 key 的索引查找 + 文件定向读取。











