Apache基于目录的访问控制需三层协同:Apache配置(如<Directory>配合Require、FilesMatch)、Linux文件权限(如chmod 755/chown apache)及SELinux上下文(如semanage设置),缺一不可。

在 Linux 中配置 Apache 实现基于目录的访问控制,核心是通过 <Directory> 指令块配合系统文件权限与 Apache 访问规则协同完成。不是单靠一条指令就能生效,而是三层配合:Apache 配置控制访问行为、Linux 文件权限决定能否读写、SELinux(如启用)需额外适配上下文。
上传类目录(如 /var/www/html/uploads)要特别防护
这类目录允许用户上传文件,但绝不能执行脚本。配置重点是:
- 禁用目录索引,防止文件列表泄露
- 明确禁止解析
.php、.py、.sh等可执行后缀 - 允许读取静态文件(如图片、PDF),但不开放写权限给 Web 进程以外的用户
示例配置(放入 httpd.conf 或虚拟主机配置中):
<Directory "/var/www/html/uploads">
Options -Indexes -ExecCGI
AllowOverride None
Require all granted
<FilesMatch "\.(php|pl|py|jsp|asp|sh|cgi|rb|exe)$">
Require all denied
</FilesMatch>
</Directory>注意:路径必须为绝对路径;该块需嵌套在 <VirtualHost> 内才生效。
普通网站目录(如 /var/www/html/admin)限制访问来源
适用于后台、配置页等敏感路径,常用 IP 或域名白名单控制:
- 只允许内网或运维 IP 访问
- 不依赖
.htaccess,直接在主配置中定义更安全
示例(仅允许 192.168.10.0/24 和 localhost):
<Directory "/var/www/html/admin">
Require ip 192.168.10.0/24
Require local
</Directory>若用旧版 Apache 2.2,需改用 Order allow,deny + Allow from 语法,但 2.4+ 推荐统一用 Require。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
禁止访问特定子目录(如代码类、配置类目录)
比如 /inc、/config、/.git 这类不应被 Web 直接访问的路径,应彻底拒绝:
- 使用
<Directory>块明确 deny - 支持通配符匹配多个同类目录
示例(禁止所有 inc 子目录):
<Directory "/var/www/html/*/inc">
Require all denied
</Directory>也可用 <LocationMatch> 对 URL 路径正则匹配,例如屏蔽 .env 文件:
<LocationMatch "\.(env|htaccess|log)$">
Require all denied
</LocationMatch>系统级权限必须同步到位
Apache 配置只是“门禁”,真正起作用还要看 Linux 权限:
- 上传目录需对 Apache 进程用户(如
www-data或apache)有写权限:chown www-data:www-data /var/www/html/uploads chmod 755 /var/www/html/uploads
- 所有静态资源文件建议设为
644,目录设为755;避免给组或其他用户写权限 - 若启用了 SELinux,需确认上下文正确:
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/uploads(/.*)?" restorecon -Rv /var/www/html/uploads
配置完务必重启服务并验证:
systemctl restart httpd tail -f /var/log/httpd/error_log
观察是否有权限拒绝或模块加载错误。测试时用不同 IP、不同后缀文件访问,确认规则按预期生效。

















