apache默认禁用目录浏览,需在中设options +indexes启用;须配合require控制访问权限,并用filesmatch或directory屏蔽敏感文件;selinux环境下还需确保httpd_sys_content_t标签正确。

Apache 部署静态网站时,目录浏览(Directory Listing)默认是关闭的;若需开启,必须显式启用,并同步配置访问控制与黑名单机制,否则可能暴露敏感文件结构或源码。关键在于 <directory></directory> 块中对 Options、Require 和 RedirectMatch 或 FilesMatch 的组合使用。
开启或禁止目录浏览
默认情况下,Apache 不允许列出目录内容。要启用目录浏览,需在对应目录配置中加入 Indexes 选项:
- 在
httpd.conf或虚拟主机配置中定位<directory></directory>(路径按实际 DocumentRoot 调整) - 确保包含:
Options +Indexes(加号表示启用该选项) - 若想禁用浏览,改用:
Options -Indexes或直接删掉Indexes - 注意:
Options None会关闭所有扩展功能,包括符号链接跟随、脚本执行等,慎用
设置基于 IP 或用户的访问权限
权限控制通过 Require 指令实现,替代旧版的 Order/Allow/Deny(Apache 2.4+ 推荐方式):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 仅允许本地访问:
Require local - 允许特定网段:
Require ip 192.168.1.0/24 - 拒绝某 IP:
Require all granted后接Require not ip 203.0.113.5(需配合<requireall></requireall>或用条件判断) - 结合认证时,可搭配
AuthType Basic和AuthUserFile实现密码保护
配置文件黑名单(禁止访问特定后缀或路径)
常用方式是用 <filesmatch></filesmatch> 或 <locationmatch></locationmatch> 阻止敏感资源被直接读取:
- 屏蔽常见配置文件:
<filesmatch> Require all denied </filesmatch> - 禁止访问
.git目录:<directory> Require all denied </directory> - 限制访问
/admin子路径(非物理目录时可用<location></location>):<location> Require ip 10.0.0.0/8 </location>
SELinux 与文件系统权限的协同检查
在 RHEL/CentOS 等启用了 SELinux 的系统中,即使 Apache 配置正确,也可能因上下文标签不匹配导致 403 错误:
- 确认文件和目录有正确的 httpd_sys_content_t 标签:
ls -Z /var/www/html/ - 批量修复:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?",再运行restorecon -Rv /var/www/html - 临时调试可设为宽容模式:
setenforce 0,但生产环境应保留 enforcing 并修正策略










