7

我试图重命名我的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的配置:

  • 配置文件

到新的根 dn

但是在我重新启动slapdlighttpd之后服务后,虽然可以登录phpLDAPAdmin(admin binddn)的管理界面,但是什么也做不了。

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

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

4

3 回答 3

18

好的,我自己解决了。以下是我将当前 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(或old_ldap.ldif用新的 dn 修改)

    # 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

于 2013-10-24T07:49:59.210 回答
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
于 2017-05-15T16:47:12.297 回答
1

只是为了结合 Trinh Nguyen 和 RJ 的答案并省略干净的 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
于 2020-06-04T19:15:00.840 回答