备份与恢复

主要介绍如何备份 OpenLDAP 的配置目录和数据目录,并将其恢复到另一个 OpenLDAP 服务中

OpenLDAP 的备份

OpenLDAP 的备份可以通过服务端的 slapcat 命令或客户端的 ldapsearch 命令两种方式进行。下面展示了如何在 OpenLDAP 服务端使用 slapcat 对配置目录和数据目录进行导出。

1
2
$ slapcat -n 0 -l ./config.`date '+%Y-%m-%d'`.ldif
$ slapcat -n 2 -l ./data.`date '+%Y-%m-%d'`.ldif

其中,-n 表示要导出的 OpenLDAP 数据库编号

OpenLDAP 的恢复

在开始恢复之前,需要先暂停 OpenLDAP 服务

1
$ systemctl stop slapd

OpenLDAP 配置目录一般位于 /etc/openldap/slapd.d,我们需要先将原有配置删除,然后使用 slapadd 导入新的配置

1
2
3
$ rm -rf /etc/openldap/slapd.d/*
$ slapadd -n 0 -F /etc/openldap/slapd.d -l ./config.2019-01-04.ldif
$ chown -R ldap:ldap /etc/openldap/slapd.d

2020-04-20 OpenLDAP 数据目录一般位于 /var/lib/ldap,同样的我们需要先将原有数据删除,然后使用 slapadd 导入新的数据

1
2
3
$ rm -rf /var/lib/ldap/*
$ slapadd -n 2 -F /etc/openldap/slapd.d -l ./data.2019-01-04.ldif
$ chown -R ldap:ldap /var/lib/ldap

最后,重启 OpenLDAP 服务即可

1
$ systemctl start slapd

添加 memberof 支持

如果使用 LDAP 仅仅作为用户统一登录中心,则参考安装文档即可;如果 ldap 要与第三方软件结合,例如 confluence、gitlab 等结合,则需要开启 memberof 支持

  1. 开启 memberof 支持。
1
2
3
4
5
6
7
8
9
10
vim 1-load-memberof.ldif

内容如下:
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModuleLoad: memberof.la
olcModulepath: /usr/lib64/openldap

#ldap库路径与操作系统版本是相关的,此处是64位操作系统。
  1. 新增用户支持 memberof 配置。
1
2
3
4
5
6
7
8
vim 2-use-memberof.ldif

dn: olcOverlay=memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
  1. 导入相关配置。
1
2
3
4
ldapadd -Y EXTERNAL -H ldapi:/// -f 1-chrootpw.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f 2-chdomain.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f 3-load-memberof.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f 4-use-memberof.ldif
  1. 查看当前 dn 下包含 cn=config 配置列表。
1
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
  1. 查看用户的 memberof 信息。
1
ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=xxxxxx)" -b dc=xxx,dc=com dn memberof

开启日志

查看现在的日志配置

1
2
[root@slave3] ~$ cat /etc/openldap/slapd.d/cn\=config.ldif |grep olcLogLevel
state

必须先创建日志文件,并调整权限,再修改 rsyslog.conf

1
2
3
4
5
6
7
mkdir -p /var/log/slapd

touch /var/log/slapd/slapd.log

chown ldap:ldap /var/log/slapd/

echo "local4.* /var/log/slapd/slapd.log" >> /etc/rsyslog.conf

重启使其生效

systemctl restart rsyslog

修改数数据库配置文件

1
2
3
4
5
6
7
[root@test1] ~$ cat log.ldif 
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: 32

[root@test1] ~$ ldapmodify -Y EXTERNAL -H ldapi:/// -f log.ldif

最好进行日志切割配置,防止文件过大,不便排查故障

vi /etc/logrotate.d/ldap

1
2
3
4
5
6
7
8
/var/log/slapd/slapd.log{
daily # 每天轮询一次
rotate 5 # 保存5个历史日志文件,超过的删除
size 100M
copytruncate # 复制源日志内容后,清空文件,而不是创建新文件
dateext # 切割文件时,文件名带有日期
missingok # 如果指定的目录不存在,会报错,此选项用来抑制报错
}

如果你是使用旧版修改配置文件的方式,如下启用日志功能

修改 slapd.conf

1
2
3
4
[root@backup2] /etc/openldap$ vim slapd.conf

#末尾添加一行
loglevel -1

修改 rsyslog.conf,并重启

1
2
3
4
5
6
[root@backup2] /etc/openldap$ vim /etc/rsyslog.conf

#末尾添加如下一行:
local4.* /var/log/slapd.log

[root@backup2] /etc/openldap$ systemctl restart rsyslog

生成配置

1
2
3
4
[root@backup2] /etc/openldap$ rm -rf /etc/openldap/slapd.d/*
[root@backup2] /etc/openldap$ slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
[root@backup2] /etc/openldap$ systemctl start slapd.service
123

通过 tailf /var/log/slapd.log 来查看日志

聊天灌水摸鱼区

温馨提示: 遵纪守法, 友善交流!