应采用分层防护:对活跃日志用chattr +a实现仅追加(允许>>、禁止>和truncate),对归档日志立即chattr +i彻底冻结,再配合/var/log目录755权限、属主root:syslog及auditd实时监控写入行为。

锁定系统关键日志文件防篡改,不能只靠“不让删”——因为日志必须持续写入,+i(不可变)会直接导致服务崩溃。真正可行的方案是:对当前活跃日志用 +a(仅追加)+ 权限管控,对已轮转归档的日志立即加 +i(彻底冻结),再辅以目录权限与监控闭环。
给活跃日志设 +a:允许追加,禁止覆盖和清空
+a 是日志场景最匹配的属性,它让内核只接受带 O_APPEND 标志的写入(即 >>),拒绝所有截断、覆盖、随机修改操作:
- 执行命令:
sudo chattr +a /var/log/secure(同样适用于/var/log/messages、/var/log/auth.log等) - 验证生效:
lsattr /var/log/secure应显示类似-----a---------- - 测试通过:
echo "$(date) test" >> /var/log/secure成功 - 测试拦截:
echo "reset" > /var/log/secure或truncate -s 0 /var/log/secure均报Permission denied
对归档日志加 +i:彻底冻结,防删防改防重命名
logrotate 轮转出的旧日志(如 /var/log/secure.1、/var/log/messages.2.gz)不再写入,应立即锁定:
- 在
logrotate的postrotate脚本中加入:chattr +i "$1"(注意需 root 权限) - 手动补锁示例:
sudo chattr +i /var/log/secure.1 - 验证:
lsattr /var/log/secure.1显示含i,此时rm、mv、echo >全部失败,返回Operation not permitted
配合目录与权限控制,堵住绕过缺口
+a 和 +i 都不防目录级误操作,必须同步收紧外围:
-
/var/log目录权限设为755,属主root:syslog(或root:adm),禁止其他用户写入 - 确保日志服务(如
rsyslog或systemd-journald)是唯一写入进程,禁用普通用户直接echo >> - 挂载
/var/log所在分区时,避免使用noatime,nodiratime外的宽松选项;禁用world-writable
加一层运行时监控,及时发现异常行为
属性锁是静态防护,auditd 可捕获谁、何时、试图怎么动日志:
- 添加审计规则:
sudo auditctl -w /var/log/ -p wa -k log_protect - 重点关注:
/var/log/auth.log、/var/log/journal、/var/log/secure - 定期检查:
sudo aureport -f -i --key log_protect,筛查非预期 UID 或高频写入 - audit 日志本身必须独立存储或外发,不能和被监控日志共存同一磁盘分区


















