关键在于启用log_input捕获完整命令行、分离加固日志存储、最小权限授权、禁用通配符、补充auditd内核级审计,实现sudo操作全链路可追溯、防绕过、不可抵赖。

要让服务器上的 sudo 操作真正可追溯、可审计、防篡改,关键不是“开了日志”,而是确保每条记录都包含完整上下文、路径受控、内容不被绕过、权限不可抵赖。
启用完整命令行日志(含参数)
默认 sudo 日志只记命令路径,不记参数。必须显式启用 log_input 才能捕获完整执行语句:
- 用 visudo 编辑 /etc/sudoers,追加两行:
Defaults logfile="/var/log/sudo.log"
Defaults log_input - 保存后执行 sudo visudo -c 验证语法;再用普通用户执行一条带参数的命令(如 sudo ls -l /root)
- 检查 /var/log/sudo.log 是否出现类似字段:
USER : TTY=pts/0 ; PWD=/home/test ; USER=root ; COMMAND=/bin/ls -l /root
分离存储并加固日志文件权限
日志混在系统日志里难排查,且默认权限宽松易被覆盖或删除:
- 创建专属目录并设严苛权限:
sudo mkdir -p /var/log/sudo
sudo touch /var/log/sudo.log
sudo chown root:syslog /var/log/sudo.log
sudo chmod 640 /var/log/sudo.log - 配置 logrotate 自动轮转,并强制新日志权限为 600:
在 /etc/logrotate.d/sudo 中加入:
/var/log/sudo.log {
daily
missingok
rotate 30
compress
create 600 root syslog
}
限制权限范围,避免 ALL 误授权
日志再全,也挡不住一个 ALL=(ALL) ALL 的配置漏洞:
- 按最小权限原则授权,例如只允许某用户重启服务:
alice ALL=(root) /usr/bin/systemctl restart nginx - 用 Cmnd_Alias 分组管理常用操作:
Cmnd_Alias BACKUP = /usr/bin/tar -cf /backup/*, /bin/mv /tmp/*.tar.gz /backup/
%backup ALL=(root) NOPASSWD: BACKUP - 禁止通配符滥用(如 /bin/*)和危险组合(如 !/bin/sh 却放行 /bin/bash)
补充 auditd 实现内核级兜底审计
sudo 日志可被绕过(如直接调用 su 或利用 shell 特性)。auditd 可捕获 execve 系统调用,提供不可篡改证据:
- 确认 auditd 运行:sudo systemctl is-active auditd
- 添加监控规则:
sudo auditctl -a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec
sudo auditctl -a always,exit -F path=/etc/sudoers -F perm=r -k sudoers_read - 将规则持久化到 /etc/audit/rules.d/sudo.rules,再重启 auditd
- 事后用 sudo ausearch -k sudo_exec | aureport -f -i 查看完整调用链

















