我想为 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-group
以ldap-user
获得/path/
准确的问题描述。
答案1
我遇到了同样的问题,通过寻找,我发现了处理这种情况的 apache 指令 AuthMerging。
这文档表示默认值为AuthMerging Off
(最后一个授权是唯一的),但上述效果似乎暗示该值为And
(最后一个授权限制前一个授权)。另一种可能性是Or
(最后一个授权扩展前一个授权)。在我的例子中,这是我想要的值,并且在较低级别内Or
添加指令时它起作用了。Auth;Merging Or
Location
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 兼容,但我相信这种方法会起作用。