应捕获 execve 系统调用并结合 auid 过滤,通过配置 b64/b32 架构的 auditd 规则(-F auid!=-1 -k sudo_cmd),重载 augenrules,再用 ausearch/aureport 解析日志以获取完整带参命令。

要监控所有 sudo 操作并记录带参数的完整命令(如 sudo rm -rf /tmp/*),不能只靠监听 /usr/bin/sudo 文件执行,因为那只能捕获“调用 sudo 二进制”这个动作,无法看到用户实际要执行的目标命令。真正有效的方式是捕获 execve 系统调用,并结合 loginuid 和 auid 过滤出由 sudo 触发的提权进程。
必须启用 execve 审计并指定架构
execve 是程序执行的核心系统调用,但 auditd 默认不解析其参数内容。要看到完整命令行,必须显式指定 CPU 架构并打上标签:
- 在
/etc/audit/rules.d/sudo-exec.rules中写入:
-a always,exit -F arch=b64 -S execve -F auid!=-1 -k sudo_cmd<br>-a always,exit -F arch=b32 -S execve -F auid!=-1 -k sudo_cmd
说明:
• -F auid!=-1 表示只记录有审计 ID 的会话(即真实登录用户,排除 cron、systemd 等无 auid 的上下文);
• -k sudo_cmd 是统一关键词,后续用 ausearch -k sudo_cmd 即可提取全部日志;
• 必须同时加 b64 和 b32 规则,否则 32 位兼容库下的命令(如某些旧版工具)可能漏捕。
重载规则并验证是否生效
规则文件保存后,不能靠重启服务,必须用 augenrules --load 加载:
- 执行:
sudo augenrules --load - 检查当前加载规则:
sudo auditctl -l | grep execve,应看到两条含arch=b64和arch=b32的规则 - 手动触发测试:
sudo ls -l /root,然后立即查日志:sudo ausearch -k sudo_cmd -ts recent --raw | aureport -f -i,输出中应包含完整路径和参数
区分普通执行与 sudo 提权执行(可选增强)
如果只想聚焦“被 sudo 提权后执行”的命令(排除普通用户直接运行的命令),可进一步加条件:
- 追加过滤字段:
-F uid!=auid—— 表示实际执行用户(uid)与原始登录用户(auid)不同,这是 sudo 提权的典型特征 - 完整规则示例:
-a always,exit -F arch=b64 -S execve -F auid!=-1 -F uid!=auid -k sudo_elevated
这样能精准捕获 sudo cat /etc/shadow 这类高危操作,而不过度记录普通用户的 ls 或 pwd。
查看与分析日志
日志本身是二进制结构化事件,需用专用工具解析:
- 快速查最近 sudo 命令:
sudo ausearch -k sudo_cmd -ts today --raw | aureport -f -i - 按用户汇总:
sudo ausearch -k sudo_cmd -ts yesterday | aureport -u --summary - 导出为易读文本(含时间、用户、命令):
sudo ausearch -k sudo_cmd -m execve --raw | aureport -f -i --output stdout
注意:不要用 grep 直接扫 audit.log,原始日志不可读,且字段顺序不固定。


















