DocumentRoot 安全基线要求其路径独立最小化、禁止存放敏感文件、显式配置Directory块限制选项与访问、封堵根目录及上级路径、严格管控文件权限与属主。
DocumentRoot 是 Apache 的核心路径起点,安全基线不是额外插件,而是对这个起点及其周边配置的系统性约束。配得对, 根目录就稳;配错一点,可能整个站点暴露在风险中。
不要放在系统根目录(如 /)、用户主目录(如 /home/www)或 Apache 安装目录(如 /usr/local/apache2/htdocs)下。推荐路径:
/var/www/example.com(Linux,权限归属 www-data:www-data)C:/inetpub/wwwroot/example.com(Windows,ACL 明确仅授予 Apache 进程)该目录只放运行所需文件:入口脚本(index.php)、静态资源(css/、js/)、必要配置模板。禁止存放日志、上传目录、备份包、数据库凭证文件。
DocumentRoot 对应的 <Directory> 不是可选——它是安全基线的第一道门。示例配置:
<Directory "/var/www/example.com">Options -Indexes -ExecCGI -IncludesAllowOverride NoneRequire all granted<FilesMatch ".(htaccess|env|log|bak|swp|sql|yml|yaml|json)$">Require all denied</FilesMatch></Directory>
关键点:
Options -Indexes:关掉目录列表,避免暴露结构AllowOverride None:禁用 .htaccess,防止运行时被覆盖规则Require all granted:仅允许访问,不开放写入或执行权限<FilesMatch>:精准拦截敏感后缀,比全局 deny 更可靠Apache 默认配置中常含危险的根目录开放段,必须显式封堵:
<Directory "/">AllowOverride noneRequire all denied</Directory>
再检查是否存在类似 Alias / .. 或 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 未加锁的配置。所有非 DocumentRoot 下的映射(如 Alias、ScriptAlias)都需单独配 <Directory>,且 Require all denied 为默认策略,只对明确路径放开。
操作系统层权限同样属于基线范畴:
750(Linux),组为 www-data,仅 Apache 用户可读+执行640,配置文件(如 .env)设为 600
/sbin/nologin)<Directory> 中必须加 php_flag engine off 或禁用解析不复杂但容易忽略