linux sudo日志默认仅记录提权框架(如用户、时间、命令路径),不记录完整命令行参数;需配置defaults logfile="/var/log/sudo.log"并配合auditd与logrotate,才能实现带参数的完整、防篡改、可审计的操作回溯。

Linux 的 sudo 日志默认不记录完整命令行(比如 sudo ls -la /root 中的 -la /root),只记框架信息,如谁、何时、调用了哪个程序。要真正实现“每条提权操作都可回溯”,必须主动配置日志内容、路径和防护机制,不能依赖默认行为。
确认当前日志实际写在哪、写了什么
别一上来就改配置——先看系统现在怎么记的:
- Debian/Ubuntu 系统默认写入
/var/log/auth.log;RHEL/CentOS/Fedora 默认写入/var/log/secure - 执行
sudo grep "COMMAND=" /var/log/auth.log | tail -3,观察是否含参数。若只看到COMMAND=/bin/ls而没有-la /tmp,说明参数未启用 - 运行
sudo -V | grep "Default options"查当前生效的 Defaults 项,重点关注是否有logfile、syslog、log_input等 - 注意:如果某条 sudoers 规则末尾加了
NOLOG(如%ops ALL=(ALL) NOLOG: /usr/bin/reboot),该命令将完全不记日志
启用带参数的完整命令日志(推荐 logfile 方式)
比 syslog 更轻量、更可控,适合大多数运维场景:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 用
sudo visudo编辑/etc/sudoers,在末尾添加:Defaults logfile="/var/log/sudo.log" - 创建日志文件并设权限:
sudo touch /var/log/sudo.log && sudo chown root:root /var/log/sudo.log && sudo chmod 600 /var/log/sudo.log - 测试:执行
sudo ls -l /root,再运行sudo tail -n 1 /var/log/sudo.log,应看到类似:Jun 6 18:05:22 host user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/ls -l /root - 关键点:确保没配
!syslog(会关闭所有日志输出),且不要漏掉requiretty(某些旧版本需它才能正确记录参数)
让日志真正可用于审计:防篡改 + 防遗漏
仅靠文本日志远远不够——root 用户可删改 /var/log/sudo.log,交互式 shell(如 sudo -i)后续命令也不进日志:
- 启用 auditd 补足短板:
sudo systemctl enable --now auditd
添加规则: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 - 禁止修改已有日志:
sudo chattr +a /var/log/sudo.log(允许追加,禁止删除/覆盖) - 配置 logrotate 防止单文件过大,并确保新日志权限正确:
在/etc/logrotate.d/sudo中加入:/var/log/sudo.log { daily missingok compress rotate 7 create 600 root root } - 重要提醒:通过
sudo su -或sudo -i进入的 root shell,其内部所有命令(如rm -f /tmp/*)不会被 sudo 记录——这是设计使然,不是配置问题
日常查看与快速分析技巧
不用翻原始文件也能高效定位风险操作:
- 查最近 2 小时所有提权执行:
journalctl _COMM=sudo --since "2 hours ago" | grep "COMMAND=" - 筛高危命令模式(分号、管道、反引号、$()):
awk '/COMMAND=.*[;&|`$()]/ {print $0}' /var/log/sudo.log - 统计各用户 sudo 使用频次:
awk '/COMMAND=/ {print $5}' /var/log/sudo.log | sort | uniq -c | sort -nr - 对比 auth.log 和 sudo.log 是否一致,排查是否因 rsyslog 冲突导致漏记










