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每日快照,比对哈希值是否被篡改。






























