Auditd 可精准捕获 sudo 提权行为,需配置规则监听 /usr/bin/sudo 执行事件;启用服务后添加 auditctl 规则并持久化,用 ausearch 查日志,再结合 sudo.log 实现语义与证据互补。

Auditd 是 Linux 内核级审计系统,能精准捕获 sudo 提权行为(包括命令执行、参数、用户、时间等),比仅依赖 /var/log/secure 或 sudo.log 更可靠、更难绕过。要让它真正记录普通用户用 sudo 干了什么,关键不是“开了 auditd”,而是配置规则匹配 sudo 的实际行为模式。
确认 auditd 已启用并运行
先确保服务在工作:
-
systemctl is-active auditd—— 应返回 active -
auditctl -s | grep enabled—— 显示 enabled 1 才算开启 - 若未运行:
systemctl enable --now auditd
添加针对 sudo 的核心审计规则
sudo 的本质是执行 /usr/bin/sudo 程序,auditd 需监听它的执行事件。直接监控该路径最有效:
- 临时生效(重启失效):
auditctl -a always,exit -F path=/usr/bin/sudo -F perm=x -F key=sudo-exec - 永久生效:向
/etc/audit/rules.d/sudo.rules写入同一行,然后augenrules --load - 这条规则含义:每当任意用户执行
/usr/bin/sudo(x 权限触发),就记录一条带key=sudo-exec标签的审计日志
查看和解析 sudo 审计日志
日志统一存于 /var/log/audit/audit.log,用 ausearch 查最清晰:
- 查所有 sudo 执行:
ausearch -m execve -i -k sudo-exec - 查某用户(如 alice)的 sudo 行为:
ausearch -m execve -i -k sudo-exec -ui alice - 关键字段说明:
a0到a3是命令参数(含真实执行的命令,如/bin/bash或/usr/bin/systemctl),uid和euid能区分“谁发起”和“以谁身份执行”
补充:关联 sudo 日志增强可读性
auditd 记录底层调用,但不解释“sudo -u nginx systemctl restart httpd”这类语义。建议同时启用 sudo 自身日志作交叉验证:
- 编辑
/etc/sudoers(用visudo):Defaults logfile="/var/log/sudo.log" - 确保
rsyslog将 sudo 事件转存:echo "local2.debug /var/log/sudo.log" >> /etc/rsyslog.conf,再systemctl restart rsyslog - 这样 auditd 提供不可篡改的执行证据,sudo.log 提供上下文语义,两者结合才完整


















