25.3. 使用 slapd.conf 來設定伺服器

在您安裝好的系統的 /etc/openldap/slapd.conf 中有一個完整的組態檔,可供您的 LDAP 伺服器使用。此處有這個單一項目的簡介,對於必要的調整也有說明。開頭為井字符號 (#) 的項目為非作用中的項目。必須移除這個備註字元,才能啟用這些項目。

25.3.1. slapd.conf 中的全域指示詞

範例 25.2. slapd.conf:包括綱要指示詞

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/rfc2307bis.schema
include         /etc/openldap/schema/yast.schema

範例 25.2, "slapd.conf:包括綱要指示詞" 中,slapd.conf 的第一個指示詞指定一個綱要,LDAP 目錄會根據此綱要來組織其架構。core.schema 項目為強制性。這個指示詞後面會附加其他必要綱要。可在包含的 OpenLDAP 文件中找到更多資訊。

範例 25.3. slapd.conf:pidfile 和 argsfile

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args

這兩個檔案包含 PID (處理程序 ID) 和一些用來啟動 slapd 程序的引數。此處不需要修改。

範例 25.4. slapd.conf:存取控制

# Sample Access Control
#       Allow read access of root DSE
# Allow self write access
#       Allow authenticated users read access
#       Allow anonymous users to authenticate
# access to dn="" by * read
  access to * by self write
              by users read
              by anonymous auth
#
# if no access controls are present, the default is:
#       Allow read by all
#
# rootdn can always write!

範例 25.4, "slapd.conf:存取控制" 摘自 slapd.conf,此檔案在伺服器上負責管制 LDAP 目錄的存取權。只要特定資料庫區段中沒有宣告任何自訂的規刖,在 slapd.conf 全域區段中的設定均為有效。這些自訂規則可覆寫全域宣告。正如此處所提到的,所有使用者都有讀取目錄的權利,但只有管理員 (rootdn) 才可在目錄中寫入資料。LDAP 中的存取控制規定是一個非常複雜的程序。下列秘訣可提供協助:

  • 每一項存取規則都具有下列結構:

    access to <what> by <who> <access>
  • what 是一個替代符號,代表有存取權的物件或屬性。個別的目錄分支可由個別規則來明確地保護。也可使用一般表示式來處理目錄樹的區域。slapd 會按照組態檔中所列的順序來評估所有規則。較一般性的規則應列在較特定的規則之後 — 會評估 slapd 視為有效的第一條規則,並忽視其後的所有項目。

  • who 會決定誰應獲得存取權,以進入由 what 所決定的區域。可使用一般表示式。第一次的配對完成後 slapd 會再次中止 who 的評估,因此必須在較一般性的規則之後列出較特定的規則。在 表格 25.2, "使用者群組及其存取權" 中所顯示的項目是有可能的。

    表格 25.2. 使用者群組及其存取權

    標籤

    範圍

    *

    沒有例外的所有使用者

    anonymous

    未驗證的 (「匿名」) 使用者

    users

    驗證的使用者

    self

    以目標物件連線的使用者

    dn.regex=<regex>

    符合一般表示式的所有使用者

  • access 會指定存取類型。使用 表格 25.3, "存取類型" 中所列的選項。

    表格 25.3. 存取類型

    標籤

    存取範圍

    none

    沒有存取權

    auth

    連絡伺服器

    compare

    比較物件的存取

    search

    搜尋過濾器的使用

    read

    讀取權

    write

    寫入權

    slapd 會比較用戶端所要求的存取權與在 slapd.conf 中授予的存取權。如果用戶端所要求的權利比規則中的等級更低或同等,則可獲得存取權。如果用戶端要求的權利比規則中的宣告更高,則會被拒絕。

範例 25.5, "slapd.conf:存取控制範例" 顯示使用一般表示式即可任意開發簡單存取控制權的範例。

範例 25.5. slapd.conf:存取控制範例

access to  dn.regex="ou=([^,]+),dc=suse,dc=de" 
by dn.regex="cn=administrator,ou=$1,dc=suse,dc=de" write  
by user read 
by * none

此規則宣告只有個別的管理員有寫入個別 ou 項目的權利。其它所有通過驗證的使用者都有讀取權,其餘的人則沒有存取權。

[Tip]建立存取規則

如果沒有 access to 的規則或者沒有符合 by 的指示詞,則無法取得存取權。只會授予明確宣告的存取權。如果沒有任何宣告的規則,則管理員依照預設原則擁有寫入權,其他人則有讀取權。

請至已安裝的 openldap2 套件的線上文件尋找詳細資訊及 LDAP 存取權的組態範例。

除了使用 (slapd.conf) 中央組態檔來管理存取許可權之外,也可使用存取控制資訊 (ACI)。ACI 允許在 LDAP 樹中儲存個別物件的存取資訊。此種類型的存取控制尚未普遍,開發者目前仍將它視為一項實驗。請參閱 http://www.openldap.org/faq/data/cache/758.html 以取得更多資訊。

25.3.2. slapd.conf 中的資料庫特定指示詞

範例 25.6. slapd.conf:資料庫特定指示詞

database bdb 
checkpoint      1024    5
cachesize       10000
suffix "dc=suse,dc=de" 
rootdn "cn=admin,dc=suse,dc=de" 
# Cleartext passwords, especially for the rootdn, should 
# be avoided.  See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged.
rootpw secret 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap 
# Indices to maintain 
index   objectClass     eq

資料庫類型 (在此例中是 Berkeley 資料庫) 是在這段文字的第一行決定 (請參閱 範例 25.6, "slapd.conf:資料庫特定指示詞")。checkpoint 可決定異動記錄要保留多少資料量 (單位為 kb) 之後才會寫入實際資料庫,以及決定兩次寫入動作之間的相隔時間 (單位為分鐘)。cachesize 可設定資料庫快取中保留的物件數。suffix 可決定這部伺服器應該負責 LDAP 樹的哪個部份。接下來的 rootdn 決定擁有本伺服器管理權的人。此處宣告的使用者不需要有 LDAP 項目或以一般使用者的身份出現。管理員密碼是使用 rootpw 來設定。在這裡可以不使用 secret 而是以雜湊值來輸入 slappasswd 所建立的管理員密碼。directory 指示詞表示資料庫目錄所在的目錄 (在檔案系統中) 儲存在伺服器中。最後一個指示詞 index objectClass eq 會啟動所有物件類別索引的維護作業。在此處可根據經驗,加入一個使用者最常搜尋的屬性。此處使用的是資料庫自訂的 Access 規則,而非全域的 Access 規則。

25.3.3. 啟動及停止伺服器

一旦 LDAP 伺服器完全設定好,且所有需要的項目已依照 節 25.4, "LDAP 目錄中的資料處理" 中描述的樣式建立之後,輸入 rcldap startroot 的身份來啟動 LDAP 伺服器。輸入 rcldap stop 指令可手動停止伺服器。使用 rcldap status 來請求執行中 LDAP 伺服器的狀態。

節 8.2.3, "使用 YaST 設定系統服務 (Runlevel)" 中所描述的 YaST runlevel 編輯器,可讓系統在啟動和暫停時自動啟動及停止伺服器。也可以透過 節 8.2.2, "Init 程序檔" 中所述的指令提示,利用 insserv 指令來建立對應的連結至啟動和停止程序檔。