![OpenLDAP의 권한으로 인해 데이터베이스 오버레이를 로드할 수 없습니다.](https://rvso.com/image/1703350/OpenLDAP%EC%9D%98%20%EA%B6%8C%ED%95%9C%EC%9C%BC%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%20%EC%98%A4%EB%B2%84%EB%A0%88%EC%9D%B4%EB%A5%BC%20%EB%A1%9C%EB%93%9C%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..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
항목을 읽어보세요. 일반적으로 발견되는 두 가지 변형이 있습니다.
데이터베이스에는 "기본" 데이터베이스의 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
.