我在 Debian 服务器上运行 Apache2。我的虚拟主机(目前只有一个)已配置在/etc/apache2/站点可用/默认并且运行良好:
# /etc/apache2/sites-available/default
<VirtualHost *:80>
ServerName domain.com
DocumentRoot /var/www/
<Directory />
AllowOverride None
Order Deny,Allow
Deny from all
</Directory>
<Directory /var/www/>
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
然而,通过查看文件/etc/apache2/conf.d/安全,我已经看到我们可以通过注释掉以下内容来阻止对文件系统根目录的访问(当没有 ServerName 匹配虚拟主机配置时可能特别有用):
# /etc/apache2/conf.d/security
<Directory />
AllowOverride None
Order Deny,Allow
Deny from all
</Directory>
当我这样做并重新启动 Apache 时,我的所有页面都返回 403 Forbidden 错误。我所寻找的只是阻止访问文件系统根目录并允许 VirtualHost“domain.com”返回 /var/www/ 中的页面。我误解了什么?有什么方法可以保护 Apache2 免受未经授权的目录访问?谢谢!
答案1
apache 2.4 中访问控制的方式已经改变。
看这个文件关于从 2.2 升级到 2.4。值得注意的是:
在此示例中,所有请求都被允许。
2.2配置:
Order allow,deny
Allow from all
2.4配置:
Require all granted
答案2
您所影响的位置与给定虚拟主机的 DocumentRoot 相关。
因此如果 DocumentRoot 是 /var/www,则 / 将影响 /var/www 中的文件。
将 Directory 视为 DocumentRoot/Directory。Apache 应该已经禁止 DocumentRoot 之外的内容。