Ldap

slapd.conf ACL:ldap_modify:訪問權限不足 (50)

  • July 18, 2020

我試圖限制對使用者自己的userPassword屬性的寫訪問。但是現在慘敗了幾個小時。這是我到目前為止所做的:

  • 在 Arch linux 上安裝 OpenLDAP 2.4
  • 通過 Apache Directory Studio配置基本 DN ( dc=exmaple,dc=org) 和 Manager 以修改、添加和刪除
  • 添加了兩個組織單位peoplegroup
  • 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(強制覆蓋)標誌。

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