linux日志审计需构建“谁、何时、从哪、做什么、结果如何”证据链,核心是分层采集、重点加固、结构化归集、异常聚焦;涵盖auth.log、audit.log、sudo.log等日志源,强化sudo落盘、auditd持久化规则、远程集中存储,并通过字段提取、高危信号告警和轻量工具链实现高效分析。

Linux日志审计不是简单翻看几个文件,而是围绕“谁、在何时、从哪来、做了什么、结果如何”建立可验证、难篡改、易分析的证据链。核心在于分层采集、重点加固、结构化归集、异常聚焦。
一、先理清关键日志源和对应行为
不同日志记录不同维度的行为,必须明确每类日志的职责边界:
- /var/log/auth.log 或 /var/log/secure:记录所有身份验证动作——SSH登录(成功/失败)、su切换用户、sudo提权、passwd改密、useradd等账户操作。这是溯源“谁干了什么”的第一现场。
- /var/log/audit/audit.log(auditd产出):内核级审计日志,可精确捕获系统调用(如execve执行命令)、文件访问(如读写/etc/shadow)、权限变更等,不受shell层干扰,防绕过能力强。
- /var/log/sudo.log(需手动启用):专用于记录sudo命令本身及完整参数,比auth.log更干净、更聚焦提权行为,适合与rsyslog联动发往远程服务器。
-
/var/log/btmp:仅存失败登录尝试,用
lastb查看,是发现暴力破解的第一线索。 -
/var/log/wtmp:记录所有成功登录和登出,用
last命令解析,可查会话时长与终端来源。
二、必须加固的三个基础环节
原始日志默认不具备审计可用性,需主动加固:
-
sudo日志强制落盘:编辑
/etc/sudoers,添加Defaults logfile="/var/log/sudo.log";确认该文件属主为root、权限600,并由rsyslog或auditd接管归档。 -
auditd规则持久化:不只用
auditctl临时加规则,要把关键规则写入/etc/audit/rules.d/custom.rules,例如:-a always,exit -F arch=b64 -S execve -F euid!=uid -k privilege_escalation-w /etc/passwd -p wa -k identity_change
然后运行augenrules --load生效。 - 远程日志集中存储:配置rsyslog将auth、sudo、audit等关键日志通过TCP或RELP协议实时转发至专用日志服务器,避免本地日志被删改。
三、日常分析要抓结构化字段和异常模式
人工扫日志效率低,应提取固定字段并设置触发条件:
- 从
/var/log/secure中用awk提取:时间、用户、源IP、动作(ssh/su/sudo)、命令(若含)、退出码,导出为CSV便于筛选。 - 定义高危信号自动告警:
— 非工作时间(22:00–06:00)出现sudo或root shell启动;
— 同一IP 5分钟内尝试登录≥3个不同账号;
— 普通用户首次执行strace、dd if=/dev/sda、inotifywait等敏感工具。 - 对关键路径做访问监控:用
auditctl -w /etc -p wa -k etc_access,或用inotifywait配合logger把变动写入独立日志。
四、工具链要简洁实用,不堆砌
不必强上ELK,中小规模可组合轻量工具:
- 查实时事件:
ausearch -m execve -i --start today | aureport -f -i - 筛登录异常:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-2)}' | sort | uniq -c | sort -nr - 生成周期报告:
logwatch --range 'between -7 days and today' --service sshd --output html - 远程日志校验:
sha256sum /var/log/sudo.log每日快照,比对哈希值是否被篡改。










