OpenLDAP의 권한으로 인해 데이터베이스 오버레이를 로드할 수 없습니다.

OpenLDAP의 권한으로 인해 데이터베이스 오버레이를 로드할 수 없습니다.

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항목을 읽어보세요. 일반적으로 발견되는 두 가지 변형이 있습니다.

  • 데이터베이스에는 "기본" 데이터베이스의 olcRootDN과 전혀 관련이 없는 자체 수퍼유저 DN(olcRootDN)이 있습니다. 종종 Docker 템플릿은 cn=admin,cn=config.

    이 경우 -b cn=admin,cn=config올바른 비밀번호도 지정하거나 유사하게 지정해야 합니다.

  • 데이터베이스는 요즘 MariaDB/Postgres와 마찬가지로 'olcAccess'를 통해 루트(UID 0)에 대한 로컬 액세스 권한을 부여합니다. "uidNumber=0...cn=external"이 언급된 액세스 항목을 찾습니다.

    이 경우 SASL EXTERNAL 바인드 모드를 사용하기 위해 로컬 연결을 만들어야 합니다 ldapi://. 즉, 옵션 -Y EXTERNAL~ 아니다옵션을 사용 -x하거나 -b.

관련 정보