我试图重命名 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
但是在我重新启动 slapd 和 lighttpd 服务之后,即使我可以登录到phpLDAPAdmin(admin binddn)的管理界面,但我无法做到任何东西。
我也试过运行一些ldap命令行,但它没有用。
我还需要做什么?或者我的方法有什么问题?
答案 0 :(得分:15)
假设我有一个新域名, dc = my,dc = new,dc = ldap,dc = domain ,我想将所有现有LDAP数据移动到新域名。
备份旧的LDAP数据库
# slapcat -v -l old_ldap.ldif
停止OpenLDAP服务器
# service slapd stop
删除旧的LDAP数据库
# cd /var/lib/ldap
# rm -rf *
确保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
更改以下文件中的当前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>
...
准备新的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
...
测试新的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!
将新的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
答案 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