Openldap

OpenLDAP - ACL 規則更改後使用者無法登錄

  • September 6, 2018

我正在使用具有複製功能的 OpenLDAP 伺服器,並且需要設置適當的 ACL 以讓複製使用者讀取源主機中的所有內容。

閱讀本文後創建了這組規則:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

我想要實現的是:

  1. 管理員可以做任何事情,沒有限制
  2. 複製使用者可以讀取所有內容
  3. 使用者可以更改他們的密碼
  4. 只有登錄使用者才能訪問目錄,不能匿名訪問。

將上述 ACL 設置為伺服器後,複製使用者根本無法登錄。我不明白為什麼會發生這種情況,複製使用者 DN 是正確的,據我所知它應該匹配……

登錄嘗試後的伺服器日誌:

slapd[3475]: => access_allowed: result not in cache (userPassword)
slapd[3475]: => access_allowed: auth access to "uid=rpuser,dc=example,dc=com" "userPassword" requested
slapd[3475]: => acl_get: [1] attr userPassword
slapd[3475]: => acl_mask: access to entry "uid=rpuser,dc=example,dc=com", attr "userPassword" requested
slapd[3475]: => acl_mask: to value by "", (=0)
slapd[3475]: <= check a_dn_pat: cn=admin,dc=example,dc=com
slapd[3475]: <= acl_mask: no more <who> clauses, returning =0 (stop)
slapd[3475]: => slap_access_allowed: auth access denied by =0
slapd[3475]: => access_allowed: no more rules

如果我理解正確,只檢查第一個 ACL?

這些 ACL 未經測試,但應該可以工作:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage by * break
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read by * break
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

您將需要by * break前兩條規則,因此如果特定子句中沒有匹配項,by則將檢查下一條規則。您不需要by * breakattrs=userPasswordor attrs=shadowLastChange- 不應該回退到to * by users read.

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