Openldap

OpenLDAP:使用 sockname 和 DN 的 ACL?

  • March 22, 2018

在 OpenLDAP(2.4.45,在 FreeBSD 上)中,我試圖通過僅在通過套接字建立連接時才授予 DN 訪問權限來限制 DN 對屬性的訪問;但沒有成功。

我正在嘗試的是

olcAccess: to attrs=userPassword
 by dn.base="uid=pwreset,ou=service,dc=example,dc=edu" 
    sockname.exact="/var/run/openldap/ldapi"
 write

(想法是pwresetDN 可以由自動密碼重置腳本使用,但只有當腳本與 LDAP 伺服器在同一台機器上執行時,該 DN 才具有該訪問權限)。

by句話似乎與 Sect 中的產生相匹配。OpenLDAP 訪問控製文件的第 8.3節,以及 slapd.access(5) 中的備註,即<who>欄位中的項目“可以組合指定”。確實沒有生成語法警告。我假設這個組合意味著一個AND而不是一個*OR——*這在文件中沒有明確說明。我在 OpenLDAP 文件或網路上都找不到涉及此內容的範例。

當元素不存在時,此節有效sockname,表明配置按我預期的方式工作。

當我嘗試userPassword使用此 DN 編寫屬性時,ldap_modify: Insufficient access (50)出現錯誤。

OpenLDAP 文件沒有(有點令人驚訝)明確說明這個sockname元素的效果是什麼,並且 slapd.access(5) 頁面相當隱晦地說:

語句peername=<peername>, sockname=<sockname>, domain=<domain>, 和sockurl=<sockurl>表示連接主機 IP(以IP=<ip>:<port>IPv4 或IP=[<ipv6>]:<port>IPv6 的形式)或連接主機的命名管道文件名(PATH=<path>如果通過命名管道連接,則以形式)用於 peername,命名管道文件名對於 sockname,與域的聯繫主機名和 sockurl 的聯繫 URL 進行比較pattern以確定訪問。

這實際上並沒有說太多。

我是否完全誤解了此訪問規範的要點,還是有其他方法可以做到這一點?

正確的語法(至少對於這個版本的 OpenLDAP)是:

olcAccess: to attrs=userPassword
 by dn.base="uid=pwreset,ou=service,dc=example,dc=edu"
    sockname.exact="PATH=/var/run/openldap/ldapi"
    write

感謝openldap-technical 列表中的 Quanah Gibson-Mount 指出解決方案。

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