Apache2:Location 中嵌套的 require 语句

Apache2:Location 中嵌套的 require 语句

我想为 URL 的不同级别设置不同的 LDAP 授权规则。这是当前使用的配置

    <Location />
            AuthType Basic
            AuthName "Foo"
            AuthBasicProvider ldap
            AuthLDAPURL "..."
            AuthLDAPBindDN  "..."
            AuthLDAPBindPassword "..."
    </Location>

    <Location />
            Require ldap-group cn=foo,ou=Groups,dc=com,dc=company
    </Location>

    <Location /path/>
            Require ldap-user bar
    </Location>

问题是/path/ 继承规则来自/。因此,用户bar要想访问,/path/他还必须属于该foo组。

如何配置用户以便无​​需成为组成员bar即可访问?/path/foo


编辑:改为ldap-groupldap-user获得/path/准确的问题描述。

答案1

我遇到了同样的问题,通过寻找,我发现了处理这种情况的 apache 指令 AuthMerging。

文档表示默认值为AuthMerging Off(最后一个授权是唯一的),但上述效果似乎暗示该值为And(最后一个授权限制前一个授权)。另一种可能性是Or(最后一个授权扩展前一个授权)。在我的例子中,这是我想要的值,并且在较低级别内Or添加指令时它起作用了。Auth;Merging OrLocation

Directory也许和部分的默认值不同Location,但我没有发现任何相关信息。

答案2

我的理解(我只是努力寻找可靠的支持文档)是 Location 指令是累积的,因此您实际上是在应用两个 Require 指令。如果您做了这样的事情会怎么样:

<LocationMatch "/[^path]">
    Require ldap-group cn=foo,ou=Groups,dc=com,dc=company
</Location>

<Location /path/>
    Require ldap-group cn=bar,ou=Groups,dc=com,dc=company
</Location>

您必须检查该正则表达式是否与 apache 兼容,但我相信这种方法会起作用。

相关内容