![Невозможно загрузить наложение базы данных из-за разрешений в OpenLDAP](https://rvso.com/image/1703350/%D0%9D%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%BD%D0%B0%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B8%D0%B7-%D0%B7%D0%B0%20%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B9%20%D0%B2%20OpenLDAP.png)
У меня возникли трудности с настройкой OpenLDAP с MemberOf overlay. Я скомпилировал 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
или что-то подобное, а также правильный пароль.База данных предоставляет локальный доступ к root (UID 0) через 'olcAccess', во многом как MariaDB/Postgres в наши дни. Найдите запись доступа, в которой упоминается "uidNumber=0...cn=external".
В этом случае вам необходимо создать локальное подключение с
ldapi://
использованием режима привязки SASL EXTERNAL, то есть, используя опцию-Y EXTERNAL
инетиспользуя параметры-x
или-b
.