从 2.3 开始,OpenLDAP 使用名为 slapd-config 的配置引擎。他们说使用它可以动态更改所有 LDAP 配置。
这是 /etc/ldap/slapd.d/cn=config.ldif 的标题:
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
我更改了其中的数据以及一些具有该标题的其他文件,重新启动 slapd 后,我的更改生效。
如果我手动更改这些文件,还会发生什么?如果我不需要“即时更改”,我应该手动编辑这些文件而不是使用 ldapmodify 吗?哪个应用程序生成了这些文件,什么时候生成的?
注意:我在 Ubuntu 12.04 上使用 openldap-2.4.28
答案1
如果你手动更改 cn=config 中的 LDIF 文件,它们的内容和校验和将不匹配,这虽然不是致命的,但在使用以下工具时会很烦人:斯巴达猫。
使用以下方法正确修改 cn=configldap修改非常痛苦,最终你会积累大量精心手工制作的、单一用途的、一次性的 LDIF 文件。与仅仅编辑 slapd.conf 相比,这简直是一场噩梦。无论如何,如果你需要更改运行时配置,ldap修改是您唯一的选择。但是,如果您能承受一些停机时间,您还有另外两种毒药可供选择。
首先,极度缺乏支持但如果你知道自己在做什么的话,这个快速而粗糙的方法对于初始 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
如果 slapd 启动了,它应该可以正常工作,但最好还是跟踪一下/var/log/syslog启动服务时:
$ tail -n 0 -f /var/log/syslog|grep slapd
您可以使用以下方法修复校验和错误斯巴达猫和打耳光如下所述。
其次,不太支持的方法涉及使用斯巴达猫和打耳光(修改自这些说明):
$ 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
如果 slapadd 成功且没有错误,则可以迁移到修改后的 slapd.d 目录。根据此主题 打耳光仅添加数据,因此无法覆盖原始 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
这两种或多或少不受支持的方法使使用 cn=config 变得稍微容易一些。
答案2
当你看到一个文件说
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
你最好按照说明正确更改该文件的内容。
在这种情况下,这意味着使用命令更新 OpenLDAPldapmodify
配置按照 OpenLDAP 手册操作。
这允许您动态地将更改应用于 OpenLDAP 配置,并将重新生成文件slapd.conf
(在启动 LDAP 服务器作为引导配置时使用)
一般来说,不遵守指示(例如“不要编辑此文件,因为它是自动生成的!”)会导致痛苦和折磨。
在这种特殊情况下,您可能会发现下次有人以正确的方式操作时,您对文件的更改已被清除,并且您必须重建配置(可能没有记录,因为您编辑的文件将被替换)。
下次您未能注意到这样的警告,可能会导致系统无法启动,甚至更糟。