如果我手动更改 /etc/ldap/slapd.d/cn=config.ldif 会发生什么坏事吗?

HVN*_*ing 2 ubuntu openldap ldap

从 2.3 开始,OpenLDAP 使用称为 slapd-config 的配置引擎。他们说使用它可以使所有 LDAP 配置都可以即时更改。

这是 /etc/ldap/slapd.d/cn=config.ldif 的头文件:

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
Run Code Online (Sandbox Code Playgroud)

我已经更改了其中的数据以及具有该标题的其他一些文件,在重新启动 slapd 后,我的更改生效。

如果我手动更改这些文件,还会发生其他情况吗?如果我不需要“即时更改”,我是否应该手动编辑这些文件而不是使用 ldapmodify?哪个应用程序生成了这些文件,何时生成?

注意:我在 Ubuntu 12.04 上使用 openldap-2.4.28

小智 11

如果手动更改 cn=config 中的 LDIF 文件,它们的内容和校验和将不匹配,这不是致命的,但在使用slapcat等工具时会很烦人。

使用ldapmodify以正确的方式修改 cn=config非常痛苦,您最终会积累大量精心手工制作的、单一用途的、一次性的 LDIF 文件。与仅仅编辑 slapd.conf 相比,这是一场噩梦。无论如何,如果您需要更改运行时配置,ldapmodify是您唯一的选择。但是,如果您能承受一些停机时间,您还有另外两种毒药可供选择。

首先,如果您知道自己在做什么,则有一种高度不受支持但又快速又脏的方法,它适用于初始 OpenLDAP 配置:

$ service slapd stop
$ cp -a /etc/ldap/slapd.d /etc/ldap/slapd.d.old
<edit the LDIF files in /etC/ldap/slapd.d>
$ service slapd start
Run Code Online (Sandbox Code Playgroud)

如果 slapd 启动,它应该可以正常工作,但是在启动服务时跟踪 /var/log/syslog总是一个好主意:

$ tail -n 0 -f /var/log/syslog|grep slapd
Run Code Online (Sandbox Code Playgroud)

您可以使用slapcatslapadd修复校验和错误,如下所述。

其次,还有一种不受支持的方法,它涉及使用slapcatslapadd(根据这些说明修改):

$ slapcat -n0 -F /etc/ldap/slapd.d > config.ldif
<edit config.ldif>
$ mkdir /etc/ldap/slapd.d.new
$ slapadd -n0 -F /etc/ldap/slapd.d.new -l config.ldif
Run Code Online (Sandbox Code Playgroud)

如果 slapadd 成功且没有错误,则可以迁移到修改后的 slapd.d 目录。根据此线程 slapadd仅添加数据,因此无法覆盖原始 slapd.d 目录内容。因此,我们需要稍微移动一下目录:

$ service slapd stop
$ mv /etc/ldap/slapd.d /etc/ldap/slapd.d.old
$ mv /etc/ldap/slapd.d.new /etc/ldap/slapd.d
$ chown -R openldap:openldap /etc/ldap/slapd.d
$ service slapd start
Run Code Online (Sandbox Code Playgroud)

这两种或多或少不受支持的方法使使用 cn=config 稍微更容易忍受。