我正在尝试设置多主 openLDAP (PoC) 集群。我在某个地方创建了错误的配置,现在 slapd 无法启动。由于cn=config
/ olc
config 带有 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