我已经读完了可用文档, 这精通 OpenLDAP 书籍,以及无数的邮件列表帖子,但我还没有找到实现这种情况的方法。我看到了这种场景的几个用例,例如企业应用程序同步 Org 主 LDAP 中的所有用户,但在其服务器中保留其自己的应用程序相关架构和对象。
所以,请问您能否给我指明正确的方向,或者帮助我完全排除这种可能性?
编辑 6月17日
示例场景:
我想要实现的目标是能够从提供商处获取 o=area1,o=myorg,dc=org 和 o=area2,o=myorg,dc=org 中的所有数据,同时也能够从消费者处获取其他数据,例如 o=subarea1,o=myorg,dc=org。
我从提供商处获取数据没有任何问题,我已经在消费者中为每个分支(area1,area2)设置了一个 syncrepl 条目,并使用不同的 rid
syncrepl rid=101
provider="ldap://provider:389"
bindmethod=simple
binddn="cn=replicator,o=myorg,cn=org"
credentials="***"
searchbase="o=area1,o=myorg,dc=org"
type=refreshAndPersist
retry="5 5 300 5"
timeout=3
schemachecking=off
scope=sub
并且我也在提供商上激活了 syncprov。
当我尝试向消费者添加任何数据时,问题出现了,它总是失败并出现错误:
LDAP Error code 53 - shadow context; no update referral
答案1
是的,你可以。只需在 syncrepl 配置中搜索要复制的过滤器和属性即可
syncrepl rid=1
provider=ldap://provider.myorg.com:389
type=refreshOnly
interval=01:00:00:00
searchbase="ou=sales,o=employees,o=myorg,cn=com"
filter="(objectClass=posixAccount)"
scope=base
attrs="cn,sn,userPassword"
schemachecking=off
bindmethod=simple
binddn="cn=syncuser,o=myorg,cn=com"
credentials=secret
现在,情况如下:
- 仅复制 ou=sales,o=myorg,cn=com
- 仅复制 posixAccount 架构
- 只有 cn、sn 和 userPassword。从而保持消费者的 gid 和 uid 不变。
- 并且不进入子级。只是,您指定的 baseDN。范围有一些选项。
- sub,表示所有带有子树的
- 一,表示仅搜索库和其下方的搜索库
- base,仅表示搜索库
不过有一个问题。对于主 Samba 没有的属性,您必须手动更新。例如,您在消费者 LDAP 中有 Samba 密码,而主 LDAP 没有,当用户更改密码时,您必须更新 2 个 LDAP 以将消费者 LDAP 中的 sambaNTPassword 和 sambaLMPassword 同步到主 LDAP 中的 userPassword。当然,这仅适用于您想要保持密码同步的情况。
答案2
如果您指的是是否可以为消费者提供不同的数据架构,那么我认为您可以为一个林单独复制内容(或创建另一个林),然后将消费者连接到该林或 AD 站点。不幸的是,我只短暂使用了 openldap。希望这能有所帮助。
答案3
2 后端方法
只要您的不同分支位于不同的后端,您就可以将一个后端配置为远程主服务器的消费者,并将另一个后端配置为直接执行读写时的标准后端。
您将其定义ou=sales,o=employees,o=myorg,cn=com
为一个后端的 DN,并带有复制设置。然后将其定义ou=accounting,o=employees,o=myorg,cn=com
为另一个后端的 DN,不带复制设置。
1 后端方法
如果一切都保存在同一个后端,我设想如下:
- 以多主方式配置后端复制。这样,两个服务器都是可写的
- 在本地可写树所在的位置,实施 ACI,以便在必要时保持复制的数据对本地用户为只读
- 如果本地可写树必须保存在本地而不被复制,则可以配置指令进行选择性复制(忽略属性、对象、DN 等)
答案4
我遇到了类似的问题,并发现了一个允许根据消费者基础进行写入的选项:
olcMirrorMode: TRUE
它必须添加到所有 syncrepl 选项之后。我认为它也能解决你的问题。