sudo日志需rsyslog运行并正确配置local2.debug路由至/var/log/sudo.log,配合sudoers中Defaults logfile="/var/log/sudo.log"、loglinelen=0、!syslog三行,且目录权限与服务状态正常。

确认系统日志服务是否在运行
sudo 日志单独输出依赖 rsyslog(或 systemd-journald)转发机制,不是仅靠 Defaults logfile="/var/log/sudo.log" 就能生效。很多用户配完发现文件始终为空,第一步就卡在这儿:rsyslog 没在跑,或者没监听 sudo 的日志设施(facility)。
检查 rsyslog 状态:systemctl status rsyslog;若未运行,先执行 systemctl start rsyslog 并设为开机启动。
注意:某些新版系统(如 Ubuntu 22.04+、RHEL 9+)默认用 journald,但 sudo 仍默认走 syslog facility auth 或 local2,所以 rsyslog 仍需启用并配置,不能只靠 journalctl 查看。
配置 /etc/rsyslog.conf 添加 sudo 日志路由
sudo 默认使用 syslog facility local2(除非你显式改过 syslog= 选项),必须让 rsyslog 把 local2.debug 的消息写入 /var/log/sudo.log。
编辑 /etc/rsyslog.conf,在最后添加一行(⚠️中间必须是 Tab,不能是空格):
local2.debug /var/log/sudo.log
常见错误:
- 用了空格代替 Tab → 规则不生效,
/var/log/sudo.log始终为空 - 写成
local2.*或local2.info→ 可能漏掉 debug 级别事件(sudo 默认发 debug) - 路径目录不存在或权限不足 → rsyslog 拒绝写入,需手动创建并授权:
sudo touch /var/log/sudo.log && sudo chown syslog:adm /var/log/sudo.log(Debian/Ubuntu)或root:root(RHEL/CentOS)
修改 /etc/sudoers 启用独立日志
用 sudo visudo 安全编辑,追加以下三行(顺序无关,但建议放末尾):
Defaults logfile="/var/log/sudo.log" Defaults loglinelen=0 Defaults !syslog
说明:
-
logfile指定目标路径,必须绝对路径;不加引号,且路径需与 rsyslog 配置一致 -
loglinelen=0禁用行截断,避免长命令被切掉(默认 80 字符) -
!syslog关闭向系统日志(/var/log/auth.log或/var/log/secure)的重复写入,防止冗余
⚠️ 不要写成 Default(少个 s)——语法错误会导致 visudo 保存失败,且可能锁死 sudo 功能。
验证日志是否真正写入
配置完后必须重启 rsyslog:sudo systemctl restart rsyslog;然后测试一条 sudo 命令,比如 sudo ls /root。
检查日志是否生成内容:
-
sudo tail -n 1 /var/log/sudo.log→ 应看到类似2026-09-30T01:45:22 root : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/bin/ls /root - 若为空,先确认
sudo -l是否正常;再查sudo grep 'sudo' /var/log/auth.log是否有记录 —— 若有但/var/log/sudo.log无,则问题出在 rsyslog 配置或权限 - 若
/var/log/auth.log也无记录,说明 sudo 日志功能根本未启用,检查visudo中是否误删了默认的Defaults syslog行(部分发行版默认开启,禁用需显式!syslog)
最易忽略的一点:rsyslog 的 $ActionFileDefaultTemplate 设置会影响日志格式,但对能否写入无影响;真正卡住的永远是 Tab、权限、服务状态这三样。


















