在不執行 slapd 的情況下修改 openLDAP cn=config
我正在嘗試設置一個多主 openLDAP (PoC) 集群。我在某個地方創建了錯誤的配置,現在 slapd 將無法啟動。由於
cn=config
/olc
config 帶有 CRC32 標記,因此它不會接受手動更改。那麼,如何在不執行守護程序的情況下進行配置更改?
有
slapadd
,但我需要修改,而不是添加……對嗎?我覺得我可能遺漏了一些明顯的東西。如果這很重要,我認為其中一個或兩個都是錯誤的
olcModuleLoad
。olcServerID
在 Ubuntu 16.04 上執行 openldap-2.4.42。
更新
關於不被接受的編輯我錯了。配置因其他原因被拒絕(未找到 serverID / URL 匹配),校驗和錯誤已記錄,但不會阻止守護程序啟動。
我能夠手動編輯 ldif 文件
/etc/ldap/slap.d/cn=config
並啟動伺服器。(雖然我還沒有讓多主複製工作。)
我知道您基本上已經解決了您的問題,但我想如果其他人遇到此問題,我會添加自己的步驟來進行離線 slapd 配置。這來自我自己的基於 Debian 的系統的文件:
有時需要
cn=config
手動編輯樣式數據庫(例如,如果您無法使用 root 帳戶進入數據庫),但cn=config
絕不應該手動編輯樣式數據庫。為了直接修復文件本身的問題,您需要將數據庫轉換為 ldif 格式,進行更改,然後恢復數據庫。這是使用拍打工具完成的。首先停止 slapd 服務。建議複製 slapd 目錄及其所有內容,以防萬一出現問題。
$ systemctl stop slapd $ cp -a /etc/ldap/slapd.d /var/backups/slapd.d-offline-$(date +%s)
現在備份您要更改的 slapd 數據庫。備份和恢復應使用拍打工具。Slapcat 可用於將數據庫從
cn=config
樣式轉換為 ldif 文件。要備份配置數據庫,請使用 slapcat 將其導出到 ldif 文件。$ slapcat -n0 -F /etc/ldap/slapd.d/ -l /var/backups/slapd.d-config-$(date +%s).ldif
-n 選項指定要備份哪個數據庫。配置數據庫始終為 0。
要備份不同的數據庫,只需將 dbnum 選項替換為正確的數據庫編號。如果您只有一個數據庫,這可能是“1”。
$ slapcat -n1 -F /etc/ldap/slapd.d/ -l /var/backups/slapd.d-acme-$(date +%s).ldif
備份目前數據庫後,您需要刪除 ldap 文件夾下的 slapd 目錄並創建一個新目錄。
$ rm -rf /etc/ldap/slapd.d $ mkdir /etc/ldap/slapd.d
現在您可以使用文本編輯器對使用 slapcat 工具創建的 ldif 文件進行更改。小心任何編輯,因為拼寫錯誤、無效語法和其他問題將導致重新導入 ldif 文件失敗。完成所有更改後,將數據庫導入新的 slapd 目錄。
cn=config
使用 slapadd 工具將數據庫的 ldif 備份轉換為。slapadd 工具與 slapcat 工具一樣需要數據庫編號。0 始終是配置數據庫。$ slapadd -n0 -F /etc/ldap/slapd.d -l /var/backups/slapd.d-config-<timestamp>.ldif
替換
<timestamp>
為您實際要還原的數據庫。要恢復您的數據庫而不是配置數據庫,只需將 dbnum 選項替換為正確的數據庫編號。如果您只有一個數據庫,這可能是“1”。
確保更改所有新文件的所有權和權限。
$ chown -R openldap:openldap /etc/ldap/slapd.d
現在開始 slapd 備份。
$ systemctl start slapd