要让安全审计系统真正全量记录sudo命令并防范越权,需构建四层防线:命令上下文捕获(启用log_input/log_output)、权限边界控制(禁用通配符与危险组合)、内核级兜底(auditd拦截绕过行为)、行为异常识别(SIEM实时告警)。

要让安全审计系统真正全量记录 sudo 命令执行内容、防范越权行为,不能只依赖默认日志,而需构建“命令上下文捕获 + 权限边界控制 + 内核级兜底 + 行为异常识别”的四层防线。关键不是“有没有记录”,而是“记录是否完整、不可篡改、可关联、可研判”。
确保每条 sudo 记录含完整命令行与执行上下文
默认 sudo 日志(如 /var/log/auth.log)通常只记 COMMAND=/bin/bash,不带参数,无法判断真实意图。必须启用 log_input:
- 用 visudo 编辑 /etc/sudoers,添加两行:
Defaults logfile="/var/log/sudo.log"
Defaults log_input - 保存后运行 sudo visudo -c 验证语法;再以普通用户执行 sudo ls -la /root/.ssh,检查 /var/log/sudo.log 是否出现类似字段:
USER=test : TTY=pts/0 ; PWD=/home/test ; USER=root ; COMMAND=/bin/ls -la /root/.ssh - 若需记录输出(如配置变更结果),额外加 Defaults log_output,并配置 iolog_dir=/var/log/sudo-io/%{user},便于事后回放
用 auditd 拦截绕过 sudo 的提权路径
攻击者可能跳过 sudo,直接调用 su、bash -p、或利用 LD_PRELOAD 执行特权操作——这些 sudo 日志完全无法覆盖。auditd 可捕获 execve 系统调用,提供内核级证据:
- 确认服务运行:sudo systemctl is-active auditd(如未启动则启用)
- 在 /etc/audit/rules.d/privilege.rules 中添加规则:
-a always,exit -F path=/usr/bin/su -F perm=x -k sudo_bypass
-a always,exit -F path=/bin/bash -F auid!=uid -F perm=x -k shell_escape
-a always,exit -F arch=b64 -S execve -F euid!=uid -k privilege_escalation - 重载规则:sudo augenrules --load,日志将落于 /var/log/audit/audit.log,可用 ausearch -k sudo_bypass 快速检索
限制权限本身,从源头压缩越权空间
再完善的日志也晚于越权发生。必须把高危能力从授权列表中物理移除:
- 禁用通配符:删除类似 /usr/bin/systemctl * 这类写法;改用 Cmnd_Alias 明确列举:
Cmnd_Alias SVC_CTRL = /usr/bin/systemctl start nginx, /usr/bin/systemctl restart nginx - 禁止危险组合:在 sudoers 中加入否定规则(sudo ≥1.8.21):
alice ALL=(root) /usr/bin/systemctl restart "nginx" !"/usr/bin/systemctl restart *--force*" !"/usr/bin/systemctl restart *;*" - 清除高危环境变量:
Defaults env_delete+="SHELL PATH LD_PRELOAD PYTHONPATH"
并显式禁用解释器:
Defaults!/usr/bin/python* noexec
对接 SIEM 或轻量分析工具实现主动告警
日志存下来只是第一步,需实时识别越权模式:
- 对 /var/log/sudo.log 做定时扫描:
grep -E 'COMMAND=.*(/bin/sh|/usr/bin/python|;|\$\(.*\)|`.*`)' /var/log/sudo.log —— 发现命令分隔符或子 shell 调用立即告警 - 用 osquery 定期采集:
SELECT username, cmd_line FROM processes WHERE cmd_line LIKE '%sudo %' AND username NOT IN ('admin', 'deploy');
结合登录 IP、时间、频率做基线比对(如非运维时段执行 reboot) - 将 audit.log 和 sudo.log 统一接入 Wazuh 或 ELK,加载 Sigma 规则:
detection: title: Suspicious sudo command with shell metacharacters











