在OpenLDAP中更改BaseDN

时间:2013-10-23 09:00:20

标签: debian rename openldap

我试图重命名 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

但是在我重新启动 slapd lighttpd 服务之后,即使我可以登录到phpLDAPAdmin(admin binddn)的管理界面,但我无法做到任何东西。

我也试过运行一些ldap命令行,但它没有用。

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

3 个答案:

答案 0 :(得分:15)

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

  • 将旧LDAP数据库导出到ldif文件。
  • 删除旧数据库
  • 使用新域名
  • 创建新的LDAP数据库
  • 修改上面导出的ldif文件以适合新域(root 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表示在测试模式下运行命令

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

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

答案 1 :(得分:1)

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

编辑06/2/2018: 根据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

答案 2 :(得分:0)

只需结合Trinh Nguyen和R.J.的答案,就不需要进行干净的Ubuntu 20.04安装所需的内容:

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

sudo slapcat -v -l ldap.ldif

编辑ldap.ldif更改根dn。

停止拍打,删除旧的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以匹配admin dn。然后重新启动服务器:

sudo service slapd start