定期审计sudo日志需建立可重复、有重点、能发现异常的流程:一确认日志字段完整与权限合规;二聚焦可疑命令、非常规时间操作及非授权高频失败;三自动化归档并验证留存;四结合auditd补充分析绕过行为。

定期审计服务器 sudo 使用记录,核心不是“看一眼日志”,而是建立可重复、有重点、能发现异常的检查流程。光有日志不分析,等于没记。
一、确认日志内容完整且可访问
先确保你看到的日志真能反映实际操作:
- 检查
/var/log/sudo.log(或/var/log/auth.log、/var/log/secure)中是否包含 USER、TTY、PWD、COMMAND 四个关键字段,例如:USER=test : TTY=pts/0 ; PWD=/home/test ; USER=root ; COMMAND=/bin/cat /etc/shadow - 若 COMMAND 只显示路径(如
/bin/ls)而无参数,说明未启用log_input,需在/etc/sudoers中补上:Defaults log_input - 验证权限:日志文件属主应为
root:syslog,权限建议640或更严;普通用户不能写,也不能删。
二、聚焦三类高风险行为筛查
每天或每周花5分钟扫一遍,比每月通读强十倍:
-
可疑命令模式:用 grep 快速抓取含分隔符或执行符的命令
grep -E "COMMAND=.*[;&|`$()]" /var/log/sudo.log | tail -20 -
非常规时间操作:凌晨2–5点的提权行为大概率异常
awk '/sudo/ && ($2 ~ /^(0[2-5]|2[2-3])/) {print}' /var/log/sudo.log | tail -10 -
非授权用户/高频失败:统计近24小时所有 sudo 尝试,标出失败次数多或无权限却频繁尝试的账号
awk '/COMMAND=/ {user=$1; cmd=$NF; if($0 ~ /denied|not allowed/) denied[user]++} END {for (u in denied) print u, denied[u]}' /var/log/sudo.log
三、自动化归档与留存验证
避免“查时发现日志被轮转没了”或“旧日志被清空”:
- 检查
/etc/logrotate.d/sudo是否配置了保留30天以上,且create 600 root syslog确保新日志权限正确 - 对已归档日志(如
/var/log/sudo.log.1.gz),抽样解压验证内容可读:zcat /var/log/sudo.log.1.gz | head -5 - 如有远程日志服务器,确认最近24小时日志是否同步成功(比如对比本地与远端行数)
四、结合 auditd 补充验证关键动作
sudo 日志可能被绕过(如直接调用 su 或 shell 内建命令),auditd 提供兜底证据:
- 运行
sudo ausearch -k sudo_exec -m execve -ts yesterday | aureport -f -i | head -10查看昨日所有经/usr/bin/sudo发起的 execve 调用 - 比对
sudo.log和ausearch输出:若某条高危命令只出现在 auditd 里,说明该用户可能绕过了 sudo 配置,需立即核查权限 - 重点关注
execve中的argc(参数个数)和argv(完整命令行),确认是否隐藏了真实意图

















