我有一个在 Docker 容器中运行的 Apache2 服务器(httpd:2.4.54-bullseye)和一个 LDAP 服务器(Debian 11.1 上的 OpenLDAP slapd 2.4.57+dfsg-3)
我正在尝试使用mod_authnz_ldap
Apache 模块从 LDAP 验证某些用户。
以下是 Apache 的配置:
<AuthnProviderAlias ldap org>
AuthLDAPURL ldap://org.com/dc=org,dc=com?uid
</AuthnProviderAlias>
<VirtualHost _default_:80>
ServerAdmin webmaster@localhost
DocumentRoot /usr/local/apache2/htdocs
<Location "/">
AuthName "Apache2 LDAP Check"
AuthType Basic
AuthBasicProvider org
Require ldap-user me collegue1 collegue2
</Location>
</VirtualHost>
根据文档我应该只将 uids 放入 中Require ldap-user
。
日志显示身份验证已成功完成,但无法授权 中的任何用户Require ldap-user
!!
web_auth | [Tue Aug 30 09:09:13.594015 2022] [authz_core:debug] [pid 10:tid 139920102389504] mod_authz_core.c(815): [client 192.168.103.66:2189] AH01626: authorization result of Require ldap-user me collegue1 collegue2: denied (no authenticated user yet)
web_auth | [Tue Aug 30 09:09:13.594064 2022] [authz_core:debug] [pid 10:tid 139920102389504] mod_authz_core.c(815): [client 192.168.103.66:2189] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
web_auth | [Tue Aug 30 09:09:13.594137 2022] [authnz_ldap:debug] [pid 10:tid 139920102389504] mod_authnz_ldap.c(548): [client 192.168.103.66:2189] AH01691: auth_ldap authenticate: using URL ldap://org.com/dc=org,dc=com?uid
web_auth | [Tue Aug 30 09:09:13.599377 2022] [authnz_ldap:debug] [pid 10:tid 139920102389504] mod_authnz_ldap.c(630): [client 192.168.103.66:2189] AH01697: auth_ldap authenticate: accepting me
web_auth | [Tue Aug 30 09:09:13.599404 2022] [authz_core:debug] [pid 10:tid 139920102389504] mod_authz_core.c(815): [client 192.168.103.66:2189] AH01626: authorization result of Require ldap-user me collegue1 collegue2: denied
web_auth | [Tue Aug 30 09:09:13.599411 2022] [authz_core:debug] [pid 10:tid 139920102389504] mod_authz_core.c(815): [client 192.168.103.66:2189] AH01626: authorization result of <RequireAny>: denied
web_auth | [Tue Aug 30 09:09:13.599417 2022] [authz_core:error] [pid 10:tid 139920102389504] [client 192.168.103.66:2189] AH01631: user me: authorization failure for "/":
我是否遗漏了什么?
附言:当我使用时Require valid-user
一切都运行良好!
答案1
我是否遗漏了什么?
有可能!今天早上我稍微研究了一下这个配置,发现出现了与您描述的情况完全相同的情况。首先,我的测试配置如下所示:
<AuthnProviderAlias ldap example>
AuthLDAPURL ldap://ldap/ou=users,dc=example,dc=com?cn
AuthLDAPBindDN uid=authreader,ou=system,dc=example,dc=com
AuthLDAPBindPassword secret
</AuthnProviderAlias>
<Location "/">
AuthName "LDAP"
AuthType Basic
AuthBasicProvider example
Require ldap-user user1
</Location>
我有一个 LDAP 目录,其中dc=example,dc=com
包括cn=user1,ou=users,dc=example,dc=com
和cn=user2,ou=users,dc=example,dc=com
。
我LogLevel debug
在我的服务器中启用了调试日志记录(),并在身份验证尝试期间查看日志,我看到:
... AH01697: auth_ldap authenticate: accepting user1
... AH01626: authorization result of Require ldap-user user1: denied
这很有趣,因为它表明mod_authnz_ldap
正确地验证了用户身份。凭直觉,我替换了:
Require ldap-user user1
和:
Require user user1
令我惊讶的是,一切都正常了。这很好,但这是否意味着所有文档都是错误的?这似乎不太可能。据我所知,这与指令的使用有关AuthnProviderAlias
。
我尝试Require ldap-user user1
用进行替换Require example-user user1
,认为该ldap-
部分可能应该是提供商名称,但是失败了:
Unknown Authz provider: example-user
因此我尝试了不使用提供程序别名的配置:
<Location "/">
AuthLDAPURL ldap://ldap/ou=users,dc=example,dc=com?cn
AuthLDAPBindDN uid=authreader,ou=system,dc=example,dc=com
AuthLDAPBindPassword secret
AuthName "LDAP"
AuthType Basic
AuthBasicProvider ldap
Require ldap-user user1
</Location>
这还工作正常,我认为这证实了我的理论,罪魁祸首是提供商别名。
根据以上结果,我认为存在错误。看起来该区域之前出现过一些问题,例如https://stackoverflow.com/questions/18874062/can-authnprovideralias-ldap-work-with-apache2-4-x。
如果您需要 之类的东西Require ldap-group
来Require ldap-group
工作(除了Require ldap-user
),那么唯一的解决方案似乎是将 AuthLDAP 指令嵌入到与Require
语句相同的位置/目录/等块中。如果您只需要Require user ...
或Require valid-user
,那么使用别名应该可以正常工作。
我会尝试 ping 其他人来确认我们没有 两个都文档中缺少某些内容。
你可以找到所有这些的测试环境这里。