必须为每个虚拟主机在<VirtualHost>块内显式配置CustomLog和ErrorLog的绝对路径,使用域名前缀命名、预建目录并设750权限、属主root属组adm、文件权限640,配合logrotate按站点单独轮转。

把 Apache 日志输出到独立、受控的目录,是提升安全性的基础操作。核心目标是:隔离日志文件、限制访问权限、防止被攻击者覆盖或删除、避免与网站内容混放造成信息泄露。
为每个虚拟主机指定专属日志路径
不共用 /var/log/apache2/access.log 这类全局路径。在每个 <VirtualHost> 块中显式定义:
- 用
CustomLog指向带域名前缀的路径,例如:CustomLog /var/log/apache2/example.com_access.log combined - 用
ErrorLog单独配置错误日志:ErrorLog /var/log/apache2/example.com_error.log - 确保该目录(如
/var/log/apache2/)存在,且属主为root,属组为adm或www-data,权限设为750
禁止日志目录被 Web 访问
Apache 默认不会通过 HTTP 提供 /var/log/ 下的内容,但仍需双重防护:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确认
httpd.conf或站点配置中没有将日志目录映射为别名(Alias)或文档根(DocumentRoot) - 在全局配置中添加明确拒绝规则:
<Directory "/var/log/apache2"><br> Require all denied<br></Directory>
- 检查 SELinux(如启用)是否阻止 Apache 写入该路径,必要时运行:
semanage fcontext -a -t httpd_log_t "/var/log/apache2(/.*)?"<br>restorecon -Rv /var/log/apache2
设置严格的文件权限和归属
日志本身不是可执行内容,但写入过程必须可控:
- 日志文件应由 Apache 工作进程(如
www-data或apache)拥有写权限,但不能被其他用户读取:
权限建议为640(属主可读写,属组可读,其他无权) - 日志目录本身权限设为
750,属主root,属组adm(Linux)或wheel(CentOS),确保只有 root 和日志组能进入 - 避免使用
chmod 777或让日志目录属于www-data——这等于给攻击者开了后门
配合 logrotate 实现自动隔离与清理
轮转不仅防文件过大,更是安全控制点:
- 在
/etc/logrotate.d/apache2中为每个日志单独配置,例如:/var/log/apache2/example.com_*.log {<br> daily<br> missingok<br> rotate 30<br> compress<br> delaycompress<br> notifempty<br> create 640 www-data adm<br> sharedscripts<br>} -
create 640 www-data adm确保每次新建日志都继承正确权限和归属 - 轮转后的压缩归档(如
.log.1.gz)也应保留在同一受控目录下,不上传至 Web 可达位置

















