Apache访问控制是“谁进来、能做什么、看什么”三层防御体系,依赖Require显式授权、Options裁剪能力、文件/目录硬隔离及底层权限收紧。

Apache 的访问控制和目录权限管理不是“设个密码就完事”,而是围绕“谁可以进来、能做什么、看到什么”三层逻辑构建的防御体系。它依赖配置指令的精确组合,稍有疏忽就会让敏感路径暴露、脚本被滥用或配置被覆盖。
用 Require 显式定义访问白名单
Apache 2.4+ 彻底弃用旧版 Order/Allow/Deny,所有规则必须基于 Require 指令显式声明。不写 Require 并不等于“禁止”,而是继承父级策略,极易造成越权访问。
-
Require all denied:最严默认策略,适合后台管理目录(如
/admin)、配置备份目录、日志存放路径 - Require ip 192.168.10.0/24:限制内网运维访问,避免公网直接触达敏感接口
-
Require valid-user:搭配 Basic Auth 使用,但必须确保
AuthUserFile是绝对路径、不在 Web 可访问范围内(如别放在/var/www/html/.htpasswd) - 多条件“且”关系需包裹在
<RequireAll></RequireAll>中,例如“仅限某 IP + 必须认证”
裁剪 Options 指令,关闭执行与遍历能力
Options 不是功能开关列表,而是对目录行为能力的授权清单。默认开启的选项可能成为攻击入口。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Options -Indexes:禁用目录索引,防止
/uploads/或/backup/直接列出全部文件 - Options -ExecCGI -Includes -FollowSymLinks:上传目录、日志目录、静态资源目录必须加,阻断 CGI 执行、SSI 解析、符号链接跳转
- Options None:纯静态资源目录(如 CDN 镜像)可启用,彻底关闭所有扩展功能
- 切忌单独写
Options +Indexes,这会覆盖上级的-Indexes,导致意外暴露结构
拦截敏感文件与隔离高危目录
攻击者常直连 .git/config、.htaccess、backup.zip 等文件。单靠目录权限不够,必须精准匹配文件类型并拒绝访问。
- 全局添加文件级拦截:
<FilesMatch "\.(htaccess|htpasswd|ini|log|bak|swp|git|env)$">Require all denied</FilesMatch> - 对备份、版本库、日志等目录单独做硬隔离:
<Directory "/var/www/html/backups">Require all denied Options None</Directory> - 这些配置应置于
<VirtualHost>块内或主配置的全局<Directory>中,避免被 .htaccess 覆盖
收紧配置与运行时权限基础
再严密的访问规则,若底层权限失控,也会形同虚设。
- 配置文件(如
/etc/apache2/apache2.conf或/etc/httpd/conf/httpd.conf)权限设为 600,仅 root 可读写 - 认证文件(如
/etc/apache2/.htpasswd)权限设为 640,属组为 www-data 或 apache,禁止其他用户读取 - 网站根目录(如
/var/www/html)属主为 root,Web 进程用户(如 www-data)仅需执行+读取权限,禁止写入 - 禁用
AllowOverride All,生产环境统一设为 AllowOverride None,杜绝 .htaccess 分散配置带来的策略混乱和性能损耗

















