使用 slapd.conf 來設定伺服器

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

slapd.conf 中的全域指示詞

範例 36.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

範例 36.2 「slapd.conf︰包括綱要指示詞」所顯示的 slapd.conf 中,第一個指示詞會指定供 LDAP 目錄做為組織依據的綱要。core.schema 項目為必需。其他必需的綱要都附加於此指示詞之後。請在包含的 OpenLDAP 文件中尋找更多資訊。

範例 36.3. slapd.conf︰pidfile 與 argsfile

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

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

範例 36.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!

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

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

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

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

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

    標籤

    範圍

    *

    沒有例外的所有使用者

    anonymous

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

    users

    驗證的使用者

    self

    以目標物件連線的使用者

    dn.regex=<regex>

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


  • access 會指定存取類型。使用 表格 36.3 「存取類型」 中所列的選項。

    表格 36.3. 存取類型

    標籤

    存取範圍

    none

    沒有存取權

    auth

    連絡伺服器

    compare

    比較物件的存取

    search

    搜尋過濾器的使用

    read

    讀取權

    write

    寫入權


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

範例 36.5 「slapd.conf︰存取控制範例」顯示使用一般表示式即可任意開發簡單存取控制權的範例。

範例 36.5. slapd.conf︰存取控制範例

access to  dn.regex="ou=([^,]+),dc=example,dc=com" 
by dn.regex="cn=Administrator,ou=$1,dc=example,dc=com" 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以取得更多資訊。

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

範例 36.6. slapd.conf︰資料庫特定指示詞

database bdb1
suffix "dc=example,dc=com"2 
checkpoint      1024    53
cachesize       100004
rootdn "cn=Administrator,dc=example,dc=com"5 
# Cleartext passwords, especially for the rootdn, should 
# be avoided.  See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged.
rootpw secret6 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap7 
# Indices to maintain 
index   objectClass     eq8
overlay ppolicy9
ppolicy_default "cn=Default Password Policy,dc=example,dc=com"
ppolicy_hash_cleartext
ppolicy_use_lockout

1

此區段的第一行設定的是資料庫類型 (在此案例中為 Berkeley 資料庫),請參閱範例 36.6 「slapd.conf︰資料庫特定指示詞」

2

suffix 決定此伺服器應負責的 LDAP 目錄樹部分。

3

checkpoint 決定在寫入實際資料庫之前可保留在交易記錄中的資料數量 (以 KB 為單位) 以及兩次寫入動作之間的時間 (以分鐘為單位)。

4

cachesize 設定可保留在資料庫快取記憶體中的物件數量。

5

rootdn 決定可擁有此伺服器管理權的使用者。此處宣告的使用者不需要有 LDAP 項目或以一般使用者的身份出現。

6

rootpw 設定管理員密碼。在這裡可以不使用 secret 而是以雜湊值來輸入 slappasswd 所建立的管理員密碼。

7

directory 指示詞表示資料庫目錄在檔案系統中所在的目錄,儲存在伺服器中。

8

最後一個指示詞 index objectClass eq 會啟動所有物件類別之索引的維護作業。在此處可根據經驗,加入一個使用者最常搜尋的屬性。

9

overlay ppolicy 新增密碼控制機制的層級。在指定使用者的項目中未設定任何特定規則時,ppolicy_default 可指定要使用之 pwdPolicy 物件的 DN。如果項目沒有特定規則,且未給定預設值,則不強制執行任何規則。ppolicy_hash_cleartext 指定在請求儲存到資料庫之前雜湊新增請求與修改請求的純文字密碼。使用此選項時,建議拒絕所有目錄使用者對 userPassword 的比較、搜尋及讀取存取,因為 ppolicy_hash_cleartext 違反 X.500/LDAP 資訊模型。ppolicy_use_lockout 會在用戶端嘗試連接鎖定的帳戶時,傳送特定的錯誤碼。如果您的網站對安全性問題比較敏感,請停用此選項,因為錯誤碼會給攻擊者提供有用資訊。

此處使用的是資料庫自定的 Access 規則,而非全域的 Access 規則。

啟動及停止伺服器

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

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