在CentOS 8上设置OpenLDAP Master-Master复制

在本指南中,我们将学习如何在CentOS 8上设置OpenLDAP Master-Master复制。 OpenLDAP支持多种复制拓扑,例如 provider-slaveprovider-provider 拓扑。因此,多提供商(也称为多主复制)是一种使用 LDAP Sync Replication engineSyncrepl)将数据复制到多个提供程序(“主”)目录服务器。

在CentOS 8上设置OpenLDAP Master-Master复制

在我们的设置中,我们使用两个OpenLDAP服务器节点:

  • 提供者节点01: ldapmaster01.kifarunix-demo.com
  • 提供者节点02: ldapmaster02.kifarunix-demo.com

我们的复制涉及两个OpenLDAP配置(olcDatabase={0}config,cn=config)和数据库(olcDatabase={1}mdb,cn=config)复制。

设置时间同步

在继续设置OpenLDAP多主复制之前,请确保OpenLDAP服务器的时钟已同步。

请参考以下链接在CentOS 8上设置NTP服务器。

在CentOS 8上使用Chrony设置NTP服务器

安装和设置OpenLDAP服务器

在我们的设置中,我们将复制整个OpenLDAP配置和数据目录。这样,安装,设置和配置提供程序节点之一。请遵循以下指南在CentOS 8上安装OpenLDAP服务器。

在CentOS 8上安装和设置OpenLDAP

一旦配置了一个OpenLDAP节点,就将其克隆以创建处于相同配置状态的第二个节点。

如果您无法克隆OpenLDAP节点,则只需安装和设置其他OpenLDAP节点,然后备份已经设置的节点的配置和数据目录,并将其还原到其他节点上。确保所有必需的目录,文件和权限都已相应设置。

启用LDAP同步提供程序(syncprov)覆盖模块

为了启用LDAP内容同步(syncrepl复制),您需要启用 syncprov叠加模块 在所有提供者节点上

要启用Syncprov叠加模块,您可以创建如下所示的LDIF文件并使用 ldapmodify 要么 ldapadd 命令以更新OpenLDAP数据库配置。

vim enable-syncprov-module.ldif
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov.la

请注意,此LDIF文件假定 syncprov.la 模块位于已定义的模块路径下, /usr/libexec/openldap。验证模块路径;

slapcat -n 0 | grep -i modulepath
olcModulePath: /usr/libexec/openldap

更新OpenLDAP数据库配置;

ldapadd -Y EXTERNAL -H ldapi:/// -f enable-syncprov-module.ldif

如果您不想使用LDIF文件,只需执行 ldapadd 命令如下所示;

ldapadd -Y EXTERNAL -H ldapi:/// -Q

命令运行后,将以下内容粘贴;

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov.la

按ENTER键并添加修改数据库上的条目。

modifying entry "cn=module{0},cn=config"

添加条目后,按 Ctrl+d 停止命令。

如果您要创建一个新的 module 条目,只需在LDIF文件中或使用以下内容作为输入即可 ldapadd 要么 ldapmodify 命令。

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/libexec/openldap
olcModuleLoad: syncprov.la

分配服务器ID

在每个OpenLDAP节点上,您需要为其分配一个ID,以唯一地标识提供者。服务器ID以以下格式指定:

olcServerID:  []

因此,在每个节点上,运行以下命令分配ID。

vim assign-server-ID.ldif

在两个提供者节点上;

dn: cn=config
changetype: modify
add: olcServerID
olcServerID: 1 ldap://ldapmaster01.kifarunix-demo.com
olcServerID: 2 ldap://ldapmaster02.kifarunix-demo.com

更新数据库配置。

ldapadd -Y EXTERNAL -H ldapi:/// -f assign-server-ID.ldif

设置OpenLDAP主-主复制设置

启用同步提供程序模块并设置提供程序节点ID后,请继续配置复制设置。

启用OpenLDAP配置复制

启用OpenLDAP配置的复制(olcDatabase={0}config,cn=config),使用下面的内容创建LDIF文件并更新OpenLDAP数据库 在所有提供者节点上

vim syncprov-config-options.ldif
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

咨询 man slapo-syncprov 有关上面使用的选项的说明。

使用上面定义的复制选项更新OpenLDAP数据库。

ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov-options.ldif

接下来,设置OpenLDAP配置数据库的根DN密码 在所有提供者节点上

由于我们没有设置OpenLDAP配置RootDN密码,如下面的命令所示;

ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase={0}config olcRootDN olcRootPW -LLL -Q
dn: olcDatabase={0}config,cn=config
olcRootDN: cn=config
...

生成密码哈希。

slappasswd
New password: [email protected]
Re-enter new password: [email protected]
{SSHA}tq3ZI0S1AyyeiAVuB2JZGfNaQ2RYVtZn

设置数据库配置密码。

vim rootpwd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}h97GS2nwkHFkwMCbhYmeoRqhJ2ROrMLJ

添加数据库根密码。

ldapmodify -Y EXTERNAL -H ldapi:/// -f rootpwd.ldif

确认;

ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase={0}config olcRootDN olcRootPW -LLL -Q
dn: olcDatabase={0}config,cn=config
olcRootDN: cn=config
olcRootPW: {SSHA}6Gdu7FnwaSRYpbCFwMastAyN1CAgHY4n

接下来,在以下位置为OpenLDAP配置启用复制选项 所有节点

