Apache-2.4

使用 ldap-user 的 Apache2 OpenLDAP 授權失敗

  • August 30, 2022

我有一個在 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 "/":

我錯過了什麼嗎?

PS:當我使用Require valid-user一切工作正常!

我錯過了什麼嗎?

可能!今天早上我在玩這個配置,我看到你描述的完全一樣的行為。首先,我的測試配置如下所示:

<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 user1Require 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語句相同的 location/directory/etc 塊中。如果您只需要Require user ...or Require valid-user,那麼使用別名應該可以正常工作。

我將嘗試 ping 其他一些人,以確認我們都沒有 遺漏文件中的某些內容。

你可以在這裡找到所有這些的測試環境。

引用自:https://serverfault.com/questions/1109463