linux中无sudo-log命令,需通过配置/etc/sudoers的defaults logfile选项指定独立日志路径,并结合logrotate轮转、chattr防篡改及awk等工具实现运维命令的完整审计追踪。

Linux 中没有 sudo-log 命令,所谓“独立记录所有运维人员的 sudo 命令”,本质是通过配置 /etc/sudoers 和系统日志服务,把 sudo 行为定向到专用日志文件或结构化日志路径中,确保不与其他日志混杂、便于审计追踪。
指定独立日志文件路径
这是最直接的方式:让 sudo 绕过 syslog,直接写入专属文件。
- 用
sudo visudo编辑/etc/sudoers - 添加一行:
Defaults logfile="/var/log/sudo.log" - 创建日志目录并设权限:
sudo mkdir -p /var/log/sudo.d && sudo chown root:root /var/log/sudo.d && sudo chmod 755 /var/log/sudo.d(若使用子目录方式) - 确保日志文件可写:
sudo touch /var/log/sudo.log && sudo chown root:root /var/log/sudo.log && sudo chmod 644 /var/log/sudo.log
启用命令级详细记录
仅记录“谁执行了 sudo”不够,还需捕获“执行了什么命令”——默认已包含,但需确认格式完整。
- 日志条目示例:
Jul 21 09:32:14 server sudo: alice : TTY=pts/0 ; PWD=/home/alice ; USER=root ; COMMAND=/usr/bin/systemctl restart nginx - 该行含用户、终端、工作路径、目标用户、完整命令,已满足基本审计要求
- 如需区分不同运维人员,可在 sudoers 中按用户或组单独配置:
Defaults:alice, bob log_host, log_year(附加主机名和年份)
分离日志并防止覆盖或误删
独立日志必须具备防篡改与可持续性,不能只靠手动创建。
- 配置
logrotate自动轮转:
创建/etc/logrotate.d/sudo,内容如下:/var/log/sudo.log {<br> daily<br> missingok<br> rotate 30<br> compress<br> delaycompress<br> sharedscripts<br> postrotate<br> systemctl kill --signal=USR1 rsyslog.service >/dev/null 2>&1 || true<br> endscript<br> } - 设置文件不可被普通用户修改:
sudo chattr +a /var/log/sudo.log(仅允许追加) - 禁止非 root 删除:
sudo chattr +i /var/log/sudo.log(需临时chattr -i才能轮转,建议仅对归档文件启用)
验证与日常查看方式
配置生效后,需快速验证是否写入,并建立常规查看习惯。
- 触发一条测试命令:
sudo whoami - 检查日志是否更新:
sudo tail -n 1 /var/log/sudo.log - 按用户筛选最近操作:
sudo awk '/alice.*COMMAND=/ {print}' /var/log/sudo.log | tail -10 - 配合时间范围查某时段操作:
sudo awk '$0 ~ /Jul 21 .*alice.*COMMAND=/ {print}' /var/log/sudo.log











