Open Directory 複製可能無法運作;「超過大小限制」會出現在 slapd.log 中

Open Directory 複製可能無法運作;發生這種情況時,如下所示的項目會出現在 /var/log/slapd.log 中

slapd[209]: do_syncrep2: rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded
slapd[209]: do_syncrep2: rid=001 (4) Size limit exceeded

如果 Open Directory 伺服器長時間停止服務,或在 LDAP 資料存放區有超過 11000 個物件時建立複本,就會發現此情況。11000 是預設搜尋時可以回傳的最大物件數量。

允許 LDAP 複製程式使用者覆寫搜尋限制。透過更改每一個 Open Directory 伺服器上的 LDAP 伺服器設定可完成此動作。這包含以目錄管理者進行驗證以及在終端機中執行某些 LDAP 修改指令。LDAP 伺服器的搜尋基礎(又稱為命名內容)也必須瞭解。

以下步驟可用來完成此功能。

首先,找出 LDAP 伺服器的搜尋基礎

尋找 LDAP 伺服器的搜尋基礎。這通常是伺服器完全合格的網域名稱,其中每個標籤前面加上 dc=,並將句號改成逗點。

例如,主機名稱為 server.example.com 的伺服器,將擁有預設的搜尋基礎「dc=server,dc=example,dc=com」。搜尋基礎可以透過使用下列終端機指令查詢 LDAP 伺服器本身進行驗證:

ldapsearch -x -LLL -b “” -s base namingContexts

尋找包含 namingContexts 的那一列,而搜尋基礎將如下方輸出範例所示出現在冒號之後。

dn:
namingContexts: dc=server,dc=example,dc=com

第二,請為目錄管理者取得 Kerberos 憑證

這個使用者的預設名稱為 diradmin,但在建立 Open Directory 主伺服器時可能會變更該名稱。在終端機中使用 kinit 指令完成此動作。執行下列指令,必要時為 diradmin 的目錄管理者換上正確的名稱,然後在系統提示時輸入密碼。沒有輸出。

kinit diradmin

接著,請在終端機的互動模式中使用 ldapmodify 進行變更。只要在終端機中執行下列指令=:

ldapmodify

附註: 這會輸出一些 SASL 訊息然後等待輸入。一旦成功,SASL 輸出看起來應該像這樣:

SASL/GSSAPI authentication started
SASL username: diradmin@REALM
SASL SSF: 56
SASL data security layer installed.

修改設定

最後,請對設定進行修改。這需要將以下所有文字輸入終端機視窗,做為 ldapmodify 指令的輸入。搜尋基礎已替換為下方的 [search base]。中括號也需要移除。

dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,[search base]" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

現在按下 Control-D。

如果每一項都成功,會顯示如下的訊息。

modifying entry "olcDatabase={1}bdb,cn=config"
modifying entry "olcDatabase={2}bdb,cn=config"

更多內容

   

Shell 指令碼替代方案

以下是可用來將此程序自動執行的 Shell 指令碼文字。只需以上述方法 kinit 目錄管理者並執行此指令碼。請參閱這篇文章取得文字編輯器建議。

#!/bin/sh
nc=`ldapsearch -x -LLL -b "" -s base namingContexts | awk '/namingContexts/ {print $2}'`
ldapmodify  <<EOF
dn: olcDatabase={1}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="uid=_ldap_replicator,cn=users,$nc" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited

EOF
#end of script
發佈日期: