审计特权root操作的关键是捕获导致提权的系统调用,而非仅监控root行为;需通过auditd配置规则捕获euid=0执行、关键命令路径访问、敏感文件修改、账号创建及cred_change系统调用,并启用锁定与持久化机制。

要审计所有特权 root 操作,关键不是“监控 root 做了什么”,而是捕获任何导致提权行为的真实系统调用——因为普通用户执行 sudo、su、修改 /etc/sudoers 或调用 setuid 程序时,实际获得 root 权限的瞬间,内核会触发可审计的底层动作。auditd 的优势正在于从内核层捕获这些不可绕过的行为。
明确哪些操作属于“特权 root 操作”
这类操作本质是:
- 用户身份从非 root 变为 root(euid=0)
- 修改影响权限的关键配置或账户数据
- 执行本应仅限管理员使用的敏感二进制
不依赖命令名(如 sudo),而依赖系统调用、权限上下文、路径和属性变更。
配置核心规则(按功能分组)
以下规则全部写入 /etc/audit/rules.d/99-privilege.rules,每行一条,不加 auditctl 前缀:
捕获所有有效 UID 变为 0 的执行行为(覆盖 sudo/su/ssh -l root/自定义 setuid 程序)
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_exec
若系统运行 32 位程序,补一行:-a always,exit -F arch=b32 -S execve -F euid=0 -k root_exec监控关键特权命令的执行(路径级锁定,防 PATH 劫持)
-w /usr/bin/sudo -p x -k privileged_cmd-w /bin/su -p x -k privileged_cmd-w /usr/bin/passwd -p x -k privileged_cmd-w /usr/bin/chsh -p x -k privileged_cmd锁定敏感文件的写入与属性变更(只记录非 root 用户操作,减少噪音)
-w /etc/sudoers -p wa -F uid!=0 -k sudoers_mod-w /etc/sudoers.d/ -p wa -F uid!=0 -k sudoers_d_mod-w /etc/shadow -p wa -F uid!=0 -k shadow_mod-w /etc/passwd -p wa -F uid!=0 -k passwd_mod-w /etc/group -p wa -F uid!=0 -k group_mod记录新增系统账号和组的操作
-a always,exit -F arch=b64 -S useradd,groupadd -k account_creation捕获直接权限修改系统调用(绕过命令工具的提权)
-a always,exit -F arch=b64 -S setuid,setgid,setreuid,setregid,capset -k cred_change
让规则持久生效并防篡改
执行加载命令:
sudo augenrules --load(RHEL/CentOS/Fedora)
或sudo systemctl restart auditd(Debian/Ubuntu)确认规则已载入:
sudo auditctl -l | grep -E "(root_exec|privileged_cmd|sudoers_mod)"启用审计锁定(root 也无法清除或停用规则):
sudo auditctl -e 2
快速检索 root 相关特权行为
查看今天所有以 root 身份执行的程序:
ausearch -k root_exec --start today | aureport -f -i查某用户(如 uid 1001)是否尝试修改 sudoers:
ausearch -ui 1001 -m SYSCALL -f /etc/sudoers -i查所有失败的提权尝试(需在规则中加
-F exit=-1,建议补充到 execve 规则中):ausearch -m execve -F key=root_exec -F exit=-1
规则不追求“全覆盖”,而追求“可溯源、难绕过、易检索”。只要确保 auid(原始登录用户)、uid/euid、exe、comm 和 key 字段完整,就能准确还原谁、在何时、通过什么方式获得了 root 权限。











