我有一个 apache 2.4 服务器,为本地网络用户提供 Kerberos 身份验证。现在我需要允许公众在没有身份验证的情况下访问它,但仍然需要本地网络的身份验证。
如果我只是删除“需要有效用户”指令,则本地用户不会进行身份验证。
如果我允许一个公共 IP,一切都会完美运行,本地用户将获得身份验证,来自该 IP 的远程用户将获得访问权限:
<RequireAny>
Require ip 11.22.33.44
Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)
但如果尝试允许除 locallet 之外的所有人:
<RequireAny>
Require ip not 192.168
Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)
然后我得到“语法错误:负 Require 指令对指令没有影响”
如果我将排除嵌入到 RequireAll 中:
<RequireAny>
<RequireAll>
Require ip not 192.168
<RequireAll>
Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)
然后我收到错误“RequireAll 指令仅包含否定授权指令”。
同样,添加
<RequireAny>
<RequireNone>
Require ip 192.168
<RequireNone>
Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)
给出错误“RequireNone 指令对指令没有影响”。
那么这样的排除应该如何进行呢?
not
在指令中使用 来否定匹配时的一个微妙细节Require
是,它本身不能用于允许或拒绝请求,因为“not true”并不构成“false”。
因此,要使用否定来拒绝访问,该块必须具有一个可以评估为 true 或 false 的元素。
要创建 IP 地址黑名单而不是白名单,请使用以下构造:
<RequireAll>
# Block IP-addresses from 192.168.2.1 and the 193.37.0.0/16 and 10.9.8.0/24 networks
Require not ip 192.168.2.1 193.37 10.9.8
# Allow all other IP's
Require all granted
</RequireAll>
Run Code Online (Sandbox Code Playgroud)
要允许公共访问而无需身份验证,但仍需要本地网络身份验证,您将获得一个授权容器,例如:
<RequireAny>
# users from the ip-range localnet must be authenticated
<RequireAll>
Require ip "localnet"
Require valid-user
</RequireAll>
# users not from the ip-range localnet are allowed anonymous access
<RequireAll>
Require not ip "localnet"
Require all granted
<RequireAll>
</RequireAny>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4129 次 |
最近记录: |