我刚刚将我的Apache服务器更新为在Ubuntu 13.04下运行的Apache / 2.4.6。我曾经有一个具有以下内容的虚拟主机文件:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
</Directory>


但是当我运行该文件时,我收到了“禁止访问。您无权访问/”

进行了一些谷歌搜索后,我发现要使我的网站再次正常工作,我需要添加以下行“ Require all grant”,以便我的虚拟主机看起来像这样:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
    Require all granted
</Directory>


我想知道这是否“安全”并且没有带来任何安全性问题。我在Apache的页面上读到,它“模仿了以前由'允许所有人'和'拒绝所有人'指令提供的功能。此提供程序可以采用'granted'或'denied'两个参数之一。例子将授予或拒绝对所有请求的访问。”

但没有说这是否是某种安全问题,或者为什么我们现在必须这样做,而过去您没有到。

评论

升级文档详细说明了“访问控制”更改。 httpd.apache.org/docs/2.4/upgrading.html

#1 楼

访问控制配置在2.4中进行了更改,并且旧配置在不进行某些更改的情况下是不兼容的。请参阅此处。

如果您的旧配置是Allow from all(没有阻止访问服务的IP地址),则Require all granted是新功能。

评论


更不用说,旧方法非常令人困惑,并且早就应该被更明智的方法所取代。

–迈克尔·汉普顿
13年10月30日,下午2:33

对于如此重大的更改,我希望能够提供某种支持,以自动迁移配置文件,或者至少显示所有需要更改的地方。

– Wolfgang Fahl
15年11月28日在2:16

看到要求全部被拒绝的工作示范会很高兴。

– Kraang Prime
16年4月15日在18:05

我认为这不等于允许所有人。您必须“合并”所有已通过其他现有Require规则授予的Require。在我的情况下,像在任何地方建议的那样盲目转换配置时,将忽略现有的Require有效用户。这是可能发生的最糟糕的事情...

– rudimeier
16 Sep 14'在12:34

对OP的问题有一个正确的答案将是很好的。 “一切都允许”不是很令人满意。

– Sharcoux
17年5月16日在18:31

#2 楼

我知道这是一篇过时的文章,但是我认为我可以使用我经常使用的功能示例来提供更多帮助!

在Apache 2.2中将是:

    <Location />
       Order deny, allow
       allow from all
    </Location>
    <Location /adm>
        Order deny, allow
        deny from all
        allow from myniceip
    </Location>
    <Location /disabled>
        Order deny, allow
        deny from all
    </Location>


在Apache 2.4中将是:

   <Location />
       require all granted
    </Location>
   #Note that you dont need to use require all denied
   #to require only a group of ips.. 
    <Location /adm>
        require ip myniceip
    </Location>
    <Location /disabled>
        Require all denied
    </Location>


使用htacess身份验证时请务必小心,此新语法可能会做一些不好的预料之外的事情,如果您遇到这种情况,请阅读:
https://unix.stackexchange.com/questions/413309/ apache-2-4-想让我决定需要一个有效的ip或一个需要有效的用户,你应该没事!

评论


对我来说,require all的存在阻止了HTTP身份验证的正常工作,因此感谢您提供的信息。

–authentictech
19年6月17日在17:47



@authentictech不仅要求所有授予的权限都可以破坏它。如果未正确使用RequireAll或RequireAny,则可以使用此新语法完全破坏预期的身份验证。请阅读:unix.stackexchange.com/questions/413309/…。感谢您的反馈。

–卢西亚诺·安德雷斯·马蒂尼(Luciano Andress Martini)
19年6月17日在17:57