Ldap
slapd.conf ACL:ldap_modify:訪問權限不足 (50)
我試圖限制對使用者自己的
userPassword
屬性的寫訪問。但是現在慘敗了幾個小時。這是我到目前為止所做的:
- 在 Arch linux 上安裝 OpenLDAP 2.4
- 通過 Apache Directory Studio配置基本 DN (
dc=exmaple,dc=org
) 和 Manager 以修改、添加和刪除- 添加了兩個組織單位
people
和group
ou=people
在-uid=timo,ou=people,dc=example,dc=org
和下添加了兩個使用者uid=heike,...
我想做的下一件事是能夠修改使用者自己的 userPassword。為此,我創建了一個
changepw.ldif
文件。dn: uid=timo,ou=people,dc=example,dc=org changetype: modify replace: userPassword userPassword: newpw
並像這樣應用它
$ ldapmodify -x -D "uid=timo,ou=people,dc=example,dc=org" -W -f changepw.ldif modifying entry "uid=timo,ou=people,dc=example,dc=org" ldap_modify: Insufficient access (50)
我首先使用 Apache Directory Studio 為 uid=timo 設置了 userPassword,並驗證它是否正常工作
到目前為止,一切都在正常工作(至少它符合我的期望:-P)。所以我向 /etc/openldap/slapd.conf 添加了訪問控制,如下所示:
[...] # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! access to attrs=userPassword by self write by anonymous auth by dn.base="cn=Manager,dc=example,dc=org" write by * none ####################################################################### # MDB database definitions database mdb [...]
並做了通常的事情:
$ slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ $ chown -R ldap:ldap /etc/openldap/slapd.d $ systemctl restart slapd
並再次嘗試。
$ ldapmodify -x -D "uid=timo,ou=people,dc=example,dc=org" -W -f changepw.ldif modifying entry "uid=timo,ou=people,dc=example,dc=org" ldap_modify: Insufficient access (50)
由於某種原因,訪問被拒絕。我打開了acl日誌並得到了這個:
5f12f36a => access_allowed: result not in cache (userPassword) 5f12f36a => access_allowed: auth access to "uid=timo,ou=people,dc=example,dc=org" "userPassword" requested 5f12f36a => slap_access_allowed: backend default auth access granted to "(anonymous)" 5f12f36a => access_allowed: auth access granted by read(=rscxd) 5f12f36a => access_allowed: backend default write access denied to "uid=timo,ou=people,dc=example,dc=org"
我將不勝感激任何幫助!
在我發現有一個稱為
slapacl
測試 ACL 的工具後,我想出了一個解決方案。讓我向您展示它在進行任何更改之前的樣子。
$ slapacl -F /etc/openldap/slapd.d/ -b "uid=timo,ou=people,dc=example,dc=org" -D "uid=timo,ou=people,dc=example,dc=org" -u userPassword authcDN: "uid=timo,ou=people,dc=example,dc=org" userPassword: read(=rscxd)
這基本上是我已經想到的,並給了我足夠的證據來質疑配置生成命令(
slaptest -f ... -F ...
)。實際問題是配置目錄 (
/etc/openldap/slapd.d
) 沒有被覆蓋您必須先刪除該目錄並再次生成配置目錄。
$ rm -rf /etc/openldap/slapd.d/* $ slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ $ chown -R ldap:ldap /etc/openldap/slapd.d $ systemctl restart slapd
這就是測試最初的樣子。
$ slapacl -F /etc/openldap/slapd.d/ -b "uid=timo,ou=people,dc=example,dc=org" -D "uid=timo,ou=people,dc=example,dc=org" -u userPassword authcDN: "uid=timo,ou=people,dc=example,dc=org" userPassword: write(=wrscxd)
我希望有人能從我的發現中受益。它仍然很好奇,手冊頁中沒有提到這一點,並且沒有
-f
(強制覆蓋)標誌。