我目前正在通过命令行执行 openldap 。我添加了用户 John 并添加了组 devgroup,并将 John 分配到了 devgroup 组。当我通过命令行删除用户(约翰)时
ldapdelete -Y EXTERNAL -H ldapi:/// -D "cn=admin,dc=example,dc=local"
"uid=john,dc=example,dc=local"
用户已消失,但不在之前分配的组成员 (devgroup) 中。
我注意到用户和组分配的用户没有关联。基本上我可以添加组中任何不存在的用户。有什么方法可以关联这两个用户吗?
谢谢!
答案1
我相信您只是使用该命令删除用户,而不是删除 OU 中的所有条目。据我了解,LDAP 并不像您想象的那样维护与不同对象的链接,而是您应该首先生成对象列表,然后使用或ldapsearch
对其进行操作。ldapdelete
ldapmodify
我们通常会首先将结果写入ldapsearch
文件.ldif
,然后使用ldapmodify
或对其进行操作ldapdelete
。但是,您可以解析输出并将ldapsearch
其通过管道传输到ldapmodify
如标题为 U&L Q&A 的此示例所示:ldapdelete,想要删除人员 OU 的所有 UID,但保留 OU?。
$ ldapsearch -ZZ -W -D 'cn=Manager,dc=site,dc=fake' \
-b 'ou=people,dc=site,dc=fake' -s one dn | \
grep dn: | cut -b 5- | ldapdelete -ZZ -W -D 'cn=Manager,dc=site,dc=fake'
我相信您需要执行类似的操作,找到用户所属的所有组memberUid
,然后将该列表传递给ldapmodify
,然后ldapdelete
在将它们从所有组中删除后运行您的命令。
顺便说一句,要从组中删除用户:
dn: cn=Manager,dc=site,dc=fake
changetype: modify
delete: memberuid
memberuid: john
关于.ldif
文件,此页面上的示例标题为:使用轻量级目录访问协议 (LDAP) 管理用户都很棒。它们展示了如何使用片段执行所有基本操作,.ldif
这些片段可以扩展以跨多个对象执行操作。
答案2
正如您已经认识到的组条目及其成员条目一样:没有硬链接的单独条目。
您有两个选择:
- 实现您自己的脚本以删除成员条目并从属性中删除其 DN成员在组条目中。
- 使用 OpenLDAP 覆盖斯拉波翻新使...能够斯拉普德如果删除成员条目,请从组条目中删除成员引用。