apache 2.4+ 中 精细化权限控制核心是路径精准绑定(须与 documentroot 绝对路径一致)、统一用 require 模型显式授权(默认拒绝)、配合 options 和 allowoverride 收紧功能、上传目录需 filesmatch 阻断脚本执行,并同步设置系统文件权限。

Apache 通过 <directory></directory> 配置限制特定目录访问权限,核心是路径绑定 + 指令组合 + 权限最小化。2.4+ 版本必须显式声明,否则默认拒绝所有请求;旧版的 Order/Allow/Deny 已废弃,统一使用 Require 模型。
路径必须精准匹配 DocumentRoot
<directory></directory> 块只对当前虚拟主机生效,路径必须与 DocumentRoot 完全一致(建议统一不加末尾斜杠)。例如:
- 若
DocumentRoot /var/www/example.com,就写<directory></directory> - 不能简写为
<directory></directory>——这会匹配其他站点,且不作用于当前主机 - 子目录如上传路径需单独定义:
<directory></directory> - Apache 按最长路径匹配,多个
<directory></directory>共存时,/var/www/example.com/uploads优先于/var/www/example.com
用 Require 控制谁能访问
Require 是唯一授权机制,多条规则默认“或”关系(满足任一即可):
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
Require all granted:开放访问(仅限可信环境) -
Require ip 192.168.1.0/24:仅允许可信内网段 -
Require local:只允许本机(127.0.0.1 和 ::1) -
Require not ip 203.0.113.99:黑名单单个 IP(需配合<requireall></requireall>实现“且”逻辑) - 要同时满足多个条件,比如“允许所有但排除某 IP”,必须用容器:
<requireall><br> Require all granted<br> Require not ip 192.168.5.100<br></requireall>
Options 和 AllowOverride 要按需收紧
这两个指令不控制“谁可访问”,而是控制“能做什么”,直接影响攻击面:
-
Options -Indexes +FollowSymLinks:禁用目录列表,允许符号链接(防结构泄露) -
Options None:最严模式,禁用所有扩展(推荐静态资源目录) -
AllowOverride None:禁止 .htaccess 覆盖,提升性能与安全(生产环境首选) -
AllowOverride All:仅在真需动态覆盖时启用,并确保 .htaccess 内容可信
敏感目录要额外阻断脚本执行
仅靠 Require 不足以防护上传目录或配置目录,必须叠加脚本拦截:
- 对
/uploads目录,添加:<filesmatch><br> Require all denied<br></filesmatch>
- 搭配
Options -ExecCGI -Includes,防止 CGI 或 SSI 执行 - 系统文件权限同步设为
www-data:www-data,文件chmod 644、目录chmod 755 - 后台路径(如
/admin)建议额外加Require valid-user做身份认证










