Openldap

備份 LDAP 數據庫

  • March 14, 2019

我正在嘗試將 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

誰能幫我解決這個問題?

當您想從另一台伺服器恢復完整的cn=config備份時,最好從一個空的 config 目錄開始(在我看來)。在 Debian 和 Ubuntu 上,安裝程序將為您創建基本配置,這可能是它無法 importcn=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

引用自:https://serverfault.com/questions/869162