关键不是“开了日志就行”,而是让每条提权行为都留痕、可定位、难篡改、内容全:需配置Defaults logfile="/var/log/sudo.log"启用独立日志,添加log_input/log_output和iolog_dir记录完整会话,严格设权限并轮转,结合sudoreplay回放,确保USER=、TTY=、PWD=、COMMAND=等字段齐全。

要让 sudo 日志真正能审计所有管理员操作,关键不是“开了日志就行”,而是让每条提权行为都留痕、可定位、难篡改、内容全。
确认并启用独立 sudo 日志路径
默认日志(如 /var/log/secure 或 /var/log/auth.log)混杂大量认证信息,不专用于 sudo 审计。应强制 sudo 写入独立文件:
- 用 sudo visudo 编辑 /etc/sudoers,添加一行:
Defaults logfile="/var/log/sudo.log" - 创建日志目录并设权限:
sudo mkdir -p /var/log/sudo.log && sudo chown root:root /var/log/sudo.log && sudo chmod 600 /var/log/sudo.log - 若系统使用 rsyslog,也可配合配置:
在 /etc/rsyslog.conf 中加 local2.debug /var/log/sudo.log,再在 sudoers 中写 Defaults syslog=local2
捕获命令输入输出与会话上下文
仅记录 “谁执行了什么命令” 不足以还原操作现场。需补充 stdin/stdout/stderr 和退出码:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 在 /etc/sudoers 中追加两行:
Defaults log_input,log_output
Defaults iolog_dir="/var/log/sudo-io" - 创建 IO 日志目录并授权:
sudo mkdir -p /var/log/sudo-io && sudo chown root:root /var/log/sudo-io && sudo chmod 700 /var/log/sudo-io - 执行后,每次 sudo 会生成带时间戳的子目录(如 00/0001),内含 stdin、stdout、stderr、exit_code 等文件
用 sudo sudoreplay -l 查看会话列表,sudo sudoreplay 00/0001 可完整回放
加固日志本身的安全性
日志若可被删改,审计即失效。必须从权限、轮转、不可变性三方面防护:
- 设置日志文件属主为 root:root,权限严格限制为 600
- 在 /etc/logrotate.d/sudo 中配置轮转,并指定:
create 600 root root - 对已归档日志启用追加只读:
sudo chattr +a /var/log/sudo.log
对历史压缩包或旧轮转文件,可用 chattr +i 锁定(需 root 解除) - 生产环境建议通过 rsyslog 或 journald 将日志实时转发至远程 SIEM 或专用日志服务器
快速检索与日常核查要点
日志写进去只是第一步,得能高效查出来、看得懂、判得准:
- 查某用户全部 sudo 行为:
grep 'COMMAND=' /var/log/sudo.log | grep 'username' - 提取高频字段(时间、用户、TTY、PWD、COMMAND):
awk -F': ' '{print $1,$5,$7,$9}' /var/log/sudo.log | head -20 - 发现可疑模式(命令注入迹象):
grep -E "[;&|`$()]" /var/log/sudo.log - 检查是否遗漏关键字段:确保每行含 USER=、TTY=、PWD=、COMMAND=,否则需检查 sudoers 是否误启 noexec 或 stricthostname

















