我正在尝试将 LDAP 服务器从版本 2.4.23 备份到新的 2.4.40 版本。在软件包初始配置期间,系统询问我一些问题,我用有关数据库的实际事实来回答这些问题,以期获得与旧服务器相同的配置。但是,一旦我完成配置,就会发现它没有产生预期的配置。
以下是旧服务器的配置(通过 获取slapcat -n0
):
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcPidFile: /var/run/slapd/slapd.pid
structuralObjectClass: olcGlobal
entryUUID: cde5ce8a-bf8f-1030-9594-7f29588dac90
creatorsName: cn=config
createTimestamp: 20111220195151Z
olcLogLevel: Stats
olcTLSCertificateFile: /etc/ssl/certs/ufpa.br.crt
olcTLSCertificateKeyFile: /etc/ssl/private/ufpa.br.key
olcToolThreads: 4
olcSizeLimit: unlimited
entryCSN: 20111222143131.011291Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20111222143131Z
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}syncprov
structuralObjectClass: olcModuleList
entryUUID: cdeca534-bf8f-1030-959c-7f29588dac90
creatorsName: cn=admin,cn=config
createTimestamp: 20111220195151Z
entryCSN: 20111220195151.317803Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20111220195151Z
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
structuralObjectClass: olcSchemaConfig
entryUUID: cde86cda-bf8f-1030-9597-7f29588dac90
creatorsName: cn=admin,cn=config
createTimestamp: 20111220195151Z
entryCSN: 20111220195151.290145Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20111220195151Z
以下是我从新安装的服务器获得的信息(带有slapcat
):
dn: dc=ufpa,dc=br
objectClass: top
objectClass: dcObject
objectClass: organization
o: UFPA
dc: ufpa
structuralObjectClass: organization
entryUUID: 90e79216-16d2-1037-8dbb-11462ab3e25c
creatorsName: cn=admin,dc=ufpa,dc=br
createTimestamp: 20170816132842Z
entryCSN: 20170816132842.412456Z#000000#000#000000
modifiersName: cn=admin,dc=ufpa,dc=br
modifyTimestamp: 20170816132842Z
dn: cn=admin,dc=ufpa,dc=br
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RC9YcU5KVFF1UHB0c0Nkc2pObUgrV2NSZHFVM3JWUkI=
structuralObjectClass: organizationalRole
entryUUID: 90e8e2b0-16d2-1037-8dbc-11462ab3e25c
creatorsName: cn=admin,dc=ufpa,dc=br
createTimestamp: 20170816132842Z
entryCSN: 20170816132842.421067Z#000000#000#000000
modifiersName: cn=admin,dc=ufpa,dc=br
modifyTimestamp: 20170816132842Z
尝试导入从旧服务器生成的文件产生以下结果:
slapadd: could not add entry dn="cn=config" (line=1):
_ 0.35% eta none elapsed none spd 2.0 M/s
Closing DB...
如果我尝试仅导入用户和计算机的信息,我会得到以下信息:
slapadd: line 1: database #1 (dc=ufpa,dc=br) not configured to hold "o=UFPA"; no database configured for that naming context
_ 0.00% eta 31s elapsed none spd 1.9 M/s
Closing DB...
我还使用以下方法转储了原始数据库ldapsearch -x -D "cn=admin,o=UFPA" -w 'admin_passwd' -b "o=UFPA" -H ldap://localhost -LLL "*" "+" > ldap_dump.ldif
然后尝试使用恢复ldapadd -Wx -D "cn=admin,dc=ufpa,dc=br" -h localhost -f ldap_dump.ldif
但这就是我得到的:
adding new entry "o=UFPA"
ldap_add: Server is unwilling to perform (53)
additional info: no global superior knowledge
有人能帮我解决这个问题吗?
答案1
当你想恢复完整cn=配置从另一台服务器备份,最好从一个空的配置目录开始(在我看来)。在 Debian 和 Ubuntu 上,安装程序将为您创建基本配置,这可能是导入失败的原因cn=config
,因为它已经存在。
这里有 2 个选项:
- 忽略错误并继续导入使用
-c
选项slapadd
- 从空白配置目录开始并从 ldif 文件导入所有配置。
以下是我的做法。
在旧服务器上:
slapcat -b cn=config > config.ldif
在新服务器上:
# backup current config
tar -czf /var/backups/openldap.config-$(date +%y%m%d).gz /etc/ldap/slapd.d
# delete current config
rm -rf /etc/ldap/slapd.d/*
# import config file copied from old server
slapadd -F /etc/ldap/slapd.d/ -b cn=config -l config.ldif
您收到no global superior knowledge
错误是因为 OpenLDAP 没有数据库来存储dn: dc=ufpa,dc=br
。如果在旧服务器中正确配置了它,则上述方法应该会将其全部转移到新服务器。然后您还可以像下面这样备份和恢复该数据库。
在旧服务器上:
slapcat -b dc=ufpa,dc=br > ufpa.br.ldif
在新服务器上:
# backup current database
tar -czf /var/backups/openldap.data-$(date +%y%m%d).tgz /var/lib/ldap
# delete current database
rm -rf /var/lib/ldap/*.*
# restore backup from old server
slapadd -b ufpa.br.ldif
如果您收到无法添加条目 dn="dc=ufpq,dc=br" 的错误,则配置备份中的某些内容可能已创建它。尝试使用-c
最后一个slapadd
命令上的选项。
答案2
答案3
如果无法使用 -c 作为 slapadd 并出现错误,请尝试使用 slapadd -F /etc/ldap/slapd.d/ -l ufpa.br.ldif 。使用前请确保 /var/lib/ldap 为空,并在恢复后将所有权设置为 ldap 用户。