如何在 Ubuntu 上使用会话复制配置主从 LDAP 服务器。
例如,如果 ldap 客户端在主服务器上更改了密码。我希望新密码自动同步到从属服务器
答案1
ldap 中的主从服务器被称为提供者和消费者。您没有指定正在使用的 ldap 服务器,因此我推测我们正在讨论 openLDAP。
在旧版 openLDAP 中,配置保存在 conf 文件中。如今,所有设置都存储在 ldap 服务器本身中。因此,您需要创建配置并将其注入 ldap 服务器,因此我们将从创建这些文件开始。此指令将自动将所有条目复制到您的从属服务器。
假设您的公司名称是 acme,域名是 com。并且您当前的 ldap 服务器管理员位于:cn=admin,dc=acme,dc=com
第一的我们需要创建一个 ldap 用户,允许其读取所有 ldap 条目并将其复制到消费者服务器。
创建文件“create_repl_user.ldif”
dn: cn=ldaps2,dc=acme,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: ldaps2
description: LDAP server2 replicator
第二我们需要在主 ldap 服务器中启用提供程序服务,并授予用户 ldaps2 对整个 ldap 服务器的读取权限。
创建文件“enable_sync_prov.ldif”
dn: olcDatabase={1}hdb,cn=config
changetype: modify
delete: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by self write
by anonymous auth
by dn="cn=admin,dc=acme,dc=com write
by * none
-
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by self write
by dn="cn=admin,dc=acme,dc=com" write
by dn="cn=ldaps2,dc=acme,dc=com" read
by anonymous auth
by * none
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcDbIndex
olcDbIndex: entryCSN eq
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: {1}syncprov
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {0}syncprov
olcSpCheckpoint: 100 10
olcSpSessionlog: 100
第三:我们需要启用从指定服务器到我们的 ldap 消费者的复制。创建文件 enable_sync_consumer.ldif,用你的主 ldap 服务器的 ip 替换行 provider="ldap://yourldapservername.com:389/" 。以及用你为 ldap2s 用户决定的密码替换 credentials=yourencryptedldap2spassword 。
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
dn: olcDatabase={1}hdb,cn=config
changetype: modify
delete: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by self write
by anonymous auth
by dn="cn=admin,dc=acme,dc=com" write
by * none
-
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
by anonymous auth
by * none
-
delete: olcAccess
olcAccess: {2}to *
by self write
by dn="cn=admin,dc=acme,dc=com" write
by * read
-
add: olcAccess
olcAccess: {2}to *
by * read
-
replace: olcRootDN
olcRootDN: cn=manager
-
delete: olcRootPW
-
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcDbIndex
olcDbIndex: uid eq
-
add: olcDbIndex
olcDbIndex: cn eq
-
add: olcDbIndex
olcDbIndex: ou eq
-
add: olcDbIndex
olcDbIndex: dc eq
add: olcSyncrepl
olcSyncrepl: rid=123
provider="ldap://yourldapservername.com:389/"
type=refreshAndPersist
retry="60 30 300 +"
searchbase="dc=acme,dc=com"
bindmethod=simple
binddn="cn=ldaps2,dc=acme,dc=com"
credentials=yourencryptedldap2spassword
现在我们已经创建了配置文件,我们需要将它们注入到提供方和消费者服务器
在提供程序服务器中创建复制用户:
run ldapadd -x -W -D cn=admin,dc=acme,dc=com -f create_repl_user.ldif
启用提供商服务:
run ldapadd -x -W -D cn=admin,dc=acme,dc=com -f enable_sync_prov.ldif
在消费者服务器中添加消费者同步设置:
run ldapadd -x -W -D cn=admin,dc=acme,dc=com -f enable_sync_consumer.ldif
答案2
很棒的文章,帮助我转发了很多,不过 ldifs 中有几个错误需要注意:enable_sync_prov.ldif
由 dn="cn=admin,dc=acme,dc=ncom 撰写
应该
由 dn="cn=admin,dc=acme,dc=com" 撰写
然后 ldapadd/ldapmodify 应该在树的 cn=admin,cn=config 部分上运行,而不是在 cn=admin,dc=acme,dc=com 上运行。