【问题标题】:How do I clone an OpenLDAP database如何克隆 OpenLDAP 数据库
【发布时间】:2010-10-22 00:14:39
【问题描述】:

我知道这更像是一个 serverfault 问题而不是 stackoverflow 问题,但由于 serverfault 尚未启动,我开始吧:

我应该将应用程序从一台 redhat 服务器移动到另一台服务器,并且没有很好地了解应用程序的内部工作原理,我将如何将 OpenLDAP 数据库从一台机器移动到另一台机器,以及模式和所有.

我需要复制哪些文件?我相信设置是相当标准的。

【问题讨论】:

    标签: linux ldap redhat openldap


    【解决方案1】:

    SourceRebels 答案的问题是slapcat(8) 不保证数据是为ldapadd(1)/ldapmodify(1) 排序的。从手册页:

    此工具生成的 LDIF 适合与 slapadd(8) 一起使用。 由于条目是按数据库顺序排列的,而不是优先顺序,它们 如果不先重新排序,则无法使用 ldapadd(1) 加载。

    加上使用使用后端文件转储数据库的工具,然后使用通过ldap协议加载ldif的工具,不是很一致。

    我建议使用slapcat(8)/slapadd(8) OR ldapsearch(1)/ldapmodify(1) 的组合。我更喜欢后者,因为它不需要 shell 访问 ldap 服务器或移动文件。

    例如,从 dc=master,dc=com 下的主服务器转储数据库并将其加载到备份服务器中

    $ ldapsearch -Wx -D "cn=admin_master,dc=master,dc=com" -b "dc=master,dc=com" -H ldap://my.master.host -LLL > ldap_dump-20100525-1。 ldif $ ldapadd -Wx -D "cn=admin_backup,dc=backup,dc=com" -H ldap://my.backup.host -f ldap_dump-20100525-1.ldif

    上面的 -W 标志提示输入 ldap admin_master 密码,但是由于我们将输出重定向到一个文件,您不会看到提示 - 只是一个空行。继续并输入您的 ldap admin_master 密码,它就会起作用。在运行 ldapadd 之前,需要删除输出文件的第一行(输入 LDAP 密码:)。

    最后一个提示,ldapadd(1) 是到 ldapmodify(1) 的硬链接,-a(添加)标志已打开。

    【讨论】:

    • -Wx 在重定向到文件时对我不起作用。用 -w 替换 -Wx 效果很好。
    • 我不喜欢在命令行中输入密码,因为它们通常会出现在你的 shell 历史记录中......
    • @HendyIrawan 我认为实际上很难做到,因为我们正在谈论从树中对条目进行排序。实际上,如果您的树很简单,则大多数情况下 slapcat / ldapadd 都可以工作,但使用 ldapsearch / ldapadd 对更安全。 TLDR; 为什么要重新排序不需要的东西?
    • slapsearch 的一个问题是它不会转储技术属性,例如密码历史记录、上次密码更新日期……所有 ppolicy 层需要的东西。我认为您应该备份其他属性,但不会。
    • +1 以获得出色的答案。它帮助到我。完全没有变化!
    【解决方案2】:

    ldapsearch 和 ldapadd 不一定是克隆 LDAP 数据库的最佳工具。 slapcat 和 slapadd 是更好的选择。

    使用 slapcat 导出您的数据库:

    slapcat > ldif
    

    使用 slapadd 导入数据库(确保 LDAP 服务器已停止):

    slapadd -l ldif
    

    【讨论】:

    • 来自 slapcat 手册页,“slapcat 的输出旨在用作 slapadd(8) 的输入。slapcat 的输出通常不能用作 ldapadd(1) 或其他 LDAP 的输入" -- 换句话说,由于操作元数据,使用 ldapadd 可能需要做很多工作,而 slapadd 将忽略操作元数据。
    • @wmorse slapadd 不会忽略操作元数据,而是加载它,因为它包含在 slapcat 生成的 ldif 中。如果您有依赖于 entryUUID 等操作属性来保持不变的过程(如复制等),这一点很重要。
    • 这两个命令也可以导入导出用户密码??
    【解决方案3】:

    一些约会:

    • 将您的个性化架构和对象类定义保存在您的新服务器上。您可以在 slapd.conf 中查找包含的文件以获取它,例如(这是我的 slapd.conf 的一部分):

      包括 /etc/ldap/schema/core.schema

    • 在新的 openLDAP 安装中包含您的个性化架构和对象类。

    • 使用 slapcat 命令将完整的 LDAP 树导出到单个/多个 ldif 文件。

    • 使用 ldapadd 将 ldif 文件导入到新的 LDAP 安装中。

    【讨论】:

    • 谢谢...问题是我不记得工具的名称(slapcat)
    • 对于较新版本的 OpenLDAP,您需要使用 'slapadd' 而不是 'ldapadd'。
    【解决方案4】:

    我更喜欢通过协议复制数据库:

    首先要确保两台服务器上的架构相同。

    -使用 ldapsearch 转储数据库:
    ldapsearch -LLL -Wx -D "cn=admin,dc=domain" -b "dc=domain" > domain.ldif

    -并将其导入新服务器:
    ldapmodify -Wx -D "cn=admin,dc=domain" -a -f domain.ldif

    在线:
    ldapsearch -LLL -Wx -D "cn=admin,dc=domain" -b "dc=domain" | ldapmodify -w pass -x -D "cn=admin,dc=domain" -a

    使用 bin/ldap* 命令可以直接与服务器对话,而使用 bin/slap* 命令可以处理后端文件

    【讨论】:

    • 我对如何“确保两台服务器上的架构相同”感兴趣。我的任务是将现有的 LDAP 移动到新服务器,并且以前从未使用过 openLdap。如何让架构镜像旧服务器以便导入成功?
    【解决方案5】:

    (没有足够的声誉来写评论......)

    Ldapsearch 打开与 LDAP 服务器的连接。 Slapcat 而是直接访问数据库,这意味着不会评估 ACL、时间和大小限制以及 LDAP 连接的其他副产品,因此不会更改数据。 (Matt Butcher,“掌握 OpenLDAP”)

    【讨论】:

    • 尝试给出更详细的答案。否则,您的答案可能更适合作为评论。
    • 嗯,这个要求和回答而不是评论是有原因的,只是因为一个人没有特权,但相当不受欢迎。
    【解决方案6】:

    谢谢,维什。像魅力一样工作!我编辑了命令:

    ldapsearch -z max -LLL -Wx -D "cn=Manager,dc=domain,dc=fr" -b "dc=domain,dc=fr" >/tmp/save.ldif
    
    ldapmodify -c -Wx -D "cn=Manager,dc=domain,dc=fr" -a -f /tmp/save.ldif
    

    只需添加-z max 以避免大小限制,即使目标域已经存在(我的情况),-c 也会继续。

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多