应配置 auditd 监控 su 和 sudo 执行:添加规则 -a always,exit -F path=/bin/su -F perm=x -F key=identity_switch 和 -a always,exit -F path=/usr/bin/sudo -F perm=x -F key=identity_switch,确保记录 AUID 以追溯原始用户,并通过 ausearch -m execve -i -k identity_switch 查询日志。

要捕获所有通过 su 或 sudo 的身份切换行为,核心是利用 Linux 的 auditd 服务,对相关可执行文件的执行事件进行系统级监控。关键在于审计规则需覆盖二进制路径、关注 execve 系统调用,并确保记录足够的上下文(如UID、AUID、终端、命令参数)。
配置 auditd 规则监控 su 和 sudo 执行
编辑 audit 规则文件(通常为 /etc/audit/rules.d/su-sudo.rules),添加以下两条规则:
-a always,exit -F path=/bin/su -F perm=x -F key=identity_switch-a always,exit -F path=/usr/bin/sudo -F perm=x -F key=identity_switch
注意:路径需与实际二进制位置一致(可用 which su sudo 确认;部分系统中 sudo 在 /usr/bin/sudo,su 可能在 /bin/su 或 /usr/bin/su)。-F perm=x 表示监控执行权限触发,key=identity_switch 便于后续日志过滤和归类。
启用 AUID 追踪以识别原始登录用户
仅记录执行进程的 UID 不足以判断“谁真正发起切换”(例如通过 SSH 登录后运行 sudo)。必须依赖 AUID(Audit UID)——它在用户首次登录时设定,全程不变,即使之后 su 或 sudo 切换 UID 也不会改变。
- 确保内核支持 AUID(现代发行版默认开启)
- 在 audit 规则中无需额外设置,只要使用
auditctl -l查看规则生效,日志中自动包含auid=字段 - 查询日志时用
ausearch -m execve -i -k identity_switch | grep auid=即可追溯原始操作者
验证规则并实时查看捕获效果
加载新规则并测试是否生效:
- 执行
sudo augenrules --load(或sudo service auditd restart,取决于系统) - 手动运行一次
sudo ls /root和su -c 'id' - 立即执行
sudo ausearch -m execve -i -k identity_switch | tail -5
预期输出中应包含完整命令行(exe="/usr/bin/sudo")、原始用户(auid=1000)、目标用户(uid=0 或 uid=1001)、终端(tty=pts0)及参数(argc=2 a0="sudo" a1="ls")。
增强实用性:集中分析与告警建议
生产环境中建议进一步处理日志:
- 用
audispd插件将匹配事件转发至 syslog 或 SIEM(如 Splunk、Elastic) - 编写简单脚本定期提取异常模式(例如非白名单用户调用
sudo su -、AUID 为 4294967295 表示无登录会话的 cron 调用) - 避免记录完整命令参数若含敏感信息(如密码误写入 sudo 命令),可考虑关闭
auditctl -e 2后调整规则加-F arch=b64并配合augenrules保持稳定性


















