Apache目录级权限精细化配置核心是将Require授权逻辑绑定绝对路径的Directory块,禁用Order/Allow/Deny旧语法,配合Options裁剪功能、FilesMatch阻断脚本执行,并同步校验系统权限与配置语法。
Apache 目录级权限精细化配置,核心是把访问控制逻辑精准绑定到具体路径,同时兼顾系统层权限与配置层规则,避免过度放权或误拦请求。关键不在“全开”或“全关”,而在“按需授权、最小暴露”。
块必须嵌套在 内,且路径用绝对路径
它只对指定目录及其所有子目录生效,不跨虚拟主机。例如:
<VirtualHost *:80> DocumentRoot "/var/www/site1" <Directory "/var/www/site1/admin"> # 这里写的规则只影响 /admin 及其子目录 </Directory></VirtualHost>
Apache 2.4+ 统一使用 Require 模型,禁用 Order/Allow/Deny
旧语法(如 Order deny,allow)在 2.4 中已废弃,混用会导致配置失效或 500 错误。正确写法是:
Require all granted → 允许所有人访问 Require all denied → 拒绝所有人 Require ip 192.168.1.0/24 → 仅允许可信网段 Require local → 仅限本机(127.0.0.1 和 ::1) Require not ip 203.0.113.0/24 → 明确屏蔽某网段 Options 和 AllowOverride 要配合 Require 使用
它们不决定“能不能进”,但影响“能做什么”:
Options -Indexes:禁用目录列表,防止无 index 文件时暴露文件结构 Options +FollowSymLinks:允许跟随符号链接(需确认安全) AllowOverride None:禁止 .htaccess 覆盖配置,提升性能和可控性(生产环境推荐) AllowOverride All:仅在真需要动态覆盖时启用,如 WordPress 的重写规则 上传目录要单独设防,重点防脚本执行
不能只靠 Require,还得用 <FilesMatch> 阻断解析:
<Directory "/var/www/site1/uploads"> Require all granted <FilesMatch ".(php|pl|py|jsp|sh|cgi)$"> Require all denied </FilesMatch></Directory>
这样即使用户上传了 .php 文件,Apache 也不会执行它。
调试时先检查两层权限是否都通
ls -ld /var/www/site1 看目录权限是否为 755,属主组是否包含 Apache 运行用户(如 www-data) apachectl configtest 验证语法,再 systemctl reload apache2 生效 tail -n 20 /var/log/apache2/error.log,常提示具体被哪条 Require 拦住