vim enable-config-replication.ldif

确保根据您的环境设置替换此处使用的选项。

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: 
  rid=001
  provider=ldaps://ldapmaster01.kifarunix-demo.com
  binddn="cn=config"
  bindmethod=simple
  credentials="VifreabOrk9" 
  searchbase="cn=config"
  type=refreshAndPersist 
  timeout=0 
  network-timeout=0 
  retry="30 5 300 +"
olcSyncRepl: 
  rid=002
  provider=ldaps://ldapmaster02.kifarunix-demo.com
  binddn="cn=config"
  bindmethod=simple
  credentials="VifreabOrk9" 
  searchbase="cn=config"
  type=refreshAndPersist 
  timeout=0 
  network-timeout=0 
  retry="30 5 300 +"
-
add: olcMirrorMode
olcMirrorMode: TRUE

使用上面的复制设置更新OpenLDAP数据库。

ldapadd -Y EXTERNAL -H ldapi:/// -f enable-config-replication.ldif

启用OpenLDAP数据库复制

要启用OpenLDAP数据库的复制,只需创建具有以下内容的LDIF文件。 确保对定义的选项进行必要的更改。

注意,在我们的情况下,我们已经有一个Root DN绑定用户和为数据存储数据库设置的密码。

ldapsearch -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}mdb,cn=config  olcRootDN olcRootPW -LLL -Q
dn: olcDatabase={1}mdb,cn=config
olcRootDN: cn=admin,dc=ldapmaster,dc=kifarunix-demo,dc=com
olcRootPW: {SSHA}DoFW9xVBNRBy4it31167J82ZJ83Qoj1v
...

如果您没有Root DN用户名和密码,请先创建一个或重新设置,然后再继续。

为OpenLDAP数据库启用同步提供程序 在所有提供商上

vim enabl-mdb-syncprov.ldif
dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionlog: 100
ldapadd -Y EXTERNAL -H ldapi:/// -f enabl-mdb-syncprov.ldif

启用 entryCSNentryUID 索引分别提高提供程序上的数据库扫描速度和会话日志的性能。

vim enable-indexing.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
ldapadd -Y EXTERNAL -H ldapi:/// -f enable-indexing.ldif

接下来,定义数据库复制选项 在所有提供商上

vim enable-database-repl.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncrepl
olcSyncrepl: 
  rid=003 
  provider=ldaps://ldapmaster01.kifarunix-demo.com
  binddn="cn=admin,dc=ldapmaster,dc=kifarunix-demo,dc=com" 
  bindmethod=simple
  credentials="[email protected]" 
  searchbase="dc=ldapmaster,dc=kifarunix-demo,dc=com" 
  type=refreshAndPersist 
  timeout=0 
  network-timeout=0 
  retry="30 5 300 +"
olcSyncrepl: 
  rid=004 
  provider=ldaps://ldapmaster02.kifarunix-demo.com
  binddn="cn=admin,dc=ldapmaster,dc=kifarunix-demo,dc=com" 
  bindmethod=simple
  credentials="[email protected]" 
  searchbase="dc=ldapmaster,dc=kifarunix-demo,dc=com" 
  type=refreshAndPersist 
  timeout=0 
  network-timeout=0 
  retry="30 5 300 +"
-
add: olcMirrorMode
olcMirrorMode: TRUE

更新数据库。

ldapadd -Y EXTERNAL -H ldapi:/// -f enable-data-replication.ldif

请教 man slapd-config 以上LDIF文件中使用的复制选项。

验证OpenLDAP主-主复制

现在已完成OpenLDAP提供程序-提供程序(主-主)复制配置。要确认这一点,请尝试对提供者之一进行任何更改。

例如,添加用户,重置密码,更新任何ACL。这应该反映在任何一个提供程序上。

为了演示的目的,让我们在下面的提供者01上重置用户输入的密码, ldapmaster01.kifarunix-demo.com

uid=linus,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com
[[email protected] ~]# ldappasswd -H ldapi:/// -Y EXTERNAL -S "uid=linus,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com"
New password: newpassword
Re-enter new password: newpassword
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

验证提供者02上的密码更改, ldapmaster02.kifarunix-demo.com

[[email protected] ~]# ldapwhoami -x -h ldapmaster01.kifarunix-demo.com -D "uid=linus,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com" -W
Enter LDAP Password: newpass
dn:uid=linus,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com

同样,尝试在提供者02上重置用户密码, ldapmaster02.kifarunix-demo.com

[[email protected] ~]# ldappasswd -H ldapi:/// -Y EXTERNAL -S "uid=koromicha,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com"
New password: mypassword
Re-enter new password: mypassword
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

在提供者01上进行验证;

[[email protected] ~]# ldapwhoami -x -h ldapmaster01.kifarunix-demo.com -D "uid=koromicha,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com" -W
Enter LDAP Password: mypassword
dn:uid=koromicha,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com

大。您已经在CentOS 8上成功设置了OpenLDAP Master-master(提供者-提供者)。

这标志着我们有关如何在CentOS 8上安装和设置OpenLDAP Master-Master复制的指南的结尾。

参考:

OpenLDAP复制

相关指南

在CentOS 8上设置OpenLDAP主从复制

如何配置DokuWiki OpenLDAP身份验证

实施OpenLDAP密码策略

如何通过OpenLDAP服务器配置SUDO

Sidebar