![由於 OpenLDAP 中的權限,無法載入資料庫覆蓋](https://rvso.com/image/1703350/%E7%94%B1%E6%96%BC%20OpenLDAP%20%E4%B8%AD%E7%9A%84%E6%AC%8A%E9%99%90%EF%BC%8C%E7%84%A1%E6%B3%95%E8%BC%89%E5%85%A5%E8%B3%87%E6%96%99%E5%BA%AB%E8%A6%86%E8%93%8B.png)
我很難使用 MemberOf 覆寫配置 OpenLDAP。我從頭開始編譯了 openldap 2.5.16,並帶有--with-memberof
選項。不知何故它有效:
sys# sbin/slapcat -F config/slapd.d -n 0
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcSuffix: dc=contoso,dc=com
olcAccess: {0}to attrs=userPassword by anonymous auth by self write by * none
olcAccess: {1}to * by dn.base="cn=admin,dc=contoso,dc=com" write by self write by * none
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcLastBind: FALSE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcRootDN: cn=admin,dc=contoso,dc=com
olcRootPW:: LKSkwema9kajkw32==
現在,據我了解,我需要將memberof
覆蓋加載到資料庫:
sys# cat add_memberoff.ldif
dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: memberof
olcMemberOfRefint: TRUE
我試圖:
bin/ldapadd -x -D "cn=admin,dc=contoso,dc=com" -W -f add_memberoff.ldif
我得到了:
adding new entry "olcOverlay=memberof,olcDatabase={1}mdb,cn=config"
ldap_add: Insufficient access (50)
在日誌中:
65dca351.151db256 0x7eff2ffff6c0 conn=1028 fd=14 ACCEPT from IP=127.0.0.1:38524 (IP=0.0.0.0:389)
65dca351.151e9d47 0x7eff34c016c0 conn=1028 op=0 BIND dn="cn=admin,dc=contoso,dc=com" method=128
65dca351.1520796e 0x7eff34c016c0 conn=1028 op=0 BIND dn="cn=admin,dc=contoso,dc=com" mech=SIMPLE bind_ssf=0 ssf=0
65dca351.15219d56 0x7eff34c016c0 conn=1028 op=0 RESULT tag=97 err=0 qtime=0.000009 etime=0.000216 text=
65dca351.1523bd83 0x7eff2ffff6c0 conn=1028 op=1 ADD dn="olcOverlay=memberof,olcDatabase={1}mdb,cn=config"
65dca351.1524555d 0x7eff2ffff6c0 => access_allowed: add access to "olcOverlay=memberof,olcDatabase={1}mdb,cn=config" "entry" requested
65dca351.152486ca 0x7eff2ffff6c0 => acl_get: [1] attr entry
65dca351.1524a3c8 0x7eff2ffff6c0 => acl_mask: access to entry "olcOverlay=memberof,olcDatabase={1}mdb,cn=config", attr "entry" requested
65dca351.1524b9ef 0x7eff2ffff6c0 => acl_mask: to all values by "cn=admin,dc=contoso,dc=com", (=0)
65dca351.1524d378 0x7eff2ffff6c0 <= check a_dn_pat: *
65dca351.1524f2cf 0x7eff2ffff6c0 <= acl_mask: [1] applying none(=0) (stop)
65dca351.15250d85 0x7eff2ffff6c0 <= acl_mask: [1] mask: none(=0)
65dca351.1525270d 0x7eff2ffff6c0 => slap_access_allowed: add access denied by none(=0)
65dca351.15253c3d 0x7eff2ffff6c0 => access_allowed: no more rules
65dca351.15258f10 0x7eff2ffff6c0 conn=1028 op=1 RESULT tag=105 err=50 qtime=0.000009 etime=0.000137 text=
65dca351.1526fba1 0x7eff34c016c0 conn=1028 op=2 UNBIND
65dca351.152a5b85 0x7eff34c016c0 conn=1028 fd=14 closed
我在這裡缺少什麼?
答案1
權限(“olcRootDN”和“olcAccess”)是按資料庫定義的。你有兩個資料庫– 一個用於dc=contoso,dc=com
後綴,一個用於cn=config
後綴。
仔細查看您的 LDIF 實際上正在修改哪一個:它說dn: [...],cn=config
,因此您必須使用具有資料庫權限的帳戶(bindDN)cn=config
。
若要了解您需要哪個帳戶,請閱讀該olcDatabase={0}config,cn=config
條目。有兩種常見的變體:
資料庫有自己的超級使用者 DN (olcRootDN),它與「主」資料庫的 olcRootDN 完全無關。通常 docker 模板將其設定為
cn=admin,cn=config
.在這種情況下,您也必須指定
-b cn=admin,cn=config
或類似的正確密碼。這個資料庫透過「olcAccess」授予對 root (UID 0) 的本地存取權限,這很像現在的 MariaDB/Postgres 所做的那樣。尋找提及「uidNumber=0...cn=external」的存取條目。
在這種情況下,您必須使用 SASL EXTERNAL 綁定模式建立本機連線
ldapi://
– 即使使用選項-Y EXTERNAL
和不是使用選項-x
或-b
.