这是这问题:我添加了覆盖成员到现有的 OpenLDAP 2.4 服务器。现在我想更新现有的用户对象。
对于新组成员身份,memberOf 属性已正确更新。但我有一堆现有组未自动更新。我可以从他们的组中移除所有用户,然后重新添加他们,以确保这些条目同步。由于这是Univention 企业服务器当您修改 LDAP 时它会产生很多神奇的效果,我不想冒险破坏我的目录。
有没有办法可以欺骗覆盖来更新这些操作属性?
答案1
只有memberOf
在您修改组中的成员时,覆盖才会被激活。因此,memberOf
正如您所建议的那样,“诱使”它更新属性的唯一方法确实是将所有用户从其组中移除并重新添加。
另一种方法是使用外部工具来同步群组及其成员的条目。
您可以为此编写自己的脚本 - 类似于“对于每个组,读取成员,对于每个成员,运行 LDAP“修改”操作以向该成员条目的 memberOf 属性“添加”一个值”。
或者,可能更可靠,你可以使用类似的工具激光扫描中心(LDAP 同步连接器)几乎已经完成了所有工作:您只需配置所需的映射。使用 LSC 的诀窍是使用相同的 LDAP 服务器作为源和目标,并遍历所有用户以确保 memberOf 属性包含在所有组中搜索 member= 后得到的组列表。LSC 网站有一个教程来做到这一点,有点,但是有点过时了。
答案2
我认为运行slapindex
可以解决您的问题。至少听起来很像在系统中添加新索引时发生的情况。除非您对旧条目运行重新索引,否则您会得到奇怪的结果。
请注意,运行此程序时必须停止 openldap 服务器。并且您应该以slapd
用户身份运行它(如 openldap)或以 root 身份运行它,然后更改权限。
/etc/init.d/slapd stop
slapindex
chown openldap:openldap /var/lib/ldap/*
/etc/init.d/slapd start
或者
/etc/init.d/slapd stop
su - openldap -c slapindex
/etc/init.d/slapd start
运行此程序之前,请阅读 slapindex 手册页。除非数据库损坏,否则这应该是安全的。(只需记住检查文件权限前开始)
命令如何停止和启动您的服务将取决于您运行的操作系统风格。
答案3
为了Univention 企业服务器看https://help.univention.com/t/memberof-attribute-group-memberships-of-user-and-computer-objects/6439,它有一个工具执行此操作。对于所有其他情况:该工具使用一个简单的技巧来触发 OpenLDAP 更新 memberOf 属性:它只是搜索 (uniqueMember=*) 并用相同的值替换该值。这基本上是一个 nop,但 OpenLDAP 会像处理任何其他实际更改一样处理它。