Apache日志安全权限应设为600、目录700,logrotate中需显式配置create 0600 apache apache,rotatelogs/cronolog须通过umask 0077确保权限,辅以noexec/nosuid/nodev挂载及SELinux/AppArmor加固。

Apache 日志默认由运行用户(如 apache、www-data 或 daemon)写入,但若权限设置过宽(比如 644 或目录 755),普通用户可能直接读取访问日志(含 IP、URL、Referer、User-Agent)或错误日志(含路径、模块报错、甚至调试信息),造成隐私与安全风险。
确保日志文件属主与最小权限
日志文件应归 Apache 运行用户所有,且仅该用户可读写,其他用户无权访问:
- 日志文件权限设为
600(即-rw-------),禁止组和其他用户读取 - 日志所在目录权限建议
700(drwx------),防止列目录或遍历 - 确认 Apache 进程用户(如
ps aux | grep httpd或grep "^User\|^user" /etc/httpd/conf/httpd.conf)与日志属主一致
在 logrotate 中强制设定权限
若使用 logrotate 管理日志,必须在配置中显式指定 create 参数的权限和属主:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在
/etc/logrotate.d/httpd中写明:create 0600 apache apache
(注意:不是644或省略create) - 避免使用
sharedscripts之外的全局create,防止误设其他日志 - 轮转后立即生效,无需重启 Apache
使用 rotatelogs 或 cronolog 时注意管道行为
这两者通过管道接收日志流,新文件由子进程创建,默认继承父进程 umask。需主动控制:
- 检查 Apache 主进程 umask(通常为
0022→ 文件默认644),不满足安全要求 - 推荐在启动前统一设置 umask:在 systemd service 文件(如
/usr/lib/systemd/system/httpd.service)中添加:UMask=0077
或在ExecStartPre中执行umask 0077 - 验证方式:轮转后执行
ls -l /var/log/httpd/access_*.log,确认权限为-rw-------
额外加固建议
仅靠文件权限还不够,配合系统级防护更稳妥:
- 将日志目录挂载为
noexec,nosuid,nodev(如在/etc/fstab中添加defaults,noexec,nosuid,nodev) - 启用 SELinux(RHEL/CentOS)或 AppArmor(Ubuntu),限制非 Apache 进程访问日志路径
- 禁用普通用户登录 shell(
/sbin/nologin)并限制其 home 目录访问,减少横向提权面

















