OpenLDAP의 cn=config가 완전히 복사되지 않았습니다.

OpenLDAP의 cn=config가 완전히 복사되지 않았습니다.

OpenLDAP 2.4.39 마스터 및 읽기 복제본이 있습니다 cn=config."OLC"구성(이전 방법과 반대 slapd.conf)

ldapmodify복제는 데이터(사용자 계정 등)에 대해서는 작동하지만 구성에는 작동하지 않습니다. 예를 들어 마스터에서 구성을 변경하면 dn: cn=config변경 사항이 복제본에 표시되고 contextCSN: ...타임스탬프가 업데이트되지만 /etc/openldap/slapd.d/cn=config.ldif변경된 데이터가 허용되지 않습니다. 예를 들어 속성을 변경하여 olcGentleHUP: ...테스트합니다 .

마스터에서는 레코드가 타임스탬프와 함께 업데이트되고 olcGentleHUP: ..., 복제본에서는 타임스탬프만 마스터와 정확히 동일한 값으로 업데이트됩니다./etc/openldap/slapd.d/cn=config.ldifcontextCSN: ...contextCSN: ...

무슨 일인지 아세요? 어떻게 디버깅할 수 있나요?

업데이트됨(2015년 2월 7일)

우리는 노예 환경 searchbase="cn=schema,cn=config"에 있다는 것이 밝혀졌습니다 . 이제 전체 구성이 동기화되도록 olcSyncrepl변경하세요 .searchbase="cn=config"

답변1

olcDatabase={0}config,cn=config의 데이터 외에 OLC에 대한 복제를 설정했습니까 oldDatabase={1}hdb,cn=config? 기본적으로 cn=config복사에는 특별한 부트스트랩이 필요합니다.설명서에 설명되어 있어요.

내 작업 구성(미러 모드)은 다음과 같습니다.

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcRootDN: cn=config
olcRootPW:: hogehogehogehoge==
olcSyncrepl: {0}rid=001 provider=ldap://server1/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
olcSyncrepl: {1}rid=002 provider=ldap://server2/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=1
olcMirrorMode: TRUE

dn: olcOverlay={0}syncprov,olcDatabase={0}config,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov

dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=your,dc=domain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by .... read by .... write by dn="cn=config" read
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by .... write by * read
olcLastMod: TRUE
olcRootDN: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
olcSyncrepl: {0}rid=011 provider=ldap://server1/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="dc=your,dc=domain" type=refreshAndPersist retry="60 +" timeout=1
olcSyncrepl: {1}rid=012 provider=ldap://server2/ starttls=critical tls_reqcert=demand bindmethod=simple binddn="cn=config" credentials=secret searchbase="dc=your,dc=domain" type=refreshAndPersist retry="60 +" timeout=1
olcMirrorMode: TRUE
olcDb....: ... (other hdb configuration)

dn: olcOverlay={0}syncprov,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov

요점은 피어 서버에 바인딩할 복제기( )의 자격 증명을 사용 olcRootDN하고 olcRootPW설정하는 것 입니다. 또한 동료로부터 모든 것을 얻을 수 있도록 적절하게 설정해야 합니다 . 자신의 로컬 데이터베이스를 업데이트하는 방법을 이미 알고 있으므로 쓰기 권한을 부여할 필요가 없습니다.cn=configsyncprovolcAccess

관련 정보