Apache虚拟主机目录权限配置核心是为每个DocumentRoot单独设置匹配的块,路径须完全一致且禁用Indexes、慎用AllowOverride、明确Require策略,并在SELinux系统中同步调整上下文。

在 Linux 中配置 Apache 虚拟主机的目录权限,核心是让每个虚拟站点拥有独立、安全且可维护的访问控制策略。关键不在于“统一放开”,而在于按需最小授权——既保障网站正常运行,又防止越权访问或信息泄露。
明确 DocumentRoot 与对应 块
每个虚拟主机必须定义自己的 DocumentRoot(如 /var/www/site-a),然后紧接着用 ,否则所有站点共用一套规则。
- 在
/etc/httpd/conf/httpd.conf或/etc/apache2/sites-enabled/下的虚拟主机配置文件中,确保每段内含匹配的DocumentRoot和 - 路径必须完全一致(末尾不加斜杠),且区分大小写;建议使用绝对路径,避免歧义
- 示例:
<virtualhost> ServerName site-a.example.com DocumentRoot /var/www/site-a <directory> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </directory></virtualhost>
按用途精简 Options 权限
Options 控制目录内允许启用的功能,过度开放会带来风险。生产环境应显式禁用非必需项:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
-Indexes:禁止自动列出目录内容(防止源码或敏感文件被遍历) -
+FollowSymLinks:仅当站点确实依赖符号链接时才启用(如共享资源库) - 避免
ExecCGI或Includes,除非明确需要 SSI 或 CGI 脚本 - 不要用
Options All—— 它会隐式开启Indexes和ExecCGI等高危选项
限制 .htaccess 生效范围与能力
AllowOverride 决定该目录下 .htaccess 文件能否覆盖服务器配置。灵活 ≠ 放任:
-
AllowOverride None:最安全,禁用所有覆盖,所有规则必须写在主配置中 -
AllowOverride AuthConfig:仅允许认证相关指令(如Require、AuthType) -
AllowOverride FileInfo:仅允许 URL 重写(RewriteRule)、MIME 类型等,适合 CMS 的伪静态需求 - 避免
AllowOverride All,尤其对上传目录、缓存目录或用户可写目录
细化访问控制(Require)与 SELinux 兼容
Apache 2.4 使用 Require 指令替代旧版的 Order/Allow/Deny。同时,在 CentOS/RHEL 系统中,SELinux 可能拦截合法请求:
- 基础放行:
Require all granted(允许所有 IP) - 限制来源:
Require ip 192.168.1.0/24或Require host example.com - 若修改了默认网站根目录(如改到
/home/www/site-b),必须同步调整 SELinux 上下文:semanage fcontext -a -t httpd_sys_content_t "/home/www(/.*)?"restorecon -Rv /home/www - 上传目录(如
/var/www/site-a/uploads)若需写入,还需额外赋予httpd_sys_rw_content_t类型










