修改 openLDAP cn=config(无需运行 slapd)

修改 openLDAP cn=config(无需运行 slapd)

我正在尝试设置多主 openLDAP (PoC) 集群。我在某个地方创建了错误的配置,现在 slapd 无法启动。由于cn=config/ olcconfig 带有 CRC32 标记,因此它不会接受手动更改。

那么,如何在守护进程不运行的情况下更改配置?

slapadd,但我需要修改,而不是添加...对吗?我觉得我可能忽略了一些明显的东西。

如果这很重要的话,我认为其中一个或者两个olcModuleLoad都是olcServerID错误的。

在 Ubuntu 16.04 上运行 openldap-2.4.42。

更新
我错了,编辑未被接受。配置因其他原因被拒绝(未找到匹配的 serverID/URL),校验和错误已记录,但并未阻止守护进程启动。

我能够手动编辑 ldif 文件/etc/ldap/slap.d/cn=config并启动服务器。(尽管我还没有使多主复制正常工作。)

答案1

我知道您基本上已经解决了您的问题,但我想添加我自己的离线 slapd 配置步骤,以防其他人遇到这种情况。以下是我自己为基于 Debian 的系统编写的文档:

有时需要手动编辑cn=config样式数据库(例如,如果您无法使用 root 帐户进入数据库),但是cn=config样式数据库绝不应该手动编辑。为了直接修复文件本身的问题,您需要将数据库转换为 ldif 格式,进行更改,然后恢复数据库。这可以使用 slap 工具完成。

首先停止 slapd 服务。建议复制 slapd 目录及其所有内容,以防万一出现问题。

$ systemctl stop slapd
$ cp -a /etc/ldap/slapd.d /var/backups/slapd.d-offline-$(date +%s)

现在备份您要更改的 slapd 数据库。应使用 slap 工具进行备份和恢复。Slapcat 可用于将数据库从cn=config样式转换为 ldif 文件。要备份配置数据库,请使用 slapcat 将其导出到 ldif 文件。

$ slapcat -n0 -F /etc/ldap/slapd.d/ -l /var/backups/slapd.d-config-$(date +%s).ldif

-n 选项指定要备份哪个数据库。配置数据库始终为 0。

要备份不同的数据库,只需将 dbnum 选项替换为正确的数据库编号即可。如果您只有一个数据库,则该编号可能是“1”。

$ slapcat -n1 -F /etc/ldap/slapd.d/ -l /var/backups/slapd.d-acme-$(date +%s).ldif

备份当前数据库后,您需要删除 ldap 文件夹下的 slapd 目录并创建一个新的目录。

$ rm -rf /etc/ldap/slapd.d
$ mkdir /etc/ldap/slapd.d

现在,您可以使用文本编辑器对使用 slapcat 工具创建的 ldif 文件进行更改。编辑时请务必小心,因为拼写错误、语法无效和其他问题都会导致 ldif 文件的重新导入失败。完成所有更改后,将数据库导入新的 slapd 目录。

使用 slapadd 工具可以将数据库的 ldif 备份转换为cn=config。slapadd 工具与 slapcat 工具一样,需要数据库编号。0 始终是配置数据库。

$ slapadd -n0 -F /etc/ldap/slapd.d -l /var/backups/slapd.d-config-<timestamp>.ldif

替换<timestamp>为您实际想要恢复的数据库。

要恢复您的数据库而不是配置数据库,只需将 dbnum 选项替换为正确的数据库编号。如果您只有一个数据库,则该编号可能是“1”。

确保更改所有新文件的所有权和权限。

$ chown -R openldap:openldap /etc/ldap/slapd.d

现在启动 slapd 备份。

$ systemctl start slapd

答案2

您永远不应该手动编辑 /etc/ldap/slap.d/cn=config 目录下的配置文件。

始终创建具有所需配置更改的 ldif 文件,并使用 ldapadd、ldapmodify、ldapdelete 实用程序来更新 OpenLDAP 配置。

如果您使用的是 Debian 机器,请使用以下命令安装 ldap 实用程序。

sudo apt install ldap-utils

参考: 如何使用 LDIF 文件更改 OpenLDAP 系统

相关内容