可以安全地使用 Apache <Location> 指令来配置对服务器的访问吗?
Posted
技术标签:
【中文标题】可以安全地使用 Apache <Location> 指令来配置对服务器的访问吗?【英文标题】:Can the Apache <Location> directive be safely used to configure access to a server? 【发布时间】:2013-09-23 22:39:01 【问题描述】:在我的 Apache 配置中,我首先拒绝访问整个文件系统:
<Directory />
Require all denied
</Directory>
然后,在每个虚拟主机的配置中,我允许不受限制的访问:
<VirtualHost ...>
<Directory /var/www/example.com/>
Require all granted
</Directory>
</VirtualHost>
或需要经过身份验证的访问:
<VirtualHost ...>
<Directory /var/www/example.com/>
AuthType Basic
AuthName "example.com"
AuthUserFile htpasswd
Require valid-user
</Directory>
</VirtualHost>
我在 Apache 文档中注意到:
For content that lives in the filesystem, use <Directory> and <Files>. An exception is <Location />, which is an easy way to apply a configuration to the entire server.
我想知道使用<Location />
是否可能是要求对特定虚拟主机进行身份验证访问的一种方式:
<VirtualHost ...>
<Location />
AuthType Basic
AuthName "example.com"
AuthUserFile htpasswd
Require valid-user
</Location>
</VirtualHost>
但 Apache 文档指出:
<Location> directives should not be used to control access to filesystem locations.
这让我想知道 不应该 是否是对 <Location>
指令的一般建议,以及在某些情况下 <Location />
指令是否可以被用作例外 允许访问,或者换句话说,Apache <Location>
指令可以安全地用于配置对服务器的访问吗?
【问题讨论】:
【参考方案1】:否。也来自 Apache 文档:
Pay particular attention to the interactions of Location and Directory directives; for instance, even if <Directory /> denies access, a <Location /> directive might overturn it.
我的理解是,因为任何<Location>
指令都可能推翻任何<Directory>
指令[1],所以限制最少的<Location>
指令的限制不得低于限制最严格的<Directory>
指令整个服务器。
从合理的<Directory />
默认Require all denied
开始并遵循上述规则将要求任何<Location>
指令的限制性不低于Require all denied
,这当然会使根本无法访问服务器.
还要注意<Location>
指令的目的是配置文件系统之外的资源。
底线是对于任何可能触及文件系统的请求,对于可能适用于任何这些请求的任何<Location>
指令,适用的<Location>
指令不得包含Require
语句。[ 2]
[1]:例如,使用符号链接。
[2]:可以使用文件系统权限或 apparmor 等工具来缓解通过在某些 <Location>
指令中包含 Require
语句打开的安全漏洞,但请记住 Defense In Depth 的原则。
【讨论】:
以上是关于可以安全地使用 Apache <Location> 指令来配置对服务器的访问吗?的主要内容,如果未能解决你的问题,请参考以下文章
从Apache Kafka到Apache Spark安全地读取数据