Apache2 OpenLDAP 授权使用 ldap-user 失败

Apache2 OpenLDAP 授权使用 ldap-user 失败

我有一个在 Docker 容器中运行的 Apache2 服务器(httpd:2.4.54-bullseye)和一个 LDAP 服务器(Debian 11.1 上的 OpenLDAP slapd 2.4.57+dfsg-3)

我正在尝试使用mod_authnz_ldapApache 模块从 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=comcn=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-groupRequire ldap-group工作(除了Require ldap-user),那么唯一的解决方案似乎是将 AuthLDAP 指令嵌入到与Require语句相同的位置/目录/等块中。如果您只需要Require user ...Require valid-user,那么使用别名应该可以正常工作。

我会尝试 ping 其他人来确认我们没有 两个都文档中缺少某些内容。

你可以找到所有这些的测试环境这里

相关内容