当前系统:CentOS 7.9,OpenLDAP 2.4
我想在我的 LDAP 操作中实现一个“钩子”,这样当 ldapadd 或 ldapmodify 操作发生时,就会运行一个脚本此外正常的数据库操作。从我的网络搜索来看,LDAP 似乎具有“套接字覆盖”机制,我看到它被称为slapd-sock
、slapo-sock
和back-sock
。(这些都是同一件事吗,还是我错过了一个重要的区别?)
以下是来自旧帖子问题打算添加到的行数slapd.conf
:
overlay sock
extensions binddn peername ssf connid
socketpath sockoverlay-listener
sockops modify add
到目前为止,我发现的所有示例和手册页都显示了要添加到的配置行slapd.conf
。但是,我还看到它slapd.conf
作为控制 LDAP 的一种手段即将消失。我想设置一些稳定的东西,特别是因为我知道我将在年底前升级到 AlmaLinux 9.1 和 OpenLDAP 2.6。
我的问题是:如何在 LDIF 文件中指定上述选项?请注意,我不是在问如何使用该ldapmodify
命令。我是在问如何从上述slapd.conf
配置中得出适当的 cn、objectClass 和属性,以放入 LDIF 文件中以启用back-sock
(或任何名称)?
我知道这是可能的,因为 OpenLDAP 发行说明指出了对控制套接字覆盖的修复cn=config
,但我找不到任何有关如何执行此操作的示例。
答案1
我找到了我的问题的答案,或者更确切地说,我找到了如何找到我的问题的答案的方法。
学习 LDAP cn=config cn、objectClass 和任何给定 slapd.conf 配置的属性的关键是创建一个虚拟slapd.conf
文件,然后使用slaptest
。
就我而言,我创建了一个slap-mod.conf
:
include /etc/openldap/schema/core.schema
database hdb
suffix "dc=myoffice,dc=mycompany,dc=org"
rootdn "cn=Manager,dc=myoffice,dc=mycompany,dc=org"
modulepath /usr/lib64/openldap
moduleload back_sock.la
overlay sock
extensions binddn peername ssf connid
socketpath sockoverlay-listener
sockops modify add
我需要有足够的数据库定义以使 slaptest 不发出抱怨。
然后我就跑了
mkdir -p /tmp/slapd
slaptest -u -f slapd-mod.conf -F /tmp/slapd
当我查看/tmp/slapd/cn=config/
目录时,我看到了我需要的语句。我还没有尝试过,但看起来我需要两个 LDIF 文件,在从 slaptest 中删除通常的 {0} 并对 dn 进行一些调整后:
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: back_sock.la
dn: olcOverlay=sock,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcOvSocketConfig
olcOverlay: sock
olcDbSocketPath: sockoverlay-listener
olcDbSocketExtensions: binddn
olcDbSocketExtensions: peername
olcDbSocketExtensions: ssf
olcDbSocketExtensions: connid
olcOvSocketOps: modify
olcOvSocketOps: add
编辑
在我弄清楚并尝试了上述方法后,我最终“破坏”了我的 LDAP 服务器:它不再接受修改命令。显然,这与我尚未实际提供后端脚本有关。
然而,事实证明,虽然添加这样的行很容易dn: olcOverlay=sock,olcDatabase={2}hdb,cn=config
,但我无法删除它;这是否是由于配置back-sock
还是其他原因,我说不上来。我不得不从备份中恢复整个 LDAP 配置和数据库。
教训:仅仅因为你能通过做某事cn=config
并不意味着你应该通过 做一些事情cn=config
。我最好坚持下去slapd.conf
(假设该文件在 CentOS7/OpenLDAP2.4 中仍然有效),这样配置更改就很容易撤消。
当它最终被彻底淘汰时会如何运作slapd.conf
,谁也说不准。