在没有slapd运行的情况下修改openLDAP cn = config

我正在尝试设置多主OpenLDAP(PoC)群集。 某处我创build了错误的configuration,现在slapd无法启动。 由于cn=config / olc config是CRC32标记的,它不会接受手动更改。

那么,如何在没有守护进程的情况下进行configuration更改呢?

slapadd ,但我需要修改,而不是添加…对不对? 我觉得我可能会错过一些明显的东西。

如果重要,我认为olcModuleLoadolcServerID中的一个或两个都是错误的。

在Ubuntu 16.04上运行openldap-2.4.42。

更新
我错误的编辑不被接受。 configuration被拒绝的原因不同(找不到serverID / URL匹配),校验和错误被logging,但不阻止守护进程启动。

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

我知道你已经基本解决了你的问题,但是如果有其他人遇到这个问题,我想我会添加自己的离线slapdconfiguration步骤。 这是来自我自己的基于Debian系统的文档:

有时需要手动编辑一个cn=config风格的数据库(例如,如果你不能用root帐户进入数据库),但是不应该手动编辑一个cn=config风格的数据库。 为了直接解决文件本身的问题,您需要将数据库转换为ldif格式,进行更改,然后恢复数据库。 这是使用巴掌工具完成的。

从停止slapd服务开始。 build议复制slapd目录及其所有内容,以防出现问题。

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

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

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

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

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

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

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

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

现在,您可以使用文本编辑器对使用slapcat工具创build的ldif文件进行更改。 小心任何编辑作为错别字,无效的语法和其他问题将导致重新导入ldif文件失败。 完成所有更改后,将数据库导入新的slapd目录。

使用slapadd工具将数据库的ldif备份转换为cn=config 。 slapadd工具,就像slapcat工具需要一个数据库编号。 0始终是configuration数据库。

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

<timestamp>replace为您实际要恢复的数据库。

要恢复数据库而不是configuration数据库,只需用正确的数据库编号replacedbnum选项即可。 如果你只有一个数据库,这可能是“1”。

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

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

现在开始slapd备份。

 $ systemctl start slapd