linux日志审计需覆盖“谁、何时、从哪来、做什么、结果如何”五维度,核心日志源为auth.log、audit.log、sudo.log和btmp;启用auditd并配置execve规则,加固权限与远程转发,结合ausearch等命令快速排查。

Linux日志审计不是加几条命令就完事,关键在覆盖“谁、在什么时间、从哪来、做了什么、结果如何”这五个维度,同时防绕过、防篡改、可追溯。
抓准核心日志源,别只盯 history
~/.bash_history 可被清空、绕过(如 ssh user@host 'ls')、不记录非交互式操作。真正可信的是系统级日志:
- /var/log/auth.log 或 /var/log/secure:记录所有 PAM 认证事件——SSH 登录、su 切换、sudo 执行、密码修改、用户增删,含源 IP、用户名、时间戳、成功/失败状态
- /var/log/audit/audit.log(auditd):内核级捕获 execve 系统调用,能还原完整命令行(包括参数和脚本路径),无论是否通过 shell、是否用了 python -c 或 sh -c,都逃不过
- /var/log/sudo.log:若已配置 Defaults logfile,在 sudoers 中显式指定,内容比 auth.log 更聚焦提权动作,含命令原始字符串
- /var/log/btmp:用 lastb 查看所有失败登录尝试,是暴力破解的第一线索
启用 auditd —— 最可靠的操作捕获方式
它工作在 syscall 层,普通用户无法禁用或绕过。基础配置三步走:
- 确保服务运行:systemctl enable --now auditd
- 添加持久化规则(写入 /etc/audit/rules.d/cmd.rules):
-a always,exit -F arch=b64 -S execve -k cmd_exec
(32 位系统用 b32;-k 后的标签便于后续过滤) - 加载规则:augenrules --load,再验证:auditctl -l | grep cmd_exec
注意:该规则会记录所有命令执行,建议加 -F uid!=0 过滤掉 root 自身维护行为,避免日志爆炸。
加固已有日志通道,防止篡改与丢失
光有日志不够,得确保它真实、完整、不可抵赖:
- 给 /var/log/sudo.log 设权限:chmod 600 /var/log/sudo.log; chown root:root /var/log/sudo.log
- 将关键日志(auth.log、audit.log、sudo.log)通过 rsyslog 推送到远程日志服务器,避免本地被删或覆盖
- 在 /etc/rsyslog.conf 中启用 UDP/TCP 转发,例如:*.* @192.168.10.100:514(TCP)或 *.* @@192.168.10.100:514
- 对本地敏感日志目录(如 /var/log/audit/)设 sticky bit 或使用 chattr +a 限制仅追加
日常可用的快速排查方法
不用翻原始日志大海,几个命令就能定位问题:
- 查某用户今天所有 sudo 行为:ausearch -m execve -ui $(id -u username) --start today | aureport -f -i | grep sudo
- 查所有失败登录:lastb -n 20 或 grep "Failed password" /var/log/auth.log | tail -20
- 查某 IP 的全部活动:grep "192.168.5.123" /var/log/auth.log | awk '{print $1,$2,$3,$9,$10,$11}'
- 导出结构化 CSV(供 Excel 或 SIEM 分析):awk '/sudo\[/ {print strftime("%Y-%m-%d %T"), $9, $11, $13}' /var/log/auth.log










