日志目录权限需遵循最小权限原则:设合理属主属组(如root:syslog)、权限750,子目录按服务细化;挂载时启用noexec,nosuid,nodev;关键归档日志用chattr +i锁定;auditd监控异常写入。

系统日志目录(如 /var/log)必须可写,否则服务无法记录运行状态——但“可写”不等于“任意可写”。最小权限管理的核心是:只让真正需要写入的主体拥有写权限,其余一律收紧。这不是关掉写功能,而是精准授权。
明确日志写入主体,改属主和属组
大多数日志由特定用户或组产生:syslog、adm、systemd-journal 或应用专属账号(如 nginx、app)。不能依赖 root 写日志,更不能放任 others 有写权。
- 查当前日志目录归属:
ls -ld /var/log,常见错误是属主为 root、权限为 755(即 others 可读) - 设合理属主属组:例如日志轮转和收集由 syslog 用户负责,执行
sudo chown root:syslog /var/log - 设精确权限:
sudo chmod 750 /var/log——属主(root)全权、属组(syslog)可读可进、others 完全隔离 - 对子目录按需细化:如
/var/log/nginx应属nginx:nginx,权限设为750;/var/log/journal属root:systemd-journal,权限2755(含 sgid,确保新日志继承组)
禁用无关写行为,从内核层加固
chmod 控制“能不能写”,挂载选项控制“写了也无效”。对日志所在分区启用防护,防提权、防恶意脚本执行。
- 检查
/var/log所在挂载点:df /var/log,通常属于/或/var - 编辑
/etc/fstab,在对应行 options 字段加入:noexec,nosuid,nodev,relatime - 重载生效:
sudo mount -o remount /var(或/) - 验证:
mount | grep "$(df /var/log | tail -1 | awk '{print $1}')" | grep -E "(noexec|nosuid|nodev)",应有输出
锁定关键日志文件,防止篡改或清空
普通权限和挂载选项可被 root 绕过。对已归档、不再更新的关键日志(如审计日志、安全事件日志),用不可变属性彻底锁死。
- 例如锁定归档后的审计日志:
sudo chattr +a /var/log/audit/audit.log.1(仅追加) - 对已完成分析的长期归档日志:
sudo chattr +i /var/log/secure-20260920.gz - 验证:
lsattr /var/log/secure-20260920.gz应显示----i---------e--- - 注意:
+i后连 root 也无法修改或删除,操作前务必确认该文件已无写入需求
监控异常写入,形成闭环防御
权限设置是静态防线,审计监控是动态哨兵。一旦有人绕过常规机制尝试写日志目录,必须实时感知。
- 用 auditd 监控写操作:
sudo auditctl -w /var/log -p wa -k log_write - 配置规则持久化:将上述规则写入
/etc/audit/rules.d/log.rules,重启 auditd 生效 - 配合日志轮转工具(如 logrotate)设置 postrotate 脚本,自动校验关键日志哈希或触发告警
- 定期检查:
sudo ausearch -m write -i -ts today | grep log_write,排查非预期写入源










