修改 openLDAP cn=config 而不运行 slapd

vir*_*ius 7 openldap

我正在尝试设置一个多主 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并启动服务器。(尽管我还没有实现多主复制工作。)

小智 5

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

\n\n

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

\n\n

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

\n\n
$ systemctl stop slapd\n$ cp -a /etc/ldap/slapd.d /var/backups/slapd.d-offline-$(date +%s)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
$ slapcat -n0 -F /etc/ldap/slapd.d/ -l /var/backups/slapd.d-config-$(date +%s).ldif\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

要备份不同的数据库,只需用正确的数据库编号替换 dbnum 选项即可。如果您只有一个数据库,则可能是 \xe2\x80\x9c1\xe2\x80\x9d。

\n\n
$ slapcat -n1 -F /etc/ldap/slapd.d/ -l /var/backups/slapd.d-acme-$(date +%s).ldif\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
$ rm -rf /etc/ldap/slapd.d\n$ mkdir /etc/ldap/slapd.d\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
$ slapadd -n0 -F /etc/ldap/slapd.d -l /var/backups/slapd.d-config-<timestamp>.ldif\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

要恢复数据库而不是配置数据库,只需将 dbnum 选项替换为正确的数据库编号即可。如果您只有一个数据库,则可能是 \xe2\x80\x9c1\xe2\x80\x9d。

\n\n

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

\n\n
$ chown -R openldap:openldap /etc/ldap/slapd.d\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在开始拍回来。

\n\n
$ systemctl start slapd\n
Run Code Online (Sandbox Code Playgroud)\n