需结合ACL、chattr、审计与远程日志实现防篡改:1. 用setfacl限制非特权用户写入;2. 设default ACL确保新日志继承权限;3. 对关键日志用chattr +a/+i加固;4. 配合auditd监控、SELinux约束及远程转发。

要防止 /var/log 目录下的日志被未授权篡改,仅靠默认的 POSIX 权限(如 drwxr-xr-x)远远不够——普通用户或恶意进程仍可能删除、覆盖或清空日志文件。ACL(Access Control List)可提供更精细的控制,但需配合其他机制才能真正防篡改。核心思路是:**限制写入 + 防止删除 + 审计留痕**。
1. 为关键日志目录和文件设置只读 ACL(对非特权用户)
ACL 可以精确拒绝特定用户或组的写权限,即使他们属于 root 组或有父目录执行权。例如,禁止普通用户 alice 修改 /var/log/syslog:
- 先确认文件系统支持 ACL(通常 ext4/xfs 默认启用):
tune2fs -l /dev/sda1 | grep "Default mount options",应含acl - 设置 ACL 拒绝写入:
setfacl -m u:alice:- /var/log/syslog - 若需批量限制多个用户:
setfacl -m u:alice:rx,u:bob:rx,u:audit:rx /var/log/*.log - 注意:ACL 对目录本身生效时,不自动继承到新创建的日志文件;需配合
default ACL或日志轮转工具(如logrotate)配置 umask 和 create 指令
2. 启用 default ACL 确保新日志文件自动继承安全策略
日志服务(如 rsyslog、journald)或 logrotate 创建的新文件默认不受已有 ACL 影响。必须为 /var/log 目录设置 default ACL:
- 设置默认读+执行(禁止写)给常见用户组:
setfacl -d -m g:users:rx /var/log - 显式拒绝特定用户写权限(default 模式下不支持 deny 条目,故推荐用
mask控制最大有效权限):setfacl -d -m mask::rx /var/log - 验证:
getfacl /var/log应显示default:开头的条目;新建文件后运行getfacl确认继承生效
3. 结合 chattr + immutable 标志实现强防护(关键日志文件)
ACL 可被 root 用户修改或绕过,对高敏感日志(如 auth.log、secure),建议叠加文件属性锁:
- 临时锁定(需 root):
chattr +a /var/log/auth.log(仅允许追加)或chattr +i /var/log/auth.log(完全不可修改/删除,连 root 也需先-i) - 注意:
+i会阻止日志服务写入,仅适用于归档后的只读日志;生产中常用+a配合日志轮转 - 自动化脚本示例(logrotate 后追加):
postrotate\n chattr +a /var/log/auth.log\nendscript
4. 配合审计与监控形成闭环
权限设置只是第一道防线。必须检测异常行为:
- 启用 auditd 监控关键路径:
auditctl -w /var/log/ -p wa -k log_access,记录所有写、属性修改事件 - 检查 SELinux/AppArmor 策略是否限制日志服务以外的进程写入
/var/log - 定期校验日志完整性(如用
aide或tripwire监控文件哈希变化) - 将重要日志实时转发到远程 syslog 服务器,实现异地留存
ACL 是增强日志安全的有效手段,但不能单独“防篡改”。它需与文件属性锁、审计机制、最小权限原则及集中日志管理协同使用。实际部署时,优先保护高频篡改目标(如 auth.log、messages),并确保运维操作(如 logrotate)仍能正常执行。

















