ldap 多主部署

133 阅读4分钟

部署环境

系统: Anolis8.9

master1:172-16-120-20

master2:172-16-120-22

1、安装ldap

dnf install openldap openldap-servers openldap-clients

2、配置初始ldap数据库

2.1 设置管理员密码

# slappasswd -s admin@123
{SSHA}TghkupqcgWdaLj7o43zHwDi8jjFrukhz

2.2 配置基础 DN 结构和管理员用户

olcDatabase={0}config,cn=config:这是 OpenLDAP 配置数据库,负责存储所有 LDAP 配置信息。它在 OpenLDAP 启动时第一个加载,因此编号为 {0}。

olcDatabase={1}monitor,cn=config:这是 OpenLDAP 的监控数据库,提供有关 LDAP 服务器运行状态的信息。通常它是第二个加载的数据库,所以编号为 {1}。

olcDatabase={2}hdb,cn=config(或 mdb 数据库):这是用户数据的数据库,存储 LDAP 目录中的实际数据。在这个例子中,编号为 {2},表示它是在 config 和 monitor 之后加载的第三个数据库。

vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}mdb.ldif 
olcSuffix: dc=test,dc=com                        # 修改dc
olcRootDN: cn=admin,dc=test,dc=com               # 修改cn dc

#修改监控文件信息
vim /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif
dn.base="cn=admin,dc=test,dc=com" read by * none  # 修改dn dc
# 测试
# slaptest -u                                                          
66dec473 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
66dec473 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif"
config file testing succeeded
# 表明基本配置文件验证通过。由于这两个文件有crc校验,因此修改完成之后,crc校验失败,会报错,该错误克忽略。

#设置DB
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

3、启动服务

systemctl start --now slapd
# 查看服务状态
systemctl status slapd     
#导入基本的数据库schema(可以按需导入)
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif


cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=test,dc=com

dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}TghkupqcgWdaLj7o43zHwDi8jjFrukhz
EOF

4、配置多主同步

4.1 配置同步账号

创建基础条目和账号

cat <<EOF | ldapadd -x -D "cn=admin,dc=test,dc=com" -w "admin@123" 
dn: dc=test,dc=com
objectClass: dcObject
objectClass: organization
o: test
dc: test
EOF

配置同步协议(syncrepl)

在 OpenLDAP 配置文件中添加同步协议。在 /etc/openldap/slapd.d/cn=config 下配置 syncrepl 复制信息:

cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:///
dn: cn=module,cn=config
changetype: add
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
EOF

cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcOverlay=syncprov,olcDatabase={2}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint:100 10
olcSpSessionLog: 100
EOF


cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://172.16.120.22:389
  bindmethod=simple
  binddn="cn=admin,dc=test,dc=com"
  credentials=admin@123
  searchbase="dc=test,dc=com"
  scope=sub
  schemachecking=off
  attrs="*,+"
  type=refreshAndPersist
  retry="5 5 300 +"
  interval=interval=00:01:00:00
EOF

cat <<EOF | ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=002
  provider=ldap://172.16.120.20:389
  bindmethod=simple
  binddn="cn=admin,dc=test,dc=com"
  credentials=admin@123
  searchbase="dc=test,dc=com"
  scope=sub
  schemachecking=off
  attrs="*,+"
  type=refreshAndPersist
  retry="5 5 300 +"
  interval=interval=00:01:00:00
EOF

需要注意的是

在每台服务器上,确保 provider 指向其他主节点的 IP 地址或主机名。每个服务器需要配置与其他服务器的同步规则。

每个服务器的 rid 值必须唯一,例如第一个服务器 rid=001,第二个 rid=002。这是用于标识每个服务器的 ID。

5、验证同步

在一台服务器上添加条目,例如:

cat <<EOF | ldapadd -x -D "cn=admin,dc=test,dc=com" -w "admin@123"
dn: cn=test10,dc=test,dc=com
objectClass: inetOrgPerson
cn: test10
sn: Doe
EOF

然后在其他服务器上使用 ldapsearch 检查条目是否成功复制:

ldapsearch -x -D "cn=admin,dc=test,dc=com"  -b "dc=test,dc=com" "(objectClass=*)" -w 'admin@123'|grep test10

配置日志

日志通过rsyslog采集

在/etc/rsyslog.conf 中添加配置
local4.* /var/log/ldap.log

# 然后重启服务即可

systemctl restart rsyslog
systemctl restart slapd