【问题标题】:Can the Apache <Location> directive be safely used to configure access to a server?可以安全地使用 Apache <Location> 指令来配置对服务器的访问吗?
【发布时间】: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.

我想知道使用&lt;Location /&gt; 是否可能是要求对特定虚拟主机进行身份验证访问的一种方式:

<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.

这让我想知道 不应该 是否是对 &lt;Location&gt; 指令的一般建议,以及在某些情况下 &lt;Location /&gt; 指令是否可以被用作例外 允许访问,或者换句话说,Apache &lt;Location&gt; 指令可以安全地用于配置对服务器的访问吗?

【问题讨论】:

    标签: apache2 basic-authentication http-authentication digest-authentication


    【解决方案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.

    我的理解是,因为任何&lt;Location&gt; 指令都可能推翻任何&lt;Directory&gt; 指令[1],所以限制最少的&lt;Location&gt; 指令的限制不得低于限制最严格的&lt;Directory&gt; 指令整个服务器

    从合理的&lt;Directory /&gt; 默认Require all denied 开始并遵循上述规则将要求任何&lt;Location&gt; 指令的限制性不低于Require all denied,这当然会使根本无法访问服务器.

    还要注意&lt;Location&gt; 指令的目的是配置文件系统之外的资源。

    底线是对于任何可能触及文件系统的请求,对于可能适用于任何这些请求的任何&lt;Location&gt; 指令,适用的&lt;Location&gt; 指令不得包含Require 语句。[ 2]

    [1]:例如,使用符号链接。
    [2]:可以使用文件系统权限或 apparmor 等工具来缓解通过在某些 &lt;Location&gt; 指令中包含 Require 语句打开的安全漏洞,但请记住 Defense In Depth 的原则。

    【讨论】:

      猜你喜欢
      • 2018-11-08
      • 1970-01-01
      • 2015-06-21
      • 2014-04-26
      • 2011-01-22
      • 2012-03-12
      • 2023-01-26
      • 1970-01-01
      • 2015-06-26
      相关资源
      最近更新 更多