【问题标题】:Change BaseDN in OpenLDAP在 OpenLDAP 中更改 BaseDN
【发布时间】:2013-10-23 09:00:19
【问题描述】:

我试图重命名我的 OpenLDAP 的 baseDN

来自:

dc=abc,dc=com

到:

dc=xyz,dc=edu

我确实修改了一些conf文件:

  • /etc/ldap/slapd.d/cn\=config/olcDatabase={1}hdb.ldif

  • /etc/ldapscripts/ldapscripts.conf

以及phpLDAPadmin的配置:

  • config.php

到新的根 dn

但是重启slapdlighttpd服务后,虽然可以登录phpLDAPAdmin的管理界面(admin binddn),但是还是不行任何东西。

我也尝试运行一些 ldap 命令行,但没有成功。

我还需要做什么?还是我的方法有什么问题?

【问题讨论】:

    标签: debian rename openldap


    【解决方案1】:

    好的,我自己解决了。以下是我将当前 LDAP 数据库迁移到新域的方法:

    • 将旧的 LDAP 数据库导出到 ldif 文件。
    • 删除旧数据库
    • 使用新域名创建新的 LDAP 数据库
    • 修改上面导出的 ldif 文件以适应新域(根 dn)
    • 将修改后的ldif文件导入新数据库

    假设我有一个新域名 dc=my,dc=new,dc=ldap,dc=domain,并且我想将所有现有的 LDAP 数据移动到新域名。

    我做了以下步骤

    1. 备份旧的 LDAP 数据库

      # slapcat -v -l old_ldap.ldif
      
    2. 停止 OpenLDAP 服务器

      # service slapd stop
      
    3. 删除旧的 LDAP 数据库

      # cd /var/lib/ldap
      # rm -rf *
      
    4. 确保 LDAP 没有运行

      # nano /var/lib/ldap/DB_CONFIG
      

      注意:添加以下行并保存

      #DB_CONFIG
      set_cachesize           0 150000000 1
      set_lg_regionmax        262144
      set_lg_bsize            2097152
      set_flags               DB_LOG_AUTOREMOVE
      
    5. 更改以下文件中的当前 LDAP 设置

      • /etc/ldapscripts/ldapscripts.conf

        ...
        SERVER="ldap://localhost"
        BINDDN="cn=admin,dc=my,dc=new,dc=ldap,dc=domain"
        BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
        ...
        
      • /etc/ldap/slapd.d/cn=config/olcDatabase\={1}hdb.ldif

        ...
        olcSuffix: dc=my,dc=new,dc=ldap,dc=domain
        olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=my,dc=new,dc=ldap,dc=domain" write by * none
        olcAccess: {2}to * by self write by dn="cn=admin,dc=my,dc=new,dc=ldap,dc=domain" write by * read
        olcRootDN: cn=admin,dc=my,dc=new,dc=ldap,dc=domain
        olcRootPW: <new administrator password>
        ...
        
    6. 准备新的 LDAP 目录结构,数据,new_ldap.ldif,(或用新的 dn 修改 old_ldap.ldif

      # Root
      dn:                    dc=my,dc=new,dc=ldap,dc=domain
      description:           New LDAP BaseDN
      dc:                    parent
      o:                     parent.my.new.ldap.domain
      objectClass:           top
      objectClass:           dcObject
      objectClass:           organization
      structuralObjectClass: organization
      
      # administrator
      dn:                    cn=admin,dc=my,dc=new,dc=ldap,dc=domain
      objectClass:           simpleSecurityObject
      objectClass:           organizationalRole
      cn:                    admin
      description:           LDAP administrator
      userPassword:          <new administrator password>
      structuralObjectClass: organizationalRole
      
      # Subtree for Users
      dn:                    ou=Users,dc=my,dc=new,dc=ldap,dc=domain
      ou:                    Users
      description:           Parent Ldap Users
      objectClass:           organizationalUnit
      objectClass:           top
      structuralObjectClass: organizationalUnit
      
      # Subtree for Groups
      dn:                    ou=Groups,dc=my,dc=new,dc=ldap,dc=domain
      ou:                    Groups
      description:           Parent LDAP Groups
      objectClass:           organizationalUnit
      objectClass:           top
      structuralObjectClass: organizationalUnit
      ...
      
    7. 测试新的 ldif

      # slapadd -b "dc=my,dc=new,dc=ldap,dc=domain" -v -u -l new_ldap.ldif 
      

      注意:-u 表示在测试模式下运行命令

    如果一切正常,输出将如下所示:

        added: "dc=my,dc=new,dc=ldap,dc=domain"
        added: "cn=admin,dc=my,dc=new,dc=ldap,dc=domain"
        added: "ou=Users,dc=my,dc=new,dc=ldap,dc=domain"
        added: "ou=Groups,dc=my,dc=new,dc=ldap,dc=domain"
        _#################### 100.00% eta   none elapsed            none fast! 
    
    1. 将新的 LDAP 数据添加到服务器

      # slapadd -b "dc=my,dc=new,dc=ldap,dc=domain" -v -l new_ldap.ldif
      

    您可以在我的博客文章中查看有关此问题的更新:http://iambusychangingtheworld.blogspot.com/2013/10/ldap-create-new-ldap-directory.html

    【讨论】:

    • 请注意,JXplorer 工具将导出或导入具有重新基于 BaseDN 的 LDIF,但不幸的是,它不会将该更改应用于 DN 值属性。
    【解决方案2】:

    非常有用的指南!为了将来参考,我发现: 修改第 5b 点后,测试(如第 7 点所述)将报告失败的 crc32 值(校验和位于同一文件的第 2 行);

    2018 年 6 月 2 日编辑: 根据 PF4Public 的建议,您也许可以将这些行作为一个整体删除。

    在任何其他情况下: 而且你必须生成一个新的 crc32(我使用的是 Debian Jessy,你的路径可能不同)

    快速路线:

    tail -n +3 /etc/ldap/slapd.d/cn\=config/olcDatabase\=\{1\}mdb.ldif
    

    并将结果粘贴到在线 crc32 计算器中。 计算出的 crc32 值替换位于 mdb.ldif 的第 2 行的旧值。

    这里描述了慢/彻底的路线: https://gist.github.com/Shaltz/1d65a07a0901a36fb7f1

    添加 new_ldap.ldif 后,确保 openldap 用户对生成的数据库具有权限。

    chown -R openldap:openldap /var/lib/ldap
    

    【讨论】:

    • 你试过删除这两行吗?删除它们就足够了。
    • 这是一个更好的建议!!,把你的建议放在第一位!
    【解决方案3】:

    只是结合 Trinh Nguyen 和 R.J. 的回答,并省略了干净的 Ubuntu 20.04 安装所需的内容:

    将数据库备份到可编辑的 ldif 文件:

    sudo slapcat -v -l ldap.ldif
    

    编辑 ldap.ldif 以更改根 dn。

    停止slapd,删除旧的ldap数据库并根据编辑的ldif新建一个,chown:

    sudo service slapd stop
    sudo rm /var/lib/ldap/*
    sudo slapadd -b "dc=new_root_name" -v -l ldap.ldif
    sudo chown -R openldap:openldap /var/lib/ldap
    

    编辑 /etc/ldap.conf/etc/ldap/slapd.d/cn=config/olcDatabase\={1}mdb.ldif 以匹配管理员 dn。并再次启动服务器:

    sudo service slapd start
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      相关资源
      最近更新 更多