关键在于构建多层防御:用chattr +i锁定日志实现文件系统级不可变防护,配合chmod 640/chown root:adm严格权限控制、auditd实时审计操作、rsyslog TLS加密外发至远程服务器及SHA256哈希存证。
防范恶意修改与日志删除,不能只靠“设个权限”或“关个服务”,关键在于构建多层防御:让攻击者改不动、删不了、藏不住、逃不掉。
锁定关键日志文件(文件系统级防护)
即使获得 root 权限,chattr +i 也能阻止对文件的任何写入、重命名或删除操作,这是对抗清空内容和直接删除最硬核的手段。
- 对核心日志启用不可变属性:sudo chattr +i /var/log/auth.log /var/log/secure /var/log/messages /var/log/audit/audit.log
- 注意:加锁前需停止相关服务(如 rsyslog、auditd),否则日志写入会失败;轮转后新生成的日志文件(如 messages.1)也需手动加锁
- 临时解除用 chattr -i,仅限维护窗口内操作,完成后立即恢复
- 验证是否生效:lsattr /var/log/auth.log 应显示 i 标志
严格控制访问权限与所有权
权限是第一道防线,松散设置等于主动放行。默认 644 权限允许所有用户读取,组权限若开放过宽,风险更高。
- 统一属主属组:sudo chown root:adm /var/log/*.log(Ubuntu/Debian)或 root:syslog(RHEL/CentOS)
- 收紧文件权限:sudo chmod 640 /var/log/auth.log(root 可读写,adm 组可读,其他用户无权)
- 加固日志目录:sudo chmod 750 /var/log,防止非 root 用户在该目录下创建或覆盖同名文件
启用 auditd 实时审计日志操作
权限和属性负责“守”,auditd 负责“察”。它能记录谁、何时、用什么系统调用(open/write/unlink)动了日志文件,留下不可抵赖的操作铁证。
- 安装并启用:sudo apt install auditd && sudo systemctl enable --now auditd(Debian/Ubuntu)
- 添加监控规则(写入 /etc/audit/rules.d/log-protect.rules):
-w /var/log/ -p wa -k log_access
-a always,exit -F arch=b64 -S unlink,unlinkat,rename,renameat -F dir=/var/log/ -k log_deletion - 重载规则:sudo augenrules --load,之后所有删、改、截断行为都会在 /var/log/audit/audit.log 中留下完整记录(含 UID、时间戳、调用栈)
外发至远程日志服务器并做哈希存证
本地防护再强,也挡不住整机沦陷。真正防抵赖,靠的是攻击者无法触及的第三方存证。
- 使用 rsyslog 配置 TLS 加密转发,目标为独立、加固的远程日志服务器(如 ELK 或专用 syslog-ng server),启用双向证书认证
- 每日对主日志生成 SHA256 哈希,输出到只读挂载的 NFS 或对象存储:
find /var/log -name "*.log" -mtime -1 -exec sha256sum {} ; >> /mnt/readonly/loghash-$(date +%F).txt - 配合 AIDE 工具定期扫描文件完整性,检测未授权变更