sudo默认日志不记录命令参数,需在/etc/sudoers中启用log_input、log_output及requiretty,并配合auditd实现防篡改的完整命令行审计。

sudo 日志默认不记录命令参数,必须显式启用
Linux 默认的 sudo 日志(通常写入 /var/log/secure 或 /var/log/auth.log)只记录谁执行了 sudo、目标用户、时间戳和命令路径(如 /bin/ls),但**不会记录实际参数**(比如 ls -la /tmp 中的 -la /tmp)。运维人员执行 sudo rm -rf /var/log/* 时,日志里可能只显示 sudo rm,完全丢失关键操作上下文。
要记录完整命令行,必须在 /etc/sudoers 中启用 log_input 和 log_output(后者还依赖 pty),但更直接有效的是使用 sudoers 的 syslog 日志级别控制 + command 记录扩展:
- 确保
Defaults logfile="/var/log/sudo.log"已设置(独立日志路径,避免混入系统日志) - 添加
Defaults log_input, log_output, requiretty(requiretty强制交互终端,是log_input/output的前提) - 确认
sudo版本 ≥ 1.8.15(旧版本log_input行为不稳定,建议升级)
/var/log/sudo.log 要配合 auditd 才能防篡改
仅靠 sudo 自身日志文件(如 /var/log/sudo.log)有严重缺陷:普通用户若获得 root 权限,可直接清空或修改该文件。真正满足审计要求的做法是让 sudo 将操作转发给内核级审计子系统 auditd。
操作步骤:
- 安装并启用
auditd:sudo systemctl enable --now auditd - 在
/etc/sudoers中添加: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 - 验证日志位置:
ausearch -m execve -i -ts recent | grep sudo,输出包含完整argv参数
注意:auditd 日志默认存于 /var/log/audit/audit.log,权限为 600 且仅 root 可读,比纯文本日志可靠得多。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
别用 visudo 直接改 sudoers,先测试规则是否生效
写错 sudoers 语法会导致所有用户无法提权,包括 root(除非用单用户模式修复)。任何修改前必须验证:
- 用
sudo -l -U username检查目标用户实际匹配的规则(含隐式继承) - 临时加一条测试规则:
username ALL=(ALL) NOPASSWD: /bin/echo,然后运行sudo echo test并立刻检查/var/log/sudo.log或ausearch输出 - 确认
log_input生效后,日志中应出现类似USER=username : TTY=pts/1 ; CWD=/home/username ; COMMAND=/bin/ls -la /root的完整行 - 如果没看到参数,大概率是
requiretty未启用,或用户通过非交互方式(如脚本、SSH 命令行)调用 sudo —— 此类场景需额外配置Defaults use_pty
日志轮转和远程集中存储不能省略
本地日志文件会持续增长,/var/log/sudo.log 或 audit.log 单日可达百 MB。不配置轮转,磁盘很快写满;不外发,一旦服务器被控,日志即消失。
最小可行方案:
- 对
/var/log/sudo.log:在/etc/logrotate.d/sudo中添加轮转配置,包含compress和dateext - 对
audit.log:编辑/etc/audit/auditd.conf,设置max_log_file = 50(MB)、num_logs = 5 - 远程发送:用
rsyslog将authpriv.*或自定义日志转发到 SIEM(如 Graylog、ELK),关键字段必须包含sudo、user、cmd、cwd
真正难的不是开启记录,而是保证每条命令的 argv 不被截断、不被环境变量干扰、不因 shell wrapper(如 sudo bash -c '...' )而丢失原始意图 —— 这些细节在生产环境里往往要反复抓包和比对 strace -e trace=execve sudo ... 才能定位。










