关键在于独立日志路径、完整命令捕获和内核级防篡改三步:一、通过defaults logfile、log_input与requiretty启用sudo完整参数记录;二、设700权限目录及logrotate轮转;三、对接auditd实现不可篡改审计。

一、启用 sudo 自身的完整命令记录
仅靠 /var/log/secure 或 /var/log/auth.log 不行——它们不记录参数,且混在系统日志里难筛选。
- 用 visudo -f /etc/sudoers.d/audit 新建配置文件(禁止直接改
/etc/sudoers) - 写入以下三行(顺序不重要,但缺一不可):
Defaults logfile="/var/log/sudo-audit.log"Defaults log_input, log_outputDefaults requiretty -
log_input是记录完整 argv 的核心,但依赖requiretty(强制交互终端),否则不生效 - 确保 sudo 版本 ≥ 1.8.15(
sudo --version查看),旧版本对log_input支持不稳定
二、设置日志权限与轮转,防止覆盖或误删
独立日志文件本身若权限宽松,root 权限者可轻易清空,失去审计意义。
- 创建日志目录并设权限:
sudo mkdir -p /var/log/sudosudo chown root:root /var/log/sudosudo chmod 700 /var/log/sudo - 将
logfile指向该安全路径:Defaults logfile="/var/log/sudo/audit.log" - 配置 logrotate(如
/etc/logrotate.d/sudo):/var/log/sudo/audit.log {<br> daily<br> missingok<br> rotate 30<br> compress<br> create 600 root root<br> }
三、对接 auditd 实现防篡改审计(生产必需)
文本日志再规范,也挡不住获得 root 权限后的删除或覆盖。真正合规的做法是把 sudo 执行事件交由内核审计子系统处理。
- 安装并启用 auditd:
sudo systemctl enable --now auditd - 在
/etc/sudoers.d/audit中添加:Defaults audit_log = yes(需 sudo ≥ 1.9.0) - 或手动加 audit 规则(兼容旧版):
sudo auditctl -a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec - 验证是否捕获完整参数:
sudo ausearch -m execve -i -ts today | grep -A2 -B2 'sudo_exec'
输出中应含argv[0]=sudo,argv[1]=ls,argv[2]=-la,argv[3]=/tmp等完整字段 - audit 日志默认存于
/var/log/audit/audit.log,权限为 600,仅 root 可读,无法被普通用户(含提权后)修改或清空
四、验证与日常检查建议
配置完不验证等于没配。每次调整后都应快速确认是否生效。
- 用目标运维账号执行:
sudo ls -l /etc/shadow - 立刻检查:
sudo tail -3 /var/log/sudo/audit.log(看是否含-l /etc/shadow)sudo ausearch -m execve -i -ts recent | grep -A1 "sudo.*ls"(看 argv 是否完整) - 定期抽查 audit 日志完整性:
sudo auditctl -s | grep "enabled"(确保 auditd 正常运行)sudo ls -l /var/log/audit/audit.log*(确认日志文件未被 touch 或清空)











