日志权限如何禁止篡改

wen 开源项目 28

本文目录导读:

日志权限如何禁止篡改

  1. 文件系统属性与权限锁定(最核心)
  2. 系统层面的安全加固
  3. 应用层面的防护(Web服务、数据库等)
  4. 网络层面的防篡改(安全日志服务器)
  5. 监控与告警(发现篡改)
  6. 针对特权用户的特殊防御
  7. 综合落地建议(分步执行)

要有效禁止日志权限被篡改,需要从操作系统层面、应用层面、监控审计层面三个维度进行加固,以下是分层的具体方案,按安全强度从高到低排列,适用于 Linux 系统(Windows 类似):


文件系统属性与权限锁定(最核心)

1 使用 chattr 设置不可变属性(Linux)

这是最直接、最有效的方法,即使 root 用户(除非先移除该属性)也无法修改或删除日志文件。

# 对日志文件设置 i 属性(不可变)
chattr +i /var/log/secure
# 对目录设置 a 属性(仅追加,不能删除或重写已有内容)
# 适用于日志轮转目录,新日志可以追加
chattr +a /var/log/myapp/
  • +i (immutable): 文件不能被删除、重命名、修改、创建硬链接。
  • +a (append only): 只能在文件末尾追加数据,不能修改或删除已有内容。

⚠️ 注意chattr 需要 CAP_LINUX_IMMUTABLE 权限,通常只有 root 可操作,如果需要修改日志规则,需先 chattr -i 移除属性。

2 最小化权限(文件系统级别)

  • 文件本身chmod 640600(所有者 rw,组 r,其他无)。
  • 目录chmod 750700(防止其他用户列出或进入目录)。
  • 所有者:确保日志文件属于 syslogroot 或专用服务用户,不要用 nobody
chown root:adm /var/log/secure
chmod 640 /var/log/secure
chmod 750 /var/log

系统层面的安全加固

1 强制访问控制(MAC)—— SELinux / AppArmor

即使黑客获得 root 权限,MAC 策略可以阻止其破坏日志。

  • SELinux:确保 auditdrsyslogdsyslog-ng 的域(Domain)被正确限制,不允许其他进程修改日志。
    # 确认日志相关服务运行在正确域
    ps -eZ | grep syslog
    # 使用 audit2allow 确保规则正确
  • AppArmor:类似,可在 /etc/apparmor.d/ 中定义严格的配置文件。

2 使用 systemd-journald 的持久存储与限制

  • 将日志集中到 /var/log/journal/,并设置目录权限为 755,文件为 640
  • /etc/systemd/journald.conf 中:
    [Journal]
    Storage=persistent
    SyncIntervalSec=5s  # 减少丢失
  • 限制谁可以查看日志:journalctl --user 默认只允许所有者。

3 使用 auditd 监控篡改行为

配置 auditd 监控 chattrchmodchown 等系统调用对日志文件的修改:

# 监控 /var/log/* 目录下的文件属性修改
auditctl -w /var/log -p wa -k log_audit_monitor
  • 将审计日志发送到远程 Syslog 服务器(见下文)。

应用层面的防护(Web服务、数据库等)

1 日志轮转(logrotate)的权限控制

确保 logrotate 配置中:

  • 不创建对称权限(create 640 root adm)。
  • 禁用 copytruncate(尽量使用 create 模式,防止被利用截断)。
  • 配置 su root adm 让轮转以特定用户执行。

2 使用不可逆的日志签名(WORM 策略)

在某些合规场景(如 PCI-DSS),可使用 日志签名 工具(如 logsignsloggersyslog-ng 的加密签名):

  • 写入时同时写入 HMAC 或数字签名。
  • 篡改后将无法通过验证。
# syslog-ng 示例:使用 TLS 并 hash 日志

网络层面的防篡改(安全日志服务器)

1 远程日志服务器(Syslog over TLS)

将日志实时发送到一个独立、强安全的日志服务器,同时本地也保留。

  • 配置 /etc/rsyslog.conf/etc/syslog-ng/ 发送到远程:
    *.* @@logserver.example.com:514    # TLS 加密
  • 远程服务器使用更严格的 chattr +i 和硬件安全模块(HSM)。

2 WORM 存储(Write Once Read Many)

如果预算允许,使用专用的日志存储设备(如基于对象存储或磁带的 WORM 技术),硬件级别禁止覆盖/删除。


监控与告警(发现篡改)

即使无法阻止,发现也要快:

  1. 文件完整性监控(FIM):使用 TripwireAIDEOsqueryWazuh 监控 /var/log/ 下的文件校验和。
  2. 实时告警:通过 auditd(见上文)将修改事件推送到 SIEM(如 Splunk、ELK)并设置告警。
  3. 日志量异常检测:如果日志文件突然变小或停止增长,触发告警。

针对特权用户的特殊防御

1 临时移除 root 的特定特权

使用 capabilities 限制 root 的部分能力:

# 移除 root 对特定文件的 chattr 能力(需要在容器级别或通过 seccomp 实现,复杂)

在生产环境,可结合 sudo 日志sudoreplay)和 堡垒机 记录所有 root 操作。

2 使用不可修改的挂载选项

将日志分区挂载为只读(除日志轮转瞬间外):

mount -o remount,ro /var/log   # 仅适用于静态日志收集完毕后的历史分区

综合落地建议(分步执行)

优先级 措施 效果
1 对关键日志文件执行 chattr +i 阻止 90% 的篡改(包括 root 误操作)
2 配置远程日志服务器(Syslog over TLS) 即使本地日志被销毁,远程有备份
3 启用 auditd 监控日志文件访问和修改 发现篡改行为并告警
4 设置文件权限最小化 + Mac 策略 防止非授权用户篡改
5 定期检查 chattr 属性是否被移除 防御绕过

关键原则

  • 写后即锁:日志写入后立即转为只读(通过 chattr +i 或系统工具)。
  • 多层冗余:不要依赖单一防护,结合本地锁定、远程存储、监控三道防线。
  • 合规留存:根据法律要求(如《网络安全法》6个月)保留日志,防止被提前删除。

抱歉,评论功能暂时关闭!