Openldap
OpenLDAP - ACL 規則更改後使用者無法登錄
我正在使用具有複製功能的 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
我想要實現的是:
- 管理員可以做任何事情,沒有限制
- 複製使用者可以讀取所有內容
- 使用者可以更改他們的密碼
- 只有登錄使用者才能訪問目錄,不能匿名訪問。
將上述 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 * break
在attrs=userPassword
orattrs=shadowLastChange
- 不應該回退到to * by users read
.