应配置auditd监控su、sudo二进制执行及auid≠uid的execve调用,写入/etc/audit/rules.d/admin-switch.rules后运行augenrules --load加载,并用ausearch -k admin_switch实时检索日志。

在 Linux 中,auditd 可以精准捕获 su、sudo su、sudo -i 等切换到 root 或其他管理员账户的操作。关键不是只监控命令名,而是追踪实际的权限提升行为(如 setuid 执行、凭证校验、会话变更)。
一、确认 auditd 已启用并运行
先检查服务状态:
sudo systemctl is-active auditd
若返回 inactive,需启用并启动:
sudo systemctl enable --now auditd- 确保内核参数支持(多数现代发行版默认开启):
cat /proc/sys/kernel/audit_enabled应为1
二、添加关键审计规则(持久化配置)
直接写入 /etc/audit/rules.d/admin-switch.rules(推荐),再重载规则:
- 监控
su和sudo二进制文件的执行(含 setuid 调用):-a always,exit -F path=/bin/su -F perm=x -k admin_switch-a always,exit -F path=/usr/bin/sudo -F perm=x -k admin_switch - 捕获凭证验证相关系统调用(更可靠,避免绕过):
-a always,exit -F arch=b64 -S execve -F auid!=uid -k admin_switch
(该规则标记所有“登录用户 ID(auid)与当前有效 UID 不一致”的 execve 调用,典型如普通用户执行 su 后获得 root 权限) - 可选:记录 PAM 认证事件(需系统使用 auditd-aware PAM 模块):
-w /etc/pam.d/ -p wa -k pam_auth
加载新规则:sudo augenrules --load 或 sudo systemctl restart auditd
三、实时查看与过滤管理员切换日志
使用 ausearch 按关键词检索(比直接查 /var/log/audit/audit.log 更高效):
- 查所有标记为
admin_switch的事件:sudo ausearch -k admin_switch --start recent - 精确定位 su/sudo 成功切换(含目标用户):
sudo ausearch -m EXECVE -i | grep -E "(su|sudo).*auid=[0-9]+.*uid=0"
注意看auid(原始登录用户)、uid(当前有效用户)、exe(执行程序)、cwd(执行路径)、comm(命令名) - 导出为易读格式:
sudo aureport -k admin_switch --start today --format csv
四、常见问题与加固建议
-
sudo -l 或 sudo 命令本身不触发切换? —— 正确。只有实际获得更高权限(如
sudo -i、sudo su、sudo /bin/bash)才会被上述auid!=uid规则捕获。纯命令执行(sudo ls)不改变 shell 权限上下文,一般不视为“账户切换” -
日志太多怎么办? —— 避免监控所有 execve,专注
auid!=uid+ 关键路径;定期轮转日志(/etc/audit/auditd.conf中设置max_log_file_action = rotate) -
防止绕过? —— 禁用无密码 sudo 切换;限制
su仅限 wheel 组;结合authselect或pam_faillock增强认证审计











