Linux日志防篡改需“本地锁死+运行时监控+离线验证”三层联动:用chattr +i锁死旧日志、权限最小化管控活跃日志;auditd实时监控关键路径写入与属性变更;journalctl --verify与AIDE每日校验哈希及完整性;TLS加密外发、GPG签名+WORM归档确保传输与存储不可抵赖。

Linux日志防篡改不是靠单一手段能解决的,核心在于“本地锁死 + 运行时监控 + 离线验证”三层联动。光设权限或只做加密,攻击者仍可能绕过;只有让日志在写入、运行、归档各阶段都留有可追溯、可校验的痕迹,才算真正落地。
用 chattr + 权限最小化锁死日志文件
这是最直接有效的操作系统级防护,不依赖服务进程,连 root 也无法绕过:
- 对已轮转的旧日志(如 /var/log/auth.log.1)立即执行 sudo chattr +i,文件将不可修改、删除、重命名,除非显式执行 chattr -i(该操作必须严格审计并限制执行权限)
- 对当前活跃日志(如 /var/log/auth.log),设为 root:adm 所有者、权限 640;确保 syslog 或 systemd-journald 是唯一写入进程
- /var/log 目录本身禁用 world-writable 挂载选项,权限保持 755,禁止普通用户写入
用 auditd 实时监控日志文件行为
权限和属性只能防“事后篡改”,auditd 能捕获“谁、何时、以何种方式”试图动日志:
- 添加规则监控关键路径:auditctl -w /var/log/ -p wa -k log_access(监控写入与属性变更)
- 特别关注 /var/log/journal、/var/log/auth.log、/var/log/secure 等敏感路径
- 将 audit 日志独立输出到远程 SIEM 或加密挂载点,避免与被监控日志共存同一分区
- 配合 aureport -f -i 定期生成文件访问报告,筛查异常 UID/GID 或非预期时间窗口的操作
用 journalctl --verify + AIDE 构建离线验证闭环
密封与签名不是摆设,要定期跑验证,形成证据链:
- 启用 systemd-journald Seal=yes 后,每天定时执行 journalctl --verify,检查输出是否全为 “PASS”;失败项会标出偏移位置,可快速定位篡改段
- 对传统文本日志(如 auth.log、messages)部署 AIDE:初始化数据库后,每日比对哈希值,配置包含 sha256、perm、inode 等关键属性
- AIDE 数据库文件本身也需设 chattr +i,并备份至离线介质或 WORM 存储
用 TLS + GPG 确保传输与归档不可抵赖
本地防护再强,日志一旦传出就可能被截获或替换,必须保障通道与归档体可信:
- rsyslog 或 syslog-ng 外发日志必须走 TLS,禁用明文 514 端口;服务端强制双向证书认证,客户端校验 CA 和 CN
- logrotate 的 postrotate 脚本中集成 GPG 签名:gpg --detach-sign --armor /var/log/nginx/access.log.1
- 签名文件与日志一同上传至异地 WORM 存储(如 S3 Object Lock 或磁带库),确保归档后无法删除或覆盖


















