Sun Java System Directory Server Enterprise Edition 6.0 管理指南

第 1 部分 目錄伺服器管理

第 1 章 目錄伺服器工具

Sun JavaTM System Directory Server Enterprise Edition 提供可在複寫環境中管理多重伺服器、實例與尾碼的瀏覽器介面與指令行工具。本章提供有關目錄伺服器管理工具的簡介資訊。

本章包含下列主題:

目錄伺服器管理簡介

有關目錄伺服器管理架構的資訊,另載於本文件集的其他指南中。

決定 DSCC 與指令行的使用時機

Directory Server Enterprise Edition 提供兩種管理目錄伺服器與目錄代理伺服器的使用者介面:瀏覽器介面目錄服務控制中心 (DSCC) 與指令行介面。

判斷是否可使用 DSCC 執行某程序

本指南中大部分的程序皆可使用指令行或 DSCC 執行。本指南中的程序說明如何使用指令行完成程序。大部分的情況下皆可使用 DSCC 執行相同作業。若 DSCC 可用於執行特定程序,則程序的開頭處就會提供執行說明。

DSCC 線上說明針對如何使用 DSCC 執行本指南中的程序,提供了詳細的指示。

較適合使用 DSCC 的情況

比起使用指令行,DSCC 可讓您更容易執行某些作業與工作,以下幾節中將有所說明。一般而言,必須套用至數部伺服器的指令最好使用 DSCC 執行。

檢視伺服器與尾碼複寫狀態

DSCC 具有顯示表格,可呈現已在 DSCC 中註冊的所有伺服器實例、所有已配置的尾碼,以及這些項目的狀態。

伺服器表格位於 [目錄伺服器] 標籤上,可顯示伺服器的操作狀態。如需可能之伺服器狀態的完整清單,請參閱目錄伺服器線上說明。

尾碼表格位於 [尾碼] 標籤上,並會顯示複寫狀態資訊,例如項目數以及任何遺失變更的數量與存在時間。如需有關此表格所顯示之資訊的更多資訊,請參閱目錄伺服器線上說明。

管理伺服器群組

伺服器群組可協助您監控並配置伺服器。您可以建立群組,以及將伺服器指定至群組中。例如,您可以依地理位置或功能,將伺服器群組化。若具有大量的伺服器,則可以篩選 [目錄伺服器] 標籤上所顯示的伺服器,而僅顯示群組中的伺服器。您也可以將某一伺服器的配置 (例如,索引或快取設定) 複製到群組中的其他所有伺服器。如需有關如何設定及使用伺服器群組的指示,請參閱目錄伺服器線上說明。

複製配置設定

DSCC 可讓您將現有伺服器、尾碼或複寫協議的配置設定,複製到一或多個其他的伺服器、尾碼或複寫協議。如需有關如何執行前述各項作業的資訊,請參閱目錄伺服器線上說明。

配置複寫

使用 DSCC 可讓您快速而輕鬆地設定複寫拓樸。只需建立伺服器實例,再使用 DSCC 所提供的步驟指定各伺服器的角色即可。DSCC 可自動為您建立複寫協議。如需有關如何使用 DSCC 配置複寫的更多資訊,請參閱目錄伺服器線上說明。

目錄服務控制中心介面

目錄服務控制中心 (DSCC) 是一項可讓您使用瀏覽器管理目錄伺服器與目錄代理伺服器的使用者介面。

若要配置 DSCC,請參閱配置 DSCC。如需有關使用 DSCC 的資訊,請參閱下列幾節。

DSCC 的管理使用者

DSCC 具有一些管理登入。

Procedure存取 DSCC

若您在存取 DSCC 時有任何問題,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的「To Troubleshoot Directory Service Control Center Access」

  1. 請確定 DSCC 已如「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的「Software Installation」所述正確地安裝。

  2. 開啟瀏覽器,然後以下列格式鍵入 DSCC 主機 URL:


    https://hostname:6789

    例如:


    https://host1:6789

    其中 hostname 是您安裝 DSCC 軟體所在的系統。

    Sun Java Web Console 預設連接埠為 6789

    下圖顯示 Sun Java Web Console 登入視窗。

    圖 1–1 Sun Java Web Console 登入視窗

    Sun Java Web Console 登入視窗。

  3. 登入 Sun Java Web Console。

    • 若這是您第一次登入 Sun Java Web Console,請以安裝 DSCC 軟體所在系統的超級使用者身份登入。

    • 若這是後續登入,請鍵入作業系統使用者名稱與密碼。此使用者應具有啟動、停止及管理目錄伺服器實例的權限。

    您登入時會看見應用程式的清單。

  4. 選取目錄服務控制中心 (DSCC)。

    DSCC 登入視窗會隨即顯示。

  5. 登入 DSCC。

    若這是第一次登入 DSCC,則必須設定目錄服務管理員密碼。當您日後登入時,請使用第一次登入時所設定的密碼。

    現在即已登入 DSCC,並位於 [常用工作] 標籤上。

    圖 1–2 DSCC [常用工作] 標籤

    螢幕擷取顯示 DSCC [常用工作] 標籤。

  6. 使用標籤進行瀏覽。

    • [常用工作] 標籤中具有常用視窗與精靈的捷徑。

    • [目錄伺服器] 標籤會顯示 DSCC 所管理的所有目錄伺服器。若要檢視用以管理及配置特定伺服器的其他選項,請按一下該伺服器的名稱。

    • [代理伺服器] 標籤會顯示 DSCC 所管理的所有目錄代理伺服器。若要檢視用以管理及配置特定伺服器的其他選項,請按一下該伺服器的名稱。


    備註 –

    如需有關如何使用 DSCC 執行作業的指示,請參閱 DSCC 線上說明。


    圖 1–3 伺服器子標籤上的目錄伺服器清單

    螢幕擷取顯示目錄伺服器伺服器清單。

DSCC 標籤說明

使用 DSCC 中的標籤瀏覽介面。

[常用工作] 標籤

[常用工作] 標籤 (請參閱圖 1–2) 是您在開啟 DSCC 後所看見的第一個介面。其中包含常用管理作業的連結,例如搜尋目錄資料、檢查記錄與管理伺服器。

[目錄伺服器] 標籤

[目錄伺服器] 標籤 (請參閱圖 1–3) 會列出 DSCC 中已註冊的所有目錄伺服器。您可以檢視每部伺服器的狀態與實例路徑,其會顯示實例的所在位置。

按一下伺服器名稱時,會看見另一個視窗,其中會顯示僅與該部伺服器相關的不同標籤組。

[代理伺服器] 標籤

[代理伺服器] 標籤會列出 DSCC 中已註冊的所有目錄代理伺服器。您可以檢視每部伺服器的狀態與實例路徑,其會顯示實例的所在位置。

按一下伺服器名稱時,會看見另一個視窗,其中會顯示僅與該部伺服器相關的不同標籤組。

[伺服器群組] 標籤

[伺服器群組] 標籤可讓您指定伺服器至群組中,以利於伺服器的管理。若您具有為數眾多的伺服器,可以使用篩選器而僅顯示特定群組中的伺服器。您也可以將某一伺服器的配置 (例如,索引或快取設定) 複製到群組中的其他所有伺服器。

[設定] 標籤

此標籤會顯示 DSCC 連接埠號,並可讓您建立及刪除目錄服務管理員。

DSCC 線上說明

線上說明提供下列項目:

在大部分的頁面中,只要按一下畫面右上角的 [說明] 按鈕,即可存取說明。在精靈中要存取說明時,請按一下 [說明] 標籤。也可以從 [常用工作] 標籤存取線上說明。

目錄伺服器指令行工具

可在 DSCC 上執行的作業,大多也可使用指令行工具執行。這些工具可讓您直接從指令行管理目錄伺服器,以及使用程序檔管理您的伺服器。

主要的目錄伺服器指令為 dsadmdsconf。您可以使用這些指令執行備份、匯出至 LDIF 以及管理憑證等作業。如需有關這些指令的資訊,請參閱 dsadm(1M) 線上手冊與 dsconf(1M) 線上手冊。

本節包含下列有關目錄伺服器指令行工具的資訊:

目錄伺服器指令的位置

目錄伺服器指令行工具位於預設的安裝目錄中:


install-path/ds6/bin

安裝目錄視您的作業系統而定。預設路徑與指令位置中列出了所有作業系統的安裝路徑。

設定 dsconf 的環境變數

dsconf 指令需要某些可透過環境變數預先設定的選項。在使用指令時若未指定選項,或未設定環境變數,則會使用預設值。您可以配置下列選項的環境變數:

-D user DN

使用者連結 DN。環境變數:LDAP_ADMIN_USER。預設值:cn=Directory Manager

-w password-file

使用者連結 DN 的密碼檔案。環境變數: LDAP_ADMIN_PWF。預設值:密碼提示。

-h host

主機名稱。環境變數:DIRSERV_HOST。預設值:local host

-p LDAP-port

LDAP 連接埠號。環境變數:DIRSERV_PORT。預設值:389

如需詳細資訊,請參閱 dsconf(1M) 線上手冊。

dsadmdsconf 的比較

下表顯示 dsadmdsconf 指令的比較。

表 1–1 dsadmdsconf 指令的比較

 

dsadm 指令

dsconf 指令

說明 

必須直接在本地主機上執行的管理指令。例如:

  • 啟動及停止伺服器

  • 建立伺服器實例

可從遠端主機上執行的管理指令。例如:

  • 啟用複寫

  • 設定快取大小

注意 

必須停止伺服器 (dsadm stopdsadm info 指令除外)。

伺服器由伺服器實例路徑 (instance-path) 進行識別。

您必須具備伺服器實例路徑的作業系統存取權限。 

伺服器必須正在執行中。 

伺服器由主機名稱 (-h) 連接埠 ( -p) 或 LDAPS 安全連接埠 (-P) 進行識別。

若未指定連接埠號,dsconf 會使用預設連接埠 (389 適用於 LDAP)。

您必須具備配置資料的 LDAP 存取權限,例如,具備使用者 cn=admin,cn=Administrators,cn=config 的身份。 

使用 dsadmdsconf 取得說明

如需有關如何使用 dsadmdsconf 指令的完整資訊,請參閱 dsadm(1M) 線上手冊與 dsconf(1M) 線上手冊。

使用 dsconf 修改配置特性

有許多 dsconf 子指令皆可讓使用者檢視及修改配置特性。

如需有關個別特性的更多資訊,請參閱該特性的線上手冊。此線上手冊位於「Sun Java System Directory Server Enterprise Edition 6.0 Man Page Reference」中。

使用 dsconf 設定多重值特性

某些目錄伺服器特性可容納多個值。指定這些值的語法如下:


$ dsconf set-container-prop -h host -p port container-name \
 property:value1 property:value2

例如,若要為伺服器設定多個加密密碼,請使用下列指令:


$ dsconf set-server-prop -h host1 -p 1389 ssl-cipher-family:SSL_RSA_WITH_RC4_128_MD5 \
 ssl-cipher-family:SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA

若對已含有值的多重值特性增加或修改了值,即必須重設所有值。例如,在前述案例中,若要增加加密密碼,則必須在指令中納入所有其他的加密密碼:


$ dsconf set-server-prop -h host1 -p 1389 ssl-cipher-family:SSL_RSA_WITH_RC4_128_MD5 \
 ssl-cipher-family:SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA \
 ssl-cipher-family:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

相同的規則亦適用於移除值。因此,若要從前述範例中的清單移除 MD5 密碼,請執行下列指令:


$ dsconf set-server-prop -h host1 -p 1389 ssl-cipher-family:SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA \
 ssl-cipher-family:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

線上手冊

線上手冊可提供目錄伺服器中所使用之所有指令與屬性的說明。此外,線上手冊也會顯示如何在部署中使用指令的一些實用範例。

舊有工具

一般目錄伺服器工具中附有舊有工具,以提供向下相容性。這些工具雖仍存在,但實際上已停用。

第 2 章 目錄伺服器實例與尾碼

本章說明如何建立及管理目錄伺服器實例與尾碼。另有多項目錄管理作業也是在尾碼層級上進行配置,但其相關內容另載於本書的其他章節。

本章包含下列主題:

建立伺服器實例與尾碼的快速程序

本章包含如何建立伺服器實例與尾碼的詳細資訊。如需快速建立目錄伺服器實例與尾碼,以及匯入某些範例資料,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的「Server Instance Creation」

建立及刪除目錄伺服器實例

本節說明如何建立及刪除目錄伺服器實例。

Procedure建立目錄伺服器實例

在您進行資料管理前,必須先使用指令行工具或瀏覽器介面目錄服務控制中心 (DSCC) 建立目錄伺服器實例。在 DSCC 中,目錄伺服器實例通常簡稱為「目錄伺服器」。

當您建立目錄伺服器實例時,您目錄伺服器所需的檔案與目錄將會建立在所指定的 instance-path 中。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

若使用 DSCC 建立新的伺服器實例,則可選擇從現有的伺服器複製部分或全部的伺服器配置設定。

  1. 建立新的目錄伺服器實例,並設定實例路徑。


    $ dsadm create instance-path
    

    系統會提示您為此伺服器設定目錄管理員的密碼。

    若要為伺服器實例指定非預設的連接埠號,或指定任何其他參數,請參閱 dsadm(1M) 線上手冊。

    例如,若要在 /local/ds 目錄中建立新的實例,請使用此指令:


    $ dsadm create /local/ds
    Choose the Directory Manager password:
    Confirm the Directory Manager password:
    Use 'dsadm start /local/ds' to start the instance 
  2. 檢查伺服器實例是否已正確建立。


    $ dsadm info isntance-path
    

    例如:


    $ dsadm info /local/ds1
    Instance Path:     /local/ds1
    Owner:             user1(group1)
    Non-secure port:   1389
    Secure port:       1636
    Bit format:        64-bit
    State:             Stopped
    DSCC url:          -
    Instance version:  D-A00
  3. (可選擇) 如果目錄伺服器已使用 Java Enterprise System 安裝程式或本機套裝軟體安裝進行了安裝,且作業系統提供有一套服務管理解決方案,則可將伺服器視為服務加以管理,如下表所示。

    作業系統 

    指令 

    Solaris 10 

    若您在 Sun 叢集環境中進行作業,請使用此指令: 

    dsadm enable-service --type CLUSTER instance-path resource-group

    其他情況: 

    dsadm enable-service --type SMF instance-path

    Solaris 9 

    若您在 Sun 叢集環境中進行作業,請使用此指令: 

    dsadm enable-service --type CLUSTER instance-path resource_group

    其他情況: 

    dsadm autostart instance-path

    Linux、HP-UX 

    dsadm autostart instance-path

    Windows 

    dsadm enable-service --type WIN_SERVICE instance-path

  4. 啟動目錄伺服器。


    $ dsadm start instance-path
    

    備註 –

    伺服器正在執行中,但不含任何資料或尾碼。使用 dsconf 建立尾碼。


  5. (可選擇) 使用下列其中一個方法註冊伺服器實例:

    • 存取 URL https://host:6789,並透過 DSCC 註冊伺服器。

    • 使用指令 dsccreg add-server

      如需詳細資訊,請參閱 dsccreg(1M) 線上手冊。

  6. 若要使用密碼策略,且目錄伺服器實例是獨立的,或屬於已遷移至 DS6-only 密碼策略模式的複寫拓樸,請將實例變更為該模式。


    $ dsconf pwd-compat -h host -p port to-DS6-migration-mode
    
    ## Beginning password policy compatibility changes .
    ## Password policy compatibility changes finished.
    
    Task completed (slapd exit code: 0).
    $ dsconf pwd-compat -h host -p port to-DS6-mode
    
    ## Beginning password policy compatibility changes .
    ## Password policy compatibility changes finished.
    
    Task completed (slapd exit code: 0).

Procedure刪除目錄伺服器實例

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 停止目錄伺服器。


    $ dsadm stop instance-path
    
  2. 如果之前使用 DSCC 管理伺服器,請使用指令行取消註冊伺服器。


    $ dsccreg remove-server /local/ds
    Enter DSCC administrator's password:
    /local/ds is an instance of DS
    Enter password of "cn=Directory Manager" for /local/ds:
    This operation will restart /local/ds.
    Do you want to continue ? (y/n) y
    Unregistering /local/ds from DSCC on localhost.
    Connecting to /local/ds
    Disabling DSCC access to /local/ds
    Restarting /local/ds

    如需詳細資訊,請參閱 dsccreg(1M) 線上手冊。

  3. (可選擇) 如果之前是在服務管理解決方案中啟用伺服器實例,則需停止將伺服器視為服務進行管理。

    作業系統 

    指令 

    Solaris 10 

    若您在 Sun 叢集環境中進行作業,請使用此指令: 

    dsadm disable-service --type CLUSTER instance-path

    其他情況: 

    dsadm disable-service --type SMF instance-path

    Solaris 9 

    若您在 Sun 叢集環境中進行作業,請使用此指令: 

    dsadm disable-service --type CLUSTER instance-path

    其他情況: 

    dsadm autostart --off instance-path

    Linux、HP-UX 

    dsadm autostart --off instance-path

    Windows 

    dsadm disable-service --type WIN_SERVICE instance-path

  4. 刪除伺服器實例。


    $ dsadm delete instance-path
    

    注意 – 注意 –

    此指令會移除所有項目,包含資料庫與資料。


啟動、停止與重新啟動目錄伺服器實例

若要從指令行啟動、停止或重新啟動伺服器,請分別使用 dsadm startdsadm stopdsadm restart 指令。


備註 –

若所停止及重新啟動的目錄伺服器實例,在依配置保存項目的記憶體中含有大量快取,這些快取將需要一段時間進行回存。在快取回存時,實例的回應速度將會減緩。


這些指令必須由建立目錄伺服器的相同 UID 與 GID 執行,或由超級使用者執行。例如,若目錄伺服器以 user1 的身份執行,您即應以 user1 的身份執行 startstoprestart 等公用程式。


備註 –

在 Solaris 上,角色型存取控制可讓您以超級使用者以外的使用者身份執行目錄伺服器。


Procedure啟動、停止與重新啟動目錄伺服器

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。但這並不適用於服務管理的啟用與停用步驟。在啟動及停止目錄伺服器時,必須在指令行上執行服務管理的啟用與停用作業。

    若要啟動、停止或重新啟動目錄伺服器,請執行下列其中一項:

    • 若要啟動伺服器,請鍵入:


      $ dsadm start instance-path
      

      例如,若要以實例路徑 /local/ds 啟動伺服器,請使用此指令:


      $ dsadm start /local/ds
    • 若要停止伺服器,請鍵入:


      $ dsadm stop instance-path
      

      例如:


      $ dsadm stop /local/ds
    • 若要重新啟動伺服器,請鍵入:


      $ dsadm restart instance-path
      

      例如:


      $ dsadm restart /local/ds

建立尾碼

在建立目錄伺服器實例後,必須為伺服器的目錄資訊樹狀結構 (DIT) 建立一或多個尾碼。DIT 包含伺服器中所有的項目,各個項目有其各自的辨別名稱 (DN)。DN 的階層式特性可建立分支與尾節點,以建構樹狀結構中的資料。管理員會以尾碼與子尾碼的形式定義及管理 DIT。DSCC 可對建立及管理這些元素的作業進行控制。此外,也可以使用指令行工具。

如需有關建構目錄資料與有關一般尾碼的概念性資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」

如下列程序所述,您可以使用 dsconf create-suffix 指令,在目錄中建立尾碼配置。由於根尾碼與子尾碼皆以相同的方式經由內部管理,因此從指令行建立這兩種尾碼的程序也幾乎是相同的。此程序說明僅適用於必要選項的 dsconf create-suffix 指令。如需有關此指令之其他選項的更多資訊,請參閱 dsconf(1M) 線上手冊或執行下列指令:


$ dsconf create-suffix --help

配置項目可由任何管理使用者加以建立。但若是尾碼的頂端項目,則必須由目錄管理員建立,或以 cn=admin,cn=Administrators,cn=config 等目錄伺服器管理員的身份所建立。

Procedure建立尾碼

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

如果使用 DSCC 建立新的尾碼,可選擇複製現有尾碼的部分或所有尾碼配置設定。

  1. 建立根尾碼。

    確定伺服器正在執行中,然後鍵入此指令:


    $ dsconf create-suffix -h host -p port suffix-DN
    

    其中 suffix-DN 是新尾碼的完整 DN。就根尾碼而言,一般慣例是使用網域元件 (dc) 命名屬性。

    例如,若要建立 DN dc=example,dc=com 的尾碼,請使用此指令:


    $ dsconf create-suffix -h host1 -p 1389 dc=example,dc=com

    此指令會以下列方式建立新尾碼:

    • 建立根尾碼的頂端 (或基底) 項目。

    • 建立尾碼與資料庫在 cn=config 中的配置項目。

    • 預設資料庫名稱取決於尾碼 DN。

    如需有關所有尾碼的資訊 (包括已建立的新尾碼),請使用此指令:


    $ dsconf list-suffixes -h host -p port -v

    -v 選項會顯示詳細模式,可列出尾碼上有多少項目,以及所有的複寫資訊。


    備註 –

    若有多個目錄伺服器實例,請使用 -h host name-p port number 選項,指定尾碼所屬的伺服器實例。

    若要為資料庫檔案指定非預設路徑,請使用 -L 選項。您可以在後續的階段中變更尾碼資料庫路徑。若要執行此項作業,請使用 dsconf set-suffix-prop suffix-DN db-path:new-db-path 指令,然後停止伺服器,以手動方式移動資料庫檔案,再重新啟動伺服器。

    若要檢視在建立尾碼時所能使用的所有選項,請參閱 dsconf(1M) 線上手冊。


  2. 請視需要建立子尾碼:


    $ dsconf create-suffix -h host -p port subSuffix-DN
    

    接著將子尾碼附加到根尾碼中。


    $ dsconf set-suffix-prop -h host -p port subSuffix-DN parent-suffix-dn:parentSuffix-DN
    

    其中,parentSuffix-DN 的值必須與前一個步驟中的 suffix-DN 值相同。子尾碼的 suffix-DN 中包含了子尾碼的相關辨別名稱 (RDN) 及其父系尾碼的 DN。

    例如,若要建立子尾碼 ou=Contractors,dc=example,dc=com,並將該子尾碼附加到根尾碼中,請鍵入:


    $ dsconf create-suffix -h host1 -p 1389 ou=Contractors,dc=example,dc=com
    $ dsconf set-suffix-prop -h host1 -p 1389 ou=Contractors,dc=example,dc=com \
     parent-suffix-dn:dc=example,dc=com

    當此項目增加到目錄時,伺服器的資料庫模組會自動在下列目錄中建立資料庫檔案:


    instance-path/db/database-name
    

    其中,database-name 是從部分尾碼自動建立的名稱。以前述範例為例,database-name 將是 Contractors

  3. (可選擇) 以資料初始化尾碼。請參閱初始化尾碼

停用或啟用尾碼

有時您可能會因為安全性考量,而需要讓尾碼無法進行維護,或使其內容無法使用。若停用尾碼,將使伺服器無法讀取或寫入尾碼的內容,以回應任何用戶端作業。當您停用尾碼後,即不再具備該尾碼的存取權,而參照模式將自動設為停用。

Procedure停用尾碼後再予以啟用

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 停用尾碼。


    $ dsconf set-suffix-prop -h host -p port suffix-DN enabled:off

    備註 –

    您無法停用已啟用複寫的尾碼,因為在複寫的尾碼中,大部分的特性皆由複寫機制所決定。


  2. 啟用尾碼。


    $ dsconf set-suffix-prop -h host -p port suffix-DN enabled:on

設定參照,並使尾碼變成唯讀模式

若要限制尾碼的存取,但不完全停用尾碼,您可以修改存取權限以允許唯讀存取。在此情況下,必須定義其他伺服器的寫入作業參照。您也可以同時拒絕讀取與寫入存取,並定義所有作業對尾碼的參照。

參照亦可用以暫時將用戶端應用程式指向其他伺服器。例如,在備份尾碼的內容時,可以增加其他尾碼的參照。

若尾碼是複寫環境中的用戶,複寫機制將可決定參照設定的值。雖然可以手動修改參照設定,但參照仍將會在下次複寫更新時遭到覆寫。如需有關設定複寫參照的資訊,請參閱執行進階用戶配置

參照屬於標籤式 URL,亦即可選擇性地在尾端加上空格字元與標籤的 LDAP URL。例如:


ldap://phonebook.example.com:389/

或是:


ldap://phonebook.example.com:389/ou=All%20People,dc=example,dc=com

由於空格字元有其意義,因此在參照的 URL 部分中,任何空格字元均必須使用 %20 換碼。

Procedure設定參照,使尾碼變成唯讀模式

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 設定參照 URL。


    $ dsconf set-suffix-prop -h host -p port suffix-DN referral-url:LDAP-URL
    

    其中,LDAP-URL 是含有目標之主機名稱、連接埠號與 DN 的有效 URL。

    例如:


    $ dsconf set-suffix-prop -h host1 -p 1389 dc=example,dc=com \
     referral-url:ldap://phonebook.example.com:389/

    您可以指定任何數量的 LDAP URL。

  2. 設定參照模式,使尾碼變成唯讀模式。


    $ dsconf set-suffix-prop -h host -p port suffix-DN referral-mode:only-on-write

    若要讓尾碼無法供讀取與寫入作業使用,並且對所有請求傳回參照,請將 referral-mode 設為 enabled

  3. 此指令一旦成功執行,尾碼即會變成唯讀或無法存取,並可傳回參照的模式。

  4. (可選擇) 當尾碼無法使用後,停用參照即可讓尾碼回復為可讀寫的狀態。


    $ dsconf set-suffix-prop -h host -p port suffix-DN referral-mode:disabled

    參照停用時,尾碼即會自動變成可讀寫的狀態,除非您已將尾碼的 enabled 特性設為 off,而停用了尾碼本身。

刪除尾碼

刪除尾碼時會一併從 DIT 中移除其整個分支。


備註 –

當您刪除尾碼時,會將其所有資料項目從目錄中永久移除。如此也會移除所有尾碼配置資訊,包含其複寫配置。


您無法刪除了父系尾碼,但將其子尾碼保留在 DIT 中做為新的根尾碼。若要刪除整個含有子尾碼的分支,必須同時刪除已刪除之父系的子尾碼,及其可能的子尾碼。

Procedure刪除尾碼

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    移除尾碼配置項目:


    $ dsconf delete-suffix -h host -p port [subSuffix-DN] suffix-DN
    

    此指令會從 suffix-DN 上的基底項目開始,移除伺服器中的尾碼。尾碼在目錄中將不會再顯示出來或供存取。

第 3 章 目錄伺服器配置

本章說明如何配置目錄伺服器。您可以使用 dsconf 指令 (請參閱 dsconf(1M) 線上手冊)。

您也可以使用目錄服務控制中心 (DSCC),此方法較多人使用。 DSCC 會在配置程序中做進一步的檢查,以儘可能降低錯誤。此外,DSCC 也可讓您將某個伺服器實例的配置複製到另一個伺服器實例上。如需有關使用 DSCC 的更多資訊,請參閱 DSCC 線上說明。

本章包含下列主題:

使用 DSCC 修改配置

修改配置的建議方法為使用 DSCC。此瀏覽器介面提供了作業型控制,可協助您快速而有效地設定配置。使用 DSCC 可讓您修改某部伺服器的配置設定,並將其複製到其他伺服器上。此外,DSCC 介面亦可為您管理配置的複雜性與相互依賴性。如需以 DSCC 修改配置的詳細程序,請參閱 DSCC 線上說明。

從指令行修改配置

您可以撰寫採用指令行工具的程序檔,將配置作業自動化。

在指令行上使用 dsconf 指令修改配置。此指令會使用 LDAP 修改 cn=config 子樹狀結構。如需有關 dsconf 的更多資訊,請參閱目錄伺服器指令行工具

對於無法以 dsconf 執行的作業,請改用 ldapmodify 指令。


備註 –

若要使用 dsconf set-server-prop 指令修改伺服器配置特性,您必須了解所能修改的特性及其預設值。使用下列指令可顯示所有特性的說明:


$ dsconf help-properties -v

搜尋所需項目的特性說明。以 UNIX 平台為例,鍵入下列內容即可搜尋記憶體快取特性:


$ dsconf help-properties -v | grep cache

如需有關 cn=config 中各配置項目的更多資訊,以及所有配置項目與屬性的完整說明 (包括允許值的範圍),請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

修改 dse.ldif 檔案

目錄伺服器會將其所有配置資訊儲存於此檔案:

instance-path/config/dse.ldif


注意 – 注意 –

直接編輯 dse.ldif 檔案內容以修改配置的做法很容易造成錯誤,不建議使用。但若您選擇手動編輯此檔案,請在編輯檔案前先停止伺服器,再於編輯完成後重新啟動。


dse.ldif 檔案使用 LDAP 資料互換格式 (LDIF)。LDIF 是項目、屬性及其值的文字表示法,也是 RFC 2849 (http://www.ietf.org/rfc/rfc2849) 中所述之標準格式。

dse.ldif 檔案中的目錄伺服器配置由下列項目構成:

配置管理使用者

目錄伺服器含有預設管理使用者、「目錄管理員」與 cn=admin,cn=Administrators,cn=config 使用者。這兩種使用者具有相同的存取權限,但 cn=admin,cn=Administrators,cn=config 須受 ACI 支配。

本節說明如何建立具有超級使用者存取權的管理使用者,以及如何配置「目錄管理員」。

Procedure建立具有超級使用者存取權的管理使用者

若要建立與 cn=admin,cn=Administrators,cn=config 具有相同權限的新管理使用者,請在 cn=Administrators,cn=config 群組中建立新的使用者。此群組中的所有使用者均須受全域 ACI 支配,該全域 ACI 可允許與「目錄管理員」相同之存取權限。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    建立新的管理使用者。

    例如,若要建立新的使用者 cn=Admin24,cn=Administrators,cn=config,請鍵入:


    $ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=admin24,cn=Administrators,cn=config
    changetype: add
    objectclass: top
    objectclass: person
    userPassword: password
    description: Administration user with the same access rights as Directory Manager.

    -D-w 選項分別可為有權建立此項目的使用者指定連結 DN 與密碼。

Procedure配置目錄管理員

「目錄管理員」是專用的伺服器管理員,相對於 UNIX 系統上的 root 使用者。存取控制不適用於「目錄管理員」。

大部分的管理作業均不需用到「目錄管理員」。您可以改用使用者 cn=admin,cn=Administrators,cn=config,或任何您在 cn=Administrators,cn=config 下建立的其他使用者。唯一需要「目錄管理員」的作業,是變更根 ACI 以及複寫的疑難排解作業,例如修復複寫與搜尋標記。

您可以變更目錄管理員 DN 與密碼,以及建立可從中自動讀取密碼的檔案。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 尋找現有的目錄管理員 DN。


    $ dsconf get-server-prop -h host -p port root-dn
    root-dn:cn=Directory Manager
  2. 在必要時修改「目錄管理員」設定。

    • 若要修改目錄管理員 DN,請鍵入:


      $ dsconf set-server-prop -h host -p port root-dn:new-root-dn
      

      若目錄管理員 DN 中有空格,請使用引號。例如:


      $ dsconf set-server-prop -h host1 -p 1389 root-dn:"cn=New Directory Manager"
    • 若要變更目錄管理員密碼,請鍵入:


      $ dsconf set-server-prop -h host -p port root-pwd:new-root-dn-password
      

      若因安全性考量而不以指令行引數的形式傳送純文字密碼,請建立用以設定密碼的暫存檔。


      $ echo password > /tmp/pwd.txt

      此檔案只能讀取一次,您必須儲存密碼以供日後使用。設定伺服器根密碼檔案特性。


      $ dsconf set-server-prop -h host -p port root-pwd-file:/tmp/pwd.txt

      此指令會提示伺服器讀取密碼檔案。設定密碼檔案特性後,請移除暫存密碼檔案。


      $ rm /tmp/pwd.txt

保護配置資訊

根目錄伺服器項目 (以零長度 DN "" 進行基底物件搜尋所傳回的項目) 與 cn=configcn=monitorcn=schema 下的子樹狀結構,含有「目錄伺服器」自動產生的存取控制指令 (ACI)。這些 ACI 可用以決定目錄項目的使用者權限。這些 ACI 足夠評估作業之用。但運用在生產環境部署時,就必須評估您的存取控制需求,並設計您自己的存取控制。

若您基於安全性考量而要隱藏一或多個其他子樹狀結構的存在,並保護您的配置資訊,您必須將其他 ACI 置於 DIT 上。

如需有關建立 ACI 的更多資訊,請參閱第 6 章, 目錄伺服器存取控制

配置 DSCC

本節提供下列有關配置 DSCC 的資訊:

Procedure變更 Common Agent Container 的連接埠號

預設的 Common Agent Container 連接埠號為 11162。Common Agent Container 會將 DSCC 代理程式連接埠定義為 jmxmp-connector-port。若基於管理原因,DSCC 代理程式與 Common Agent Container 必須使用不同的連接埠號,請使用下列程序。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 以超級使用者的身份,驗證 jmxmp-connector-port 現有的連接埠號。


    $ su 
    Password: 
    # cacaoadm list-params
    ...
    jmxmp-connector-port=11162
    ...
  2. 變更 DSCC 代理程式連接埠號。

    變更 DSCC 代理程式連接埠號時,必須停止 Common Agent Container。


    # cacaoadm stop
    # cacaoadm set-param jmxmp-connector-port=new-port
    # cacaoadm start

    如需此指令的位置,請參閱指令位置

  3. 在 DSCC 中取消註冊您的伺服器,然後使用新的 DSCC 代理程式連接埠號予以重新註冊。

    此外,當您建立新的伺服器時,您必須指定非預設的 DSCC 代理程式連接埠號。

Procedure重設目錄服務管理員密碼

若要重設目錄服務管理員密碼,請依本程序中所述使用 DSCC。

  1. 存取 DSCC中所述存取 DSCC。

  2. 按一下 [設定] 標籤,然後選擇 [目錄服務管理員]。

  3. 按一下要變更密碼的「目錄服務管理員」名稱。

  4. 在特性畫面中,輸入新的密碼。

    在 [確認密碼] 欄位中再次鍵入新密碼,以進行確認。按一下 [確定] 以儲存變更。

Procedure延伸 DSCC 階段作業自動逾時延遲

經過一段時間後,您的 DSCC 階段作業將會逾時,並將您登出 DSCC。使用此程序可延伸逾時延遲。請注意,此程序可延伸 DSCC 的逾時以及 Sun Java Web Console 中所有其他應用程式的逾時。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 以超級使用者的身份延伸逾時延遲。


    # wcadmin add -p -a ROOT session.timeout.value=mm
    

    其中 mm 是逾時之前的時間,以分鐘數計算。

    例如,若要將逾時設為兩小時,請鍵入:


    $ su
    Password:
    # wcadmin add -p -a ROOT session.timeout.value=120
    Set 1 properties for the ROOT application.
    # wcadmin list -p
    Shared service properties (name, value):
        session.timeout.value  120
        ...
  2. 重新啟動 Sun Java Web Console。


    # smcwebserver restart
    Shutting down Sun Java(TM) Web Console Version 3.0.1 ...
    Starting Sun Java(TM) Web Console Version 3.0.1 ...
    The console is running.

    如需這些指令的位置,請參閱指令位置

配置 DSCC 的容錯移轉

DSCC 會顯示您已在 DSCC 中註冊的伺服器。

若先前安裝 DSCC 的機器故障,您可以改在其他機器上安裝 DSCC,然後重新註冊伺服器。但這麼做可能很花時間。若想要透過 DSCC 立即存取伺服器,您可以配置 DSCC 容錯移轉。

若要配置 DSCC 容錯移轉,請考量下列注意事項:

DSCC 的疑難排解

如需有關 DSCC 的疑難排解資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的「To Troubleshoot Directory Service Control Center Access」

變更目錄伺服器連接埠號

您可以使用 DSCC 或 dsconf set-server-prop 指令,修改您的使用者目錄伺服器的 LDAP 連接埠或 LDAPS 安全連接埠號。

若變更了連接埠號,請注意下列事項:

若您使用指令行變更了連接埠號,請注意下列事項:

Procedure修改連接埠號、啟用連接埠以及停用連接埠

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 驗證連接埠現有的設定。


    $ dsconf get-server-prop -h host -p port port-type
    

    其中 port-type 為下列其中一項:

    ldap-port

    LDAP 預設連接埠

    ldap-secure-port

    LDAPS 安全連接埠

    dsml-port

    DSML 預設連接埠

    dsml-secure-port

    DSML 安全連接埠

    例如,若要顯示 LDAPS 安全連接埠,請鍵入:


    $ dsconf get-server-prop -h host1 -p 2501 ldap-secure-port
    Enter "cn=Directory Manager" password:
    ldap-secure-port : 2511

    若傳回的結果為整數,表示連接埠已啟用。若傳回的結果為 disabled,表示連接埠已停用。


    備註 –

    您也可以使用 dsadm 列出 LDAP 預設連接埠與 LDAPS 安全連接埠。


  2. 必要時,請修改連接埠號或啟用連接埠。


    $ dsconf set-server-prop -h host -p port port-type:new-port
    

    例如,若要將 LDAP 連接埠號從 1389 變更為 1390,請使用此指令:


    $ dsconf set-server-prop -h host1 -p 1389 ldap-port:1390

    若要在連接埠號 2250 上啟用 DSML 安全連接埠,請使用此指令:


    $ dsconf set-server-prop -h host1 -p 1389 dsml-secure-port:2250
  3. 必要時,請停用連接埠。


    $ dsconf set-server-prop -h host -p port port-type:disabled

    例如,若要停用 DSML 安全連接埠,請使用此指令:


    $ dsconf set-server-prop -h host1 -p 1389 dsml-secure-port:disabled

配置 DSML

除了以「簡易目錄存取協定 (LDAP)」處理請求以外,目錄伺服器也會回應以目錄服務標記語言版本 2 (DSMLv2) 傳送的請求。DSML 是另一個可供用戶端編碼目錄作業的方法。伺服器處理 DSML 就像處理任何其他請求一般,所使用之存取控制與安全性功能均相同。DSML 處理允許其他多種用戶端類型存取您的目錄內容。

目錄伺服器支援透過超文字傳輸協定 (HTTP/1.1) 使用 DSMLv2,而在傳輸 DSML 內容時,會使用簡易物件存取協定 (SOAP) 1.1 版做為程式設計協定。如需有關這些協定的更多資訊,以及 DSML 請求的範例,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 10 章「Directory Server DSMLv2」

本節包含下列主題:

Procedure啟用 DSML-over-HTTP 服務

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 將 DSML 模式設為 on


    $ dsconf set-server-prop -h host -p port dsml-enabled:on
  2. 設定安全 DSML 連接埠。


    $ dsconf set-server-prop -h host -p port dsml-secure-port:port
    
  3. 設定非安全 DSML 連接埠。


    $ dsconf set-server-prop -h host -p port dsml-port:port
    

    此連接埠預設會設為 80

  4. 重新啟動伺服器。


    $ dsadm restart instance-path
    
接下來的步驟

根據您所定義的參數與屬性值,DSML 用戶端可使用下列 URL 傳送請求至此伺服器:

http://host:DSML-port/ relative-URL

https://host:secure-DSML-port /relative-URL

Procedure停用 DSML-over-HTTP 服務

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 將 DSML 模式設為 off


    $ dsconf set-server-prop -h host -p port dsml-enabled:off
  2. 將安全 DSML 連接埠設為 disabled


    $ dsconf set-server-prop -h host -p port dsml-secure-port:disabled
  3. 重新啟動伺服器。


    $ dsasm restart instance-path
    

Procedure配置 DSML 安全性

您可以配置接受 DSML 請求時所需的安全性層級。若要執行此作業,您必須配置 DSML 用戶端認證。

    設定 DSML 用戶端認證模式。


    $ dsconf set-server-prop -h host -p port dsml-client-auth-mode:dsml-mode
    

    dsml-mode 可為下列其中之一:

    • http-basic-only - 此為預設值。伺服器會使用「HTTP 授權」標頭的內容,尋找可對映至目錄中之項目的使用者名稱。此程序及其配置會透過 SSL 進行加密,但不需要用戶端憑證。相關說明請參閱 DSML 身份識別對映

    • client-cert-only - 伺服器會使用來自用戶端憑證中的憑證,進行用戶端的身份識別。使用此值時,所有 DSML 用戶端均必須使用安全 HTTPS 連接埠傳送 DSML 請求及提供憑證。伺服器會檢查用戶端憑證是否符合目錄中的項目。如需更多資訊,請參閱第 5 章, 目錄伺服器安全性

    • client-cert-first - 伺服器會嘗試先以用戶端憑證 (若有的話) 進行用戶端認證。否則,伺服器將會使用「授權」標頭的內容進行用戶端認證。

    若 HTTP 請求未提供任何憑證與「授權」標頭,伺服器即會以匿名連結執行 DSML 請求。下列情況也會使用匿名連結:

    • 在指定 client-cert-only 時,用戶端提供了有效的「授權」標頭,但不具憑證。

    • 在指定 http-basic-only 時,用戶端提供了有效的憑證,但不具「授權」標頭。

    無論用戶端認證方法為何,若已提供憑證,但不符合項目,或已指定「HTTP 授權」標頭,但此標頭無法對映至使用者項目,DSML 請求即會遭拒絕,並產生錯誤訊息 403:「禁止」。

DSML 身份識別對映

執行不具憑證的基本認證時,目錄伺服器會使用名為身份識別對映的機制,判斷在接受 DSML 請求時所應使用的連結 DN。此機制會從 HTTP 請求的「授權」標頭中擷取資訊,以判斷用以連結的身份識別。

DSML/HTTP 的預設身份識別對映,由您伺服器配置中的下列項目所指定。

dn: cn=default,cn=HTTP-BASIC,cn=identity mapping,cn=config
objectClass: top
objectClass: nsContainer
objectClass: dsIdentityMapping
cn: default
dsSearchBaseDN: ou=people
dsSearchFilter: (uid=${Authorization})

此配置表示伺服器應使用 HTTP 使用者 ID,做為目錄伺服器尾碼中所儲存之 DN 的 uid 值。例如,若 HTTP 使用者為 bjensen,伺服器就會嘗試使用 DN uid=bjensen,ou=people 執行連結。

為使對映正常運作,您必須完成 dsSearchBaseDN 的值。例如,您可以將 dsSearchBaseDN 的值變更為 ou=people,dc=example,dc=com。接著,若 HTTP 使用者為 bjensen,伺服器就會嘗試使用 DN uid=bjensen,ou=people,dc=example,dc=com 執行連結。

dn: cn=default,cn=HTTP-BASIC,cn=identity mapping,cn=config
objectClass: top
objectClass: nsContainer
objectClass: dsIdentityMapping
cn: default
dsSearchBaseDN: ou=people,dc=example,dc=com
dsSearchFilter: (uid=${Authorization})

在對映項目屬性 dsSearchFilter 內,您可以使用 ${header} 格式的預留位置,其中 header 是 HTTP 標頭的名稱。

以下是 DSML 對映中最常使用的標頭。

${Authorization}

此字串會由「HTTP 授權」標頭中所含的使用者名稱取代。授權標頭中含有使用者名稱及其密碼,但在此預留位置中只有使用者名稱會遭取代。

${From}

此字串會由「HTTP 寄件者」標頭中可能包含的電子郵件位址取代。

${host}

此字串會由 DSML 請求之 URL 的主機名稱與連接埠號取代,此亦即伺服器的主機名稱與連接埠號。

若要讓 DSML 請求執行不同類型的身份識別對映,請為 HTTP 標頭定義新的身份識別對映。

Procedure為 HTTP 標頭定義新的身份識別對映

  1. 為此協定編輯預設 DSML-over-HTTP 身份識別對映,或建立自訂對映。

    對映項目必須位於 cn=HTTP-BASIC,cn=identity mapping,cn=config 項目下。

    在指令行上使用 ldapmodify 指令增加此項目,如使用 ldapmodify 增加項目中所述。

  2. 重新啟動目錄伺服器,使您的新對映生效。

    自訂對映會先進行評估。若沒有成功的自訂對映,則會接著評估預設對映。若所有對映皆無法判斷 DSML 請求的連結 DN,即會禁止並拒絕 DSML 請求 (錯誤 403)。

將伺服器設為唯讀

您目錄中的每個尾碼均可單獨設為唯讀模式,並可傳回特定的參照 (若已定義)。目錄伺服器針對適用於所有尾碼同時可傳回全域參照的伺服器 (若已定義),也提供了唯讀模式。

設計伺服器唯讀模式的目的,是要讓管理員在執行重新編製尾碼索引之類的作業時,防止目錄內容遭到修改。因此,伺服器唯讀模式並不適用於下列配置分支:

無論唯讀設定為何,這些分支應始終受存取控制指令 (ACI) 的保護,以免遭到管理員以外的使用者修改 (請參閱第 6 章, 目錄伺服器存取控制)。全域唯讀模式可防止目錄中所有其他尾碼的更新作業,包括「目錄管理員」所初始化的更新作業在內。

唯讀模式啟用後,也會使尾碼的複寫作業中斷。主伺服器複本將不再有任何變更需複寫,即使它繼續複寫唯讀模式啟用前所做的任何變更,仍是如此。用戶複本必須等到唯讀模式停用後,才能接收更新。多重主伺服器複寫環境中的主伺服器不具任何需複寫的變更,且無法從其他主伺服器接收更新。

Procedure啟用或停用伺服器唯讀模式

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 啟用全域唯讀模式。


    $ dsconf set-server-prop -h host -p port read-write-mode:read-only
  2. 當您準備好時,即可停用唯讀模式。


    $ dsconf set-server-prop -h host -p port read-write-mode:read-write

配置記憶體

本節提供管理不同記憶體類型的相關資訊。如需不同快取類型的說明與有關快取微調的相關資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 5 章「Directory Server Data Caching」

填充快取

填充快取是指將資料填入快取中,使後續的目錄伺服器運作方式反映出正常的作業效能,而不是不穩定的效能。在進行標準檢查時若產生可重複顯示的結果,以及在測量與分析可能的最佳化程度時,填充快取都有其效用。

請儘可能避免主動填充快取。在測量效能之前,請讓快取透過用戶端與目錄伺服器之間正常或一般的互動方式進行填充。

如需填充資料庫快取的工具,請至 http://www.slamd.com

Procedure修改資料庫快取


注意 – 注意 –

修改快取可能會嚴重影響伺服器效能。修改快取時請多加留意。


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 取得目前的資料庫快取層級。


    $ dsconf get-server-prop -h host -p port db-cache-size
  2. 變更資料庫快取層級。


    $ dsconf set-server-prop -h host -p port db-cache-size:sizeM

    其中 size 是以 MB 為單位的大小。

Procedure監視資料庫快取

安裝上的預設快取層級僅適用於測試環境,不適用於生產環境。進行微調時,您可以監視伺服器的資料庫快取。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    監視資料庫快取。


    $ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \
     -b "cn=monitor,cn=ldbm database,cn=plugins,cn=config" "(objectclass=*)"

    若資料庫快取大小足夠,並且已完成填充,則符合率 (dbcachehitratio) 應該會很高。此外,已讀入的頁面數 (dbcachepagein) 與已寫出的乾淨頁面數 (dbcacheroevict) 應該都很低。此處的「高」與「低」是相對於部署限制的表示。

Procedure監視項目快取

進行微調時,您可以檢查一或多個尾碼的項目快取。使用下列程序即可檢視項目快取層級。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    監視項目快取。


    $ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \
     -b "cn=monitor,cn=db-name,cn=ldbm database,cn=plugins,cn=config" "(objectclass=*)"

    若尾碼的項目快取大小足以保存尾碼中大部分的項目,且快取已完成填充,則符合率 (entrycachehitratio) 應該會很高。

    若您已填充快取,則您將會在先前空白的項目快取填入時,看見項目快取大小 (currententrycachesize) 接近項目快取大小上限 (maxentrycachesize)。在理想狀況下,項目中的大小 (currententrycachecount) 應等於或非常接近尾碼中的總項目數 (ldapentrycachecount)。

Procedure修改項目快取


注意 – 注意 –

修改快取可能會嚴重影響伺服器效能。修改快取時請多加留意。


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 取得目前的項目快取層級。


    $ dsconf get-suffix-prop -h host -p port suffix-DN entry-cache-count
  2. 變更項目快取層級。


    $ dsconf set-suffix-prop -h host -p port suffix-DN entry-cache-count:integer
    

    其中 integer 是項目數。

  3. 變更項目快取大小。


    $ dsconf set-suffix-prop -h host -p port suffix-DN entry-cache-size:integer
    

    其中 integer 是以位元為單位的大小。

Procedure配置堆疊記憶體臨界值

若要限制 nsslapd 程序所使用的堆疊記憶體數,您可以設定動態記憶體佔用空間的臨界值。當目錄伺服器執行於共用或分散資源的機器上時,您即可設定此臨界值。


備註 –

此臨界值只能設定於 SolarisTM 與 Linux 平台上。


如需有關設定記憶體大小的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Directory Server and Memory」

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 設定堆疊記憶體高臨界值上限。


    $ dsconf set-server-prop -h host -p port heap-high-threshold-size:value
    

    如需有關用於 ds-maxheap-high 之值的建議,請參閱 ds-maxheaphigh(5dsconf) 線上手冊。

  2. 您可以選擇是否設定堆疊記憶體低臨界值上限。


    $ dsconf set-server-prop -h host -p port heap-low-threshold-size:value
    

    如需有關用於 ds-maxheap-low 之值的建議,請參閱 ds-maxheaphigh(5dsconf) 線上手冊,其中含有 ds-maxheap-highds-maxheap-low 的相關建議。

設定每個用戶端帳號的資源限制

您可以控制伺服器上各個用戶端帳號的搜尋作業資源限制。您可以在帳號的作業屬性中設定此類限制,而讓目錄伺服器根據用戶端用以連結至目錄的帳號加以強制執行。

您可以設定下列限制:


備註 –

依預設,「目錄管理員」所能使用的資源數不受限制。


您對特定使用者帳號所設定的資源限制,優先於伺服器整體配置中所設定的資源限制。本節將就每個帳號的資源限制設定提供相關資訊。

本節中的範例會直接在項目的屬性中設定資源限制。您也可以使用「服務類別 (CoS)」機制,設定帳號的資源限制。為用戶端應用程式擷取項目時,CoS 機制即會產生運算屬性。如需有關定義 CoS 的更多資訊,請參閱服務類別

Procedure檢視伺服器資源限制設定

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 dsconf get-server-prop 指令可讀取資源限制伺服器特性。


    $ dsconf get-server-prop -h host -p port look-through-limit search-size-limit \
     search-time-limit idle-timeout
    look-through-limit  :  5000  
    search-size-limit   :  2000  
    search-time-limit   :  3600
    idle-timeout        :  none

    輸出中顯示,搜尋作業在處理搜尋時,最多查詢 5000 個項目、最多傳回 2000 個項目,以及最多使用伺服器時間一小時 (3600 秒)。

Procedure設定帳號的查詢限制

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 ldapmodify 指令可設定 nsLookThroughLimit 的值。

    下列指令可移除 Barbara Jensen 的查詢限制:


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsLookThroughLimit
    nsLookThroughLimit: -1
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

Procedure設定帳號的大小限制

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 ldapmodify 指令可設定 nsSizeLimit 的值。

    下列指令可移除 Barbara Jensen 的大小限制:


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsSizeLimit
    nsSizeLimit: -1
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

Procedure設定帳號的時間限制

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 ldapmodify 指令可設定 nsTimeLimit 的值。

    下列指令可移除 Barbara Jensen 的時間限制:


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsTimeLimit
    nsTimeLimit: -1
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

Procedure設定帳號的閒置逾時

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 ldapmodify 指令可設定 nsIdleTimeout 的值。

    下列指令將 Barbara Jensen 的閒置逾時設為五分鐘 (300 秒):


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password: 
    dn: uid=bjensen,ou=people,dc=example,dc=com
    changetype: modify
    add: nsIdleTimeout
    nsIdleTimeout: 300
    ^D
    modifying entry uid=bjensen,ou=people,dc=example,dc=com
    
    ^D
    $

第 4 章 目錄伺服器項目

本章將討論如何管理您目錄中的資料項目。其中也將說明如何設定參照以及進行屬性值的加密。

規劃目錄部署時,您必須分門別類目錄所將包含的資料類型。建立項目及修改預設模式之前,請先閱讀「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的相關章節。

您必須先定義適當的存取控制指令 (ACI),才能修改您的目錄。如需詳細資訊,請參閱第 6 章, 目錄伺服器存取控制

本章包含下列主題:

管理項目

管理項目的最佳方式需視環境而定:

使用 DSCC 管理項目

DSCC 可讓您檢視項目的所有可讀屬性以及編輯其可寫入屬性。它也可讓您增加及移除屬性、設定多值屬性,以及管理項目的物件類別。如需有關如何使用 DSCC 管理項目的更多資訊,請參閱 DSCC 線上說明。如需更多有關 DSCC 的一般資訊,請參閱目錄服務控制中心介面

使用目錄編輯器管理項目

目錄編輯器是一項易於使用的目錄編輯工具,可供管理員與一般使用者搜尋、建立與編輯資料。這項資料採用使用者、群組與容器的形式。

管理項目 ldapmodifyldapdelete

ldapmodifyldapdelete 指令行公用程式提供完整的功能進行增加、編輯與刪除目錄內容。使用這些公用程式,可讓您管理伺服器的配置項目與使用者項目中的資料。這些公用程式亦可用以寫入程序檔,以執行一或多個目錄的大量管理。

本書中的多項程序皆會用到 ldapmodifyldapdelete 指令。以下幾節將說明執行程序時所需進行的基本作業。如需有關 ldapmodifyldapdelete 指令的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

指令行公用程式的輸入一律用於 LDIF 中,可直接從指令行提供,也可以透過輸入檔提供。下節將提供 LDIF 輸入的相關資訊,而後續幾節將說明每個修改類型的 LDIF 輸入。

如需有關正確格式化 LDIF 輸入的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的「Guidelines for Providing LDIF Input」

以下幾節將說明這些基本作業:

使用 ldapmodify 增加項目

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

您可以使用 ldapmodify-a 選項,在目錄中增加一或多個項目。下列範例將建立包含使用者的結構項目,再建立使用者項目:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: ou=People,dc=example,dc=com
objectclass: top
objectclass: organizationalUnit
ou: People
description: Container for user entries

dn: uid=bjensen,ou=People,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetorgPerson
uid: bjensen
givenName: Barbara
sn: Jensen
cn: Babs Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail: bjensen@example.com
userPassword: secret

-D-w 選項分別可為有權建立這些項目的使用者指定連結 DN 與密碼。-a 選項可指定將增加 LDIF 內的所有項目。接著,每個項目會依其 DN 與屬性值列出,每個項目皆會以空行隔開。每個項目在輸入後即由 ldapmodify 公用程式予以建立,且公用程式會報告任何發生的錯誤。

    依慣例,項目的 LDIF 會列出下列屬性:

  1. 項目的 DN。

  2. 物件類別清單。

  3. 一或多個命名屬性。此為 DN 中所使用的屬性,並不一定是必要屬性之一。

  4. 所有物件類別的必要屬性清單。

  5. 您所要納入的任何允許的屬性。

鍵入 userPassword 屬性的值時,請提供純文字形式的密碼。伺服器將為此值加密,並只會儲存加密值。請確實限制讀取權限,以保護 LDIF 檔案中所出現的純文字密碼。

您也可以使用不需在指令行上加入 -a 選項的替代形式 LDIF。此形式的好處是,您可以合併項目增加陳述式與項目修改陳述式,如下範例所示。


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password: 
dn: ou=People,dc=example,dc=com
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: People
description: Container for user entries

dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: add
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetorgPerson
uid: bjensen
givenName: Barbara
sn: Jensen
cn: Barbara Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail: bjensen@example.com
userPassword: secret

changetype: add 關鍵字表示,具有指定 DN 的項目應以所有後續的屬性建立。其他所有的選項與 LDIF 慣例皆與本節稍早的說明相同。

在這兩個範例中,您都可以使用 -f filename 選項從檔案讀取 LDIF,而不需從終端機輸入讀取。LDIF 檔案所含的格式必須與用於終端機輸入的格式相同,視 -a 選項的使用情形而定。

使用 ldapmodify 修改項目

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

使用 changetype: modify 關鍵字增加、取代或移除屬性及其位於現有項目中的值。當您指定 changetype: modify 時,必須同時提供一或多個變更作業,以指定項目的修改方式。可用的三個 LDIF 變更作業如下範例所示:


dn: entryDN
changetype: modify
add: attribute 
attribute: value...
-
replace: attribute 
attribute: newValue...
-
delete: attribute 
[attribute: value]
...

請使用連字符 (-) 隔開同一行中相同項目的作業,並使用空行隔開不同項目的作業群組。您也可以為每個作業指定數個 attribute: value 對。

增加屬性值

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

下列範例將說明如何使用相同的 add LDIF 語法在現有的多值屬性中增加值,以及在尚不存在的屬性中增加值:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: cn
cn: Babs Jensen
-
add: mobile
mobile: (408) 555-7844

若有下列任一情況,此作業即可能失敗,而伺服器將傳回錯誤:

使用二進位屬性子類型

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

attribute;binary 子類型可指定,無論屬性值的實際語法為何,均必須透過 LDAP 傳輸為二進位資料。此子類型適用於不具 LDAP 字串表示法的複雜語法,如 userCertificate。除此用途之外,均不應使用二進位子類型。

ldapmodify 指令搭配使用時,可在任何 LDIF 陳述式的屬性名稱中增加適當的子類型。

輸入二進位值時,可以直接以 LDIF 文字鍵入,或從其他檔案中加以讀取。下列範例說明從檔案中加以讀取的 LDIF 語法:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
version: 1
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: userCertificate;binary
userCertificate;binary:< file:///local/cert-file

若要以 :< 語法指定檔案名稱,必須以行 version:1 做為 LDIF 陳述式的開頭。ldapmodify 在處理此陳述式時,會將屬性設為從指定檔案的所有內容讀取出來的值。

以語言子類型增加屬性

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

屬性的語言與發音子類型可指定本土化的值。當您指定屬性的語言子類型時,該子類型會以下列形式增加到屬性名稱中:


attribute;lang-CC

其中,attribute 是現有的屬性類型,而 cc 是用以指定語言的雙字母國碼 (地區碼)。您可以選擇性地增加發音子類型到語言子類型中,以指定音譯的本土化值。此案例中的屬性名稱如下:


attribute;lang-CC;phonetic

若要對具有子類型的屬性執行作業,必須明確符合其子類型。例如,若要修改具有 lang-fr 語言子類型的屬性值,必須在修改作業中納入 lang-fr,如下所示:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: homePostalAddress;lang-fr
homePostalAddress;lang-fr: 34, rue de la Paix

備註 –

若屬性值含有非 ASCII 字元,則必須以 UTF-8 編碼這些字元。


修改屬性值

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

下列範例說明如何使用 LDIF 中的 replace 語法變更屬性的值:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
replace: sn
sn: Morris
-
replace: cn
cn: Barbara Morris
cn: Babs Morris

指定屬性目前所有的值均會遭移除,而加入所有指定的值。

變更屬性值後,可以使用 ldapsearch 指令驗證變更。

屬性值的空格結尾

修改屬性值時,請勿不慎在值的結尾留下空格。空格結尾可能會致使值以 base-64 編碼 (如 34xy57eg) 顯示。

屬性值的結尾若為空格,則會將此空格編碼為屬性值的一部分。當您使用 DSCC 或 ldapsearch 指令驗證變更時,所看見的值可能會是純文字,但也可能以 base-64 編碼文字呈現。這取決於您所使用的是哪個目錄伺服器用戶端。

刪除屬性值

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

下列範例將說明如何徹底刪除屬性,以及如何僅刪除多值屬性的某個值:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
delete: facsimileTelephoneNumber
-
delete: cn
cn: Babs Morris

僅使用 delete 語法而未指定 attribute: value 對時,屬性中所有的值皆會遭移除。若您指定了 attribute: value 對,則只會移除該值。

修改多值屬性的某個值

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

若要以 ldapmodify 指令修改多值屬性的某個值,必須執行兩項作業,如下範例所示:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
delete: mobile
mobile: (408) 555-7845
-
add: mobile
mobile: (408) 555-5487

使用 ldapdelete 刪除項目

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

使用 ldapdelete 指令行公用程式,刪除目錄中的項目。此公用程式可連結至目錄伺服器,並根據項目的 DN 刪除一或多個項目。您必須提供有權刪除指定項目的連結 DN。

您無法刪除具有子項的項目。LDAP 協定不允許子項目無父系的情形。例如,在您刪除所有屬於組織單位的項目之前,都無法刪除組織單位項目。

下列範例將說明組織單位中的一個項目。此項目及其父系項目可依序刪除。


$ ldapdelete -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
uid=bjensen,ou=People,dc=example,dc=com
ou=People,dc=example,dc=com

使用 ldapmodify 刪除項目

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

使用 ldapmodify 公用程式時,也可以使用 changetype: delete 關鍵字刪除項目。使用 ldapdelete 時的所有限制於此時同樣適用,如上一節所述。使用 LDIF 語法刪除項目的好處在於,您可以同一個 LDIF 檔案中執行多種不同的作業。

下列範例將執行與前一範例相同的刪除作業:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: delete

dn: ou=People,dc=example,dc=com
changetype: delete

使用 ldapsearch 搜尋項目

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

您可以使用 ldapsearch 指令行公用程式尋找及擷取目錄項目。請注意,ldapsearch 公用程式並不是 Solaris 平台隨附的公用程式,但屬於 Directory Server Resource Kit 的一部分。

如需有關使用 ldapsearch、一般 ldapsearch 選項、適用格式與範例的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

Procedure使用 ldapmodify 移動項目或為其重新命名

此程序會使用修改 DN 作業。執行此作業前,請確定您已熟悉使用修改 DN 作業的指示與限制一節。

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 若要將項目從某父系移至另一個父系,請先擴充父系項目的 ACI 權限。

    • 請在要移動之項目的目前父系項目上使用 allow (export ...) 語法,以確定 ACI 允許 export 作業

    • 請在要移動之項目的未來父系項目上使用 allow (import ...) 語法,以確定 ACI 允許 import 作業

    如需有關使用 ACI 的資訊,請參閱第 6 章, 目錄伺服器存取控制

  2. 請確定修改 DN 作業已全域啟用,或至少已針對將受移動作業影響的一或多個尾碼啟用。

    為確保與舊目錄伺服器發行版本的相容性,修改 DN 作業預設為不啟用。

    若您先前已啟用修改 DN 作業,請跳至下個步驟。

    若要全域啟用伺服器的修改 DN 作業,請使用此指令:


    $ dsconf set-server-prop -h host -p port moddn-enabled:on
  3. 執行 ldapmodify 指令。

    此步驟會使用修改 DN 作業。請執行下列其中一項動作:

    • 移動項目。

      例如,下列指令會將項目 uid=bjensen 從包商的子樹狀結構 ou=Contractors,dc=example,dc=com,移至員工的子樹狀結構 ou=People,dc=example,dc=com


      $ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
      Enter bind password:
      dn: uid=bjensen,ou=Contractors,dc=example,dc=com
      changetype: modrdn
      newrdn: uid=bjensen
      deleteoldrdn: 0
      newsuperior: ou=People,dc=example,dc=com
    • 為項目重新命名。

      例如,下列指令會將項目 uid=bbjensen 重新命名為 uid=bjensen


      $ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
      Enter bind password:
      dn: uid=bbjensen,ou=People,dc=example,dc=com
      changetype: modrdn
      newrdn: uid=bjensen
      deleteoldrdn: 1

    撰寫 LDIF 陳述式時,請留意下列屬性:

    • dn - 指定要重新命名或移動的項目。

    • changetype: modrdn - 指定要使用修改 DN 作業。

    • newrdn - 指定新命名的屬性。

    • deleteoldrdn - 指定先前的命名屬性是否應從項目中移除 (1 表示是,0 表示否)。

      請注意,命名屬性若為項目定義中的必要屬性,即無法從項目中移除。

    • newsuperior - 指定項目的新上層屬性。

    如需有關 ldapmodify 指令及其選項的資訊,請參閱 ldapmodify(1) 線上手冊。

  4. 若在移動或重新命名含有大量項目的子樹狀結構時發生資源限制錯誤,請增加資料庫所能使用的鎖定數。


    $ dsconf set-server-prop -h host -p port db-lock-count:value
    

    修改此特性後必須重新啟動伺服器,變更方能生效。

使用修改 DN 作業的指示與限制

如上一節所述,在使用修改 DN 作業時,請遵循以下幾節所說明的指示。

使用修改 DN 作業的一般指示

搭配使用修改 DN 作業與複寫的指示


注意 – 注意 –

使用修改 DN 作業時若未符合下列需求,將可能導致複寫中斷,而使目錄服務失效。


設定參照

若用戶端應用程式在本機無法得知所應連絡的伺服器,您可以使用參照予以告知。參照是目錄伺服器傳回用戶端以替代結果之遠端尾碼或項目的指標。用戶端必須接著在參照中所命名的遠端伺服器上再次執行此作業。

有三種情況下會執行重新導向:

在任何情況下,參照皆是含有主機名稱、連接埠號與其他伺服器之 DN (可選擇) 的 LDAP URL。例如,ldap://east.example.com:389

如需有關如何在您的目錄部署中使用參照的概念性資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」

以下幾節將說明設定目錄預設參照以及建立與定義智慧型參照的程序。

設定預設參照

預設參照會傳回到用戶端應用程式,該用戶端應用程式會在不是由您的目錄伺服器所維護之尾碼中的 DN 提交作業。伺服器會傳回所有定義的參照,但不會定義其傳回順序。

Procedure設定預設參照

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 dsconf 指令行公用程式可設定一或多個預設參照。


    $ dsconf set-server-prop -h host -p port suffix-DN referral-url:referral-URL
    

    例如:


    $ dsconf set-server-prop -h host1 -p 1389 dc=example,dc=com \
     referral-url:ldap://east.example.com:1389

設定智慧型參照

智慧型參照可讓您將目錄項目或目錄樹狀結構對映至特定的 LDAP URL。使用智慧型參照,可讓您將用戶端應用程式納入特定的伺服器或特定伺服器上特定項目的參照。

智慧型參照通常會指向另一部伺服器上具有相同 DN 的實際項目。但您仍可定義相同或不同伺服器上任意項目的智慧型參照。例如,您可以將具有下列 DN 的項目定義為智慧型參照:


uid=bjensen,ou=People,dc=example,dc=com

智慧型參照會指向伺服器 east.example.com 上的另一個項目:


cn=Babs Jensen,ou=Sales,o=east,dc=example,dc=com

目錄使用智慧型參照的方式,必須符合 RFC 4511 的第 4.1.10 款所訂定的標準 (http://www.ietf.org/rfc/rfc4511.txt )。

Procedure建立及修改智慧型參照

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 若要建立智慧型參照,請以 referralextensibleObject 物件類別建立項目。

    referral 物件類別允許預期應包含 LDAP URL 的 ref 屬性。extensibleObject 物件類別允許您以任何模式屬性做為命名屬性,以符合目標項目。

    例如,若要定義下列可傳回智慧型參照的項目,而非項目 uid=bjensen,請使用此指令:


    $ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: uid=bjensen,ou=People,dc=example,dc=com
    objectclass: top
    objectclass: extensibleObject
    objectclass: referral
    uid: bjensen
    ref: ldap://east.example.com/cn=Babs%20Jensen,ou=Sales,o=east,dc=example,dc=com

    備註 –

    LDAP URL 中任何位於空格之後的資訊均會遭伺服器忽略。因此,在您打算做為參照的任何 LDAP URL 中,所有空格都必須以 %20 取代。其他特殊字元則必須加上引號。


    在您定義智慧型參照後,uid=bjensen 項目的修改實際上將對其他伺服器的 cn=Babs Jensen 項目執行。ldapmodify 指令會自動追蹤參照,例如:


    $ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: uid=bjensen,ou=People,dc=example,dc=com
    changetype: replace
    replace: telephoneNumber
    telephoneNumber: (408) 555-1234
  2. (可選擇) 若要修改智慧型參照項目,請使用 ldapmodify-M 選項:


    $ ldapmodify -M -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: uid=bjensen,ou=People,dc=example,dc=com
    changetype: replace
    replace: ref
    ref: ldap://east.example.com/cn=Babs%20Jensen,ou=Marketing,o=east,dc=example,dc=com

檢查有效屬性語法

目錄伺服器可讓您在執行下列作業時檢查屬性的完整性:

檢查可確保屬性值符合 IETF 的建議。所有不符的屬性皆會遭到拒絕,並記錄於錯誤記錄中。記錄訊息包含連線與作業 ID (若適用)。

伺服器預設會自動檢查前述作業的語法。若您關閉語法檢查,請執行下列程序。


備註 –

語法檢查與模式檢查不同。如需有關模式檢查的資訊,請參閱管理模式檢查


Procedure關閉自動語法檢查

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    若要關閉自動語法檢查,請使用此指令:


    $ dsconf set-server-prop -h host -p port check-syntax-enabled:off

追蹤目錄項目的修改

伺服器預設會保存新建或已修改之項目的特殊屬性,如 LDAP v3 規格中所指定。這些特殊屬性會儲存在尾碼的項目上,並且包含:

Procedure關閉項目修改追蹤

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。


注意 – 注意 –

關閉項目修改追蹤會導致不相符的資料。由於有多項應用程式皆依賴這些屬性,且停用此功能後效能只會略為提昇,因此建議您不要關閉項目修改追蹤。


    關閉伺服器的項目修改追蹤。


    $ dsconf set-server-prop -h host -p port suffix-DN mod-tracking-enabled:off

為屬性值加密

屬性加密可保護目錄中所儲存之機密資料的安全性。屬性加密可讓您指定項目的某些屬性必須以加密格式儲存。如此可防止儲存在資料庫檔案、備份檔案與匯出的 LDIF 檔案中的資料遭讀取。

使用此功能時,屬性值在儲存至目錄伺服器資料庫之前會先進行加密,並在傳回至用戶端之前解密回原始值。您必須使用存取控制以防止用戶端在無權限的情況下存取此類屬性,並在屬性值傳輸於用戶端與目錄伺服器之間時,使用 SSL 為屬性值加密。如需在一般情況下與屬性加密後之特殊情況下的資料安全性架構簡介,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

必須在伺服器上配置 SSL 並加以啟用,屬性加密方可運作。但依預設所有屬性皆不會加密。屬性加密配置於尾碼層級,這表示屬性會在尾碼中含有該屬性的每個項目中加密。若要為整個目錄中的某一屬性加密,您必須在每個尾碼中啟用該屬性的加密。


注意 – 注意 –

屬性加密會影響所有與尾碼相關的資料及索引檔案。若要修改現有尾碼的加密配置,您必須先匯出其內容,並在變更配置後重新匯入內容。DSCC 可協助您執行這些步驟。如需有關使用 DSCC 的更多資訊,請參閱目錄服務控制中心介面

為進一步確保安全性,只要您開啟屬性加密,即應手動刪除仍可能含有未加密值的資料庫快取檔案與資料庫記錄檔。如需刪除這些檔案的程序,請參閱配置屬性加密

您應在載入或建立新尾碼中的資料之前啟用加密屬性。


若您選擇加密被某些項目做為命名屬性的屬性,DN 中所出現的值將不會加密。儲存於項目中的值將會加密。

雖然您在配置加密時可以選取 userPassword 屬性,但除非遇到密碼必須以純文字格式儲存的情況,否則安全性並不會因此有任何提昇。DIGEST-MD5 SASL 認證也是如此。若密碼已在其密碼策略中定義了加密機制,則進一步的加密所增添的安全性將極其有限,且反而會影響每個連結作業的效能。

在儲存時,加密屬性的開頭會加上密碼標記,表示其使用了加密演算法。使用 DES 加密演算法的加密屬性將如下所示:


{CKM_DES_CBC}3hakc&jla+=snda%

當您從線上匯入資料而在檢視時為資料加密後,您即已提供對伺服器進行認證的金鑰資料庫密碼,往後將不會再出現此提示。若您進行離線資料匯入,目錄伺服器則會先提示您提供密碼,始允許您為匯入的資料加密。為資料解密時 (此作業需要更高的安全性),無論此匯出作業是線上或是離線,目錄伺服器都會自動提示您提供金鑰資料庫密碼。如此將可進一步確保安全性。


備註 –

只要憑證或私密金鑰未變更,伺服器就會繼續產生相同的金鑰。因此,只要兩個伺服器實例使用相同的憑證,資料即可從一個伺服器實例傳輸 (匯出並匯入) 至另一個實例。


屬性加密與效能

屬性加密雖然可提昇資料安全性,但也會影響系統效能。請仔細評估哪些屬性需要加密,而僅就您認為特別機密的屬性進行加密。

由於機密資料可透過索引檔案直接存取,因此對應於加密屬性的索引鍵必須進行加密,使屬性受到完整的保護。在索引已對目錄伺服器效能造成影響 (尚未納入索引鍵加密所造成的影響) 的情況下,請在首次將資料匯入或增加到資料庫之前,先配置屬性加密。此程序可確保加密屬性的索引具有先佔性。

屬性加密用法注意事項

實作屬性加密功能時,請考量下列事項:

Procedure配置屬性加密

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 如果要配置屬性加密的尾碼中含有任何項目,即須先將該尾碼的內容匯出至 LDIF 檔案。

    若尾碼中含有加密屬性,而您想要使用匯出的 LDIF 檔案重新初始化尾碼,可以讓屬性以匯出的 LDIF 保持加密形式。

  2. 若要啟用屬性加密,請使用此指令:


    $ dsconf create-encrypted-attr -h host -p port suffix-DN attr-name cipher-name
    

    其中 cipher-name 為下列其中一項:

    • des - DES 區塊密碼

    • des3 - Triple-DES 區塊密碼

    • rc2 - RC2 區塊密碼

    • rc4 - RC4 串流密碼

    例如:


    $ dsconf create-encrypted-attr -h host1 -p 1389 dc=example,dc=com uid rc4
  3. 若要將加密屬性回復為其原始狀態,請使用此指令:


    $ dsconf delete-encrypted-attr -h host -p port suffix-DN attr-name
    
  4. 若您變更了配置而為一或多個屬性加密,且這些屬性在匯入作業之前即有值,請清除資料庫快取並移除記錄。

    在資料庫快取與資料庫記錄中,不會顯示任何未加密的值。


    備註 –

    若是刪除這些檔案,則會遺失某些追蹤資訊。此外,當您刪除這些檔案後,伺服器將處於回復模式,而需要很長的時間才能重新啟動。


    若要清除資料庫快取及移除記錄,請執行以下作業:

    1. 停止目錄伺服器,如啟動、停止與重新啟動目錄伺服器實例中所述。

    2. 以超級使用者或具有管理員權限的使用者身份,從檔案系統中刪除資料庫快取檔案。


      # rm instance-path/db/__db.*
    3. 從檔案系統中刪除資料庫記錄檔。


      # rm instance-path/db/log.0000000001
    4. 重新啟動目錄伺服器。

      伺服器會自動建立新的資料庫快取檔案。在重新填入快取前,此尾碼中的作業效能可能會略受影響。

  5. 以 LDIF 檔案初始化尾碼,如初始化尾碼中所述。

    載入檔案且建立對應的索引時,指定屬性的所有值均將加密。

第 5 章 目錄伺服器安全性

目錄伺服器支援數項可透過網路提供安全且可信任之通訊的機制。LDAPS 是執行優先權高於安全傳輸層 (SSL) 的標準 LDAP 協定。LDAPS 會為資料加密,並選擇性地使用憑證進行認證。本章所提及之 SSL 一詞,係指支援的協定 SSL2、SSL3 與 TLS 1.0。

目錄伺服器也支援可在原本未加密的 LDAP 連線上啟用 TLS 的 Start 傳輸層安全 (Start TLS) 延伸作業。

此外,目錄伺服器也支援透過簡單驗證與安全層 (SASL) 所執行的通用安全服務 API (GSSAPI)。GSSAPI 可讓您在 Solaris 作業系統上使用 Kerberos 第 5 版安全性協定。身份識別對映機制會接著為 Kerberos 主體與目錄中的身份識別建立關聯。

如需其他安全性資訊,請造訪 NSS 網站,網址是 http://www.mozilla.org/projects/security/pki/nss/

本章提供透過 SSL 配置安全性的程序。如需有關 ACI 的資訊,請參閱第 6 章, 目錄伺服器存取控制。如需有關使用者存取與密碼的資訊,請參閱第 7 章, 目錄伺服器密碼策略

本章包含下列主題:

對目錄伺服器使用 SSL

安全傳輸層 (SSL) 可在目錄伺服器及其用戶端之間提供加密通訊與可選擇的認證功能。SSL 可透過 LDAP 使用,或與 DSML-over-HTTP 搭配使用。SSL 預設會透過 LDAP 啟用,但若您使用 DSML-over-HTTP,亦可輕鬆啟用 SSL。此外,複寫經配置後亦可使用 SSL,讓伺服器之間能進行安全通訊。

若在簡單認證 (連結 DN 與密碼) 中使用 SSL,即會對伺服器所收送的所有資料進行加密。加密可確保機密度與資料完整性。用戶端可選擇性地透過簡單驗證與安全層 (SASL) 使用憑證,對目錄伺服器或第三方安全性機制進行認證。憑證型認證可使用公開金鑰加密法,防止用戶端或伺服器進行偽造或模擬。

目錄伺服器能夠在個別的連接埠上同時進行 SSL 與非 SSL 通訊。基於安全性考量,您也可以限定所有通訊皆需使用 LDAP 安全連接埠。用戶端認證也是可配置的。您可以將用戶端認證設為必要或允許項目。此設定將決定您所執行的安全性層級。

SSL 可支援 Start TLS 延伸作業,而為一般 LDAP 連線提供安全性。用戶端可連結至標準 LDAP 連接埠而使用傳輸層安全協定,以維護連線的安全性。Start TLS 作業可讓用戶端享有更大的彈性,並有利於簡化連接埠配置。

SSL 所提供的加密機制亦可用於屬性加密。啟用 SSL 可讓您對尾碼配置屬性加密,以維護資料儲存在目錄時的安全性。如需更多資訊,請參閱為屬性值加密

如需額外的安全性,您可以透過存取控制指令 (ACI),設定對目錄內容的存取控制。ACI 須使用特定的認證方法,同時確保資料僅可透過安全通道進行傳輸。設定 ACI,可彌補使用 SSL 與憑證的不足之處。如需更多資訊,請參閱第 6 章, 目錄伺服器存取控制

SSL 預設會透過 LDAP 啟用,在使用 DSML-over-HTTP 時,亦可輕鬆啟用 SSL。此外,您可能會如以下幾節所述,想修改某些方面的 SSL 配置。

管理憑證

本節說明如何管理目錄伺服器中的 SSL 憑證。

若要在目錄伺服器上執行 SSL,您必須使用自行簽署的憑證或公開金鑰基礎架構 (PKI) 解決方案。

PKI 解決方案與外部憑證授權機構 (CA) 相關。使用 PKI 解決方案時,必須具備 CA 簽署的伺服器憑證,其中包含公開金鑰與私密金鑰。此憑證隨各目錄伺服器而不同。您也需具備可信任的 CA 憑證,其中包含公開金鑰。可信任的 CA 憑證可確保來自您的 CA 之所有伺服器憑證皆可信任。此憑證有時亦稱為 CA 根金鑰或根憑證。


備註 –

若使用憑證進行測試,可能會使用自行簽署的憑證。但在生產環境中使用自行簽署的憑證,並不是安全的做法。在生產環境中,請使用可信任的憑證授權機構 (CA) 憑證。


本節中的程序使用 dsadm dsconf 指令。如需有關這些指令的資訊,請參閱 dsadm(1M) 線上手冊與 dsconf(1M) 線上手冊。

本節提供下列有關在目錄伺服器上配置憑證的資訊:

Procedure檢視預設自行簽署的憑證

目錄伺服器實例於首次建立時,會包含預設自行簽署的憑證。自行簽署的憑證是成對的公開與私密金鑰組,其中的公開金鑰由私密金鑰所簽署。自行簽署的憑證有效期限為三個月。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    若要檢視預設自行簽署的憑證,請使用此指令:


    $ dsadm show-cert instance-path defaultCert

Procedure管理自行簽署的憑證

當您建立目錄伺服器實例時,系統自動提供預設的自行簽署憑證。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 若要以非預設設定建立自行簽署的憑證,請使用此指令:


    $ dsadm add-selfsign-cert instance-path cert-alias
    

    其中 cert-alias 是您提供用以識別憑證的名稱。

    若要檢視此指令的所有選項,請參閱 dsadm(1M) 線上手冊或指令行說明:


    $ dsadm add-selfsign-cert --help
  2. 請在自行簽署的憑證到期時更新憑證:


    $ dsadm renew-selfsign-cert instance-path cert-alias
    

Procedure請求 CA 簽署的伺服器憑證

此程序說明如何請求及安裝用於目錄伺服器的 CA 簽署伺服器憑證。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 產生 CA 簽署的伺服器憑證請求。


    $ dsadm request-cert [-W cert-pwd-file] {-S DN | --name name [--org org] [--org-unit org-unit \
      [--city city] [--state state] [--country country]} [-o output-file] [-F format] instance-path
    

    例如,若要為 Example 公司請求 CA 簽署的伺服器憑證,請使用此指令:


    $ dsadm request-cert --name host1 --org Example --org-unit Marketing \
     -o my_cert_request_file /local/ds

    為完整識別伺服器,憑證授權機構可能會要求此範例中所顯示的所有屬性。如需每個屬性的說明,請參閱 dsadm(1M) 線上手冊。

    當您使用 dsadm request-cert 請求憑證時,除非指定 ASCII 做為輸出格式,否則所產生的憑證請求將是二進位憑證請求。若您指定 ASCII,所產生的憑證請求則會是 PEM 格式的 PKCS #10 憑證請求。PEM 是 RFC 1421 至 1424 (http://www.ietf.org/rfc/rfc1421.txt) 所指定的安全電子郵件 (Privacy Enhanced Mail) 格式,可用以透過 US-ASCII 字元呈現 base64 編碼的憑證請求。請求的內容如下列範例所示:


    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIIBrjCCARcCAQAwbjELMAkGA1UBhMCVXMxEzARBgNVBAgTCkNBElGT1JOSUExLD
    AqBgVBAoTI25ldHNjYXBlIGNvb11bmljYXRpb25zIGNvcnBvcmF0aWuMRwwGgYDV
    QQDExNtZWxsb24umV0c2NhcGUuY29tMIGfMA0GCSqGSIb3DQEBAUAA4GNADCBiQK
    BgCwAbskGh6SKYOgHy+UCSLnm3ok3X3u83Us7u0EfgSLR0f+K41eNqqWRftGR83e
    mqPLDOf0ZLTLjVGJaHJn4l1gG+JDf/n/zMyahxtV7+T8GOFFigFfuxJaxMjr2j7I
    vELlxQ4IfZgwqCm4qQecv3G+N9YdbjveMVXW0v4XwIDAQABAAwDQYJKoZIhvcNAQ
    EEBQADgYEAZyZAm8UmP9PQYwNy4Pmypk79t2nvzKbwKVb97G+MT/gw1pLRsuBoKi
    nMfLgKp1Q38K5Py2VGW1E47/rhm3yVQrIiwV+Z8Lcc=
    -----END NEW CERTIFICATE REQUEST-----
  2. 根據適當程序,將憑證請求傳輸到您的憑證授權機構。

    取得憑證授權機構憑證的程序會因使用的憑證授權機構而異。有些商業 CA 會提供網站供您自動下載憑證。其他 CA 則會在您請求時,以電子郵件傳送。

    傳送請求之後,必須等候 CA 回應以提供憑證。請求的回應時間各異。例如,若您的 CA 屬公司內部,則可能只需一或兩天即可回應您的請求。若所選取的 CA 屬公司外部,則可能需要數週才可回應您的請求。

  3. 請儲存您從憑證授權機構接收的憑證。

    將憑證備份在安全之處。萬一憑證遺失,可以使用備份檔案重新加以安裝。可以將其儲存於文字檔中。PEM 格式的 PKCS #11 憑證內容如下列範例所示:


    -----BEGIN CERTIFICATE-----
    MIICjCCAZugAwIBAgICCEEwDQYJKoZIhKqvcNAQFBQAwfDELMAkGA1UEBhMCVVMx
    IzAhBgNVBAoGlBhbG9a2FWaWxsZGwSBXaWRnZXRzLCBJbmMuMR0wGwYDVQQLExRX
    aWRnZXQgTW3FrZXJzICdSJyBVczEpMCcGAx1UEAxgVGVzdCBUXN0IFRlc3QgVGVz
    dCBUZXN0IFlc3QgQ0EswHhcNOTgwMzEyMDIzMzUWhcNOTgwMzI2MDIzMpzU3WjBP
    MQswCYDDVQQGEwJVUzEoMCYGA1UEChMfTmV0c2NhcGUgRGlyZN0b3J5VIFB1Ymxp
    Y2F0aW9uczEWMB4QGA1UEAxMNZHVgh49dq2tLNvbjTBaMA0GCSqGSIb3DQEBAQUA
    A0kAMEYkCQCksMR/aLGdfp4m0OiGgijG5KgOsyRNvwGYW7kfW+8mmijDtZaRjYNj
    jcgpF3VnlbxbclX9LVjjNLC5737XZdAgEDozYwpNDARBglghkgBhvhCEAQEEBAMC
    APAwHkwYDVR0jBBgwFAU67URjwCaGqZHUpSpdLxlzwJKiMwDQYJKoZIhQvcNAQEF
    BQADgYEAJ+BfVem3vBOPBveNdLGfjlb9hucgmaMcQa9FA/db8qimKT/ue9UGOJqL
    bwbMKBBopsDn56p2yV3PLIsBgrcuSoBCuFFnxBnqSiTS7YiYgCWqWaUA0ExJFmD6
    6hBLseqkSWulk+hXHN7L/NrViO+7zNtKcaZLlFPf7d7j2MgX4Bo=
    -----END CERTIFICATE-----

Procedure增加 CA 簽署的伺服器憑證與可信任的 CA 憑證

此程序說明如何安裝用於目錄伺服器之 CA 簽署的伺服器憑證與可信任的 CA 憑證。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 增加 CA 簽署的伺服器憑證。


    $ dsadm add-cert instance-path cert-alias cert-file
    

    其中 cert-alias 是提供用以識別憑證的名稱,而 cert-file 是文字檔,內含 PEM 格式的 PKCS #11 憑證。

    例如,若要安裝 CA 簽署的伺服器憑證,可以使用如下的指令:


    $ dsadm add-cert /local/ds server-cert /local/safeplace/serv-cert-file

    憑證此時已完成安裝,但尚未受信任。若要信任 CA 簽署的伺服器憑證,必須安裝憑證授權機構的憑證。

  2. 增加可信任的憑證授權機構憑證。


    $ dsadm add-cert -C instance-path cert-alias cert-file
    

    -C 選項指出此憑證為可信任的憑證授權機構憑證。

    例如,若要安裝憑證授權機構所提供之可信任的憑證,必須使用此指令:


    $ dsadm add-cert -C /local/ds CA-cert /local/safeplace/ca-cert-file
  3. (可選擇) 驗證所安裝的憑證。

    • 若要列出所有伺服器憑證並顯示其有效日期與別名,請鍵入:


      $ dsadm list-certs instance-path
      

      例如:


      $ dsadm list-certs /local/ds1
      Enter the certificate database password:
      Alias       Valid from Expires on Self-   Issued by          Issued to
                                        signed?                                     
      ----------- ---------- ---------- ------- -----------------  -----------------
      serverCert  2000/11/10 2011/02/10 n       CN=CA-Signed Cert, CN=Test Cert,
                  18:13      18:13              OU=CA,O=com        dc=example,dc=com
      defaultCert 2006/05/18 2006/08/18 y       CN=host1,CN=DS,    Same as issuer
                  16:28      16:28              dc=example,dc=com
      2 certificates found

      目錄代理伺服器的實例預設會包含名為 defaultCert 的預設伺服器憑證。Same as issuer 表示預設憑證為自行簽署的伺服器憑證。

    • 若要列出可信任的 CA 憑證,請鍵入:


      $ dsadm list-certs -C instance-path
      

      例如:


      $ dsadm list-certs -C /local/ds1
      Enter the certificate database password:
      Alias   Valid from Expires on Self-   Issued by           Issued to
                                    signed?                                     
      ------- ---------- ---------- ------- -----------------   -----------------
      CA-cert 2000/11/10 2011/02/10 y       CN=Trusted CA Cert, Same as issuer
              18:12      18:12              OU=CA,O=com
      1 certificate found
    • 若要檢視憑證的詳細資訊 (包括憑證過期日),請鍵入:


      $ dsadm show-cert instance-path cert-alias
      

      例如,若要檢視伺服器憑證,請鍵入:


      $ dsadm show-cert /local/ds1 "Server-Cert"
      Enter the certificate database password:
      Certificate:
          Data:
              Version: 3 (0x2)
              Serial Number: 2 (0x2)
              Signature Algorithm: PKCS #1 MD5 With RSA Encryption
              Issuer:
                  "CN=Server-Cert,O=Sun,C=US"
              Validity:
                  Not Before: Fri Nov 10 18:12:20 2000
                  Not After : Thu Feb 10 18:12:20 2011
              Subject:
                  "CN=CA Server Cert,OU=ICNC,O=Sun,C=FR"
              Subject Public Key Info:
                  Public Key Algorithm: PKCS #1 RSA Encryption
                  RSA Public Key:
                      Modulus:
                          bd:76:fc:29:ca:06:45:df:cd:1b:f1:ce:bb:cc:3a:f7:
                          77:63:5a:82:69:56:5f:3d:3a:1c:02:98:72:44:36:e4:
                          68:8c:22:2b:f0:a2:cb:15:7a:c4:c6:44:0d:97:2d:13:
                          b7:e3:bf:4e:be:b5:6a:df:ce:c4:c3:a4:8a:1d:fa:cf:
                          99:dc:4a:17:61:e0:37:2b:7f:90:cb:31:02:97:e4:30:
                          93:5d:91:f7:ef:b0:5a:c7:d4:de:d8:0e:b8:06:06:23:
                          ed:5f:33:f3:f8:7e:09:c5:de:a5:32:2a:1b:6a:75:c5:
                          0b:e3:a5:f2:7a:df:3e:3d:93:bf:ca:1f:d9:8d:24:ed
                      Exponent: 65537 (0x10001)
          Signature Algorithm: PKCS #1 MD5 With RSA Encryption
          Signature:
              85:92:42:1e:e3:04:4d:e5:a8:79:12:7d:72:c0:bf:45:
              ea:c8:f8:af:f5:95:f0:f5:83:23:15:0b:02:73:82:24:
              3d:de:1e:95:04:fb:b5:08:17:04:1c:9d:9c:9b:bd:c7:
              e6:57:6c:64:38:8b:df:a2:67:f0:39:f9:70:e9:07:1f:
              33:48:ea:2c:18:1d:f0:30:d8:ca:e1:29:ec:be:a3:43:
              6f:df:03:d5:43:94:8f:ec:ea:9a:02:82:99:5a:54:c9:
              e4:1f:8c:ae:e2:e8:3d:50:20:46:e2:c8:44:a6:32:4e:
              51:48:15:d6:44:8c:e6:d2:0d:5f:77:9b:62:80:1e:30
          Fingerprint (MD5):
              D9:FB:74:9F:C3:EC:5A:89:8F:2C:37:47:2F:1B:D8:8F
          Fingerprint (SHA1):
              2E:CA:B8:BE:B6:A0:8C:84:0D:62:57:85:C6:73:14:DE:67:4E:09:56
      
          Certificate Trust Flags:
              SSL Flags:
                  Valid CA
                  Trusted CA
                  User
                  Trusted Client CA
              Email Flags:
                  User
              Object Signing Flags:
                  User

Procedure更新過期的 CA 簽署伺服器憑證

當您的 CA 簽署伺服器憑證 (公開金鑰與私密金鑰) 過期時,請使用此程序加以更新。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 從憑證授權機構取得更新的 CA 簽署伺服器憑證。

  2. 收到更新的憑證後,請加以安裝。


    $ dsadm renew-cert instance-path cert-alias cert-file
    

Procedure匯出及匯入 CA 簽署伺服器憑證

有時您可能會想匯出憑證的公開與私密金鑰,以便後續可匯入憑證。例如,可能會想讓其他伺服器使用您的憑證。

此程序中的指令可用於含有萬用字元的憑證,例如 "cn=*,o=example"

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 匯出憑證。


    $ dsadm export-cert [-o output-file] instance-path cert-alias
    

    例如:


    $ dsadm export-cert -o /tmp/first-certificate /local/ds1 "First Certificate"
    $ dsadm export-cert -o /tmp/first-ca-server-certificate /local/ds1/ defaultCert
    Choose the PKCS#12 file password:
    Confirm the PKCS#12 file password:
    $ ls /tmp
    first-ca-server-certificate
     
  2. 匯入憑證。


    $ dsadm import-cert instance-path cert-file
    

    例如,若要將憑證匯入 host1 上的伺服器實例:


    $ dsadm import-cert -h host1 /local/ds2 /tmp/first-ca-server-certificate
    Enter the PKCS#12 file password:
     
  3. (可選擇) 若已將憑證匯入伺服器,請配置伺服器以使用匯入的憑證。


    $ dsconf set-server-prop -e -h host -p port -w - ssl-rsa-cert-name:server-cert

配置憑證資料庫密碼

目錄伺服器預設會透過儲存的密碼,在內部管理 SSL 憑證資料庫密碼。管理憑證時,使用者並不需鍵入憑證密碼或指定密碼檔案。此選項僅會隱藏密碼,而不會對密碼進行加密,因此並不安全。

但若您在使用憑證時想要有更多的控制,則可以配置伺服器,讓使用者在使用指令行時必須提供密碼。在此情況下,對於 autostartbackupdisable-serviceenable-service inforeindexrestorestop 以外的所有 dsadm 子指令,使用者都必須鍵入憑證資料庫密碼。憑證資料庫位於 instance-path/alias 目錄中。

Procedure配置伺服器,讓使用者必須提供憑證密碼

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 停止伺服器。


    $ dsadm stop instance-path
    
  2. 將密碼提示旗標設為 on


    $ dsadm set-flags instance-path cert-pwd-prompt=on

    系統會要求您選擇新的憑證密碼。

  3. 啟動伺服器。


    $ dsadm start instance-path
    

為目錄伺服器備份及復原憑證資料庫

當您備份目錄伺服器的實例時,會備份目錄伺服器的配置與憑證。備份的憑證會儲存在 archive-path/alias 目錄中。

如需有關如何備份及復原目錄伺服器的資訊,請參閱製作嚴重損壞回復所需的備份

配置 SSL 通訊

本節包含停用及啟用 SSL 的相關程序。

停用非安全通訊

建立伺服器實例時,預設會建立 LDAP 明文連接埠與 LDAP 安全連接埠 (LDAPS)。但在某些情況下,可能會想停用非 SSL 通訊,而使伺服器通訊只能透過 SSL 進行。

SSL 連線啟用時會使用預設的自行簽署憑證。若您認為有必要,也可安裝自己的憑證。如需在伺服器啟動後管理憑證及停用 SSL 的相關指示,請參閱第 5 章, 目錄伺服器安全性。如需憑證、憑證資料庫以及取得 CA 簽署伺服器憑證的簡介,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

Procedure停用 LDAP 明文連接埠

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 停用 LDAP 明文連接埠。

    若要停用非安全點,必須連結至 LDAP 安全點。此範例說明主機伺服器 host1 上的預設 LDAP 安全連接埠 1636 之連結。


    $ dsconf set-server-prop -h host1 -p 1636 ldap-port:disabled
  2. 重新啟動伺服器,使變更生效。


    $ dsadm restart /local/ds

    您現在再也不需要在非安全連接埠 1389 上進行連結。

選擇加密密碼

密碼是為資料加密及解密時所使用的演算法。一般而言,密碼在加密期間所使用的位元數越多,加密就越嚴密或安全。SSL 的密碼也可經由使用的訊息認證類型來識別。訊息認證也是一種演算法,可計算能夠確保資料完整性的總和檢查

當用戶端初始化與伺服器的 SSL 連線時,用戶端與伺服器必須協議出用以加密資訊的密碼。在任何雙向加密程序中,雙方都必須使用相同的密碼。所使用的密碼取決於伺服器所保存之密碼清單目前的順序。伺服器會選擇用戶端所呈現的密碼中,第一個符合其清單中之密碼的密碼。目錄伺服器的預設密碼值為 all,代表基礎 SSL 程式庫所支援的所有已知安全密碼。但您也可以修改此值,而僅接受特定密碼。

如需有關可用於目錄伺服器之密碼的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

Procedure選擇加密密碼

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 請確定您的伺服器已啟用 SSL。

    請參閱配置 SSL 通訊

  2. 檢視可用的 SSL 密碼。


    $ dsconf get-server-prop -h host -p port ssl-supported-ciphers
    ssl-supported-ciphers  :  TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
    ssl-supported-ciphers  :  TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
    ssl-supported-ciphers  :  TLS_DHE_RSA_WITH_AES_256_CBC_SHA
    ssl-supported-ciphers  :  TLS_DHE_DSS_WITH_AES_256_CBC_SHA 
    ...
  3. (可選擇) 若要保有非加密資料的副本,請在設定 SSL 密碼前先匯出資料。

    請參閱匯出至 LDIF

  4. 設定 SSL 密碼。


    $ dsconf set-server-prop -h host -p port ssl-cipher-family:cipher
    

    例如,若要將密碼系列設為 SSL_RSA_WITH_RC4_128_MD5SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,請鍵入:


    $ dsconf set-server-prop -h host1 -p 1636 ssl-cipher-family:SSL_RSA_WITH_RC4_128_MD5 \
     ssl-cipher-family:SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
    Enter "cn=Directory Manager" password:  
    Before setting SSL configuration, export Directory Server data. 
    Do you want to continue [y/n] ? y
    Directory Server must be restarted for changes to take effect.
  5. 重新啟動伺服器,使變更生效。


    $ dsadm restart /local/ds

配置用戶端認證

用戶端認證是伺服器用以驗認用戶端之身份識別的機制。

用戶端認證可透過下列方式之一執行:

本節提供下列有關在目錄伺服器上配置兩個 SASL 機制的資訊。

如需有關配置安全性的更多資訊,請參閱配置 LDAP 用戶端以使用安全性

設定目錄伺服器中的 SASL 加密層級

配置 SASL 機制之前,必須先指定是否需要加密。SASL 加密的需求,由安全性強度係數 (SSF) 的最大值與最小值所設定。

dsSaslMinSSF(5dsat)dsSaslMaxSSF(5dsat) 屬性代表加密金鑰長度,這些屬性儲存於 cn=SASL, cn=security, cn=config 之中。

伺服器允許任何層級的加密,包含不加密。這表示目錄伺服器接受大於 256 的 dsSaslMinSSFdsSaslMaxSSF 值。但目前沒有任何 SASL 機制支援大於 128 的 SSF。目錄伺服器會在 SSF 可用的最大值 (128) 以內協調這些值。因此,視可用的基礎機制之不同,SSF 實際上的最大值可能會小於配置的最大值。

SASL 安全性係數認證取決於兩個主要項目:伺服器與用戶端應用程式所請求的最小與最大係數,以及基礎安全性元件所提供的可用加密機制。概略地說,伺服器與用戶端會嘗試使用小於或等於兩者之最大設定係數,但大於或等於兩者之最小係數的最高可用安全性係數。

目錄伺服器預設的最小 SASL 安全性係數 dsSaslMinSSF0,表示沒有任何保護。除非您變更目錄伺服器的最小值,否則實際上的最小值取決於用戶端設定。實務上應將最小值設為您實際上要讓伺服器與用戶端使用的最低層級。若伺服器與用戶端無法協調出符合最小需求的機制,則不會建立連線。

Procedure需要 SASL 加密

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    若需要 SASL 加密,請將 dsSaslMinSSF 值設為所需的最小加密。


    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: cn=SASL, cn=security, cn=config
    changetype: modify
    replace: dsSaslMinSSF
    dsSaslMinSSF: 128
    ^D

Procedure不允許 SASL 加密

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    若不允許 SASL 加密,請將 dsSaslMinSSFdsSaslMaxSSF 值都設為零。


    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: cn=SASL, cn=security, cn=config
    changetype: modify
    replace: dsSaslMinSSF
    dsSaslMinSSF: 0
    
    replace: dsSaslMaxSSF
    dsSaslMaxSSF: 0
    ^D

透過 DIGEST-MD5 的 SASL 認證

DIGEST-MD5 機制在進行用戶端認證時,會比較用戶端所傳送的雜湊值與使用者的密碼雜湊。但由於此機制必須讀取使用者密碼,因此所有想透過 DIGEST-MD5 進行認證的使用者,在目錄中都必須要有 {CLEAR} 密碼。將 {CLEAR} 密碼儲存到目錄時,您必須如第 6 章, 目錄伺服器存取控制中所述,確實透過 ACI 適當限制密碼值的存取權。此外,您還必須如為屬性值加密中所述,在尾碼中配置屬性加密。

Procedure配置 DIGEST-MD5 機制

下列程序說明如何配置目錄伺服器以使用 DIGEST-MD5。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 使用 ldapsearch 指令,驗證 DIGEST-MD5 是根項目上的 supportedSASLMechanisms 屬性值。

    例如,下列指令可顯示哪些是啟用的 SASL 機制:


    $ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \
     -s base -b "" "(objectclass=*)" supportedSASLMechanisms
    Enter bind password:
    dn:
    supportedSASLMechanisms: EXTERNAL
    supportedSASLMechanisms: DIGEST-MD5
    supportedSASLMechanisms: GSSAPI
    ^D
  2. 若 DIGEST-MD5 尚未啟用,請加以啟用。


    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w - 
    Enter bind password:
    dn: cn=SASL, cn=security, cn=config
    changetype: modify
    add: dsSaslPluginsEnable
    dsSaslPluginsEnable: DIGEST-MD5
    -
    replace: dsSaslPluginsPath
    dsSaslPluginsPath: SASL-library
    ^D

    其中 SASL-library 為下列其中一項:

    JES 安裝

    /usr/lib/mps/sasl2

    Zip 安裝

    install-path/dsee6/private/lib

  3. 針對 DIGEST-MD5 使用預設身份識別對映,或建立新的對映。

    如需相關資訊,請參閱DIGEST-MD5 身份識別對映

  4. 請確定所有將使用 DIGEST-MD5 而透過 SSL 存取伺服器的使用者,均已將密碼儲存在 {CLEAR} 中。

    如需密碼儲存機制,請參閱第 7 章, 目錄伺服器密碼策略

  5. 若修改了 SASL 配置項目或任何 DIGEST-MD5 身份識別對映項目,請重新啟動目錄伺服器。

DIGEST-MD5 身份識別對映

SASL 機制的身份識別對映會嘗試比對 SASL 身份識別的憑證與目錄中的使用者項目。如果在對映中找不到對應 SASL 身份識別的 DN,認證即會失敗。如需此機制的完整說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

SASL 身份識別是一個名為 Principal 的字串,用以表示各機制之特定格式下的使用者。在 DIGEST-MD5 中,用戶端應建立含有 dn: 前綴與 LDAP DN,或含有 u: 前綴與任何用戶端指定文字的主體。對映期間,用戶端所傳送的主體可用於 ${Principal} 預留位置中。

伺服器配置的下列項目,即為 DIGEST-MD5 的預設身份識別對映:


dn: cn=default,cn=DIGEST-MD5,cn=identity mapping,cn=config
objectClass: top
objectClass: nsContainer
objectClass: dsIdentityMapping
objectClass: dsPatternMatching
cn: default
dsMatching-pattern: \${Principal}
dsMatching-regexp: dn:(.*)
dsMappedDN: \$1

此身份識別對映會假設主體的 dn 欄位含有現有使用者在目錄中的實際 DN。

Procedure定義您自己的 DIGEST-MD5 身份識別對映

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 編輯預設對映項目,或在 cn=DIGEST-MD5,cn=identity mapping,cn=config 下建立新的對映項目。

    instance-path/ldif/identityMapping_Examples.ldif 中含有 DIGEST-MD5 的對映範例。

    此範例假設不合格的主體文字欄位內,含有想要的身份識別之使用者名稱。下列指令將說明此對映的定義方式:


    $ ldapmodify -a -h host1 -p 1636 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: cn=unqualified-username,cn=DIGEST-MD5,cn=identity mapping
    cn=config
    objectclass: dsIdentityMapping
    objectclass: dsPatternMatching
    objectclass: nsContainer
    objectclass: top
    cn: unqualified-username
    dsMatching-pattern: \${Principal}
    dsMatching-regexp: u:(.*)@(.*)\\.com
    dsSearchBaseDN: dc=\$2
    dsSearchFilter: (uid=\$1)
  2. 重新啟動目錄伺服器,使您的新對映生效。

透過 GSSAPI 的 SASL 認證 (僅適用於 SPARC)

透過 SASL 的通用安全服務 API (GSSAPI) 可讓您使用第三方安全性系統 (如 Kerberos V5) 進行用戶端認證。GSSAPI 程式庫僅適用於 Solaris 作業系統 SPARC® 平台。Sun 建議您在 Sun Enterprise Authentication MechanismTM 1.0.1 伺服器上安裝 Kerberos V5 實作。

此伺服器會使用 GSSAPI 驗證使用者的身份識別。接著,SASL 機制會套用 GSSAPI 對映規則,以取得此連線期間對所有作業而言皆為連結 DN 的 DN。

Procedure配置 Kerberos 系統

請根據製造商的指示配置 Kerberos 軟體。若您使用 Sun Enterprise Authentication Mechanism 1.0.1 伺服器,請執行此程序。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 配置 /etc/krb5 中的檔案。

  2. 建立用以儲存使用者與服務的 Kerberos 資料庫。

  3. 在資料庫中,建立 LDAP 服務的主體。


    $ ldap/server-FQDN@realm
    

    其中 server-FQDN 是您目錄伺服器完全合格的網域名稱。

  4. 啟動 Kerberos 常駐程式程序。


    備註 –

    DNS 必須配置於主機電腦上。


    如需這些步驟的詳細指示,請參閱軟體文件。另請參閱使用 GSSAPI 與 SASL 配置 Kerberos 認證的範例

Procedure配置 GSSAPI 機制

下列程序說明如何配置目錄伺服器以在 Solaris 作業系統上使用 GSSAPI。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. GSSAPI 身份識別對映中所述,建立 GSSAPI 的預設身份識別對映與所有自訂對映。

  2. 建立用以儲存服務金鑰的 keytab。

    您的 LDAP 服務金鑰會儲存在 keytab 中。

    1. 請確定只有目錄伺服器使用者可讀取 keytab。

    2. 將檔案名稱變更為預設值 /etc/krb5/krb5.keytab 以外的名稱。

    3. 設定環境變數 KRB5_KTNAME,以確保所使用的是新的 keytab,而非預設 keytab。

  3. 若修改了 SASL 配置項目或任何 GSSAPI 身份識別對映項目,請重新啟動目錄伺服器。

    請注意,DNS 必須配置於主機電腦上。

GSSAPI 身份識別對映

SASL 機制的身份識別對映,會嘗試比對 SASL 身份識別的憑證與目錄中的使用者項目。如果在對映中找不到對應 SASL 身份識別的 DN,認證即會失敗。

SASL 身份識別是一個名為 Principal 的字串,用以表示各機制之特定格式下的使用者。在 Kerberos 中使用 GSSAPI 時,主體將是 uid [/instance][@ realm] 格式的身份識別。uid 可包含一個可選擇的 instance 識別碼,再加上通常為網域名稱的可選擇 realm。例如,下列字串皆為有效的使用者主體:


bjensen
bjensen/Sales
bjensen@EXAMPLE.COM
bjensen/Sales@EXAMPLE.COM

目錄中最初並未定義 GSSAPI 對映。根據您的用戶端定義所使用之主體的方式,定義預設對映以及所需要的任何自訂對映。

Procedure定義 GSSAPI 的身份識別對映

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. cn=GSSAPI,cn=identity mapping, cn=config 下建立新的對映項目。

    如需身份識別對映項目中的屬性定義,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」instance-path/ldif/identityMapping_Examples.ldif 中含有 GSSAPI 的對映範例。

    此檔案中的預設 GSSAPI 對映,會假設主體中僅包含一個使用者 ID。此對映可判斷位在目錄之固定分支中的使用者:


    dn: cn=default,cn=GSSAPI,cn=identity mapping,cn=config
    objectclass: dsIdentityMapping
    objectclass: nsContainer
    objectclass: top
    cn: default
    dsMappedDN: uid=\${Principal},ou=people,dc=example,dc=com

    此檔案中的另一個範例說明如何在使用者 ID 位於含有已知範圍的主體中時,判斷使用者 ID。


    dn: cn=same_realm,cn=GSSAPI,cn=identity mapping,cn=config
    objectclass: dsIdentityMapping
    objectclass: dsPatternMatching
    objectclass: nsContainer
    objectclass: top
    cn: same_realm
    dsMatching-pattern: \${Principal}
    dsMatching-regexp: (.*)@EXAMPLE.COM
    dsMappedDN: uid=\$1,ou=people,dc=EXAMPLE,dc=COM
  2. 重新啟動目錄伺服器,使您的新對映生效。

配置 LDAP 用戶端以使用安全性

下列幾節說明如何在要與目錄伺服器建立安全連線的 LDAP 用戶端中,配置及使用 SSL。在 SSL 連線中,伺服器會將其憑證傳送至用戶端。用戶端必須先信任此憑證,以進行伺服器認證。接著,用戶端可選擇針對兩個 SASL 機制之一傳送其本身的憑證或資訊,以初始化其中一個用戶端認證機制。SASL 機制為 DIGEST-MD5 與使用 Kerberos V5 的 GSSAPI。

下列小節將以 ldapsearch 工具做為啟用 SSL 之 LDAP 用戶端的範例。目錄伺服器隨附的 ldapmodifyldapdeleteldapcompare 等工具的配置方式均相同。這些目錄存取工具均以 Directory SDK for C 為基礎,其詳細資訊載於「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中。

若要在其他 LDAP 用戶端上配置 SSL 連線,請參閱應用程式隨附的文件。


備註 –

有一些用戶端應用程式可實作 SSL,但無法驗證伺服器是否具有可信任的憑證。這些用戶端應用程式可使用 SSL 協定進行資料加密,但無法確保機密度,也無法防止模擬。


下列幾節說明如何配置 LDAP 用戶端以使用安全性:

在用戶端中使用 SASL DIGEST-MD5

在用戶端中使用 DIGEST-MD5 機制時,無須安裝使用者憑證。但若要使用加密的 SSL 連線,則仍須如管理憑證中所述,信任伺服器憑證。

指定範圍

範圍可定義用以從中選取認證身份識別的名稱空間。在 DIGEST-MD5 認證中,必須對特定的範圍進行認證。

目錄伺服器會以機器完全合格的主機名稱做為 DIGEST-MD5 的預設範圍。伺服器會使用位於 nsslapd-localhost 配置屬性中的主機名稱小寫值。

若未指定範圍,則會使用伺服器所提供的預設範圍。

指定環境變數

在 UNIX 環境中,您必須設定 SASL-PATH 環境變數,LDAP 工具才找得到 DIGEST-MD5 程式庫。DIGEST-MD5 程式庫是一種可由 SASL 外掛程式動態載入的共用程式庫。請以下列方式設定 SASL_PATH 環境變數:


export SASL_PATH=SASL-library

此路徑假設目錄伺服器安裝於呼叫 LDAP 工具的相同主機上。

ldapsearch 指令範例

您可以在未使用 SSL 的情況下,執行 DIGEST-MD5 用戶端認證。下列範例將使用預設的 DIGEST-MD5 身份識別對映,判斷連結 DN:


$ ldapsearch -h host1 -p 1389 \
 -o mech=DIGEST-MD5 [ \
 -o realm="example.com"] \
 -o authid="dn:uid=bjensen,dc=example,dc=com" \
 -w - \
 -o authzid="dn:uid=bjensen,dc=example,dc=com" \
 -o secProp="minssf=56,maxssf=256,noplain" \
 -b "dc=example,dc=com" "(givenname=Richard)"

上述範例說明如何使用 -o (小寫字母 o) 選項,指定 SASL 選項。realm 是可選擇的項目,但若要指定此項目,則必須使用伺服器主機電腦完全合格的網域名稱。authidauthzid 皆須存在同時完全相同,但並不會使用為代理伺服器作業所設定的 authzid-w 密碼選項會套用至 authid

authid 的值為身份識別對映中所使用的主體。authid 應包含 dn: 前綴與目錄中的有效使用者 DN,或包含 u: 前綴與用戶端所決定的任何字串。authid 的此項用法可讓您使用DIGEST-MD5 身份識別對映中所述的對映。

讓 SSL 連線透過 LDAPS 安全連接埠提供加密,以及讓 DIGEST-MD5 提供用戶端認證,是最常見的配置。下列範例將透過 SSL 執行相同的作業:


$ ldapsearch -h host1 -p 1636 \
 -Z -P .mozilla/bjensen/BJE6001.slt/cert8.db \
 -N "cert-example" -w - \
 -o mech=DIGEST-MD5 [-o realm="example.com"] \
 -o authid="dn:uid=bjensen,dc=example,dc=com" \
 -o authzid="dn:uid=bjensen,dc=example,dc=com" \
 -o secProp="minssf=0,maxssf=0,noplain" \
 -b "dc=example,dc=com" "(givenname=Richard)"

在此範例中,由於作業會透過 SSL 執行,因此 ldapsearch 指令必須使用 -N-w 選項。但這些選項並不會使用於用戶端認證上。伺服器會在 authid 值中執行主體的其他 DIGEST-MD5 身份識別對映。

在用戶端中使用 Kerberos SASL GSSAPI

在用戶端中使用 GSSAPI 機制時,無需安裝使用者憑證,但必須配置 Kerberos V5 安全性系統。此外,若要使用加密的 SSL 連線,則必須如管理憑證中所述,信任伺服器憑證。

Procedure在主機上配置 Kerberos V5

您必須在將要執行 LDAP 用戶端的主機電腦上配置 Kerberos V5。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 請根據安裝指示進行 Kerberos V5 的安裝。

    Sun 建議安裝 Sun Enterprise Authentication Mechanism 1.0.1 用戶端軟體。

  2. 配置 Kerberos 軟體。

    使用 Sun Enterprise Authentication Mechanism 軟體,配置 /etc/krb5 下的檔案。此配置可設定 kdc 伺服器,並定義預設範圍與您的 Kerberos 系統所需的所有其他配置。

  3. 請視需要修改檔案 /etc/gss/mech,使 kerberos_v5 成為第一個列出的值。

Procedure指定 Kerberos 認證的 SASL 選項

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 使用以 GSSAPI 機制啟用的用戶端應用程式前,請先以使用者主體初始化 Kerberos 安全性系統。


    $ kinit user-principal
    

    其中 user-principal 是您的 SASL 身份識別,如 bjensen@example.com

  2. 指定使用 Kerberos 時所需的 SASL 選項。

    請注意,在 UNIX 環境中,必須將 SASL_PATH 環境變數設為 SASL 程式庫的正確路徑。以 Korn shell 為例:


    $ export SASL_PATH=SASL-library
    

    此路徑假設目錄伺服器安裝於呼叫 LDAP 工具的相同主機上。

    ldapsearch 工具的下列範例說明如何使用 -o (小寫字母 o) 選項,指定使用 Kerberos 時所需的 SASL 選項:


    $ ldapsearch -h www.host1.com -p 1389 -o mech=GSSAPI -o authid="bjensen@EXAMPLE.COM" \
     -o authzid="bjensen@EXAMPLE.COM" -b "dc=example,dc=com" "(givenname=Richard)"

    authid 可以省略,因為它會出現在 kinit 指令所初始化的 Kerberos 快取中。如果 authid 存在,authidauthzid 必須完全相同,但並不會使用為代理伺服器作業所設定的 authzidauthid 的值為身份識別對映中所使用的主體。主體必須是完整的,其中必須包含範圍。請參閱GSSAPI 身份識別對映

使用 GSSAPI 與 SASL 配置 Kerberos 認證的範例

為目錄伺服器配置 Kerberos 有時是很複雜的作業。您應以 Kerberos 文件做為首要參考資料。

如需更多說明,請以下列範例程序評估所應執行的步驟。但請注意,此程序僅是範例。您必須根據本身的配置與環境,適當地修改此程序。

如需有關在 Solaris 作業系統中配置及使用 Kerberos 的更多資訊,請參閱「System Administration Guide: Security Services」。此指南是 Solaris 文件集的一部分。您也可以參考線上手冊。

    此範例與前述步驟的相關資訊如下:

  1. 此範例的假設

  2. 所有機器:編輯 Kerberos 用戶端配置檔

  3. 所有機器:編輯管理伺服器 ACL 配置檔

  4. KDC 機器:編輯 KDC 伺服器配置檔

  5. KDC 機器:建立 KDC 資料庫

  6. KDC 機器:建立管理主體與 Keytab

  7. KDC 機器:啟動 Kerberos 常駐程式

  8. KDC 機器:增加 KDC 與目錄伺服器機器的主機主體

  9. KDC 機器:增加目錄伺服器的 LDAP 主體

  10. KDC 機器:為 KDC 增加測試使用者

  11. 目錄伺服器機器:安裝目錄伺服器

  12. 目錄伺服器機器:配置目錄伺服器以啟用 GSSAPI

  13. 目錄伺服器機器:建立目錄伺服器 Keytab

  14. 目錄伺服器機器:為目錄伺服器增加測試使用者

  15. 目錄伺服器機器:以測試使用者的身份取得 Kerberos 票證

  16. 用戶端機器:透過 GSSAPI 對目錄伺服器進行認證

此範例的假設

此範例中的程序說明如何將一部機器配置成為金鑰分配中心 (KDC),並將另一部機器配置成執行目錄伺服器的機器。完成此程序後,使用者即可透過 GSSAPI 執行 Kerberos 認證。

在同一部機器上可同時執行 KDC 與目錄伺服器。若選擇在同一部機器上同時執行兩者,請使用相同的程序,但可在目錄伺服器機器的步驟中省略已對 KDC 機器執行過的部分。

此程序對於所使用的環境有許多相關假設。使用範例程序時,請根據您的環境適當地修改其值。這些假設包含:

所有機器:編輯 Kerberos 用戶端配置檔

/etc/krb5/krb5.conf 配置檔中含有可讓 Kerberos 用戶端與 KDC 通訊的必要資訊。

在 KDC 機器、目錄伺服器機器,以及任何將使用 Kerberos 對目錄伺服器進行認證的用戶端機器上,編輯 /etc/krb5/krb5.conf 配置檔。

更新的 /etc/krb5/krb5.conf 配置檔應如下列範例的內容所示。


範例 5–1 編輯後的 Kerberos 用戶端配置檔 /etc/krb5/krb5.conf


#pragma ident   "@(#)krb5.conf  1.2     99/07/20 SMI"
# Copyright (c) 1999, by Sun Microsystems, Inc.
# All rights reserved.
#
# krb5.conf template
# In order to complete this configuration file
# you will need to replace the __<name\>__ placeholders
# with appropriate values for your network.
#

[libdefaults]
        default_realm = EXAMPLE.COM
[realms]
        EXAMPLE.COM = {
                kdc = kdc.example.com
                admin_server = kdc.example.com
        }
[domain_realm]
        .example.com = EXAMPLE.COM
[logging]
        default = FILE:/var/krb5/kdc.log
        kdc = FILE:/var/krb5/kdc.log
        kdc_rotate = {

# How often to rotate kdc.log. Logs will get rotated no more
# often than the period, and less often if the KDC is not used
# frequently.
                period = 1d

# how many versions of kdc.log to keep around (kdc.log.0, kdc.log.1, ...)
                versions = 10
        }

[appdefaults]
        kinit = {
                renewable = true
                forwardable= true
        }
        gkadmin = {
                help_url =
 http://docs.sun.com:80/ab2/coll.384.1/SEAM/@AB2PageView/1195
        }

所有機器:編輯管理伺服器 ACL 配置檔

/etc/krb5/kadm5.acl 配置檔中,將 "___default_realm___" 取代為 "EXAMPLE.COM"。更新的檔案應如下列範例所示。


範例 5–2 編輯後的管理伺服器 ACL 配置檔


#
# Copyright (c) 1998-2000 by Sun Microsystems, Inc.
# All rights reserved.
#
# pragma ident   "@(#)kadm5.acl  1.1     01/03/19 SMI"
*/admin@EXAMPLE.COM *

KDC 機器:編輯 KDC 伺服器配置檔

編輯 /etc/krb5/kdc.conf 檔案,將 "___default_realm___" 取代為 "EXAMPLE.COM"。更新的檔案應如下列範例所示。


範例 5–3 編輯後的 KDC 伺服器配置檔 /etc/krb5/kdc.conf


# Copyright 1998-2002 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
#ident  "@(#)kdc.conf   1.2     02/02/14 SMI"

[kdcdefaults]
        kdc_ports = 88,750

[realms]
        EXAMPLE.COM = {
                profile = /etc/krb5/krb5.conf
                database_name = /var/krb5/principal
                admin_keytab = /etc/krb5/kadm5.keytab
                acl_file = /etc/krb5/kadm5.acl
                kadmind_port = 749
                max_life = 8h 0m 0s
                max_renewable_life = 7d 0h 0m 0s
                default_principal_flags = +preauth
        }

KDC 機器:建立 KDC 資料庫


$ /usr/sbin/kdb5_util create -r EXAMPLE.COM -s
Initializing database ’/var/krb5/principal’ for realm ’EXAMPLE.COM’,
master key name ’K/M@EXAMPLE.COM’
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: password
Re-enter KDC database master key to verify: password
$

KDC 機器:建立管理主體與 Keytab

使用下列指令,建立具有 kws/admin@EXAMPLE.COM 主體與管理常駐程式所將使用之服務金鑰的管理使用者。


$ /usr/sbin/kadmin.local
kadmin.local:  add_principal kws/admin
Enter password for principal "kws/admin@EXAMPLE.COM": secret
Re-enter password for principal "kws/admin@EXAMPLE.COM": secret
Principal "kws/admin@EXAMPLE.COM" created.
kadmin.local:  ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc.example.com
Entry for principal kadmin/kdc.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local:  ktadd -k /etc/krb5/kadm5.keytab changepw/kdc.example.com

Entry for principal changepw/kdc.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local:  ktadd -k /etc/krb5/kadm5.keytab kadmin/changepw
Entry for principal kadmin/changepw with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local:  quit$

KDC 機器:啟動 Kerberos 常駐程式

執行下列指令,以啟動 KDC 與管理常駐程式:


$ /etc/init.d/kdc start
$ /etc/init.d/kdc.master start
$

KDC 程序會以 /usr/lib/krb5/krb5kdc 的形式顯示在程序清單中。管理常駐程式會顯示為 /usr/lib/krb5/kadmind

請注意,Solaris 10 作業系統中的常駐程式係由「服務管理功能 (SMF)」架構所管理。在 Solaris 10 作業系統上啟動常駐程式:


$ svcadm disable network/security/krb5kdc
$ svcadm enable network/security/krb5kdc
$ svcadm disable network/security/kadmin
$ svcadm enable network/security/kadmin
$

KDC 機器:增加 KDC 與目錄伺服器機器的主機主體

使用以下一系列的指令,為 KDC 與目錄伺服器機器的 Kerberos 資料庫增加主機主體。klist 等特定 Kerberos 公用程式會使用主機主體。


$ /usr/sbin/kadmin -p kws/admin
Enter Password: secret
kadmin:  add_principal -randkey host/kdc.example.com
Principal "host/kdc.example.com@EXAMPLE.COM" created.
kadmin:  ktadd host/kdc.example.com
Entry for principal host/kdc.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab.
kadmin:  add_principal -randkey host/directory.example.com
Principal "host/directory.example.com@EXAMPLE.COM" created.
kadmin:  ktadd host/directory.example.com
Entry for principal host/directory.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab.
kadmin:  quit
$

KDC 機器:增加目錄伺服器的 LDAP 主體

目錄伺服器必須具有本身的主體,才能對進行認證的使用者驗證其所持有之 Kerberos 票證。目錄伺服器目前採用硬式編碼要求 ldap/fqdn@realm 形式的主體,其中 fqdn 是目錄伺服器完全合格的網域名稱,而 realm 是 Kerberos 範圍。fqdn 必須符合安裝目錄伺服器時所提供之完全合格的名稱。在此情況下,目錄伺服器的主體將是 ldap/directory.example.com@EXAMPLE.COM

使用以下一系列的指令,建立目錄伺服器的 LDAP 主體:


$ /usr/sbin/kadmin -p kws/admin 
Enter Password: secret 
kadmin: add_principal -randkey ldap/directory.example.com 
Principal "ldap/directory.example.com@EXAMPLE.COM" created. 
kadmin: quit 
$

KDC 機器:為 KDC 增加測試使用者

Kerberos 資料庫中必須有進行認證的使用者,才能執行 Kerberos 認證。在此範例中,使用者的使用者名稱為 kerberos-test,這表示 Kerberos 主體為 kerberos-test@EXAMPLE.COM

使用此範例中的指令序列建立使用者:


$ /usr/sbin/kadmin -p kws/admin
Enter Password: secret
kadmin:  add_principal kerberos-test
Enter password for principal "kerberos-test@EXAMPLE.COM": secret

Re-enter password for principal "kerberos-test@EXAMPLE.COM": secret

Principal "kerberos-test@EXAMPLE.COM" created.
kadmin:  quit
$

目錄伺服器機器:安裝目錄伺服器

安裝 Directory Server 6.0 與最新的修補程式。以下是範例設定。

變數類型 

範例值 

完全合格的電腦名稱 

directory.example.com

安裝目錄 

/opt/SUNWdsee

實例路徑 

/local/ds

伺服器使用者 

unixuser

伺服器群組 

unixgroup

伺服器識別碼 

directory

伺服器連接埠 

389

尾碼 

dc=example,dc=com

管理員 ID 

admin

管理網域 

example.com

目錄伺服器管理員 DN 

cn=admin,cn=Administrators,cn=config

管理連接埠 

390

目錄伺服器機器:配置目錄伺服器以啟用 GSSAPI

首先建立 /data/ds/shared/bin/gssapi.ldif 檔案以定義目錄伺服器所應使用的對映,再根據主體識別進行認證的 Kerberos 使用者。建立下列範例中所顯示的相同檔案內容。


範例 5–4 gssapi.ldif 檔案內容


dn: cn=GSSAPI,cn=identity mapping,cn=config
changetype: add
objectClass: top
objectClass: nsContainer
cn: GSSAPI
dn: cn=default,cn=GSSAPI,cn=identity mapping,cn=config
changetype: add
objectClass: top
objectClass: nsContainer
objectClass: dsIdentityMapping
objectClass: dsPatternMatching
cn: default
dsMatching-pattern: \${Principal}
dsMatching-regexp: (.*)@EXAMPLE.COM
dsMappedDN: uid=\$1,ou=People,dc=example,dc=com

dn: cn=SASL,cn=security,cn=config
changetype: modify
replace: dsSaslPluginsPath
dsSaslPluginsPath: /usr/lib/mps/sasl2/libsasl.so

接著使用 ldapmodify 指令更新目錄伺服器,以啟用具有適當對映的 GSSAPI,如下列範例所示:


$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -a -f /data/ds/shared/bin/gssapi.ldif
adding new entry cn=GSSAPI,cn=identity mapping,cn=config
adding new entry cn=default,cn=GSSAPI,cn=identity mapping,cn=config
modifying entry cn=SASL,cn=security,cn=config
$

目錄伺服器機器:建立目錄伺服器 Keytab

如前所述,目錄伺服器必須在 KDC 中具有本身的主體,才能透過 GSSAPI 認證 Kerberos 使用者。為使認證正確運作,主體資訊必須位於目錄伺服器機器的 Kerberos keytab 中。此項資訊必須位於執行目錄伺服器的使用者帳號可讀取的檔案中。

使用下列指令序列,建立具有正確特性的 keytab 檔案:


$ /usr/sbin/kadmin -p kws/admin
Enter Password: secret
kadmin:  ktadd -k //local/ds/config/ldap.keytab ldap/directory.example.com
Entry for principal ldap/directory.example.com with kvno 3, encryption type
 DES-CBC-CRC added to keytab
 WRFILE:/local/ds/config/ldap.keytab.
kadmin:  quit
$

變更此自訂 keytab 中的權限與所有權。讓用以執行目錄伺服器的使用者帳號擁有此 keytab,且只有該名使用者可加以讀取:


$ chown unixuser:unixgroup /local/ds/config /ldap.keytab
$ chmod 600 /local/ds/config/ldap.keytab
$

目錄伺服器預設會嘗試使用 /etc/kerb5/krb5.keytab 檔案中的標準 Kerberos keytab。但若讓目錄伺服器使用者可讀取此檔案,將會構成安全性風險,為目錄伺服器建立自訂 keytab 的用意即在於此。

配置目錄伺服器以使用新的自訂 keytab。請設定 KRB5_KTNAME 環境變數,以執行此作業。

最後,請重新啟動目錄伺服器,變更方可生效:


$ KRB5_KTNAME=/etc/krb5/ldap.keytab dsadm restart /local/ds 

目錄伺服器機器:為目錄伺服器增加測試使用者

若要對目錄伺服器認證 Kerberos 使用者,使用者必須有目錄項目可對應於其 Kerberos 主體。

在上一個步驟中,測試使用者以 kerberos-test@EXAMPLE.COM 的主體增加到 Kerberos 資料庫中。由於身份識別對映配置已增加到目錄中,因此該名使用者的對應目錄項目必須具有 DN uid=kerberos-test,ou=People,dc=example,dc=com

在目錄中增加使用者之前,必須以下列內容建立檔案 testuser.ldif


範例 5–5 新的 testuser.ldif 檔案


dn: uid=kerberos-test,ou=People,dc=example,dc=com
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: kerberos-test
givenName: Kerberos
sn: Test
cn: Kerberos Test
description: An account for testing Kerberos authentication through GSSAPI

接著,請使用 ldapmodify 將此項目增加到伺服器中:


$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -f testuser.ldif
adding new entry uid=kerberos-test,ou=People,dc=example,dc=com
$

目錄伺服器機器:以測試使用者的身份取得 Kerberos 票證

測試使用者存在於 Kerberos 資料庫、目錄伺服器與 KDC 中。因此,現在可以透過 GSSAPI 使用 Kerberos,利用測試使用者的身份,對目錄伺服器進行認證。

首先,請使用 kinit 指令取得使用者的 Kerberos 票證,如下列範例所示:


$ kinit kerberos-test
Password for kerberos-test@EXAMPLE.COM: secret
$

接著,請使用 klist 指令檢視此票證的相關資訊:


$ klist
Ticket cache: /tmp/krb5cc_0
Default principal: kerberos-test@EXAMPLE.COM

Valid starting            Expires                   Service principal
Sat Jul 24 00:24:15 2004  Sat Jul 24 08:24:15 2004  krbtgt/EXAMPLE.COM@EXAMPLE.COM
        renew until Sat Jul 31 00:24:15 2004
$

用戶端機器:透過 GSSAPI 對目錄伺服器進行認證

最後一個步驟是使用 GSSAPI,對目錄伺服器進行認證。目錄伺服器隨附的 ldapsearch 公用程式可支援 SASL 認證,包含 GSSAPI、DIGEST-MD5 與 EXTERNAL 等機制。但若要使用 GSSAPI 進行連結,則必須為用戶端提供 SASL 程式庫的路徑。將 SASL_PATH 環境變數設為 lib/sasl 目錄,以提供路徑:


$ SASL_PATH=SASL-library
$ export SASL_PATH
$

若要實際使用 ldapsearch 對目錄伺服器執行 Kerberos 型認證,則必須納入 -o mech=GSSAPI-o authzid=principal 引數。

此外,還必須指定完全合格的主機名稱,在此案例中為 -h directory.example.com,此名稱必須與伺服器之 cn=confignsslapd-localhost 屬性值相符。在此必須使用 -h 選項,因為 GSSAPI 認證程序中必須要有用戶端所提供的主機名稱,用以比對伺服器所提供的主機名稱。

下列範例將在 dc=example,dc=com 項目認證為先前所建立的 Kerberos 測試使用者帳號時,擷取此項目:


$ ldapsearch -h directory.example.com -p 389 -o mech=GSSAPI \
 -o authzid="kerberos-test@EXAMPLE.COM" -b "dc=example,dc=com" -s base "(objectClass=*)"
version: 1
dn: dc=example,dc=com
dc: example
objectClass: top
objectClass: domain
$

查看目錄伺服器存取記錄,以確定認證是否已如預期般進行處理:


$ tail -12 /local/ds/logs/access

[24/Jul/2004:00:30:47 -0500] conn=0 op=-1 msgId=-1 - fd=23 slot=23 LDAP 
		connection from 1.1.1.8 to 1.1.1.8
[24/Jul/2004:00:30:47 -0500] conn=0 op=0 msgId=1 - BIND dn="" method=sasl 
     version=3 mech=GSSAPI
[24/Jul/2004:00:30:47 -0500] conn=0 op=0 msgId=1 - RESULT err=14 tag=97 
     nentries=0 etime=0, SASL bind in progress
[24/Jul/2004:00:30:47 -0500] conn=0 op=1 msgId=2 - BIND dn="" method=sasl 
     version=3 mech=GSSAPI
[24/Jul/2004:00:30:47 -0500] conn=0 op=1 msgId=2 - RESULT err=14 tag=97 
     nentries=0 etime=0, SASL bind in progress
[24/Jul/2004:00:30:47 -0500] conn=0 op=2 msgId=3 - BIND dn="" method=sasl 
     version=3 mech=GSSAPI
[24/Jul/2004:00:30:47 -0500] conn=0 op=2 msgId=3 - RESULT err=0 tag=97 
     nentries=0 etime=0 dn="uid=kerberos-test,ou=people,dc=example,dc=com"
[24/Jul/2004:00:30:47 -0500] conn=0 op=3 msgId=4 - SRCH base="dc=example,dc=com"
     scope=0 filter="(objectClass=*)" attrs=ALL
[24/Jul/2004:00:30:47 -0500] conn=0 op=3 msgId=4 - RESULT err=0 tag=101 nentries=1 
     etime=0
[24/Jul/2004:00:30:47 -0500] conn=0 op=4 msgId=5 - UNBIND
[24/Jul/2004:00:30:47 -0500] conn=0 op=4 msgId=-1 - closing - U1
[24/Jul/2004:00:30:48 -0500] conn=0 op=-1 msgId=-1 - closed.
$

此範例說明連結為三步驟的程序。前兩個步驟會傳回 LDAP 結果 14 (SASL 連結進行中),而第三個步驟說明連結已順利完成。method=sasl mech=GSSAPI 標記說明連結採用 GSSAPI SASL 機制。成功連結回應結尾處的 dn="uid=kerberos-test,ou=people,dc=example,dc=com",說明連結已由適當的使用者身份執行。

傳遞式認證

傳遞式認證 (PTA) 是一項可讓連結請求據以依照連結 DN 進行篩選的機制。一部目錄伺服器 (委託方) 在收到連結請求後,即可根據篩選器洽詢其他目錄伺服器 (委託),以認證連結請求。此外,此功能中的 PTA 外掛程式還可讓委託方目錄伺服器,針對未必儲存在其本機資料庫中的項目,接受簡單密碼型連結作業。

DSCC 亦可使用 PTA 外掛程式,與伺服器進行私密通訊。在 DSCC 中註冊伺服器實例時,即會啟用 PTA 外掛程式,並將 DSCC URL 增加為引數。


$ dsconf get-plugin-prop -h host -p port "Pass Through Authentication" enabled argument
argument  :  ldap://DSCC_URL:DSCC_PORT/cn=dscc
enabled   :  on

備註 –

請儘可能避免在您自己的使用中修改 PTA 外掛程式。修改 PTA 外掛程式可能會導致 DSCC 的存取問題。


若必須修改 PTA 外掛程式,請務必執行下列動作:

若已停用 PTA 外掛程式,或 DSCC URL 已從引數中移除,則伺服器實例在 DSCC 中將顯示為 inaccessible。若發生此情況,DSCC 會自動讓您選擇是否要重設 PTA 外掛程式。

第 6 章 目錄伺服器存取控制

對目錄存取的控制,是建立安全目錄不可或缺的一部分。本章將說明存取控制指令 (ACI),這些指令可決定要授予存取目錄之使用者的權限。

請在目錄部署的規劃階段過程,即定義適用整體安全性策略的存取控制策略。如需有關規劃存取控制策略的提示,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」

如需 ACI 的其他資訊,包括 ACI 語法與連結規則等,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

本章包含下列主題:

建立、檢視及修改 ACI

您可以使用目錄服務控制中心 (DSCC) 或指令行建立 ACI。無論選擇何種方式,檢視及複製現有的 ACI 值,通常會比重新建立新的 ACI 來得容易。

您可以在 DSCC 中檢視及修改 aci 屬性值。如需有關如何透過 DSCC 修改 ACI 的資訊,請參閱 DSCC 線上說明。

Procedure建立、修改及刪除 ACI

若要透過使用指令行建立 ACI,必須先使用 LDIP 陳述式在檔案中建立 ACI。接著,必須透過使用 ldapmodify 指令將 ACI 增加到您的目錄樹狀結構中。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 在 LDIF 檔案中建立 ACI。


    dn: dc=example,dc=com
    changetype: modify
    add: aci
    aci: (target)(version 3.0; acl "name";permission bindrules;)

    此範例說明增加 ACI 的方式。若要修改或刪除 ACI,請以 replacedelete 取代 add

    如需更多常用 ACI 的範例,請參閱存取控制用法範例

  2. 使用 LDIF 檔案進行變更。


    $ ldapmodify -h host -p port -D cn=admin,cn=Administrators,cn=config -w - -f ldif-file
    

Procedure檢視 ACI 屬性值

ACI 會儲存為項目的一或多個 aci 屬性值。aci 屬性是一種可由目錄使用者讀取及修改的多值作業屬性。因此,ACI 屬性本身應由 ACI 予以保護。通常會授予管理員使用者完整的 aci 屬性存取權。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    透過執行下列 ldapsearch 指令,以檢視項目的 ACI 屬性值:


    $ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \
     -b entryDN -s base "(objectclass=*)" aci

    其結果為可複製到新的 LDIF ACI 定義以進行編輯的 LDIF 文字。因為 ACI 的值為長字串,因此 ldapsearch 作業的輸出可能會以數行顯示。此外,第一個空格是連續記號。若不讓 LDIF 輸出包含連續記號,請使用 -T 選項。複製並貼上 LDIF 輸出時,請將輸出格式納入考量。


    備註 –

    若要檢視 aci 值所授予及拒絕的權限,請參閱檢視有效權限


Procedure檢視根層級的 ACI

當您建立尾碼時,有些預設 ACI 會建立於頂層或根層級上。這些 ACI 允許預設管理員使用者 cn=admin,cn=Administrators,cn=config 對目錄資料擁有與「目錄管理員」相同的存取權限。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    檢視預設根層級 ACI。


    $ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \
     -b "" -s base "(objectclass=*)" aci

存取控制用法範例

本節中的範例說明虛構的 ISP 公司 Example.com 實作其存取控制策略的方式。

此外,您也可以在安裝程式所附的範例 LDIF 檔案中找到 ACI 範例 install_path/ds6/ldif/Example.ldif

這些範例均可說明如何透過使用 LDIF 檔案執行指定的作業。下圖將透過圖形說明 example.com 的目錄資訊樹狀結構。

範例目錄樹狀結構的形貌。頂層項目與緊接於頂層項目下方的項目均會顯示。

Example.com 提供網站託管服務與網際網路存取。Example.com 其中一部分的網站託管服務,是託管客戶公司的目錄。Example.com 實際上託管並局部管理兩家中型公司 Company333 與 Company999 的目錄。Example.com 也為許多個別訂閱者提供網際網路存取。

Example.com 想制定下列存取規則:

授予匿名存取權

大部分的目錄依配置均可讓您匿名存取至少一個尾碼以進行讀取、搜尋或比較。若您執行公司人員目錄,例如要供員工搜尋的電話簿,也可以設定這些權限。Example.com 內部即為此情況,如 ACI “Anonymous Example.com” 中所說明。

做為 ISP,Example.com 也想要建立可供全世界存取的公用電話簿,以通告其所有訂閱者的連絡資訊。相關說明請參閱ACI “Anonymous World”

ACI “Anonymous Example.com”

在 LDIF 中,若要將整個 Example.com 樹狀結構的讀取、搜尋與比較權限授予 Example.com 員工,請撰寫下列陳述式:


aci: (targetattr !="userPassword")(version 3.0; acl "Anonymous
 example"; allow (read, search, compare)
 userdn= "ldap:///anyone") ;)

此範例假設 dc=example,dc=com entry 中已加入 aci。請注意,userPassword 屬性排除於 ACI 的範圍之外。


備註 –

任何機密屬性或可見屬性,均應使用 (targetattr !="attribute-name") 以密碼屬性的形式列出。


ACI “Anonymous World”

在 LDIF 中,若要全面授予個別訂閱者子樹狀結構的讀取與搜尋存取權,但拒絕任何人存取特別要求不列出的訂閱者資訊,您可以撰寫下列陳述式:


aci: (targetfilter= "(!(unlistedSubscriber=yes))")
 (targetattr="homePostalAddress || homePhone || mail")
 (version 3.0; acl "Anonymous World"; allow (read, search)
 userdn="ldap:///anyone";)

此範例假設 ou=subscribers,dc=example, dc=com 項目中已加入 ACI。此範例亦假設每個訂閱者項目均具有設為 yesnounlistedSubscriber 屬性。目標定義會根據此屬性的值篩選不列出的訂閱者。如需篩選定義的詳細資訊,請參閱使用篩選設定目標

授予個人項目的寫入存取權

有許多目錄伺服器管理員雖允許內部使用者變更其本身項目中的某些屬性,但不是所有屬性皆可變更。Example.com 的目錄伺服器管理員允許使用者變更其本身的密碼、家用電話號碼與住家地址,但其他項目則一概不准變更。相關說明請參閱ACI “Write Example.com”

若訂閱者對目錄建立了 SSL 連線,則 Example.com 的策略亦將允許其訂閱者在 Example.com 樹狀結構中更新本身的個人資訊。相關說明請參閱ACI “Write Subscribers”

ACI “Write Example.com”


備註 –

設定此權限後,即會授予使用者刪除屬性值的權限。


在 LDIF 中,若要授予 Example.com 員工更新其家用電話號碼與住家地址的權限,請撰寫下列陳述式:


aci: (targetattr="homePhone ||
 homePostalAddress")(version 3.0; acl "Write Example.com";
 allow (write) userdn="ldap:///self" ;)

此範例假設 ou=People,dc=example,dc=com 項目中已加入 ACI。

ACI “Write Subscribers”


備註 –

設定此權限後,即會授予使用者刪除屬性值的權限。


在 LDIF 中,若要授予 Example.com 訂閱者更新其家用電話號碼的權限,請撰寫下列陳述式:


aci: (targetattr="homePhone")
 (version 3.0; acl "Write Subscribers"; allow (write)
 userdn= "ldap://self" and authmethod="ssl";)

此範例假設 ou=subscribers,dc=example, dc=com 項目中已加入 aci,且使用者必須使用 SSL 進行連結。

請注意,Example.com 訂閱者並無其住家地址的寫入存取權,因為他們可能會刪除該屬性。住家地址是 Example.com 寄發帳單時的重要業務資訊。

授予特定層級的存取權

您可以設定 ACI 範圍來影響目錄樹狀結構內不同的層級,以微調所要允許的存取層級。目標 ACI 範圍可設為下列其中一項:

base

項目本身

onelevel

項目本身與低一層的所有項目

subtree

項目本身及該項目下不限深度的所有項目

ACI “Read Example.com only”

在 LDIF 中,若要授予 Example.com 訂閱者對公司連絡資訊項目 dc=example,dc=com 的讀取權限,但不允許存取該項目下的任何項目,請撰寫下列陳述式:


aci: (targetscope="base") (targetattr="*")(version 3.0;
 acl "Read Example.com only";  allow (read,search,compare)
 userdn="ldap:///cn=*,ou=subscribers,dc=example,dc=com";)

此範例假設 dc=example, dc=com 項目中已加入 ACI。

限制主要角色的存取

您可以使用目錄中的角色定義來識別您的企業所不可或缺的功能,例如網路與目錄的管理。

例如,您可以在全球各地的公司網站上,找出於每週特定工作日之特定時間提供服務之系統管理員的子集,以建立 superAdmin 角色。或者,您也可以在特定網站上建立 First Aid 角色,內含所有受過急救訓練的工作成員。如需有關建立角色定義的資訊,請參閱管理角色

當某個角色在重要的公司或企業功能方面提供了任何種類的專用使用者權限時,建議您限制對於該角色的存取。以 Example.com 為例,員工可在其本身的項目中加入任何角色,但 superAdmin 角色除外,如下列範例所說明。

ACI “Roles”

在 LDIF 中,若要授予 Example.com 員工在其本身的項目中加入 superAdmin 以外之任何角色的權限,請撰寫下列陳述式:


aci: (targetattr="*") (targattrfilters="add=nsRoleDN:
 (nsRoleDN !="cn=superAdmin, dc=example, dc=com")")
 (version 3.0; acl "Roles"; allow (write)
 userdn= "ldap:///self" ;)

此範例假設 ou=People,dc=example, dc=com 項目中已加入 ACI。

授予某角色對整個尾碼的完整存取權

有時為特定使用者針對尾碼授予與「目錄管理員」相同的權限,確實有其效用。在 Example.com 中,Kirsten Vaughan 是目錄伺服器的管理員。她具有 superAdmin 的角色。此角色具有下列優勢:


備註 –

將 Kirsten Vaughan 加入 cn=Administrators,cn=config 群組,亦會授予其與「目錄管理員」相同的權限。


若要讓使用者對整部伺服器獲得與「目錄管理員」相同的權限,請遵循建立具有超級使用者存取權的管理使用者中的程序。

ACI “Full Access”

在 LDIF 中,若要授予管理員 Kirsten Vaughan 與「目錄管理員」相同的權限,請使用下列陳述式:


aci: (targetattr="*") (version 3.0; acl "Full Access";
 allow (all) groupdn= "ldap:///cn=SuperAdmin,dc=example,dc=com"
 and authmethod="ssl" ;)

此範例假設根項目 "" (無文字) 中已加入 ACI。

授予某群組對尾碼的完整存取權

大部分的目錄都具有用以識別特定公司功能的群組。可賦予群組所有或部分目錄的存取權。對整個群組套用存取權限,即不需個別設定每個成員的存取權限。而是只要將使用者加入群組中,即可授予其存取權限。

例如,當您建立目錄伺服器實例時,依預設會建立對目錄具有完整存取權的「管理員」群組 cn=Administrators,cn=config

在 Example.com 中,「人力資源」群組對目錄的 ou=People 分支具有完整存取權,因此可更新員工目錄,如 ACI “HR” 中所說明。

ACI “HR”

在 LDIF 中,若要授予 HR 群組對目錄之員工分支的所有權限,請使用下列陳述式:


aci: (targetattr="*") (version 3.0; acl "HR"; allow (all)
  groupdn= "ldap:///cn=HRgroup,ou=Groups,dc=example,dc=com";)

此範例假設下列項目中已加入 ACI:


ou=People,dc=example,dc=com

授予新增及刪除群組項目的權限

有些組織會允許員工在樹狀結構中建立項目,以提升其工作效率,並鼓勵他們為公司的活力注入一己之力。以 Example.com 為例,社委會即是由各種不同性質的社團所組成,如網球、游泳、滑雪與角色扮演等。

Example.com 的任何員工皆可建立代表新社團的群組項目,如 ACI “Create Group” 中所說明。

凡屬 Example.com 員工,即可成為這些群組之一的成員,如允許使用者在群組中加入或移除本身中所說明。

只有群組所有者可修改或刪除群組項目,如 ACI “Delete Group” 中所說明。

ACI “Create Group”

在 LDIF 中,若要授予 Example.com 員工在 ou=Social Committee 分支下建立群組項目的權限,請撰寫下列陳述式:


aci: (targetattr="*") (targattrfilters="add=objectClass: 
(|(objectClass=groupOfNames)(objectClass=top))") 
(version 3.0; acl "Create Group"; allow (read,search,add) 
userdn= "ldap:///uid=*,ou=People,dc=example,dc=com") 
and dns="*.Example.com";)

此範例假設 ou=Social Committee,dc=example,dc=com 項目中已加入 ACI。


備註 –

ACI “Delete Group”

在 LDIF 中,若要授予 Example.com 員工對他們在 ou=Social Committee 分支下所屬群組的群組項目進行修改或刪除的權限,請撰寫下列陳述式:


aci: (targetattr = "*") (targattrfilters="del=objectClass:
(objectClass=groupOfNames)")
 (version 3.0; acl "Delete Group"; allow (write,delete)
 userattr="owner#GROUPDN";)

此範例假設 ou=Social Committee,dc=example,dc=com 項目中已加入 aci

請注意,使用 DSCC 建立此 ACI 是缺乏效率的方式,因為您必須用手動編輯模式以建立目標篩選器,並檢查群組所有權。

允許使用者在群組中加入或移除本身

許多目錄都會設定 ACI 允許使用者在群組 (如郵件收信人清單) 中加入或移除本身。

在 Example.com 中,員工可將其本身加入 ou=Social Committee 子樹狀結構下的任何群組項目中,如 ACI “Group Members” 中所說明。

ACI “Group Members”

在 LDIF 中,若要授予 Example.com 員工將其本身加入群組中的權限,請撰寫下列陳述式:


aci: (targettattr="member")(version 3.0; acl "Group Members";
 allow (selfwrite)
 (userdn= "ldap:///uid=*,ou=People,dc=example,dc=com") ;)

此範例假設 ou=Social Committee, dc=example,dc=com 項目中已加入 ACI。

授予對群組或角色的條件式存取權

當您授予目錄的群組或角色專用存取權時,經常必須確定入侵者無法模擬您的專用使用者使用這些權限。因此,授予群組或角色的重要存取權時所依據的存取控制規則,通常涉及許多條件。

以 Example.com 為例,它為託管的兩家公司 Company333 與 Company999 皆建立了「目錄伺服器管理員」角色。Example.com 希望這兩家公司能夠自行管理資料並實作存取控制規則,同時又能保護資料不受入侵。

因此,Company333 與 Company999 將在符合下列條件的情況下,對其各自位於目錄樹狀結構下的分支具有完整權限:

上述條件會列在兩家公司的 ACI 中,即 ACI “Company333” 與 ACI “Company999”。由於這兩個 ACI 的內容完全相同,下列範例將僅使用 “Company333” ACI 進行說明。

ACI “Company333”

在 LDIF 中,若要以前述條件為限,授予 Company333 對自己目錄分支的完整存取權,請撰寫下列陳述式:


aci: (targetattr = "*") (version 3.0; acl "Company333"; allow (all)
 (roledn="ldap:///cn=DirectoryAdmin,ou=Company333,
 ou=corporate clients,dc=example,dc=com") and (authmethod="ssl")
 and (dayofweek="Mon,Tues,Wed,Thu") and (timeofday >= "0800" and
 timeofday <= "1800") and (ip="255.255.123.234"); )

此範例假設 ou=Company333,ou=corporate clients,dc=example,dc=com 項目中已加入 ACI。

拒絕存取

若您已允許尾碼大部分的存取,您可以在現有的 ACI 下拒絕少部分尾碼的存取。


備註 –

您應儘可能避免拒絕存取,因為這樣可能會導致意外或複雜的存取控制運作方式。若要限制存取,請搭配使用範圍設定、屬性清單與目標篩選器等方法。

此外,刪除拒絕存取 ACI 並不會移除權限,而會擴充其他 ACI 所設定的權限。


目錄伺服器在評估存取權限時,會先讀取 deny 權限,再讀取 allow 權限。

在後續的範例中,Example.com 希望讓所有訂閱者都能夠讀取其本身項目下的帳單資訊,如連線時間或帳戶餘額等。Example.com 亦明確希望拒絕該資訊的寫入存取。read 存取的說明位於 ACI “Billing Info Read” 中。deny 存取的說明位於 ACI “Billing Info Deny” 中。

ACI “Billing Info Read”

在 LDIF 中,若要授予訂閱者讀取其本身項目中之帳單資訊的權限,請撰寫下列陳述式:


aci: (targetattr="connectionTime || accountBalance")
 (version 3.0; acl "Billing Info Read"; allow (search,read)
  userdn="ldap:///self";)

此範例假設模式中已建立相關屬性,且 ou=subscribers,dc=example,dc=com 項目中已加入 ACI。

ACI “Billing Info Deny”

在 LDIF 中,若要拒絕訂閱者修改其本身項目中之帳單資訊的權限,請撰寫下列陳述式:


aci: (targetattr="connectionTime || accountBalance")
 (version 3.0; acl "Billing Info Deny";
 deny (write) userdn="ldap:///self";)

此範例假設模式中已建立相關屬性,且 ou=subscribers,dc=example,dc=com 項目中已加入 ACI。

代理授權

代理授權方法是一種特殊形式的認證。使用本身的身份識別連結至目錄的使用者,會透過代理授權而授予其他使用者的權限。

若要配置目錄伺服器以允許代理伺服器請求,您必須執行下列動作:


備註 –

您可以將代理權限授予目錄的任何使用者,但「目錄管理員」除外。此外,您無法以「目錄管理員」的 DN 做為代理 DN。在授予代理權限時,您必須極為謹慎,因為您會授予可將任何 DN (「目錄管理員」DN 除外) 指定為代理 DN 的權限。若目錄伺服器在相同的作業中收到多個代理認證控制,即會有錯誤傳回用戶端應用程式,而作業嘗試將會失敗。


代理授權範例

Example.com 想讓連結為 MoneyWizAcctSoftware 的用戶端應用程式對 LDAP 資料具有與「會計管理員」相同的存取權限。

所套用的參數如下:

若要使用與「會計管理員」相同的存取權限,讓用戶端應用程式取得「會計」子樹狀結構的存取權,下列必須為真:

正確使用此 ACI 後,MoneyWizAcctSoftware 用戶端應用程式即可連結至目錄,並傳送 ldapsearchldapmodify 之類的 LDAP 指令,而要求代理 DN 的存取權限。

在此範例中,若用戶端要執行 ldapsearch 指令,指令中將會納入下列控制:


$ ldapsearch -D "uid=MoneyWizAcctSoftware,ou=Applications,dc=example,dc=com" -w - \
 -y "uid=AcctAdministrator,ou=Administrators,dc=example,dc=com" ...

請注意,用戶端會以本身的形式連結,但仍會被授予代理伺服器項目的權限。用戶端不需具備代理伺服器項目密碼。

使用篩選設定目標

若要設定允許存取目錄中眾多項目的存取控制,您可以使用篩選器設定目標。

在 LDIF 中,若要使用篩選器讓 HR 中所有的使用者均可存取員工項目,請撰寫下列陳述式:


aci: (targetattr="*") (targetfilter=(objectClass=employee))
 (version 3.0; acl "HR access to employees";
 allow (all) groupdn= "ldap:///cn=HRgroup,ou=People,dc=example,dc=com";)

此範例假設 ou=People,dc=example, dc=com 項目中已加入 ACI。


備註 –

由於搜尋篩選不會直接為您管理存取的物件命名,因此在允許或拒絕物件的存取權時,請勿搞錯對象。若不慎允許或拒絕了錯誤物件的存取權,您的目錄將變得更為複雜,因而提高風險。此外,使用篩選也可能使您難以對目錄內的存取控制問題進行疑難排解。


為含有逗號的 DN 定義權限

含有逗號的 DN 在您的 LDIF ACI 陳述式中需要特殊的處理方式。在 ACI 陳述式的目標與連結規則部分中,逗號之前必須加上一個反斜線 (\)。此語法如下列範例所說明:


dn: o=Example.com Bolivia\, S.A. 
objectClass: top 
objectClass: organization 
aci: (target="ldap:///o=Example.com Bolivia\,S.A.") (targetattr="*") 
(version 3.0; acl "aci 2"; allow (all) groupdn = 
"ldap:///cn=Directory Administrators, o=Example.com Bolivia\, S.A.";)

檢視有效權限

維護目錄中某些項目的存取策略時,您必須瞭解所定義的 ACI 在安全性方面會受到哪些影響。目錄伺服器可讓您檢視 ACI 授予指定項目之指定使用者的有效權限,以評估現有的 ACI。

目錄伺服器會對「取得有效權限」控制加以回應,此控制可納入搜尋作業中。此控制的回應會傳回搜尋結果中有關項目與屬性的有效權限資訊。這項額外資訊含有每一個項目以及各項目中每一個屬性的讀取與寫入權限。您可以針對用於搜尋的連結 DN 或任意 DN 請求這些權限。此選擇可讓管理員測試目錄使用者的權限。

有效權限功能需依賴 LDAP 控制。您必須確定用以連結至遠端伺服器的代理伺服器身份識別亦可存取有效權限屬性。

限制取得有效權限控制的存取

檢視有效權限的作業是一項必須受到保護與適當限制的目錄作業。

若要限制有效權限資訊的存取,請修改 getEffectiveRights 屬性的預設 ACI。接著請建立 getEffectiveRightsInfo 屬性的新 ACI。

例如,下列 ACI 將僅允許「目錄伺服器管理員群組」的成員取得有效權限:


aci: (targetattr != "aci")(version 3.0; acl
 "getEffectiveRights"; allow(all) groupdn =
 "ldap:///cn=Directory Administrators,ou=Groups,dc=example,dc=com";)

若要取得有效權限資訊,您必須具備使用「有效權限」控制的存取控制權限,以及 aclRights 屬性的讀取存取權。這種雙層的存取控制,可提供能夠在必要時進一步微調的基本安全性。與代理伺服器相似,若您對某項目中的 aclRights 屬性具有讀取存取權,即可請求任何人對該項目及其屬性之權限的相關資訊。這表示,管理資源的使用者能夠決定擁有資源權限的人員,即使這名使用者並未實際管理具有這些權限的人員亦然。

若請求權限資訊的使用者無權使用「有效權限」控制,作業即會失敗並傳回錯誤訊息。但若請求權限資訊的使用者有權使用控制,但缺少讀取 aclRights 屬性的權限,aclRights 屬性即不會出現在傳回的項目中。此運作方式會反映目錄伺服器的一般搜尋運作方式。

使用「取得有效權限」控制

使用 ldapsearch 指令與 -J "1.3.6.1.4.1.42.2.27.9.5.2" 選項,指定「取得有效權限」控制。依預設,控制會在搜尋結果中傳回項目與屬性的連結 DN 項目有效權限。

請使用下列選項變更預設運作方式:


備註 –

aclRightsaclRightsInfo 屬性的運作方式與虛擬作業屬性相仿。這些屬性並未儲存在目錄中,且非經明確請求不會傳回。它們會由目錄伺服器在回應「取得有效權限」控制時產生。

因此,這些屬性無法用於任何類型的篩選或搜尋作業中。


有效權限功能會繼承可影響存取控制的其他參數。這些參數包括一天中的時間、認證方法、機器位址與名稱。

下列範例將說明使用者 Carla Fuente 能夠以何種方式檢視她在目錄中的權限。在結果之中,1 表示已授予權限,0 表示已拒絕權限。


$ ldapsearch -J "1.3.6.1.4.1.42.2.27.9.5.2 -h host1.Example.com -p 389 \
 -D "uid=cfuente,ou=People,dc=example,dc=com" -w - -b "dc=example,dc=com" \
 "(objectclass=*)" aclRights
Enter bind password:
dn: dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: ou=Groups, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: ou=People, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: cn=Accounting Managers,ou=groups,dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: cn=HR Managers,ou=groups,dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: uid=bjensen,ou=People, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: uid=cfuente, ou=People, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:1,proxy:0

此結果為 Carla Fuente 顯示了她在目錄中至少具有讀取權限的項目,並顯示她可修改本身的項目。「有效權限」控制不會略過一般存取權限,因此使用者不會看見他不具讀取權限的項目。在下列範例中,「目錄管理員」將可看見 Carla Fuente 不具讀取權限的項目:


$ ldapsearch -h host1.Example.com -p 389 -D cn=admin,cn=Administrators,cn=config -w - \
 -c "dn: uid=cfuente,ou=People,dc=example,dc=com" -b "dc=example,dc=com" \
 "(objectclass=*)" aclRights
Enter bind password:
dn: dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: ou=Groups, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: cn=Directory Administrators, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:0,write:0,proxy:0
dn: ou=Special Users,dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:0,write:0,proxy:0
dn: ou=People, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: cn=Accounting Managers,ou=groups,dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: cn=HR Managers,ou=groups,dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: uid=bjensen,ou=People, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0
dn: uid=cfuente, ou=People, dc=example,dc=com
aclRights;entryLevel: add:0,delete:0,read:1,write:1,proxy:0

在上方的輸出中,「目錄管理員」可看出 Carla Fuente 甚至無法檢視目錄樹狀結構中的「特殊使用者」或「目錄伺服器管理員」分支。在下列範例中,「目錄管理員」將可看出 Carla Fuente 無法修改其本身項目中的 mailmanager 屬性:


$ ldapsearch -h host1.Example.com -p 389 -D cn=admin,cn=Administrators,cn=config -w - \
 -c "dn: uid=cfuente,ou=People,dc=example,dc=com" -b "dc=example,dc=com" \
 "(uid=cfuente)" aclRights "*"
Enter bind password:
version: 1
dn: uid=cfuente, ou=People, dc=example,dc=com
aclRights;attributeLevel;mail: search:1,read:1,compare:1,
 write:0,selfwrite_add:0,selfwrite_delete:0,proxy:0
mail: cfuente@Example.com
aclRights;attributeLevel;uid: search:1,read:1,compare:1,
 write:1,selfwrite_add:1,selfwrite_delete:1,proxy:0
uid: cfuente
aclRights;attributeLevel;givenName: search:1,read:1,compare:1,
 write:1,selfwrite_add:1,selfwrite_delete:1,proxy:0
givenName: Carla
aclRights;attributeLevel;sn: search:1,read:1,compare:1,
 write:1,selfwrite_add:1,selfwrite_delete:1,proxy:0
sn: Fuente
aclRights;attributeLevel;cn: search:1,read:1,compare:1,
 write:1,selfwrite_add:1,selfwrite_delete:1,proxy:0
cn: Carla Fuente
aclRights;attributeLevel;userPassword: search:0,read:0,
 compare:0,write:1,selfwrite_add:1,selfwrite_delete:1,proxy:0
userPassword: {SSHA}wnbWHIq2HPiY/5ECwe6MWBGx2KMiZ8JmjF80Ow==
aclRights;attributeLevel;manager: search:1,read:1,compare:1,
 write:0,selfwrite_add:0,selfwrite_delete:0,proxy:0
manager: uid=bjensen,ou=People,dc=example,dc=com
aclRights;attributeLevel;telephoneNumber: search:1,read:1,compare:1,
 write:1,selfwrite_add:1,selfwrite_delete:1,proxy:0
telephoneNumber: (234) 555-7898
aclRights;attributeLevel;objectClass: search:1,read:1,compare:1,
 write:1,selfwrite_add:1,selfwrite_delete:1,proxy:0
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
aclRights;entryLevel: add:0,delete:0,read:1,write:0,proxy:0

進階存取控制:使用巨集 ACI

使用重複目錄樹狀結構的組織,可透過巨集而最佳化目錄中所使用的 ACI 數目。當您降低目錄樹狀結構中的 ACI 數目時,存取控制策略將更易於管理。此外,ACI 記憶體的使用效率也會獲得提昇。

巨集是指在 ACI 中用以表示 DN 或部分 DN 的預留位置。您可以使用巨集代表 ACI 之目標部分中的 DN,和/或連結規則部分中的 DN。就實務上來說,當目錄伺服器收到內送 LDAP 作業時,即會根據 LDAP 作業預定為目標的資源比對 ACI 巨集。執行比對的目的在於找出相符的子字串 (如果有的話)。若有相符項目,連結規則方的巨集即會以相符的子字串展開,並在該展開的連結規則完成評估後判定資源的存取權。

本節含有巨集 ACI 的範例與巨集 ACI 語法的相關資訊。

巨集 ACI 範例

巨集 ACI 的好處及其運作方式以範例說明最為清楚。圖 6–1 說明使用巨集 ACI 的目錄樹狀結構可有效降低整體的 ACI 數目。

在此圖例中,請注意相同的樹狀結構 (ou=groups,ou=people) 具有重複的子網域模式。此模式也同樣在樹狀結構中的各處重複,因為 Example.com 目錄樹狀結構中存有兩個尾碼 dc=hostedCompany2,dc=example,dc=comdc=hostedCompany3,dc=example,dc=com,並未顯示在此圖中。

目錄樹狀結構中的 ACI 也具有重複的模式。例如,下列 ACI 位於 dc=hostedCompany1,dc=example,dc=com 節點上:


aci: (targetattr="*")
 (targetfilter=(objectClass=nsManagedDomain))(version 3.0;
 acl "Domain access"; allow (read,search) groupdn=
 "ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,
 dc=example,dc=com";)

此 ACI 會授予 domainAdmins 群組對 dc=hostedCompany1,dc=example,dc=com 樹狀結構中任何項目的讀取與搜尋權限。

圖 6–1 巨集 ACI 的範例目錄樹狀結構

範例目錄樹狀結構的形貌,可顯示 dc=hostedcompany1,dc=example,dc=com 與各種子網域。

下列 ACI 位於 dc=hostedCompany1,dc=example,dc=com 節點上:


aci: (targetattr="*")
 (targetfilter=(objectClass=nsManagedDomain))
 (version 3.0; acl "Domain access"; allow (read,search)
 groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany1,dc=example,dc=com";)

下列 ACI 位於 dc=subdomain1,dc=hostedCompany1, dc=example,dc=com 節點上:


aci: (targetattr="*")
 (targetfilter=(objectClass=nsManagedDomain))
 (version 3.0; acl "Domain access"; allow (read,search)
 groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany1,
  dc=example,dc=com";)

下列 ACI 位於 dc=hostedCompany2,dc=example,dc=com 節點上:


aci: (targetattr="*")
 (targetfilter=(objectClass=nsManagedDomain))
 (version 3.0; acl "Domain access"; allow (read,search)
 groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=hostedCompany2, dc=example,dc=com";)

下列 ACI 位於 dc=subdomain1,dc=hostedCompany2, dc=example,dc=com 節點上:


aci: (targetattr="*")
 (targetfilter=(objectClass=nsManagedDomain))
 (version 3.0; acl "Domain access"; allow (read,search)
 groupdn="ldap:///cn=DomainAdmins,ou=Groups,dc=subdomain1,dc=hostedCompany2,
 dc=example,dc=com";)

在上方的四個 ACI 中,唯一的不同之處是 groupdn 關鍵字中所指定的 DN。只要使用 DN 的巨集,即可在樹狀結構的根,亦即 dc=example,dc=com 節點上,以一個 ACI 取代這些 ACI。此巨集 ACI 如下所示:


aci: (target="ldap:///ou=Groups,($dn),dc=example,dc=com")
 (targetattr="*")(targetfilter=(objectClass=nsManagedDomain))
 (version 3.0; acl "Domain access"; allow (read,search) 
 groupdn="ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=example,dc=com";)

請注意,此時必須加入先前未使用的 target 關鍵字。

在前述範例中,ACI 的數目已從四個縮減為一個。但其真正的好處在於您在目錄樹狀結構中所減少的重複模式。

巨集 ACI 語法

為使本節的討論更單純,在此將用以提供連結憑證的 userdnroledngroupdnuserattr 等 ACI 關鍵字統稱為 ACI 主體。主體可決定套用 ACI 的對象。

下表說明可取代特定 ACI 關鍵字的巨集。

表 6–1 巨集 ACI 關鍵字

巨集 

說明 

ACI 關鍵字 

($dn)

用以在目標中進行比對,以及在主體中直接取代。 

target, targetfilter, userdn, roledn, groupdn, userattr

[$dn]

用以取代在主體的子樹狀結構中使用的多個 RDN。 

targetfilter, userdn, roledn, groupdn, userattr

($attr.attrName)

用以將目標項目中的 attributeName 屬性值取代至主體中。

userdn, roledn, groupdn, userattr

巨集 ACI 關鍵字具有下列限制:

比對目標中的 ($dn)

ACI 目標中的 ($dn) 巨集可將本身與 LDAP 請求預定為目標的項目進行比較,以決定取代值。例如,您的 LDAP 請求將下列項目預定為目標:


cn=all,ou=groups,dc=subdomain1, dc=hostedCompany1,dc=example,dc=com

此外,您具有將目標定義如下的 ACI:


(target="ldap:///ou=Groups,($dn),dc=example,dc=com")

($dn) 巨集與 “dc=subdomain1, dc=hostedCompany1” 相符。因此,此子字串將做為 ACI 主體中的取代值。

取代主體中的 ($dn)

在 ACI 的主體中,($dn) 巨集會由目標中相符的整個子字串所取代。例如︰


groupdn="ldap:///cn=DomainAdmins,ou=Groups,($dn),dc=example,dc=com"

主體會變成:


groupdn="ldap:///cn=DomainAdmins,ou=Groups,
 dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"

在巨集展開後,目錄伺服器會在完成一般程序後評估 ACI,以判定是否已授予存取權。


備註 –

使用巨集取代的 ACI 與標準 ACI 不同,它不一定會將存取權授予目標項目的子項。這是因為,當目標為子 DN 時,取代可能不會在主體字串中建立有效的 DN。


取代主體中的 [$dn]

[$dn] 的取代機制與 ($dn) 略有不同。目標資源的 DN 會進行數次檢查,並逐次捨棄最左邊的 RDN 元件,直到找到相符項目為止。

例如,假設您的 LDAP 請求將 cn=all,ou=groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com 子樹狀結構預定為目標,並且具有下列 ACI:


aci: (targetattr="*")
 (target="ldap:///ou=Groups,($dn),dc=example,dc=com")
 (version 3.0; acl "Domain access"; allow (read,search)
 groupdn="ldap:///cn=DomainAdmins,ou=Groups,[$dn],
 dc=example,dc=com";)

    伺服器會以下列方式繼續作業,以展開此 ACI:

  1. 伺服器驗證目標中的 ($dn) 確實符合 dc=subdomain1,dc=hostedCompany1

  2. 伺服器將主體中的 [$dn] 取代為 dc=subdomain1,dc=hostedCompany1

    產生的主體為 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"。若因連結 DN 為該群組的成員而授予存取權,即會停止巨集展開,並評估 ACI。若連結 DN 不是成員,則會繼續進行程序。

  3. 伺服器將主體中的 [$dn] 取代為 dc=hostedCompany1

    產生的主體為 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=example,dc=com"。連結 DN 會再次被視為此群組的成員進行測試,若為其成員,則會完整評估 ACI。若連結 DN 不是成員,巨集展開則會停在最後一個具有相符值的 RDN 上,而此 ACI 的 ACI 評估即告完成。

[$dn] 巨集的好處是,它可透過彈性的方式,授予目錄樹狀結構中所有子網域的網域層級管理員存取權。因此,在表示不同網域間的階層式關係時,[$dn] 巨集即可派上用場。

例如,請考量下列 ACI:


aci: (target="ldap:///ou=*,($dn),dc=example,dc=com") (targetattr="*")
(targetfilter=(objectClass=nsManagedDomain)) 
(version 3.0; acl "Domain access"; allow (read,search) groupdn= 
"ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=example,dc=com";)

ACI 可授予 cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=example,dc=com 的成員對 dc=hostedCompany1 下所有子網域的存取權。因此,凡屬於該群組的管理員,即可存取如子樹狀結構 ou=people,dc=subdomain1.1,dc=subdomain1 的項目。

但在此同時,cn=DomainAdmins,ou=Groups, dc=subdomain1.1 的成員將遭拒絕存取 ou=people,dc=subdomain1, dc=hostedCompany1ou=people,dc=hostedCompany1 節點。

($attr.attrName) 的巨集比對

($attr.attrname) 巨集一律用於 DN 的主體部分中。例如,您可以定義下列 roledn


roledn = "ldap:///cn=DomainAdmins,($attr.ou),dc=HostedCompany1,dc=example,dc=com"

現在,假設伺服器收到將下列項目預設為目標的 LDAP 作業:


dn: cn=Babs Jensen,ou=People,dc=HostedCompany1,dc=example,dc=com
cn: Babs Jensen
sn: Jensen
ou: Sales
...

為評估 ACI 的 roledn 部分,伺服器會讀取目標項目中所儲存的 ou 屬性值。接著,伺服器會在主體中取代此值,以展開巨集。在此範例中,roledn 會展開如下:


roledn = "ldap:///cn=DomainAdmins,ou=Sales,dc=HostedCompany1,dc=example,dc=com"

然後,目錄伺服器會根據一般 ACI 評估演算法進行 ACI 的評估。

若巨集中的已命名屬性為多值屬性,則會依序使用每個值展開巨集。會採用第一個產生成功比對的值。

記錄存取控制資訊

若要在錯誤記錄中取得存取控制的相關資訊,您必須設定適當的記錄層級。

Procedure設定 ACI 記錄

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    設定記錄層級,以將 ACI 處理納入考量。


    $ dsconf set-log-prop -h host -p port error level:err-acl

使用 TCP 包裝的用戶端主機存取控制

您可以使用 TCP 包裝程式,控制連線在 TCP 上所接受或遭拒絕的主機或 IP 位址。您可以透過 TCP 包裝,限制用戶端主機的存取。如此一來,您即可對目錄伺服器的初始 TCP 連線使用非主機式保護。

雖然您可以為目錄伺服器設定 TCP 包裝,但如此可能會使效能受到嚴重影響,特別是在阻絕服務攻擊期間。使用在目錄伺服器以外維護的主機式防火牆,或使用 IP 連接埠篩選,將可達到最佳效能。

Procedure啟用 TCP 包裝

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 在實例路徑內,建立 hosts.allow 檔案或 hosts.deny 檔案。

    例如,您可以在 instance-path/config 中建立檔案。請確定您所建立的檔案格式符合 hosts_access(4)

  2. 設定存取檔案的路徑。


    $ dsconf set-server-prop -h host -p port host-access-dir-path:path-to-file
    

    例如︰


    $ dsconf set-server-prop -h host -p port host-access-dir-path:/local/ds1/config
    "host-access-dir-path" property has been set to "/local/ds1/config".
    The "/local/ds1/config" directory on host1 must contain valid hosts.allow
    and/or hosts.deny files.
    Directory Server must be restarted for changes to take effect. 

Procedure停用 TCP 包裝

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    將主機存取路徑設為 ""


    $ dsconf set-server-prop -h host -p port host-access-dir-path:""

第 7 章 目錄伺服器密碼策略

當使用者連線至目錄伺服器時,會認證該使用者。目錄會根據認證期間建立的身份識別,授予使用者存取權限與資源限制。本章中的帳號大致表示使用者項目。帳號也反映該使用者可在目錄上執行作業的權限。在此密碼策略的說明中,每個帳號都會與使用者項目以及密碼相關。

本章也會說明密碼策略的帳號啟用。目錄伺服器管理員無須遵守密碼策略,可直接對帳號進行鎖定與解除鎖定。

本章不包含認證方法。部分認證方法 (例如 SASL GSSAPI 與用戶端 SSL 憑證型認證) 不需要使用密碼。本章中關於密碼策略的資訊不適用於這類認證方法。如需配置認證機制的相關指示,請參閱第 5 章, 目錄伺服器安全性

本章包含下列主題:

密碼策略與工作表

本節說明密碼策略設定,並提供工作表協助您定義符合您需求的密碼策略。


備註 –

若要使用預設密碼策略,請參閱管理預設密碼策略


密碼策略設定

在目錄伺服器中指定密碼策略時,會修改或建立包含物件類別 pwdPolicy(5dsoc) 的項目。

定義特定使用者類型的密碼策略時,需要考量下列事項:

本章後續幾節說明如何處理密碼策略的這幾點。使用定義密碼策略的工作表釐清規劃要執行的各項密碼策略。

帳號封鎖策略

本節說明決定帳號封鎖的策略屬性。

目錄伺服器帳號大致表示使用者項目,以及該使用者在目錄上執行作業所具有的權限。每個帳號會與連結 DN 及使用者密碼相關。當出現入侵者嘗試破解密碼時,希望目錄伺服器會鎖定帳號。鎖定功能可避免入侵者使用帳號進行連結,也能避免入侵者繼續攻擊。

身為管理員,您也可以手動停用共用一個角色的所有使用者之帳號。如需相關指示,請參閱手動鎖定帳號。此外,密碼策略的主要部分必須在無人介入且目錄伺服器鎖定帳號的情況下指定。

首先,您必須指定目錄伺服器可以使用 pwdLockout(5dsat) 在發生太多失敗連結時,自動鎖定帳號。目錄伺服器會記錄嘗試連結帳號的連續失敗次數。您可以使用 pwdMaxFailure(5dsat) 指定在目錄伺服器鎖定帳號之前可允許的連續失敗次數。

目錄伺服器會嚴守密碼策略鎖定帳號。此純粹為機械化作業。帳號鎖定的原因可能不是因為入侵者對帳號發動攻擊,而是因為使用者鍵入的密碼不正確。因此,您可以使用 pwdFailureCountInterval(5dsat) 指定目錄伺服器清除失敗嘗試的記錄之前,等待下一次嘗試的時間。您可以使用 pwdLockoutDuration(5dsat) 指定目錄伺服器自動解除鎖定帳號之前,封鎖應持續的時間。如果使用者的錯誤有正當理由而不是出於惡意,管理員不須介入解除鎖定使用者帳號。

如果在整個複寫拓樸中複寫使用者資料,也會複寫封鎖計數器與封鎖屬性。pwdIsLockoutPrioritized(5dsat) 屬性可決定是否以更高的優先權複寫封鎖屬性的更新,因此在大多數情況下,此屬性應為 TRUE。因此,使用者在遭封鎖之前,僅能嘗試連結至一個複本 pwdMaxFailure 次,當使用者嘗試更多複本時,嘗試次數可能變少。另請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Preventing Authentication by Using Global Account Lockout」。包含全域封鎖的文件說明如何確定使用者嘗試 pwdMaxFailure 次,才會在整個複寫拓樸中遭封鎖。

密碼變更的策略

本節說明決定密碼變更的策略屬性。

目錄伺服器在許多部署中是身份識別資料的儲存庫。使用者應該能夠如 pwdAllowUserChange(5dsat) 所指定變更密碼,因此您無須變更密碼。

允許使用者變更密碼之後,可能也要控制使用者可以變更密碼的情況。您可以使用 pwdSafeModify(5dsat) 指定變更密碼的使用者必須先提供正確的現有密碼,才能取代密碼。如需如何修改密碼的範例,請參閱pwdSafeModifyTRUE 時從指令行修改密碼。您可以使用 pwdInHistory(5dsat) 指定目錄伺服器會記住的密碼數目,避免使用者重複使用相同的密碼。您也可以設定 pwdMinAge(5dsat) 以避免使用者變更密碼過於頻繁。

在許多情況下,可利用管理員身份或是由某些您所管理的應用程式,在目錄中建立使用者項目。您可以指定使用者密碼值在使用者第一次連結至新帳號時進行變更。您也可能需要重設使用者密碼,重設之後,使用者應在下次使用帳號時變更密碼。目錄伺服器具有特定屬性 pwdMustChange(5dsat),您可用以表示當另一個使用者重設密碼值之後,使用者是否必須變更密碼。

您也可以指定目錄伺服器管理員在設定 passwordRootdnMayBypassModsChecks(5dsat) 以變更密碼時,不須遵守策略。

密碼內容的策略

本節說明決定密碼內容的策略屬性。

雖然密碼值一般不會在目錄搜尋中傳回,但是攻擊者可能會取得目錄資料庫的存取權。因此,密碼值一般會以使用 passwordStorageScheme(5dsat) 指定的支援雜湊格式之一儲存。

您可以設定 pwdMinLength(5dsat) 強制密碼至少有指定的字元數。

您也可以設定 pwdCheckQuality(5dsat),強制檢查密碼是否符合最基本的密碼品質定義。強制檢查時,目錄伺服器會檢查密碼是否至少具備最基本的長度。伺服器也會檢查密碼是否不含任何 cngivenNamemailousnuid 屬性值。此外,啟用 Strong Password Check (密碼強度檢查) 外掛程式時,目錄伺服器會檢查密碼是否不含外掛程式所用之字典檔案的字串。伺服器也會檢查密碼是否包含不同字元類型的適當混合。

您可以使用 dsconf set-server-prop 指令啟用密碼強度檢查。使用 pwd-strong-check-enabled 特性可啟動外掛程式,並重新啟動伺服器以使變更生效。使用 pwd-strong-check-require-charset 特性可指定密碼所需的字元集。pwd-strong-check-require-charset 特性包含下列值:

lower

新密碼必須包含小寫字元。

upper

新密碼必須包含大寫字元。

digit

新密碼必須包含數字。

special

新密碼必須包含特殊字元。

any-two

新密碼至少必須從上述兩個字元集中,各包含至少一個字元。

any-three

新密碼至少必須從上述三個字元集中,各包含至少一個字元。

pwd-strong-check-require-charset 特性的預設設定為 lower && upper && digit && special

密碼過期的策略

本節說明決定密碼過期的策略屬性。

若要確保使用者定期變更密碼,請設定 pwdMaxAge(5dsat),以配置目錄伺服器在密碼到達特定存在期限之後,設定密碼為過期。

使用者必須收到密碼即將過期的通知。您可以配置目錄伺服器傳回用以連結的密碼即將過期之警告。使用 pwdExpireWarning(5dsat) 定義過期之前多久,才應在用戶端連結時傳回警告。請注意,用戶端應用程式會收到警告。使用者不會直接收到警告。當用戶端應用程式收到密碼即將過期的警告時,必須通知一般使用者。

您可以設定 pwdGraceAuthNLimit(5dsat),允許使用者以過期的密碼嘗試連結一或多次。如此一來,無法及時變更密碼的使用者仍得以連結以變更密碼。請注意,當使用者使用寬限登入進行連結時,使用者可執行任何作業。寬限登入執行起來就好像密碼尚未過期一般。

目錄伺服器會在每次項目上的密碼有所修改時,更新作業屬性 pwdChangedTime(5dsat)。因此,若要啟用密碼過期,已超過期限的使用者密碼將在您啟用密碼過期時立即過期。若您覺得此運作方式不合用,請使用警告與寬限登入。

追蹤上次認證時間的策略

本節包含密碼策略屬性 pwdKeepLastAuthTime(5dsat) 的用法。

一旦設定 pwdKeepLastAuthTime,目錄伺服器就會在每次使用者認證時,追蹤上次成功連結的時間。時間會記錄在使用者項目的 pwdLastAuthTime(5dsat) 作業屬性中。

由於此運作方式會為每個成功的連結作業增加一個更新,因此預設不會啟用 pwdKeepLastAuthTime 功能。您必須明確地啟用此功能,才能於部署中使用。

定義密碼策略的工作表

此工作表設計用以協助您定義密碼策略,以透過指令行介面或使用目錄服務控制中心 (DSCC) 執行。每個密碼策略各使用一個工作表。

記錄密碼策略項目的 DN 之後,請記錄每個策略區中關於屬性設定的決策。另請記錄使用這些設定的理由。

密碼策略工作表 

密碼策略項目辨別名稱 

dn: cn=

策略區 

屬性 

於此處寫入設定 

於此處寫入使用這些設定的理由 

帳號封鎖 

pwdFailureCountInterval(5dsat)

   

pwdIsLockoutPrioritized(5dsat)

           

           

pwdLockout(5dsat)

           

           

pwdLockoutDuration(5dsat)

           

           

pwdMaxFailure(5dsat)

           

           

密碼變更 

passwordRootdnMayBypassModsChecks(5dsat)

           

           

pwdAllowUserChange(5dsat)

           

           

pwdInHistory(5dsat)

           

           

pwdMinAge(5dsat)

           

           

pwdMustChange(5dsat)

           

           

pwdSafeModify(5dsat)

           

           

密碼內容 

passwordStorageScheme(5dsat)

           

           

pwdCheckQuality(5dsat)

           

           

pwdMinLength(5dsat)

   

密碼過期 

pwdExpireWarning(5dsat)

           

           

pwdGraceAuthNLimit(5dsat)

           

           

pwdMaxAge(5dsat)

           

           

追蹤上次認證時間 

pwdKeepLastAuthTime(5dsat)

           

           


備註 –

pwdCheckQuality 屬性設為 2 時,伺服器可以執行其他檢查。Password Check (密碼檢查) 外掛程式會同時啟用,外掛程式的設定會影響要在新密碼的值上執行之檢查作業。


管理預設密碼策略

預設密碼策略會套用到目錄實例中未定義專用策略的所有使用者。但是,預設密碼策略不會套用到目錄管理員。如需策略範圍的詳細資訊,請參閱套用的密碼策略

預設密碼策略是可以使用 dsconf 指令配置的策略。您也可以讀取 cn=Password Policy,cn=config 以檢視預設密碼策略。

本節顯示每個策略區的策略屬性以及相關的 dsconf 伺服器特性,亦說明如何檢視與變更預設密碼策略設定。

密碼策略屬性與 dsconf 伺服器特性之間的關聯

下表顯示每個密碼策略區的密碼策略屬性與相關的 dsconf 伺服器特性。

策略區 

策略屬性 

dsconf 伺服器特性

帳號封鎖 

pwdFailureCountInterval

pwd-failure-count-interval

pwdLockout

pwd-lockout-enabled

pwdLockoutDuration

pwd-lockout-duration

pwdMaxFailure

pwd-max-failure-count

密碼變更 

passwordRootdnMayBypassModsChecks

pwd-root-dn-bypass-enabled

pwdAllowUserChange

pwd-user-change-enabled

pwdInHistory

pwd-max-history-count

pwdMinAge

pwd-min-age

pwdMustChange

pwd-must-change-enabled

pwdSafeModify

pwd-safe-modify-enabled

密碼內容 

pwdCheckQuality

pwd-check-enabledpwd-accept-hashed-password-enabledpwd-strong-check-dictionary-pathpwd-strong-check-enabledpwd-strong-check-require-charset

pwdMinLength

pwd-min-length

passwordStorageScheme

pwd-storage-scheme

密碼過期 

pwdExpireWarning

pwd-expire-warning-delay

pwdGraceAuthNLimit

pwd-grace-login-limit

pwdMaxAge

pwd-max-age

追蹤上次認證時間 

pwdKeepLastAuthTime

pwd-keep-last-auth-time-enabled


備註 –

pwdCheckQuality 的相關特性可配置 Password Check (密碼檢查) 外掛程式。因此,這五個特性適用於整個伺服器實例。這五個特性也適用於 pwdCheckQuality: 2 的其他密碼策略。


Procedure檢視預設密碼策略設定

您可以使用 dsconf 指令檢視預設密碼策略設定。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    讀取預設密碼策略配置。


    $ dsconf get-server-prop -h host -p port | grep ^pwd-
    pwd-accept-hashed-pwd-enabled      :  N/A
    pwd-check-enabled                  :  off
    pwd-compat-mode                    :  DS5-compatible-mode
    pwd-expire-no-warning-enabled      :  on
    pwd-expire-warning-delay           :  1d
    pwd-failure-count-interval         :  10m
    pwd-grace-login-limit              :  disabled
    pwd-keep-last-auth-time-enabled    :  off
    pwd-lockout-duration               :  1h
    pwd-lockout-enabled                :  off
    pwd-lockout-repl-priority-enabled  :  on
    pwd-max-age                        :  disabled
    pwd-max-failure-count              :  3
    pwd-max-history-count              :  disabled
    pwd-min-age                        :  disabled
    pwd-min-length                     :  6
    pwd-mod-gen-length                 :  6
    pwd-must-change-enabled            :  off
    pwd-root-dn-bypass-enabled         :  off
    pwd-safe-modify-enabled            :  off
    pwd-storage-scheme                 :  SSHA
    pwd-strong-check-dictionary-path   :  /local/ds6/plugins/words-english-big.txt
    pwd-strong-check-enabled           :  off
    pwd-strong-check-require-charset   :  lower
    pwd-strong-check-require-charset   :  upper
    pwd-strong-check-require-charset   :  digit
    pwd-strong-check-require-charset   :  special
    pwd-supported-storage-scheme       :  CRYPT
    pwd-supported-storage-scheme       :  SHA
    pwd-supported-storage-scheme       :  SSHA
    pwd-supported-storage-scheme       :  NS-MTA-MD5
    pwd-supported-storage-scheme       :  CLEAR
    pwd-user-change-enabled            :  on

Procedure變更預設密碼策略設定

您可以使用 dsconf 指令設定伺服器特性,以變更預設密碼策略。


備註 –

完成此程序之前,請閱讀並完成定義密碼策略的工作表


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 從工作表轉譯設定至 dsconf 指令特性設定中。

  2. 使用 dsconf set-server-prop 指令適當地變更預設密碼策略特性。

    例如,下列指令可讓目錄管理員在修改密碼時違反預設策略:


    $ dsconf set-server-prop -h host -p port pwd-root-dn-bypass-enabled:on

管理專用密碼策略

專用密碼策略會定義於 pwdPolicy(5dsoc) 項目中。您可以在目錄樹狀結構的任何位置定義策略,通常會在以策略決定的帳號複寫之子樹狀結構中。該策略具有格式為 cn=policy name,subtree 的 DN。

定義密碼策略之後,可以在想要的使用者項目中設定 pwdPolicySubentry(5dsat) 屬性以指定密碼策略。

本節包含下列主題:

套用的密碼策略

目錄伺服器可讓您配置多個密碼策略。本節說明預設密碼策略與專用密碼策略。本節亦會說明當多個密碼策略可套用到指定的帳號時,將強制執行的策略。

第一次建立目錄伺服器實例時,該實例會有預設密碼策略。預設密碼策略會顯示在配置項目 cn=PasswordPolicy,cn=config 中。預設密碼策略會套用到目錄中除目錄管理員以外的所有帳號。

如同在所有目錄伺服器密碼策略中一般,cn=PasswordPolicy,cn=config 具有物件類別 pwdPolicy(5dsoc)


備註 –

建立目錄伺服器實例時,密碼策略屬性會保留在 Directory Server 5 相容模式中,以從舊版本升級。在 Directory Server 5 相容模式中,目錄伺服器也會處理具有物件類別 passwordPolicy(5dsoc) 的密碼策略項目。

升級完成後,可以如「Sun Java System Directory Server Enterprise Edition 6.0 Migration Guide」中所述,以完整功能模式使用新密碼策略。目錄應用程式不會感覺到管理動作的進行。

本章包含使用新密碼策略功能的密碼策略配置。


您可以變更預設密碼策略以覆寫預設設定。您可以使用 dsconf(1M) 指令設定預設密碼策略的伺服器特性。這類伺服器特性名稱一般會以 pwd- 前綴為開頭。變更這類特性的設定時,會覆寫該實例的預設密碼策略。但是,複寫不會複製對複本所做的變更。對預設密碼策略所做的變更是實例配置的一部分,而不是目錄資料的一部分。

除了配置預設密碼策略之外,您還可以配置專用密碼策略。專用密碼策略會由目錄樹狀結構中的項目所定義。專用密碼策略項目會有與預設密碼策略相同的物件類別 pwdPolicy(5dsoc),因此會有相同的策略屬性。由於專用密碼策略為標準目錄項目,策略項目會以標準目錄項目相同的方式進行複寫。

使用者項目透過作業屬性 pwdPolicySubentry(5dsat) 的值參照專用密碼策略。使用者項目參照專用密碼策略時,該策略會覆寫實例的預設密碼策略。在許多部署中,您需要指定使用者角色。您可以設定 pwdPolicySubentry 值配置角色與服務類別 (CoS) 搭配使用,以決定套用到使用者帳號的密碼策略。若要覆寫某個角色所設定的密碼策略,請直接變更使用者項目上的 pwdPolicySubentry 值。

總結本節,一開始會套用預設密碼策略。您可以變更預設密碼策略以覆寫預設值。接著,您可以建立專用密碼策略項目以覆寫預設密碼策略。以角色與 CoS 指定密碼策略時,可以指定個別項目的密碼策略以覆寫 CoS 指定的策略。

Procedure建立密碼策略

建立與修改專用密碼策略的方式與建立及修改任何其他目錄項目的方式相同。下列程序示範如何使用文字編輯器在 LDIF 中寫入密碼策略項目。接著,您可以使用 ldapmodify 指令與 -a 選項,將密碼策略項目增加至目錄中。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

開始之前

除非另外指定,否則此處顯示的資料範例來自於 Example.ldif

  1. 為要建立的密碼策略完成密碼策略工作表。

    如需範例,請參閱定義密碼策略的工作表

  2. 在以工作表為基礎的 LDIF 中寫入密碼策略項目。

    例如,下列策略項目會指定 Example.com 臨時員工的密碼策略,該員工的子樹狀結構根目錄為 dc=example,dc=com

    dn: cn=TempPolicy,dc=example,dc=com
    objectClass: top
    objectClass: pwdPolicy
    objectClass: LDAPsubentry
    cn: TempPolicy
    pwdCheckQuality: 2
    pwdLockout: TRUE
    pwdLockoutDuration: 300
    pwdMaxFailure: 3
    pwdMustChange: TRUE

    除了預設密碼策略設定之外,此處顯示的策略還會指定其他運作方式,同時會強制執行密碼品質檢查。帳號會在三次連續連結失敗之後鎖定五分鐘 (300 秒)。重設密碼之後必須變更密碼。指定策略給使用者帳號之後,此處明確指定的設定會覆寫預設密碼策略。

  3. 將密碼策略項目增加至目錄中。

    例如,下列指令會增加 dc=example,dc=com 下 Example.com 臨時員工的密碼策略。密碼策略已儲存在名為 pwp.ldif 的檔案中。


    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif
    Enter bind password: 
    adding new entry cn=TempPolicy,dc=example,dc=com
    
    $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w --b dc=example,dc=com \
    "(&(objectclass=ldapsubentry)(cn=temppolicy))"
    Enter bind password:
    version: 1
    dn: cn=TempPolicy,dc=example,dc=com
    objectClass: top
    objectClass: pwdPolicy
    objectClass: LDAPsubentry
    cn: TempPolicy
    pwdCheckQuality: 2
    pwdLockout: TRUE
    pwdLockoutDuration: 300
    pwdMaxFailure: 3
    pwdMustChange: TRUE
    $

    Example.ldif 中所示,kvaughan 是人力資源部門的經理,具有修改 dc=example,dc=com 項目的存取權。Vaughan 的連結密碼如 Example.ldif 中所示,為 bribery

另請參閱

若要定義您所定義的策略決定之使用者帳號,請參閱指定密碼策略給個別帳號使用角色與 CoS 指定密碼策略

Procedure指定密碼策略給個別帳號

本程序會指定現有的密碼策略給單一使用者帳號。


備註 –

若要完成此程序,必須有可指定的專用密碼策略。請參閱建立密碼策略


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

除非另外指定,否則此處顯示的資料範例來自於 Example.ldif

    將密碼策略 DN 增加至使用者項目之 pwdPolicySubentry 屬性的值。

    例如,下列指令會指定在建立密碼策略中定義的密碼策略給 DN 為 uid=dmiller,ou=people,dc=example,dc=com 的 David Miller 項目:


    $ cat pwp.ldif 
    dn: uid=dmiller,ou=people,dc=example,dc=com
    changetype: modify
    add: pwdPolicySubentry
    pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com
    
    $ ldapmodify -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f pwp.ldif 
    Enter bind password: 
    modifying entry uid=dmiller,ou=people,dc=example,dc=com
    
    $ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - -b dc=example,dc=com \
    "(uid=dmiller)" pwdPolicySubentry
    Enter bind password:
    version: 1
    dn: uid=dmiller, ou=People, dc=example,dc=com
    pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com
    $

    Example.ldif 中所示,kvaughan 是人力資源部門的經理,具有修改 dc=example,dc=com 項目的存取權。Vaughan 的連結密碼如 Example.ldif 中所示,為 bribery

Procedure使用角色與 CoS 指定密碼策略

本程序經由套用角色與服務類別 (CoS),指定現有的專用密碼策略給一組使用者。如需角色與 CoS 的詳細資訊,請參閱第 9 章, 目錄伺服器群組、角色與 CoS


備註 –

若要完成此程序,必須有可指定的專用密碼策略。請參閱建立密碼策略


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

除非另外指定,否則此處顯示的資料範例來自於 Example.ldif

  1. 建立要由密碼策略所決定的項目角色。

    例如,下列指令會為 Example.com 的臨時員工建立篩選的角色:


    $ cat tmp.ldif
    dn: cn=TempFilter,ou=people,dc=example,dc=com
    objectclass: top
    objectclass: LDAPsubentry
    objectclass: nsRoleDefinition
    objectclass: nsComplexRoleDefinition
    objectclass: nsFilteredRoleDefinition
    cn: TempFilter
    nsRoleFilter: (&(objectclass=person)(status=contractor))
    description: filtered role for temporary employees
    
    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f tmp.ldif
    Enter bind password: 
    modifying entry cn=TempFilter,ou=people,dc=example,dc=com
    
    $

    Example.ldif 中所示,kvaughan 是人力資源部門的經理,具有修改 dc=example,dc=com 項目的存取權。Vaughan 的連結密碼如 Example.ldif 中所示,為 bribery

  2. 建立服務類別以產生密碼策略項目的 DN。

    DN 為具有您所建立的角色之使用者的 pwdPolicySubentry 屬性值。

    例如,下列指令會為 Example.com 的臨時員工建立篩選的角色。該指令會指定 cn=TempPolicy,dc=example,dc=com 給具有該角色的使用者。


    $ cat cos.ldif
    dn: cn=PolTempl,dc=example,dc=com
    objectclass: top
    objectclass: nsContainer
    
    dn: cn="cn=TempFilter,ou=people,dc=example,dc=com",
     cn=PolTempl,dc=example,dc=com
    objectclass: top
    objectclass: extensibleObject
    objectclass: LDAPsubentry
    objectclass: costemplate
    cosPriority: 1
    pwdPolicySubentry: cn=TempPolicy,dc=example,dc=com
    
    dn: cn=PolCoS,dc=example,dc=com
    objectclass: top
    objectclass: LDAPsubentry
    objectclass: cosSuperDefinition
    objectclass: cosClassicDefinition
    cosTemplateDN: cn=PolTempl,dc=example,dc=com
    cosSpecifier: nsRole
    cosAttribute: pwdPolicySubentry operational
    
    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f cos.ldif
    Enter bind password: 
    modifying entry cn=TempFilter,ou=people,dc=example,dc=com
    
    $

    狀態為 contractor 的使用者現在變成遵循密碼策略 cn=TempPolicy,dc=example,dc=com

Procedure設定第一次登入密碼策略

在許多部署中,新帳號所套用的密碼策略會與已建立的帳號所套用的密碼策略不同。本節示範第一次登入密碼策略。該策略提供使用者三天試用新建立的帳號並設定新密碼,之後才會鎖定帳號。該策略執行方式對重設密碼的使用者而言也相同。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 建立新建立帳號的專用密碼策略。

    例如,增加設定過期時間為三天 (259,200 秒) 的密碼策略項目。此密碼策略的 pwdMustChange(5dsat) 也會設為 TRUE,表示使用者第一次連結時必須變更密碼。


    $ cat firstLogin.ldif
    dn: cn=First Login,dc=example,dc=com
    objectClass: top
    objectClass: LDAPsubentry
    objectClass: pwdPolicy
    objectClass: sunPwdPolicy
    cn: First Login
    passwordStorageScheme: SSHA
    pwdAttribute: userPassword
    pwdInHistory: 0
    pwdExpireWarning: 86400
    pwdLockout: TRUE
    pwdMinLength: 6
    pwdMaxFailure: 3
    pwdMaxAge: 259200
    pwdFailureCountInterval: 600
    pwdAllowUserChange: TRUE
    pwdLockoutDuration: 3600
    pwdMinAge: 0
    pwdCheckQuality: 2
    pwdMustChange: TRUE
    
    $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f firstLogin.ldif
    Enter bind password: 
    adding new entry cn=First Login,dc=example,dc=com
    
    $
  2. 建立包含所有新建立帳號的角色。

    建立此角色會設定一些區分新建立的帳號與已建立的帳號之方式。

    1. 將新帳號定義為 pwdReset(5dsat) 屬性設為 TRUE 的帳號。

      若是密碼管理員等其他使用者變更使用者密碼時,pwdReset 會設為 TRUE

    2. 建立識別新帳號的角色。

      例如,下列指令會建立已重設密碼的帳號角色。


      $ cat newRole.ldif 
      dn: cn=First Login Role,ou=people,dc=example,dc=com
      objectclass: top
      objectclass: LDAPsubentry
      objectclass: nsRoleDefinition
      objectclass: nsComplexRoleDefinition
      objectclass: nsFilteredRoleDefinition
      cn: First Login Role
      nsRoleFilter: (pwdReset=TRUE)
      description: Role to assign password policy for new and reset accounts
      
      $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f newRole.ldif
      Enter bind password: 
      adding new entry cn=First Login Role,ou=people,dc=example,dc=com
      
      $ 
  3. 使用服務類別指定新建立帳號的密碼策略。


    $ cat newCoS.ldif 
    dn: cn=First Login Template,dc=example,dc=com
    objectClass: top
    objectClass: nsContainer
    
    dn: cn="cn=First Login Role,ou=people,dc=example,dc=com",
     cn=First Login Template,dc=example,dc=com
    objectClass: top
    objectClass: extensibleObject
    objectClass: LDAPSubEntry
    objectClass: CoSTemplate
    cosPriority: 1
    pwdPolicySubentry: cn=First Login,dc=example,dc=com
    
    dn: cn=First Login CoS,dc=example,dc=com
    objectClass: top
    objectClass: LDAPSubEntry
    objectClass: CoSSuperDefinition
    objectClass: CoSClassicDefinition
    cosTemplateDN: cn=First Login Template,dc=example,dc=com
    cosSpecifier: nsRole
    cosAttribute: pwdPolicySubentry operational
    
    $ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -f newCoS.ldif
    Enter bind password: 
    adding new entry cn=First Login Template,dc=example,dc=com
    
    adding new entry cn="cn=First Login Role,ou=people,dc=example,dc=com",
     cn=First Login Template,dc=example,dc=com
    
    adding new entry cn=First Login CoS,dc=example,dc=com
    
    $

範例 7–1 檢查密碼策略指定

增加符合已增加的角色之新使用者。增加使用者以驗證新使用者遵循新密碼策略,而現有使用者則不用。


$ cat quentin.ldif
dn: uid=qcubbins,ou=People,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: qcubbins
givenName: Quentin
sn: Cubbins
cn: Quentin Cubbins
mail: quentin.cubbins@example.com
userPassword: ch4ngeM3!
description: New account

$ ldapmodify -a -D uid=kvaughan,ou=people,dc=example,dc=com -w - -f quentin.ldif
Enter bind password: 
adding new entry uid=qcubbins,ou=People,dc=example,dc=com

$ ldapsearch -D uid=kvaughan,ou=people,dc=example,dc=com -w - \
-b dc=example,dc=com uid=qcubbins nsrole pwdPolicySubentry
Enter bind password:
version: 1
dn: uid=qcubbins,ou=People,dc=example,dc=com
nsrole: cn=first login role,ou=people,dc=example,dc=com
pwdPolicySubentry: cn=First Login,dc=example,dc=com
$ ldapsearch -b dc=example,dc=com uid=bjensen nsrole pwdPolicySubentry
version: 1
dn: uid=bjensen, ou=People, dc=example,dc=com
$ 

請注意,Barbara Jensen 的現有帳號由預設密碼策略所決定。但是,Quentin Cubbins 的新帳號則是由您定義的密碼策略所決定。


pwdSafeModifyTRUE 時從指令行修改密碼

當使用者密碼策略的 pwdSafeModify 設為 TRUE 時,必須提供舊密碼,才能以新密碼變更密碼。預設密碼策略的指令 dsconf set-server-prop pwd-safe-modify-enabled:on 有相同效果。

您可以使用 ldappasswd(1) 指令變更密碼。此指令可支援安全密碼修改。此指令執行 RFC 3062「LDAP Password Modify Extended Operation

您可以使用 ldapmodify(1) 指令變更密碼。傳遞給案例中 ldapmodify 指令的 LDIF 應如下所示:

dn: DN of user whose password you are changing
changetype: modify
delete: userPassword
userPassword: old password
-
add: userPassword
userPassword: new password

您也可以使用 LDAP 密碼修改延伸的作業。設定延伸作業的支援說明於使用密碼修改延伸作業重設密碼中。

重設過期的密碼

當密碼策略強制執行密碼過期時,部分使用者將無法及時變更密碼。本節顯示如何變更過期的密碼。


備註 –

目錄伺服器會在每次項目上的密碼有所修改時,更新作業屬性 pwdChangedTime(5dsat)。因此,若要啟用密碼過期,已超過期限的使用者密碼將在您啟用密碼過期時立即過期。若您覺得此運作方式不合用,請使用警告與寬限登入。


本節包含使用密碼修改延伸作業以重設密碼,以及在密碼過期時允許寬限認證的程序。

本節所述的機制旨在供管理員使用,或供處理實際使用者與目錄互動的應用程式使用。您通常會信任應用程式會確認一般使用者使用機制的方式實際上與您所要的方式相同。

Procedure使用密碼修改延伸作業重設密碼

使用者帳號會在密碼過期時鎖定。重設密碼時會解除鎖定帳號。管理員等其他使用者可以重設密碼。重設密碼之後,目錄伺服器會解除鎖定使用者帳號。目錄伺服器支援 RFC 3062「LDAP Password Modify Extended Operation」。延伸作業可讓您允許目錄伺服器管理員或目錄應用程式,透過密碼重設以解除鎖定帳號。

如本程序中所示,允許使用密碼修改延伸作業時請小心。請將存取權僅授予所信任的管理員與應用程式。請勿以純文字格式在網路上傳遞密碼。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 授予使用者密碼管理員或密碼管理應用程式的存取權。

  2. 允許密碼管理員存取並使用密碼修改延伸作業。

    下列指令設定 ACI 允許 Password Managers 角色成員在 SSL 連線上使用密碼修改延伸作業:


    $ cat exop.ldif
    dn: oid=1.3.6.1.4.1.4203.1.11.1,cn=features,cn=config
    objectClass: top
    objectClass: directoryServerFeature
    oid: 1.3.6.1.4.1.4203.1.11.1
    cn: Password Modify Extended Operation
    aci: (targetattr != "aci")(version 3.0;
     acl "Password Modify Extended Operation
     "; allow( read, search, compare, proxy ) (roledn = "
     ldap:///cn=Password Managers,dc=example,dc=com" and authmethod = "SSL");)
    
    $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f exop.ldif
    Enter bind password: 
    adding new entry oid=1.3.6.1.4.1.4203.1.11.1,cn=features,cn=config
    
    $

    cn=features,cn=config 下的項目可讓您管理對於使用密碼修改延伸作業的存取權。

  3. 讓密碼管理員重設使用者密碼。

    此步驟會解除鎖定使用者帳號,且可以使用 ldappasswd(1) 指令完成。

  4. (可選擇) 如果使用者必須變更密碼,請讓密碼管理員通知使用者。

    如果決定使用者項目的密碼策略包含 pwdMustChange: TRUE,使用者必須在重設密碼之後變更密碼。

Procedure密碼過期時允許寬限認證

本程序說明如何提供使用者寬限認證,讓使用者可以變更過期的密碼。

寬限認證會由處理密碼策略請求與回應控制的應用程式所管理。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 請確定使用者具有使用密碼策略請求與回應控制的應用程式之存取權。

    該應用程式應確保使用者可適當地處理寬限認證。

  2. 允許應用程式使用密碼策略控制。

    下列指令設定 ACI 可允許 Password Managers 角色成員使用密碼策略控制:


    $ cat ctrl.ldif
    dn: oid=1.3.6.1.4.1.42.2.27.8.5.1,cn=features,cn=config
    objectClass: top
    objectClass: directoryServerFeature
    oid: 1.3.6.1.4.1.42.2.27.8.5.1
    cn: Password Policy Controls
    aci: (targetattr != "aci")(version 3.0; acl "Password Policy Controls
     "; allow( read, search, compare, proxy ) roledn = "
     ldap:///cn=Password Managers,dc=example,dc=com";)
    
    $ ldapmodify -a -D cn=admin,cn=Administrators,cn=config -w - -f ctrl.ldif
    Enter bind password: 
    adding new entry oid=1.3.6.1.4.1.42.2.27.8.5.1,cn=features,cn=config
    
    $

    cn=features,cn=config 下的項目之唯一目的,是讓您管理使用密碼策略請求與回應控制的作業之存取權。

  3. 將密碼策略中的 pwdGraceAuthNLimit 設為密碼過期後可允許的認證數目。

  4. 請確定應用程式會引導一般使用者在寬限認證無效之前,及時變更過期的密碼。

手動鎖定帳號

目錄伺服器可讓您配置密碼策略,在達到指定的失敗連結嘗試次數時,強制封鎖帳號。如需詳細資訊,請參閱帳號封鎖策略。本節包含目錄管理員可以使用的手動帳號鎖定與啟用工具。

目錄管理員無須使用封鎖持續時間計時器,便可管理帳號封鎖。鎖定的帳號會在密碼手動重設之前維持在鎖定狀態。目錄管理員也可以無限地停用部分帳號。

本節顯示如何檢查帳號狀態、停用帳號以及重新啟用帳號。

Procedure檢查帳號狀態

如此處所示檢查帳號狀態。


備註 –

您必須以目錄管理員身份連結。


無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    使用 ns-accountstatus 指令檢查帳號或角色的狀態。

    下列指令會檢查 Barbara Jensen 的帳號狀態:


    $ ns-accountstatus -D "cn=Directory Manager" -j pwd.txt \
     -I uid=bjensen,ou=people,dc=example,dc=com
    uid=bjensen,ou=people,dc=example,dc=com activated.
    $

    如需詳細資訊,請參閱 ns-accountstatus(1M) 線上手冊。

Procedure停用帳號

如此處所示停用帳號或角色。


備註 –

您必須以目錄管理員身份連結。


無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    使用 ns-inactivate 指令停用帳號或角色。

    下列指令會停用 Barbara Jensen 的帳號:


    $ ns-inactivate -D "cn=Directory Manager" -j pwd.txt \
    -I uid=bjensen,ou=people,dc=example,dc=com
    uid=bjensen,ou=people,dc=example,dc=com inactivated.
    $

    如需詳細資訊,請參閱 ns-inactivate(1M) 線上手冊。

Procedure重新啟用帳號

如此處所示解除鎖定帳號或角色。


備註 –

您必須以目錄管理員身份連結。


無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    使用 ns-activate 指令重新啟用帳號或角色。

    下列指令會重新啟用 Barbara Jensen 的帳號:


    $ ns-activate -D "cn=Directory Manager" -j pwd.txt \
    -I uid=bjensen,ou=people,dc=example,dc=com
    uid=bjensen,ou=people,dc=example,dc=com activated.
    $

    如需詳細資訊,請參閱 ns-activate(1M) 線上手冊。

第 8 章 目錄伺服器備份與復原

您的目錄伺服器所管理的資料經常需大量匯入。Directory Server Enterprise Edition 提供了可匯入及匯出整個尾碼的工具。它也提供可同時備份所有尾碼以及從備份復原所有資料的工具。

開始進行任何備份或復原作業前,請確實設計適合本身情況所需的備份與復原策略。如需有關各種備份選項、注意事項以及規劃備份與復原策略之指示的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Designing Backup and Restore Policies」

本章包含下列主題:

二進位備份

本節說明如何執行目錄資料的二進位備份。除了本節所提到的二進位備份程序以外,您也可以製作二進位副本,用以初始化複寫拓樸中的尾碼。請參閱使用二進位副本初始化複寫的尾碼

僅備份目錄資料

二進位資料備份可儲存目錄資料的副本,以供您在資料庫檔案萬一受損或遭刪除時使用。此作業不會備份配置資料。若要備份整個目錄伺服器以供嚴重損壞回復之用,請參閱嚴重損壞回復


注意 – 注意 –

切勿在備份作業期間停止伺服器。

執行備份的頻率必須高於清除延遲。由屬性 nsDS5ReplicaPurgeDelay 所指定的清除延遲,係指對變更記錄執行內部清除作業之前所歷經的一段時間 (以秒為單位)。預設清除延遲為 604800 秒 (1 週)。變更記錄會保存更新記錄,可能已複寫、也可能未複寫。

若您執行備份的頻率低於清除延遲,變更記錄可能會在備份之前即已清除。因此,當您使用備份復原資料時,即會遺失變更。


本節所述之一切備份程序,預設會將伺服器檔案的副本儲存在相同的主機上。接著,您應將備份複製並儲存到不同的機器或檔案系統上,以確保更高的安全性。

Procedure備份目錄資料

您必須停止目錄伺服器,方可執行 dsadm backup 指令。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    備份目錄資料。


    $ dsadm backup instance-path archive-dir
    

    例如:


    $ dsadm backup /local/ds /local/tmp/20051205

    備註 –

    您可以在伺服器執行時,使用 dsconf backup 指令備份目錄資料。但目錄資料若在備份執行時有所變更,即難以正確回復。若要避免在使用 dsconf backup 時出現此問題,請設定複寫參照,或將伺服器設為唯讀。


    如需有關 dsadmdsconf 指令的更多資訊,請參閱 dsadm(1M)dsconf(1M) 線上手冊。

Procedure備份 dse.ldif 檔案

復原伺服器時,dse.ldif 配置檔案必須包含與伺服器備份時相同的配置資訊。

    備份您的 dse.ldif 配置檔案。


    $ cp instance-path/config/dse.ldif archive-dir
    

    當您執行下列動作時,目錄伺服器會自動備份目錄 instance-path/config 中的 dse.ldif 配置檔案。

    • 當您啟動目錄伺服器時,即會在名為 dse.ldif.startOK 的檔案中建立 dse.ldif 檔案的備份。

    • 當您修改 cn=config 分支時,檔案會先備份到 config 目錄中的 dse.ldif.bak 檔案,接著伺服器才會將修改寫入 dse.ldif 檔案中。

備份檔案系統

此程序會使用凍結模式功能。凍結模式可讓您停止磁碟的資料庫更新,因此執行檔案系統快照作業時將更加安全。您可以額外採用凍結模式,使備份更形可靠。

進行檔案系統備份時,絕不能讓伺服器將使用者資料寫入磁碟中。若您確定特定時段內將不再有任何更新,請於此時段內進行備份。若您無法確定未來是否會有更新,請先將伺服器設為凍結模式,再進行備份。

開啟凍結模式後,所有配置的資料庫均會離線。任何進行中的內部作業,都會收到資料庫即將離線的通知。進行中的 LDAP 作業會先行完成,同時資料庫環境會進行清除。包括搜尋使用者資料等後續的內送作業,在凍結模式設為關閉之前都將遭拒絕。但在凍結模式開啟期間,您仍可搜尋配置參數。

在單一伺服器拓樸中,於凍結模式開啟時接收的作業,會導致傳回 LDAP 錯誤。所記錄的錯誤訊息即為離線資料庫的標準錯誤。在複寫拓樸中,會傳回參照。若要讓凍結模式正確運作,即不應在資料庫上執行任何其他作業。

Procedure備份檔案系統

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. (可選擇) 將伺服器設為凍結模式。


    $ dsconf set-server-prop -h host -p port read-write-mode:frozen
  2. 使用適合您檔案系統類型的工具,進行檔案系統的備份。

  3. 若您的伺服器已在凍結模式中,請重新將伺服器設為讀寫模式。


    $ dsconf set-server-prop -h host -p port read-write-mode:read-write

    若您的伺服器收到來自其他伺服器的複寫更新,這些更新將在凍結模式關閉後立即啟動。

備份至 LDIF

備份至 LDIF 可讓您將目錄資料備份至格式化的 LDIF 檔案中。

匯出至 LDIF

您可以利用 LDIF 所匯出的尾碼內容,備份目錄資料。匯出資料對執行下列作業大有助益:

匯出作業並不會匯出配置資訊 (cn=config)。


注意 – 注意 –

請勿於匯出作業進行時停止伺服器。


Procedure將尾碼匯出至 LDIF

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用下列其中一項指令,將尾碼匯出至 LDIF 檔案:

    • 若您的伺服器是本機伺服器,並且已停止,請鍵入:


      $ dsadm export instance-path suffix-DN LDIF-file
      
    • 若您的伺服器位於遠端且正在執行中,請鍵入:


      $ dsconf export -h host -p port suffix-DN LDIF-file
      

    下列範例將使用 dsconf export,將兩個尾碼匯出至同一個 LDIF 檔案:


    $ dsconf export -h host1 -p 1389 ou=people,dc=example,dc=com \
     ou=contractors,dc=example,dc=com /local/ds/ldif/export123.ldif

    dsadm exportdsconf export 指令亦可與 --no-repl 選項搭配使用,以指定將不匯出任何複寫資訊。依預設,複寫的尾碼會與複寫資訊一併匯出至 LDIF 檔案。產生的 LDIF 檔案會包含複寫機制所使用的屬性子類型。此 LDIF 檔案可接著匯入用戶伺服器以初始化用戶複本,如初始化複本中所述。

    如需有關這些指令的更多資訊,請參閱 dsadm(1M)dsconf(1M) 線上手冊。

二進位復原

下列程序將說明如何復原您目錄中的尾碼。您的伺服器必須使用僅備份目錄資料中所述之程序完成備份。復原複寫協議中所載的尾碼之前,請先參閱復原已複寫的尾碼


注意 – 注意 –

請勿於復原作業期間停止伺服器。由於復原伺服器會覆寫所有現有的資料庫檔案,因此備份之後的一切資料修改都會遺失。


Procedure復原伺服器

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    請使用下列其中一項指令復原您的伺服器:

    • 若您的伺服器是本機伺服器,並且已停止,請鍵入:


      $ dsadm restore instance-path archive-dir
      

      例如,若要從備份目錄中復原備份,請鍵入:


      $ dsadm restore /local/ds/ local/ds/bak/2006_07_01_11_34_00
    • 若您的伺服器位於遠端且正在執行中,請鍵入:


      $ dsconf restore -h host -p port archive-dir
      

      例如,若要從備份目錄中復原備份:


      $ dsconf restore -h host1 -p 1389 /local/ds/bak/2006_07_01_11_34_00 

    如需有關這些指令的更多資訊,請參閱 dsadm(1M)dsconf(1M) 線上手冊。

復原 dse.ldif 配置檔案

目錄伺服器會在下列目錄中建立 dse.ldif 檔案的兩個備份副本:


instance-path/config

dse.ldif.startOK 檔案會在伺服器啟動時,記錄 dse.ldif 檔案的副本。dse.ldif.bak 檔案含有 dse.ldif 檔案最新變更的備份。將含有最新變更的檔案複製到您的目錄中。

Procedure復原 dse.ldif 配置檔案

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 停止伺服器。


    $ dsadm stop instance-path
    
  2. 切換至含有配置檔案的目錄。


    $ cd instance-path/config
  3. 以已知有效的備份配置檔案覆寫 dse.ldif 檔案,例如:


    $ cp dse.ldif.startOK dse.ldif
  4. 以下列指令啟動伺服器:


    $ dsadm start instance-path
    

從 LDIF 檔案匯入資料

您可以下列方式將資料匯入目錄伺服器尾碼:

下表說明初始化尾碼與大量增加、修改及刪除項目等作業間的差異。

表 8–1 初始化尾碼與大量匯入資料的比較

比較網域 

初始化尾碼 

大量增加、修改及刪除項目 

覆寫內容 

覆寫 

內容 

不覆寫內容 

LDAP 作業 

僅增加 

增加、修改、刪除 

效能 

快速 

較緩慢 

回應伺服器失敗 

不可分割 (失敗後會遺失所有變更) 

最大效率 (保留失敗前所做的所有變更) 

LDIF 檔案位置 

用戶端或伺服器本機 

於用戶端機器 

匯入配置資訊 (cn=config)

匯入配置資訊 

不匯入配置資訊 

指令 

若伺服器為本機伺服器,並且已停止: 

dsadm import

若伺服器位於遠端,且正在執行中: 

dsconf import

ldapmodify -B

初始化尾碼

初始化尾碼後,會將尾碼中的現有資料覆寫為僅含有增加項目之 LDIF 檔案的內容。

您必須認證為「目錄管理員」或「管理員」,方可初始化尾碼。

伺服器執行時,只有「目錄管理員」與「管理員」可匯入含有根項目的 LDIF 檔案。基於安全性考量,只有這些使用者可存取尾碼的根項目,例如 dc=example,dc=com

復原複寫協議中所載的尾碼之前,請先參閱復原已複寫的尾碼

Procedure初始化尾碼


備註 –

您所匯入的所有 LDIF 檔案均須使用 UTF-8 字元集編碼。

初始化尾碼時,LDIF 檔案必須含有對應尾碼的根項目與所有目錄樹狀結構節點。


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用下列其中一項指令,可從 LDIF 檔案初始化尾碼,亦即將資料庫內容匯入 LDIF 檔案中。


    注意 – 注意 –

    這些指令可覆寫您尾碼中的資料。


    • 若您的伺服器是本機伺服器,並且已停止,請鍵入:


      $ dsadm import instance-path LDIF-file suffix-DN
      

      下列範例將使用 dsadm import 指令,將兩個 LDIF 檔案匯入單一尾碼中:


      $ dsadm import /local/ds /local/file/example/demo1.ldif \
       /local/file/example/demo2.ldif dc=example,dc=com
    • 若您的伺服器位於遠端且正在執行中,請鍵入:


      $ dsconf import -h host -p port LDIF-file suffix-DN
      

      下列範例使用 dsconf import 匯入 LDIF 檔案。執行此指令時不需具備超級使用者權限,但必須將您認證為具有超級使用者權限的使用者,如「目錄管理員」。


      $ dsconf import -h host1 -p 1389 /local/file/example/demo1.ldif \
       ou=People,dc=example,dc=com

    備註 –

    若您同時對多個尾碼執行 dsconf import 和/或 dsconf reindex 指令,作業事件記錄將因此增加,而可能對效能造成負面影響。


    如需有關這些指令的更多資訊,請參閱 dsadm(1M)dsconf(1M) 線上手冊。

大量增加、修改及刪除項目

執行 ldapmodify 作業時,您可以大量增加、修改或刪除項目。這些項目指定於含有修改或刪除現有項目之更新陳述式的 LDIF 檔案中。此作業不會清除已存在的項目。

您的目錄伺服器所管理的任何尾碼均可為變更項目的目標。與任何其他增加項目的作業相同,伺服器也會在所有的新項目匯入時為其編製索引。

ldapmodify 指令會透過 LDAP 匯入 LDIF 檔案,並執行檔案中包含的所有作業。使用此指令可讓您同時修改所有目錄尾碼中的資料。

復原複寫協議中所載的尾碼之前,請先參閱復原已複寫的尾碼

Procedure大量增加、修改及刪除項目


備註 –

您所匯入的所有 LDIF 檔案均須使用 UTF-8 字元集編碼。

匯入 LDIF 檔案時,父系項目必須位於目錄中,或先從檔案中增加。


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    從 LDIF 檔案大量增加、修改或刪除。


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -B baseDN -f LDIF-file
    

    下列範例將使用 ldapmodify 指令執行匯入。執行此指令時不需具備超級使用者權限,但必須將您認證為具有超級使用者權限的使用者,如 cn=Directory Managercn=admin,cn=Administrators,cn=config。最後一個參數指定所匯入的 LDIF 檔案名稱。


    $ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - \
     -B dc=example,dc=com -f /local/ds/ldif/demo.ldif

復原已複寫的尾碼

復原在供應者伺服器與用戶伺服器之間複寫的尾碼之前,有些特殊注意事項必須留意。請儘可能透過複寫機制更新尾碼,而不要從備份進行復原。

復原供應者或集散中心實例時,伺服器配置的內容必須與製作備份時相同。為確實做到這一點,請在復原目錄伺服器資料前,先復原 dse.ldif 檔案。請參閱復原 dse.ldif 配置檔案

本節說明復原複本的方法與時機,以及如何確定此複本與其他複本在作業後仍保持同步。若要初始化複本,請參閱初始化複本

若您具有大型複寫尾碼,而想要增加許多項目並確定複寫更新皆正確增加,請參閱遞增多個項目到大型複寫的尾碼

本節包含下列項目的相關資訊:

復原單一主伺服器方案中的供應者

屬於單一主伺服器供應者的尾碼,含有整個複寫拓樸的授權資料。因此,復原此尾碼即等於重新初始化整個拓樸中的所有資料。只有在需要從所要復原的備份內容重新初始化所有資料時,始應復原單一主伺服器。

若單一主伺服器資料因錯誤而無法回復,請考慮使用其中一個用戶的資料,因為其中可能包含比備份還新的更新。在此情況下,您必須將用戶複本的資料匯出至 LDIF 檔案,再從 LDIF 檔案重新初始化主伺服器。

無論您選擇復原備份還是在主伺服器複本上匯入 LDIF 檔案,接下來都必須重新初始化由此複本接收更新的所有集散中心與用戶複本。供應者伺服器的記錄檔會記錄一則訊息,提醒您必須重新初始化用戶。

復原多重主伺服器方案中的供應者

在多重主伺服器複寫中,其他主伺服器均各含有複寫資料的授權副本。您無法復原舊的備份,因為它目前的複本內容可能已過期。請儘可能以複寫機制將主伺服器更新為其他主伺服器的內容。

若無法這麼做,請以下列其中一種方式復原多重主伺服器複本:

無論您以何種方式復原或重新初始化,主伺服器複本在初始化後仍會處於唯讀模式。此運作方式可讓複本與其他主伺服器進行同步化,以便您後續允許寫入作業,如復原多重主伺服器方案中的主伺服器中所述。

在復原或重新初始化的主伺服器上允許寫入作業前先彙整所有複本的好處在於,所有集散中心或用戶伺服器都將不需再進行重新初始化。

復原集散中心

本節僅適用於複寫機制無法自動更新集散中心複本的情況。資料庫檔案受損或複寫作業中斷過久,都屬於這種情況。在此類情況下,您必須以下列其中一種方式復原或重新初始化集散中心複本:


備註 –

無論您以何種方式復原或重新初始化集散中心複本,您接下來都必須重新初始化此集散中心的所有用戶,包括任何其他層級的集散中心在內。


復原專屬用戶

本節僅適用於複寫機制無法自動更新專屬用戶複本的情況。資料庫檔案受損或複寫作業中斷過久,都屬於這種情況。在此類情況下,您必須以下列其中一種方式復原或重新初始化用戶:

復原多重主伺服器方案中的主伺服器

使用多重主伺服器複寫時,其他主伺服器可能會在指定主伺服器復原期間處理變更作業。因此,當復原完成時,新的主伺服器必須再行接收復原資料中未納入的最新更新。由於復原主伺服器可能需要很長的時間,在此期間擱置的更新也可能因此為數眾多。

為彙整這些擱置更新,剛復原的主伺服器將自動設為唯讀模式,以利復原後的用戶端作業執行。但只有在透過指令行從 LDIF 檔案匯入資料或使用備份執行二進位複本,以進行主伺服器的復原時,才會設定為此。

因此,在復原之後,多重主伺服器配置中的主伺服器會處理複寫更新並允許讀取作業,但也會傳回所有來自用戶端之寫入作業的參照。

若要在允許更新前先驗證新的主伺服器是否已完全與其他主伺服器同步化,請手動啟用初始化之主伺服器的更新。


備註 –

由於主伺服器複本可能因其新運作方式而會傳送參照之故,需執行寫入作業的用戶端可能會達到其配置的躍點限制。您可以增加用戶端的躍點限制配置,使其能夠存取可用的主伺服器。若所有主伺服器複本均已初始化或重新初始化,則所有寫入作業都將失敗,因為沒有複本會接受用戶端更新。

無論如何,您都應該密切監視已初始化的主伺服器,並適當設定參照屬性,以儘可能提升伺服器的回應能力。


Procedure開始透過指令行接受更新

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

您可以在程序檔中使用下列指令,將初始化多重主伺服器複本的程序自動化。

  1. 使用 insync 工具,可確保複本已與所有其他的主伺服器彙整。

    若所有伺服器上各修改間的延遲為零,或複本從未有變更需複寫 (延遲為 -1),表示複本已同步化。如需更多資訊,請參閱 insync(1) 線上手冊。

  2. 開始接受更新。


    $ dsconf set-suffix-prop -h host -p port suffix-DN repl-accept-client-update-enabled:on

    此指令會自動將伺服器設為讀寫模式。

嚴重損壞回復

若要備份或復原您的目錄伺服器以供嚴重損壞回復之用,請使用下列程序。

Procedure製作嚴重損壞回復所需的備份

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 使用 dsadn backupdsconf backup 指令備份您的資料庫檔案。

    使用二進位備份中的程序,並將備份檔案儲存於安全的位置。

  2. 將配置目錄 instance-path/config 複製到安全的位置。

  3. 將模式目錄 instance-path/config/schema 複製到安全的位置。

  4. 將別名目錄 instance-path/alias 複製到安全的位置。

Procedure復原嚴重損壞回復

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 安裝與先前主機上相同版本的目錄伺服器。

  2. 使用 dsadm create 指令建立伺服器實例。

    使用在備份時所使用的相同實例。請參閱建立尾碼

  3. 復原配置目錄 instance-path/config

  4. 復原模式目錄 instance-path/config/schema

  5. 復原別名目錄 instance-path/alias

  6. 確定復原的伺服器所使用的配置正確無誤。

    例如,目錄結構與外掛程式配置均須與備份伺服器上的相同。

  7. 使用 dsconf restore 指令復原您的資料庫檔案。

    使用二進位復原中的程序。

第 9 章 目錄伺服器群組、角色與 CoS

管理代表使用者的項目除了其資料在目錄中採階層式資料結構之外,通常還需要建立共用屬性值的群組。目錄伺服器透過群組、角色與服務類別 (CoS) 提供進階的項目管理功能。

本章包含下列主題:

關於群組、角色與服務類別

群組、角色與 CoS 定義如下:

目錄伺服器提供根據角色、群組與 CoS 運算屬性值執行搜尋的能力。任何作業中使用的篩選字串可以包含 nsRole 屬性或任何 CoS 定義所產生的屬性。篩選字串也可用以在此屬性值上執行任何比較作業。但是,CoS 運算屬性無法編製索引。因此,與 CoS 產生的屬性相關之任何搜尋,皆可能會消耗大量的時間與記憶體資源。

若要充分利用角色、群組與服務類別所提供的功能,請在目錄部署的規劃階段決定目錄拓樸。如需這些功能及其如何簡化拓樸的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Grouping Directory Entries and Managing Attributes」

如需詳細瞭解角色與群組的運作方式,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 8 章「Directory Server Groups and Roles」。如需 CoS 的詳細說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 9 章「Directory Server Class of Service」

管理群組

群組可讓您產生項目關聯以便於管理。例如,使用群組可讓定義存取控制指令 (ACI) 更加容易。群組定義是特殊的項目,可以在靜態清單中命名這些項目的成員,或提供定義一組動態項目的篩選。

不論群組定義項目的位置為何,群組的可能成員範圍為整個目錄。為了簡化管理,通常會在單一位置儲存所有群組定義項目,該位置通常位於根尾碼下的 ou=Groups

群組可分為靜態群組與動態群組兩種類型。

Procedure建立新的靜態群組

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 使用 ldapmodify 指令建立新的靜態群組。

    例如,若要建立稱為 System Administrators 的新靜態群組並增加一些成員,請使用此指令:


    $ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=System Administrators, ou=Groups, dc=example,dc=com
    cn: System Administrators
    objectclass: top
    objectclass: groupOfNames
    ou: Groups
    member: uid=kvaughan, ou=People, dc=example,dc=com
    member: uid=rdaugherty, ou=People, dc=example,dc=com
    member: uid=hmiller, ou=People, dc=example,dc=com
  2. 檢查是否已建立新群組以及是否已增加成員。

    例如,若要檢查 Kirsten Vaughan 是否在新的 System Administrators 群組中,請鍵入:


    $ ldapsearch -b "dc=example,dc=com" uid=kvaughan isMemberOf
    uid=kvaughan,ou=People,dc=example,dc=com
    isMemberOf: cn=System Administrators, ou=Groups, dc=example,dc=com 
    isMemberOf: cn=HR Managers,ou=groups,dc=example,dc=com

Procedure建立新的動態群組

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    使用 ldapmodify 指令建立新的動態群組。

    例如,若要建立稱為 Database Administrators 的新動態群組,並增加姓氏為 Jensen 的成員,可使用此指令:


    $ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=Database Administrators, ou=Groups, dc=example,dc=com
    cn: Database  Administrators
    objectclass: top
    objectclass: groupOfUrls
    ou: Groups
    memberURL: ldap:///dc=example,dc=com??sub?(sn=Jensen)

管理角色

角色是設計供應用程式的使用更加有效且更容易的替代群組機制。雖然角色以類似群組的方式定義與管理,但是每個成員項目所產生的角色屬性會自動表示項目的角色。例如,應用程式可以讀取項目的角色,而不是選取群組並瀏覽成員清單。

角色的範圍預設會限制在所定義範圍的子樹狀結構內。但是,您可以延伸巢式角色的範圍。您可以允許範圍延伸到位於其他子樹狀結構的巢式角色以及包含目錄中任意位置的成員。如需詳細資訊,請參閱延伸角色的範圍巢式角色定義的範例

本節說明如何安全地使用角色,以及如何從指令行管理角色。

安全地使用角色

若要安全地使用角色,必須將存取控制指令 (ACI) 設為保護適當的屬性。例如,使用者 A 擁有管理角色 MR。管理角色相當於靜態群組,經由將 nsRoleDN 屬性增加至項目,明確地指定角色給每個成員項目。已透過指令行使用帳號停用鎖定 MR 角色。亦即,由於該使用者的 nsAccountLock 屬性經運算為 true,因此使用者 A 無法連結至伺服器。但是,假設使用者已連結,並知悉其已因 MR 角色而處於鎖定狀態。如果不存在 ACI 以防止使用者具備寫入存取 nsRoleDN 屬性,使用者可以從其本身的項目移除 nsRoleDN 屬性,並解除鎖定。

若要避免使用者移除 nsRoleDN 屬性,必須套用 ACI。針對篩選的角色,您必須保護能避免使用者修改屬性以放棄篩選的角色之篩選部分。應禁止使用者增加、刪除或修改篩選的角色所用之屬性。同理,如果已運算篩選的屬性值,可以修改篩選的屬性值之所有屬性皆須受到保護。由於巢式角色包含篩選與管理的角色,應針對巢式角色中所含的各角色考量以上幾點。

如需設定安全性 ACI 的詳細指示,請參閱第 6 章, 目錄伺服器存取控制

從指令行管理角色

角色會在 Directory Administrator 可以透過指令行公用程式存取的項目中定義。建立角色之後,可以依下列方式指定成員給角色:

所有角色定義繼承自 LDAPsubentrynsRoleDefinition 物件類別。下列範例顯示各種角色類型特定的其他物件類別與相關屬性。

管理角色定義的範例

若要建立所有行銷人員的角色,請使用下列 ldapmodify 指令:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsSimpleRoleDefinition
objectclass: nsManagedRoleDefinition
cn: Marketing
description: managed role for marketing staff

請注意,nsManagedRoleDefinition 物件類別繼承自 LDAPsubentrynsRoleDefinitionnsSimpleRoleDefinition 物件類別。

依下列方式更新名為 Bob 的行銷人員項目,以指定角色:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Bob Arnold,ou=marketing,ou=People,dc=example,dc=com
changetype: modify
add: nsRoleDN
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com

nsRoleDN 屬性表示項目為管理角色的成員。管理的角色由角色定義的 DN 所識別。若要讓使用者修改自己的 nsRoleDN 屬性,但不想讓使用者增加或移除 nsManagedDisabledRole,請增加下列 ACI:


aci: (targetattr="nsRoleDN")(targattrfilters="add=nsRoleDN: 
(!(nsRoleDN=cn=AdministratorRole,dc=example,dc=com)), 
del=nsRoleDN:(!(nsRoleDN=cn=nsManagedDisabledRole,dc=example, dc=com)") 
(version3.0;aci "allow mod of nsRoleDN by self except for critical values"; 
allow(write) userdn="ldap:///self";)

篩選角色定義的範例

若要設定行銷經理的篩選角色,且假設所有經理皆有 isManager 屬性,請使用下列 ldapmodify 指令:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerFilter 
nsRoleFilter: (isManager=True)
Description: filtered role for sales managers

請注意 nsFilteredRoleDefinition 物件類別繼承自 LDAPsubentrynsRoleDefinition nsComplexRoleDefinition 物件類別。nsRoleFilter 屬性會指定尋找 ou=sales 機構中有下屬的所有員工之篩選器,例如:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=sales,ou=People,dc=example,dc=comcn: Carla Fuentes 
isManager: TRUE...
nsRole: cn=ManagerFilter,ou=sales,ou=People,
dc=example,dc=com

備註 –

篩選角色的篩選字串可以根據任何屬性,CoS 機制產生的運算屬性除外。


當篩選的角色成員為使用者項目時,您可以選擇限制成員增加或移除角色成員的能力。使用 ACI 保護篩選的屬性。

巢式角色定義的範例

位於巢式角色內的角色可使用 nsRoleDN 屬性加以指定。使用下列指令可建立包含上一個範例中所建立的行銷人員與行銷經理角色成員之角色:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=MarketingSales,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsNestedRoleDefinition
cn: MarketingSales
nsRoleDN: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
nsRoleScopeDN: ou=sales,ou=People,dc=example,dc=com

請注意,nsNestedRoleDefinition 物件類別繼承自 LDAPsubentrynsRoleDefinitionnsComplexRoleDefinition 物件類別。nsRoleDN 屬性包含行銷管理角色與行銷經理篩選角色的 DN。上一個範例中的兩個使用者 Bob 與 Carla 會是此新巢式角色的成員。

此篩選的範圍包含預設範圍 (篩選所在的子樹狀結構),以及任意 nsRoleScopeDN 屬性值以下的子樹狀結構。在此例中,ManagerFilter 位於 ou=sales,ou=People,dc=example,dc=com 子樹狀結構中。此子樹狀結構必須增加至範圍。

延伸角色的範圍

目錄伺服器提供允許角色的範圍延伸到角色定義項目以外的子樹狀結構之屬性。此單值屬性 nsRoleScopeDN 包含要增加至現有角色的範圍 DN。nsRoleScopeDN 屬性僅能增加至巢式角色。請參閱巢式角色定義的範例

Procedure延伸角色的範圍

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

nsRoleScopeDN 屬性可讓您延伸某個子樹狀結構中的角色範圍,以包含其他子樹狀結構的項目。例如,請想像 example.com 目錄樹狀結構中有兩個主要的子樹狀結構:o=eng,dc=example,dc=com (工程部門子樹狀結構) 與 o=sales,dc=example,dc=com (行銷部門子樹狀結構)。在工程部門子樹狀結構中,有某個使用者需要存取行銷部門子樹狀結構中的角色 (SalesAppManagedRole) 所管理之行銷部門應用程式。若要延伸角色範圍,請執行下列作業:

  1. 在工程部門子樹狀結構中建立使用者的角色。

    例如,建立角色 EngineerManagedRole。此範例使用管理的角色,不過也有可能是篩選的角色或巢式角色。

  2. 例如,在行銷部門子樹狀結構中建立巢式角色 SalesAppPlusEngNestedRole,以裝載新建立的 EngineerManagedRole 與初始 SalesAppManagedRole

  3. 使用要增加的工程部門子樹狀結構範圍 DN,將 nsRoleScopeDN 屬性增加至 SalesAppPlusEngNestedRole, 在此例中為 o=eng,dc=example,dc=com

    工程部門的使用者必須具備必要的權限,才能存取 SalesAppPlusEngNestedRole 角色,進而使用行銷部門的應用程式。此外還必須複寫整個角色範圍。


    備註 –

    對巢式角色延伸範圍的限制,表示之前是某一個網域中管理角色的管理員,僅有權使用已在另一個網域存在的角色。管理員無法在另一個網域中建立任意的角色。


服務類別

服務類別 (CoS) 機制產生運算屬性的方式,如同為用戶端應用程式擷取項目一般,因而簡化了項目管理並可降低儲存需求。CoS 機制允許在項目之間共用屬性,且如同群組與角色,CoS 依賴輔助程式項目。

如需有關如何在部署中使用 CoS 的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Managing Attributes With Class of Service」

如需 CoS 如何在目錄伺服器中執行的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 9 章「Directory Server Class of Service」


備註 –

任何搜尋作業皆可測試是否存在 CoS 產生的屬性或比較屬性的值。運算屬性的名稱可能會用在來自用戶端搜尋作業的任何篩選字串中,篩選角色中所用的內部篩選除外。


安全地使用 CoS

下列幾節說明每個 CoS 項目資料的讀取與寫入保護之一般原則。定義個別存取控制指令 (ACI) 的詳細程序如第 6 章, 目錄伺服器存取控制中所述。

保護 CoS 定義項目

雖然 CoS 定義項目不包含所產生屬性的值,但會提供尋找該值的資訊。讀取 CoS 定義項目可指出如何尋找包含該值的範本項目。寫入此項目會修改運算屬性的產生方式。

因此您應為 CoS 定義項目定義讀取與寫入 ACI。

保護 CoS 範本項目

CoS 範本項目包含產生的 CoS 屬性值。因此,範本中的 CoS 屬性至少必須受到 ACI 的讀取與更新保護。

保護 CoS 的目標項目

在 CoS 定義的範圍中,所有會為其產生 CoS 運算屬性的項目,皆會參與計算屬性值。

若是在目標項目中已存在 CoS 屬性,CoS 機制預設不會覆寫此值。若不想要此運作方式,請定義 CoS 會覆寫目標項目,或保護所有潛在目標項目中的 CoS 屬性。

間接與類別 CoS 也依賴於目標項目中的限定符號屬性。此屬性會指定要使用的範本項目 DN 或 RDN。您應使用 ACI 在 CoS 的整個範圍內保護此屬性,或在需要保護的個別目標項目上保護此屬性。

保護其他相依性

運算的 CoS 屬性可以根據其他產生的 CoS 屬性與角色進行定義。您必須瞭解並保護這些相依性,以確保運算的 CoS 屬性受到保護。

例如,目標項目中的 CoS 限定符號屬性可能是 nsRole。因此,角色定義必須也受到 ACI 保護。

計算運算屬性值的過程中所包含的任何屬性或項目,一般應會有 ACI 控制讀取與寫入存取。因此,應完善規劃或簡化複合相依性,以降低後續存取控制實作的複雜度。將其他運算屬性上的相依性降至最小,能改善目錄效能並減少維護作業。

從指令行管理 CoS

由於所有配置資訊與範本資料皆會儲存為目錄中的項目,因此您可以使用 LDAP 指令行工具配置並管理 CoS 定義。本節顯示如何從指令行建立 CoS 定義項目與 CoS 範本項目。

從指令行建立 CoS 定義項目

所有 CoS 定義項目皆有 LDAPsubentry 物件類別,且皆繼承自 cosSuperDefinition 物件類別。此外,每種 CoS 類型皆繼承自特定物件類別並包含對應的屬性。下表列出與各種 CoS 定義項目類型相關的物件類別與屬性。

表 9–1 CoS 定義項目中的物件類別與屬性

CoS 類型 

CoS 定義項目 

指標 CoS 

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosPointerDefinition

cosTemplateDN: DN

cosAttribute: attributeName override merge

間接 CoS 

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosIndirectDefinition

cosIndirectSpecifier: attributeName

cosAttribute: attributeName override merge

類別 CoS 

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosClassicDefinition

cosTemplateDN: DN

cosSpecifier: attributeName

cosAttribute: attributeName override merge

cosAttribute 一律為多值。各值會定義 CoS 機制所產生的一個屬性。

您可以使用 CoS 定義項目中的下列屬性。如需有關各屬性的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Man Page Reference」中的個別屬性。

表 9–2 CoS 定義項目屬性

屬性 

CoS 定義項目內的用途 

cosAttribute

attributeName override merge

定義要產生值的運算屬性名稱。此屬性為多值,每個值代表其值會從範本產生的屬性名稱。overridemerge 限定元指定在此表之後所述的特殊案例中,CoS 屬性值的運算方式。

attributeName 無法包含任何子類型。含子類型的屬性名稱會遭忽略,不過仍會處理 cosAttribute 的其他值。

cosIndirectSpecifier

attributeName

定義目標項目中的屬性名稱,間接 CoS 會使用其值識別範本項目。已命名的屬性稱為限定符號,必須包含每個目標項目中完整的 DN 字串。此屬性為單值,但是 attributeName 可以是多值,以定義多個範本。

cosSpecifier

attributeName

定義目標項目中的屬性名稱,類別 CoS 會使用其值識別範本項目。已命名的屬性稱為限定符號,且必須包含範本項目的 RDN 中可以找到的字串。此屬性為單值,但是 attributeName 可以是多值,以定義多個範本。

cosTemplateDN

DN

提供範本項目的完整 DN 給指標 CoS 定義,或提供範本項目的基底 DN 給類別 CoS。此屬性為單值。 

cosAttribute 屬性允許 CoS 屬性名稱之後有兩個限定元:override 限定元與 merge 限定元。

override 限定元說明 CoS 動態產生的屬性已實際存在於項目中時的運作方式。override 限定元可以是下列其中之一:

merge 限定元不存在或為 merge-schemes。此限定元允許運算的 CoS 屬性可為來自多個範本或多個 CoS 定義的多重值。如需更多資訊,請參閱多值 CoS 屬性

覆寫實際屬性值

您可能依下列方式建立包含 override 限定元的指標 CoS 定義項目:


dn: cn=pointerCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=exampleUS,cn=data
cosAttribute: postalCode override

此指標 CoS 定義項目表示項目與產生 postalCode 屬性值的範本項目 cn=exampleUS,cn=data 相關。override 限定元表示如果目標項目內存在 postalCode 屬性,則此值會取代屬性值。


備註 –

如果使用 operationaloverride 限定元定義 CoS 屬性,則無法在 CoS 範圍內任何項目中的屬性「實際」值上執行寫入作業。


多值 CoS 屬性

指定 merge-schemes 限定元時,產生的 CoS 屬性的多值情況有下列兩種:

這兩種情況可同時發生,並定義更多值。但是在所有情況下,重複的值僅會在產生的屬性中一次傳回。

如果沒有 merge-schemes 限定元,會使用範本項目的 cosPriority 屬性,為產生的屬性決定所有範本之間的單一值。此範例會在下一節中說明。

merge-schemes 限定元永遠不會合併在目標中以範本產生的值所定義之「實際」值。merge 限定元與 override 限定元無關。所有配對皆有可能,且可進行各配對的運作方式。此外,限定元可以在屬性名稱之後以任何順序指定。


備註 –

同一屬性有多個 CoS 定義時,所有定義皆必須有相同的 overridemerge 限定元。當 CoS 定義中有不同的成對之限定元時,會任意從所有定義選取其中一個組合。


CoS 屬性優先權

如果存在多重 CoS 定義或多值限定符號,但沒有 merge-schemes 限定元,目錄伺服器會使用優先權屬性選取定義運算屬性的單一值之單一範本。

cosPriority 屬性代表所有考量中範本之特定範本的全域優先權。優先權零是最高優先權。沒有 cosPriority 屬性的範本會視為最低的優先權。當兩個以上的範本提供一個屬性值,但有相同的優先權或沒有優先權時,會隨意選擇值。

使用 merge-schemes 限定元時不會考量範本優先權。合併時,所有考量的範本會定義一個值,而不管範本定義的優先權。如下節中所述,會在 CoS 範本項目上定義 cosPriority 屬性。


備註 –

cosPriority 屬性不得有負值。此外,間接 CoS 產生的屬性不支援優先權。請勿在間接 CoS 定義的範本項目中使用 cosPriority


從指令行建立 CoS 範本項目

使用指標 CoS 或類別 CoS 時,範本項目會包含 LDAPsubentrycosTemplate 物件類別。必須特別針對 CoS 定義建立此項目。將 CoS 範本項目做為 LDAPsubentry 物件類別的實例,可不受配置項目的影響而執行一般的搜尋。

間接 CoS 機制的範本為目錄中任意的現有項目。目標不需要提前識別或提供 LDAPsubentry 物件類別,但是目標必須有輔助 cosTemplate 物件類別。只有在 CoS 評估為產生運算屬性與其值時,才需存取間接 CoS 範本。

在所有情況下,CoS 範本項目必須包含目標項目上 CoS 所產生的屬性與值。屬性名稱指定於 CoS 定義項目的 cosAttribute 屬性中。

下列範例顯示產生 postalCode 屬性的指標 CoS 最高優先權之範本項目:


dn: cn=ZipTemplate,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalCode: 95054
cosPriority: 0

下節提供範本項目範例,以及各種 CoS 定義項目類型的範例。

指標 CoS 的範例

下列指令會建立具有 cosPointerDefinition 物件類別的指標 CoS 定義。此定義項目使用上節範例中陳述的 CoS 範本項目,以在 ou=People,dc=example,dc=com 樹狀結構的所有項目之間共用郵遞區號。


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=pointerCoS,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=ZipTemplate,ou=People,dc=example,dc=com
cosAttribute: postalCode

CoS 範本項目 (cn=ZipTemplate,ou=People,dc=example,dc=com) 會提供儲存在其 postalCode 屬性中的值,給所有位於 ou=People,dc=example,dc=com 尾碼下的項目。如果搜尋相同子樹狀結構中沒有郵遞區號的任何項目,則會看到產生的屬性值:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
postalCode: 95054

間接 CoS 的範例

間接 CoS 會命名 cosIndirectSpecifier 屬性中的一項屬性,以找出每個目標特定的範本。間接 CoS 的範本項目可以是目錄中的任何項目,包含其他使用者項目。此間接 CoS 範例使用目標項目的 manager 屬性識別 CoS 範本項目。範本項目是經理的使用者項目。經理的使用者項目包含要產生的屬性值。在此案例中為 departmentNumber 的值。

下列指令會建立間接 CoS 定義項目,包含 cosIndirectDefinition 物件類別:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=generateDeptNum,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosIndirectDefinition
cosIndirectSpecifier: manager
cosAttribute: departmentNumber

接著,將 cosTemplate 物件類別增加至範本項目中,並確定這些項目會定義要產生的屬性。在此範例中,所有經理項目皆為範本:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Carla Fuentes,ou=People,dc=example,dc=com
changetype: modify
add: objectclass
objectclass: cosTemplate
-
add: departmentNumber
departmentNumber: 318842

在此 CoS 中,包含 manager 屬性的目標項目 (ou=People,dc=example,dc=com 下的項目) 自動會有其經理的部門號碼。由於伺服器沒有 departmentNumber 屬性,因此會在目標項目上運算該屬性。但是,departmentNumber 屬性會以目標項目的一部分傳回。例如,如果 Babs Jensen 的經理定義為 Carla Fuentes,其部門號碼如下所示:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
manager: cn=Carla Fuentes,ou=People,dc=example,dc=com
departmentNumber: 318842

類別 CoS 的範例

此範例顯示如何使用類別 CoS 產生郵寄地址。產生的值指定於由 CoS 定義中 cosTemplateDN 與目標項目中 cosSpecifier 之組合,所指定之位置的範本項目內。下列指令使用 cosClassicDefinition 物件類別建立定義項目:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=classicCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: ou=People,dc=example,dc=com
cosSpecifier: building
cosAttribute: postalAddress

使用相同的指令,建立提供每棟大樓的郵寄地址之範本項目:


dn: cn=B07,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalAddres: 7 Old Oak Street, Anytown, CA 95054

在此 CoS 中,包含 building 屬性的目標項目 (ou=People,dc=example,dc=com 下的項目) 自動會有對應的郵寄地址。CoS 機制會搜尋其 RDN 中有限定符號屬性值的範本項目。在此範例中,如果 Babs Jensen 指定給大樓 B07,會產生如下的郵寄地址:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
building: B07
postalAddress: 7 Old Oak Street, Anytown, CA 95054

建立角色型屬性

您可以建立類別 CoS 模式,為以項目擁有的角色為基礎之項目,產生項目的屬性值。例如,您可以使用角色型屬性,設定伺服器查詢限制為逐項。

若要建立角色型屬性,請使用 nsRole 屬性做為類別 CoS 的 CoS 定義項目內之 cosSpecifier。由於 nsRole 屬性可以為多值,因此您可以定義有多個可能範本項目的 CoS 模式。若要解決要使用哪個範本項目的模擬兩可之情況,請於 CoS 範本項目中包含 cosPriority 屬性。

例如,您可以建立 CoS,允許經理角色的成員超過標準電子信箱配額。經理角色如下:


dn: cn=ManagerRole,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerRole
nsRoleFilter: (isManager=True)
Description: filtered role for managers

依下列方式建立類別 CoS 定義項目:


dn: cn=generateManagerQuota,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: cn=managerCOS,ou=People,dc=example,dc=com
cosSpecifier: nsRole
cosAttribute: mailboxquota override

CoS 範本名稱必須是 cosTemplateDnnsRole 值 (角色的 DN) 的組合。例如︰


dn:cn="cn=ManagerRole,ou=People,dc=example,dc=com",\
 cn=managerCOS,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
mailboxquota: 1000000

CoS 範本項目提供 mailboxquota 屬性值。override 的其他限定元會通知 CoS 覆寫目標項目中任何現有的 mailboxquota 屬性值。屬於角色成員的目標項目,將具有該角色與 CoS 所產生的運算屬性,例如:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -\
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=People,dc=example,dc=comcn: Carla Fuentes
isManager: TRUE...nsRole: cn=ManagerRole,ou=People,dc=example,dc=com
mailboxquota: 1000000

備註 –

角色項目與 CoS 定義項目應位於目錄樹狀結構中的相同位置,才會在其範圍中具有相同的目標項目。CoS 目標項目也應該位於相同位置,以方便尋找與維護。


監視 CoS 外掛程式

目錄伺服器可讓您監視 CoS 外掛程式的部分功能。CoS 監視屬性儲存在 cn=monitor,cn=Class of Service,cn=plugins,cn=config 項目中。如需此項目下每個屬性的詳細資訊及其提供的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Man Page Reference」

設定 CoS 記錄

當目錄伺服器強制在多個適用的定義項目間做出任意的區分時,伺服器會記錄警告訊息。這類警告訊息採取此格式:


Definition /defDN1/ and definition /defDN2/ compete to provide attribute
 '/type/' at priority /level/

當目錄伺服器強制在多個可能適用的定義項目間做出任意的區分時,您也可以配置伺服器記錄參考訊息。若要執行此項作業,請將錯誤記錄設為包含來自外掛程式的訊息。


備註 –

由於設定其他記錄層級可能造成記錄負載過大,建議不要在生產伺服器上設定記錄。


這類參考訊息的內容採取下列格式:


Definition /defDN1/ and definition /defDN2/ potentially compete 
to provide attribute '/type/' at priority /level/

您可以接著選擇是否要設定在定義項目上適用的 CoS 優先權,以解決這類 CoS 模擬兩可的情形。

維護參照完整性

參照完整性是確保維持項目之間關係的外掛程式機制。群組成員身份類型等多種屬性類型包含其他項目的 DN。參照完整性可用以確定移除項目時,也會移除所有包含其 DN 的屬性。

例如,如果從目錄移除使用者項目並啟用參照完整性,伺服器也會從使用者為其成員的任何群組中移除該使用者。如果未啟用參照完整性,管理員必須手動從群組移除使用者。此為整合目錄伺服器與其他依賴使用者與群組管理目錄的 Sun Java System 產品之重要功能。

參照完整性的運作方式

啟用參照完整性外掛程式時,會在刪除、重新命名或移動作業之後,立即在特定屬性上執行完整性更新。預設會停用參照完整性外掛程式。

只要刪除、重新命名或移動目錄中的使用者或群組項目,該作業便會記錄至參照完整性記錄檔:

instance-path/logs/referint

在稱為更新間隔的指定時間過後,伺服器會在啟用參照完整性的所有屬性上執行搜尋,並將該搜尋所產生的項目與記錄檔中已刪除或修改的項目 DN 進行比較。如果記錄檔顯示項目已經刪除,也會刪除對應的屬性。如果記錄檔顯示項目已經變更,也會據以修改對應的屬性值。

參照完整性外掛程式的預設配置已啟用時,會在刪除、重新命名或移動作業之後,立即在 memberuniquememberownerseeAlsonsroledn 屬性上執行完整性更新。不過,您可以配置參照完整性外掛程式的運作方式,以符合您的需求。可以配置下列運作方式:

Procedure配置參照完整性外掛程式


備註 –

參照完整性外掛程式使用的所有資料庫內的所有屬性皆必須編製索引。這些索引必須建立於所有資料庫的配置中。啟用回溯變更記錄時,必須編製 cn=changelog 尾碼的索引。如需相關資訊,請參閱第 12 章, 目錄伺服器編製索引


部分限制與在複寫的環境中使用參照完整性外掛程式相關。如需這些限制的清單,請參閱複寫與參照完整性

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 請確定已配置所有複本,同時已定義所有複寫協議。

  2. 決定您要維護其參照完整性的屬性集與要在主伺服器上使用的更新間隔。

  3. 在所有主伺服器上,使用相同的屬性集與更新間隔來啟用參照完整性外掛程式。

    • 若要定義參照完整性的屬性,請使用此指令:


      $ dsconf set-server-prop -h host -p port ref-integrity-attr:attribute-name
      
    • 若要定義參照完整性的更新間隔,請使用此指令:


      $ dsconf set-server-prop -h host -p port ref-integrity-check-delay:duration
      
    • 若要啟用參照完整性,請使用此指令:


      $ dsconf set-server-prop -h host -p port ref-integrity-enabled:on
  4. 確認已在所有用戶伺服器上停用參照完整性外掛程式。

第 10 章 目錄伺服器複寫

複寫是一套機制,讓目錄內容可利用此機制從目錄伺服器自動複製到一或多個其他的目錄伺服器。所有寫入作業都會自動鏡像到其他目錄伺服器。如需複寫概念、複寫方案,以及如何規劃目錄部署中複寫之完整說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」

一般會在複寫拓樸中,將伺服器上的某個尾碼複寫至伺服器上的其他尾碼,或以伺服器上的其他尾碼複寫伺服器上的某個尾碼。因此,複本、複寫的尾碼與複寫的伺服器等字詞會交換使用。

本章說明使用指令行設定各種複寫方案所執行的作業,其中包含下列主題:

規劃複寫部署

您可以使用無限部主伺服器進行複寫部署的配置。部署中不需要包含集散中心或用戶。本章包含配置集散中心與用戶的複寫程序,不過其為可選擇的項目。

開始配置複寫之前,必須清楚瞭解貴機構中要部署複寫的方式。您必須瞭解「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中所述的複寫概念。您也必須使用「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中提供的設計準則,謹慎規劃未來的複寫配置。

配置與管理複寫的建議介面

配置與管理複寫最簡單的方式是使用目錄服務控制中心 (DSCC)。您可以使用 DSCC 自動配置複寫。您可以選擇設定複寫拓樸所需的自動化層級,例如,是否要在複寫配置期間初始化尾碼。DSCC 也會提供檢查以避免錯誤。此外,DSCC 提供複寫拓樸的圖形化檢視。

DSCC 線上說明提供使用 DSCC 設定複寫的程序。


備註 –

只有在無法使用 DSCC 配置複寫時,才請使用本章所提供的指令行程序。


配置複寫的步驟摘要

配置複寫的步驟摘要假設複寫的是單一尾碼。若要複寫多個尾碼,可以平行配置每部伺服器上的尾碼。亦即可以在多個尾碼上重複配置複寫的每個步驟。

本章其餘部分包含如何配置複寫的詳細指示。

Procedure配置複寫的步驟摘要

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

若要配置複寫拓樸,請按照本程序中概要說明的一般步驟進行。

  1. 在包含專屬用戶複本的所有伺服器上,執行下列作業:

    1. 為用戶複寫的尾碼建立空的尾碼。

      請參閱建立用戶複本的尾碼

    2. 啟用用戶複寫的尾碼。

      請參閱啟用用戶複本

    3. (可選擇) 配置進階用戶設定。

      請參閱執行進階用戶配置

  2. 請視需要在包含集散複寫的尾碼之所有伺服器上,執行下列作業:

    1. 為集散複寫的尾碼建立空的尾碼。

      請參閱建立集散複本的尾碼

    2. 啟用集散複寫的尾碼。

      請參閱啟用集散複本

    3. (可選擇) 配置進階集散中心設定。

      請參閱修改集散複本上的變更記錄設定

  3. 在包含主伺服器複寫的尾碼之所有伺服器上,執行下列作業:

    1. 為主伺服器複寫的尾碼建立尾碼。

      請參閱建立主伺服器複本的尾碼

    2. 啟用主伺服器複寫的尾碼。

      請參閱啟用主伺服器複本

    3. (可選擇) 配置進階主伺服器設定。

      請參閱修改主伺服器複本上的變更記錄設定


    備註 –

    請確定建立複寫協議之前已啟用所有複本,如此一來,建立複寫協議之後便能立即初始化用戶複本。用戶初始化一律會是設定複寫的最後一個階段。


  4. 請確定複寫管理員配置已完成。

  5. 依下列方式在所有主伺服器複本上建立複寫協議:

    1. 在多重主伺服器拓樸的主伺服器之間

    2. 在主伺服器與其專屬用戶之間

    3. 在主伺服器與集散複本之間

    請參閱建立複寫協議

  6. (可選擇) 若要使用部分複寫,請立即進行配置。

    請參閱部分複寫

  7. (可選擇) 若要使用複寫優先權,請立即進行配置。

    請參閱複寫優先權

  8. 配置集散複本與其用戶之間的複寫協議。

    請參閱建立複寫協議

  9. 若是多重主伺服器複寫,請從包含原始資料副本的相同主伺服器複本,初始化所有主伺服器。

    請參閱初始化複本

  10. 初始化集散複本與用戶複本。

    請參閱初始化複本

啟用專屬用戶上的複寫

專屬用戶是複寫的尾碼之唯讀副本。專屬用戶會從連結做為複寫管理員的伺服器接收更新,以進行變更。用戶伺服器的配置作業包含準備空的尾碼以保留複寫的尾碼,以及啟用該尾碼上的複寫。選擇性進階配置可包含設定參照、變更清除延遲與修改特性。

下列幾節說明如何在伺服器上配置一個專屬用戶複寫的尾碼。在將包含專屬用戶複寫的尾碼之每部伺服器上,重複所有程序。

Procedure建立用戶複本的尾碼

    如果不存在空的尾碼,請在具有相同 DN 的用戶上建立尾碼做為預定主伺服器複本。

    如需相關指示,請參閱建立尾碼


    注意 – 注意 –

    如果尾碼存在且不是空值,其內容會在從主伺服器初始化複寫的尾碼時遺失。


Procedure啟用用戶複本

建立空的尾碼之後,需要啟用用戶複寫的尾碼。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    啟用用戶複寫的尾碼。


    $ dsconf enable-repl -h host -p port consumer suffix-DN
    

    例如:


    $ dsconf enable-repl -h host1 -p 1389 consumer dc=example,dc=com

Procedure執行進階用戶配置

若要為進階功能配置用戶複寫的尾碼,請立即執行。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 若要使用 SSL 進行參照,請設定安全參照。


    $ dsconf set-suffix-prop -h host -p port suffix-DN referral-url:ldaps://servername:port
    

    例如:


    $ dsconf set-suffix-prop -h host1 -p 1636 dc=example,dc=com \
     referral-url:ldaps://server2:2389

    複寫機制會自動配置用戶傳回複寫拓樸中所有已知主伺服器的參照。這些預設參照假設用戶端將在標準連線上使用簡單認證。若要讓用戶端可使用 SSL 安全連線連結至主伺服器,請增加使用安全連接埠號,同時格式為 ldaps://servername :port 的參照。請注意,如果主伺服器配置為僅能使用安全連線,URL 預設會指向安全連接埠。

    如果增加多個 LDAP URL 做為參照,可以強制用戶僅傳送這些 LDAP URL 的參照,而不會傳送主伺服器複本的參照。例如,假設您要用戶端一律參照主伺服器上的安全連接埠,而不是預設連接埠。請建立這些安全連接埠的 LDAP URL 清單,並設定特性以使用這些參照。若要定義特定主伺服器或目錄伺服器代理處理所有更新,也可以使用專用參照。

  2. 若要變更用戶的複寫清除延遲,請使用此指令:


    $ dsconf set-suffix-prop -h host -p port suffix-DN repl-purge-delay:time
    

    例如,若要將清除延遲設為 2 天,請鍵入:


    $ dsconf set-suffix-prop -h host1 -p 1389 edc=example,dc=com repl-purge-delay:2d

    用戶伺服器會儲存關於複寫的尾碼內容更新之內部資訊,而清除延遲參數則會指定必須保留此資訊的時間。清除延遲會部分決定用戶與其主伺服器之間的複寫可於中斷多久後仍能正常回復。這與供應者伺服器上變更記錄的 MaxAge 參數相關。這兩個參數之間較短者會決定兩部伺服器之間的複寫可以停用或中斷但仍能正常回復之最長時間。在大多數情況下,預設值 7 天便已足夠。

啟用集散中心上的複寫

集散複本會做為用戶與主伺服器,進一步分佈複寫的資料給更多的用戶。集散複本從其供應者接收複寫更新,再傳送複寫更新給其用戶。這些複本不接受修改,而會傳回參照至主伺服器。

集散伺服器的配置作業包含準備空的尾碼以保留複寫的尾碼,以及啟用該尾碼上的複寫。選擇性進階配置可包含選擇不同的複寫管理員、設定參照、設定清除延遲,以及修改變更記錄參數。

下列幾節說明如何配置一部集散伺服器。在將包含集散複寫的尾碼之每部伺服器上,重複所有程序。

Procedure建立集散複本的尾碼

    如果不存在空的尾碼,請在具有相同 DN 的集散伺服器上建立尾碼做為預定主伺服器複本。

    如需相關指示,請參閱建立尾碼

    如果尾碼存在且不是空值,其內容會在從主伺服器初始化複寫的尾碼時遺失。

Procedure啟用集散複本

如果有集散複本,請立即啟用。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    啟用集散複寫的尾碼。


    $ dsconf enable-repl -h host -p port hub suffix-DN
    

    例如:


    $ dsconf enable-repl -h host1 -p 1389 hub dc=example,dc=com

Procedure修改集散複本上的變更記錄設定

您可能會想為進階集散配置修改的唯一參數,會與該變更記錄相關。集散伺服器需要變更記錄才能做為供應者。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    若要修改集散中心上的變更記錄設定,請使用下列指令之一:


    $ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-age:value
    

    $ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-entry-count:value
    

啟用主伺服器複本上的複寫

主伺服器複本包含主伺服器的資料副本,並會集中所有修改,再傳播更新給所有其他複本。主伺服器會記錄所有變更、檢查其用戶的狀態,並視需要傳送更新給用戶。在多重主伺服器複寫中,主伺服器複本也會從其他主伺服器接收更新。

主伺服器的配置作業包含定義內含主伺服器複本的尾碼、啟用主伺服器複本,以及視需要配置複本以供進階複寫使用。

下列幾節說明如何配置一部主伺服器。在將包含主伺服器複寫的尾碼之每部伺服器上,重複所有程序。

Procedure建立主伺服器複本的尾碼

    在將包含要複寫的項目之主伺服器上,選擇或建立尾碼。

    如需相關指示,請參閱建立尾碼

    若要確定多重主伺服器的配置與初始化正確,請僅載入一部含資料的主伺服器。其他複寫的尾碼之任何資料將會遭覆寫。

Procedure啟用主伺服器複本

啟用主伺服器上的複寫時,必須指定複寫 ID。複寫 ID 會用以辨別更新陳述式的所有者,以及解決多重主伺服器複寫可能發生的衝突。因此,複寫 ID 對此尾碼的所有主伺服器複本而言必須是唯一的。複寫 ID 一旦設定便不得變更。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    啟用主伺服器複寫的尾碼。


    $ dsconf enable-repl -h host -p port -d ReplicaID master suffix-DN
    

    其中 ReplicaID 是介於 1 至 65534 之間的整數。

    例如,若要建立複本 ID 為 1 的主伺服器複寫的尾碼,請使用此指令:


    $ dsconf enable-repl -h host1 -p 1389 -d 1 master dc=example,dc=com

Procedure修改主伺服器複本上的變更記錄設定

若是進階主伺服器配置,您可能會想要修改變更記錄設定。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    若要修改主伺服器上的變更記錄設定,請使用下列指令之一:


    $ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-age:value
    

    $ dsconf set-server-prop -h host -p port suffix-DN repl-cl-max-entry-count:value
    

配置複寫管理員

本節說明如何配置非預設複寫管理員,以及如何設定預設複寫管理員密碼。

使用非預設複寫管理員

複寫管理員是供應者傳送複寫更新時,將用來連結至用戶伺服器的使用者。包含接收更新之尾碼的所有伺服器,至少必須有一個複寫管理員項目。

目錄伺服器有一個預設複寫管理員項目可用於每部伺服器上使用,特別是針對簡單複寫方案:cn=replication manager,cn=replication,cn=config。複寫機制會自動以此使用者配置用戶複本,以簡化複本的部署。

如果有更複雜的複寫方案,針對每個複寫的尾碼可能需要數個具有不同密碼的複寫管理員。您可利用一或多個新的複寫管理員取代現有的預設複寫管理員。


注意 – 注意 –

請勿在使用複寫管理員的 DN 與密碼之伺服器上連結或執行作業。複寫管理員僅供複寫機制使用。其他任何用途均可能需要重新初始化複本。

請勿使用目錄管理員做為複寫管理員。由於 cn=admin,cn=Administrators,cn=config 項目會供其他管理作業使用,您也不得使用此使用者或管理群組中的任何其他使用者做為複寫管理員。


為各個用戶選擇複寫管理員之後,請確實記下所選擇或建立的複寫管理員 DN。稍後以此供應者的用戶建立複寫協議時,會需要此 DN 與其密碼。

Procedure設定非預設複寫管理員

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 在所有用戶 (目標) 複寫的尾碼上,建立新的複寫管理員與密碼。


    $ ldapmodify -a -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn:"cn=new-replication-manager,cn=replication,cn=config"
    objectclass: top
    objectclass: person
    userpassword:password
    sn:new-replication-manager
    

    例如:


    $ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn:"cn=ReplicationManager3,cn=replication,cn=config"
    objectclass: top
    objectclass: person
    userpassword:secret
    sn:ReplicationManager3
  2. 在所有用戶 (目標) 複寫的尾碼上,設定複寫管理員連結 DN。


    $ dsconf set-suffix-prop -h host -p port suffix-DN \
     repl-manager-bind-dn:"cn=new-replication-manager,cn=replication,cn=config"

    例如:


    $ dsconf set-suffix-prop -h host1 -p 1389 dc=example,dc=com \
     repl-manager-bind-dn:"cn=ReplicationManager3,cn=replication,cn=config"
  3. 針對已在所有供應者 (來源) 複寫的尾碼上建立的所有複寫協議,設定複寫管理員連結 DN。

    1. 建立暫存檔以設定新的複寫管理員密碼。

      此檔案只能讀取一次,您必須儲存密碼以供日後使用。


      $ echo password > password-file
      
    2. 設定複寫管理員連結 DN 與密碼,供複寫機制執行更新時使用。


      $ dsconf set-repl-agmt-prop -h host -p port suffix-DN host:port \
       auth-bind-dn:"cn=new-replication-manager,cn=replication,cn=config" \
       auth-pwd-file:password-file
      

      例如:


      $ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \
       auth-bind-dn:"cn=ReplicationManager3,cn=replication,cn=config" \
       auth-pwd-file:pwd.txt
    3. 移除密碼暫存檔。


      $ rm password-file
      

Procedure變更預設複寫管理員密碼

  1. 建立暫存檔以設定複寫管理員密碼。

    此檔案只能讀取一次,您必須儲存密碼以供日後使用。


    $ echo password > password-file
    
  2. 在複寫拓樸中的所有用戶 (目標) 伺服器上,設定複寫管理員連結密碼。


    $ dsconf set-server-prop -h host -p port suffix-DN def-repl-manager-pwd-file:password-file
    

    例如:


    $ dsconf set-server-prop -h host1 -p 1389 dc=example,dc=com \
     def-repl-manager-pwd-file:pwd.txt
  3. 移除密碼暫存檔。


    $ rm password-file
    

建立複寫協議

複寫協議是供應者上的一組參數,其可配置並控制傳送更新給指定用戶的方式。複寫協議必須建立於傳送更新給其用戶之供應者複寫的尾碼上。您必須為每個要更新的用戶,在供應者上建立複寫協議。

Procedure建立複寫協議

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

如果使用 DSCC 建立新的複寫協議,可以選擇從現有的複寫協議複製部分或所有的複寫協議配置設定。

  1. 為要進行複寫的各個用戶,從主伺服器建立複寫協議。


    $ dsconf create-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port [consumer-host:consumer-port]

    例如:


    $ dsconf create-repl-agmt -h host1 -p 1389 dc=example,dc=com host2:1389

    若要使用指令行列出現有的複寫協議,請使用 dsconf list-repl-agmts 指令。


    備註 –

    如果在複寫執行時變更主伺服器上的連接埠號,則無須重新初始化伺服器。但是,指向舊位址 (host: old-port) 的舊複寫協議將再也無法使用。若要複寫在變更連接埠號之前如同往常繼續執行,則必須以新位址 (host:new-port) 建立新協議。


  2. 檢查複寫協議是否已正確建立。


    $ dsconf show-repl-agmt-status -h host -p port suffix-DN consumer-host:consumer-port
    
  3. 如果認證狀態不正確,請執行 dsconf accord-repl-agmt 指令。


    備註 –

    請只有在使用預設複寫管理員時才使用指令 dsconf accord-repl-agmt。如果已建立新的複寫管理員,請勿使用此指令,這麼做會覆寫部分必要的設定。


    dsconf accord-repl-agmt 指令可確保供應者與目標伺服器皆共用相同的複寫認證設定。


    $ dsconf accord-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port
    

    例如:


    $ dsconf accord-repl-agmt -h host2 -p 1389 dc=example,dc=com host1:1389

部分複寫

複寫作業預設會將複寫的尾碼中整個項目複製到用戶複本。您可以使用部分複寫功能,選取要使用的尾碼以及要包含或排除的屬性。部分複寫會配置於複寫協議中,讓您可為主伺服器各用戶複寫的尾碼定義屬性集。您可以控制要分佈的資料,並更有效地使用複寫頻寬與用戶資源。

例如,若要減少複寫頻寬,可以選擇不要複寫含有 photojpegPhotoaudio 等一般說來過大的值之屬性。因此,用戶上將無法使用這些屬性。在另外一個情況下,您可能會選擇在專門執行認證的用戶伺服器上,僅複寫 uiduserpassword 屬性。

部分複寫的注意事項


備註 –

部分複寫無法在 Directory Server 5.2 之前的產品版本中使用。配置部分複寫協議時,主伺服器與用戶複本至少必須使用 Directory Server 5.2。


啟用或修改部分屬性集需要重新初始化用戶複本。因此,您必須在部署之前決定部分複寫需求,並在第一次初始化複寫的尾碼之前定義屬性集。

複寫小型的屬性集時,由於考慮到特定屬性上 ACI、角色與 CoS 等複雜功能的相依性,因此您必須謹慎進行。此外,不複寫 ACI、角色或 CoS 機制的限定符號或篩選中所提及的其他屬性,可能會危及資料的安全性。不複寫可能也會導致搜尋中傳回不同的屬性集。管理要排除的屬性清單比管理要包含的屬性清單要來得安全,且不容易有人為疏失。

如果複寫的屬性集不允許所有複寫的項目遵守模式,則必須關閉用戶伺服器上的模式檢查。由於複寫機制會略過用戶上的模式檢查,因此複寫不相符的項目不會導致錯誤。但是,用戶將包含這些不相符的項目,並會關閉模式檢查以向其用戶端顯示一致的狀態。

部分複寫會配置於包含集散中心與專屬用戶的主伺服器複本之複寫協議中。不支援在多重主伺服器複寫環境中配置兩個主伺服器複本之間的部分複寫。此外,如果多個主伺服器有含相同複本的複寫協議,則所有協議皆須複寫相同的屬性集。

Procedure配置部分複寫

若要配置部分複寫,必須指定尾碼、決定包含或排除該尾碼上的屬性,並接著選擇要包含或排除的屬性。如果選擇在尾碼上排除屬性,將會自動包含所有其他屬性。同理,如果選擇在尾碼上包含特定屬性,將會自動排除所有其他屬性。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    在位於來源伺服器的複寫協議上配置部分複寫。


    $ dsconf set-repl-agmt-prop -h host -p port suffix-DN consumer-host:consumer-port property:value
    

    其中 propertyrepl-fractional-exclude-attrrepl-fractional-include-attr

    例如,若要配置部分協議排除 JPEG 與 TIFF 圖片在尾碼 dc=example,dc=com 上進行複寫 ,請使用此指令:


    $ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 
     repl-fractional-exclude-attr:jpegPhoto repl-fractional-exclude-attr:tiffPhoto

複寫優先權

指定複寫優先權為可選擇的項目。您可以建立複寫規則以指定某些變更 (例如更新使用者密碼) 以高優先權進行複寫。複寫規則中指定的任何變更皆會以高優先權進行複寫,而所有其他變更則會以一般優先權進行複寫。


備註 –

複寫優先權規則僅需要建立於主伺服器上。不需要為集散中心與用戶進行配置。


Procedure配置複寫優先權

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    若要在主伺服器上建立新的複寫優先權規則,請使用此指令:


    $ dsconf create-repl-priority -h host -p port suffix-DN priority-name property:value
    

    您可以使用下列一或多個特性設定複寫優先權:

    • 作業類型,op-type

    • 連結 DN,bind-dn

    • 基底 DN,base-dn

    • 屬性類型,attr

    priority-name 由使用者定義。

    例如,若要建立複寫規則,指定以高優先權複寫使用者密碼變更,請使用此指令:


    $ dsconf create-repl-priority -h host2 -p 1389 dc=example,dc=com pw-rule \
     attr:userPassword

    若要顯示目前的複寫規則,請使用 dsconf list-repl-priorities -v 指令。此指令搭配 -v 選項使用時,會顯示其他與複寫優先權規則相關的資訊。


    $ dsconf list-repl-priorities -h host2 -p 1389 -v

    如需更多資訊,請參閱 dsconf(1M) 線上手冊。

初始化複本

建立複寫協議並配置兩個複本之後,必須初始化用戶複寫的尾碼,才會開始複寫。您可以在初始化期間,實際將資料從供應者複寫的尾碼複製到用戶複寫的尾碼。

此外,部分錯誤情況或配置變更會需要重新初始化複本。例如,如果因為任何理由從備份復原單一主伺服器複寫的尾碼中之資料,則必須重新初始化其所更新的所有複本。

重新初始化時,會刪除用戶上複寫的尾碼之內容,並以主伺服器上的尾碼內容取代。如此做可確保複本會進行同步化,且複寫更新可以繼續進行。本節中所述的所有初始化方法會自動重建用戶複本的索引,使得用戶能以最佳方式回應用戶端的讀取請求。

使用多重主伺服器複寫時,如果拓樸中有其他主伺服器已更新用戶,則用戶可能無須重新初始化。

Procedure從遠端 (供應者) 伺服器初始化複寫的尾碼

您可以使用現有的複寫協議,從遠端伺服器初始化尾碼。此初始化方法比其他方法簡單,因此請儘可能使用此方法。而僅在有大量資料使得匯入耗費太多時間時使用其他方法。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

使用 DSCC 以線上方式初始化複寫的尾碼,是初始化或重新初始化用戶的簡單方式。但是,如果初始化大量的項目,此程序可能很耗時。此時,使用指令行以離線方式初始化用戶可能比較有效率。

  1. 初始化複本。


    $ dsconf init-repl-dest -h host -p port suffix-DN destination-host:destination-port [destination-host:destination-port]

    其中 destination-host:destination-port 是您從遠端伺服器初始化目標伺服器的主機與連接埠。

  2. (可選擇) 請為各個協議檢查尾碼是否已初始化。


    $ dsconf show-repl-agmt-status -h host -p port suffix-DN destination-host:destination-port 
    

從 LDIF 初始化複本

Procedure從 LDIF 初始化複寫的尾碼

本程序概要說明從 LDIF 檔案初始化複寫的尾碼所用之一般步驟。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

使用 DSCC 以線上方式初始化複寫的尾碼,是初始化或重新初始化用戶的簡單方式。但是,如果初始化大量的項目,此程序可能很耗時。此時,使用指令行以離線方式初始化用戶可能比較有效率。

  1. 請確定已設定複寫協議。

    您必須在初始化複本之前執行此項作業。

  2. 從主伺服器複寫的尾碼匯出尾碼資料的原始副本至 LDIF 檔案。

    請參閱匯出複寫的尾碼至 LDIF

    您可以在多重主伺服器複寫環境中,使用從原始主伺服器匯出的 LDIF 檔案同時初始化其他主伺服器與任何用戶。您可以在串聯複寫環境中,使用相同的檔案同時初始化集散複本及其用戶。

    在所有的情況下,皆須以從配置的主伺服器複本匯出之 LDIF 檔案開始。您無法使用任意的 LDIF 檔案初始化所有複本,因為該檔案可能不包含複寫中介資料。

  3. 如果初始化部分複本,請篩選檔案而僅保留複寫的屬性,再將該檔案傳輸到所有用戶伺服器。

    請參閱為部分複寫篩選 LDIF 檔案

  4. 初始化複本。

    請執行下列其中一項動作:

    • 若要在離線的 (停止的) 伺服器上快速進行初使化,請使用 dsadm import 指令。


      $ dsadm import instance-path LDIF_file suffix-DN
      
    • 若要從 LDIF 檔案以線上方式初始化複本,請使用 dsconf import 指令。


      $ dsconf import -h host -p port LDIF_file suffix-DN
      

      使用 dsconf import 會比使用 dsadm import 還要慢,但是您無須在執行匯入作業期間停止伺服器。

    如需初始化尾碼的詳細資訊與範例,請參閱初始化尾碼。如需詳細的指令用法,請參閱 dsadm(1M) 線上手冊與 dsconf(1M) 線上手冊。

  5. (可選擇) 請為各個協議檢查尾碼是否已初始化。


    $ dsconf show-repl-agmt-status -h host -p port suffix-DN destination-host:destination-port 
    

Procedure匯出複寫的尾碼至 LDIF

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用下列其中一個指令匯出 LDIF 檔案中複寫的尾碼內容:

    • 若是以離線方式匯出,請鍵入:


      $ dsadm export instance-path suffix-DN LDIF_file
      
    • 若是以線上方式匯出,請鍵入:


      $ dsconf export -h host -p port suffix-DN LDIF_file
      

    下列範例將匯出整個 dc=example,dc=com 複寫的尾碼與複寫資訊至檔案 example_replica_export.ldif


    $ dsconf export -h host2 -p 1389 dc=example,dc=com  \
     /local/ds/ldif/example_export_replica.ldif

    如需更多資訊,請參閱備份至 LDIFdsadm(1M) 線上手冊與 dsconf(1M) 線上手冊。

為部分複寫篩選 LDIF 檔案

使用 DSCC 時,不會感覺到正在初始化配置有部分複寫的複本。初始化期間僅會將選取的屬性傳送至用戶。

如果已配置部分複寫,應剔除所有未使用的屬性,再將匯出的 LDIF 檔案複製到用戶伺服器。目錄伺服器為此用途提供有 fildif 工具。此工具會篩選指定的 LDIF 檔案,僅保留複寫協議中定義之屬性集所允許的屬性。

此工具會讀取伺服器的配置,以決定屬性集定義。若要讀取配置檔案,必須以超級使用者身份或以擁有程序與檔案 (由 nsslapd-localuser 屬性所指定) 的使用者身份執行 fildif 工具。例如,下列指令會篩選上一範例內 dc=example,dc=com 尾碼所匯出的檔案:


$ fildif -i /local/ds1/ldif/example_master.ldif \
 -o /local/ds1/ldif/filtered.ldif -b "cn=host2.example.com:1389, \
 cn=replica,cn=\\"dc=example,dc=com\\",cn=mapping tree,cn=config" -p /local/ds1

如需瞭解 fildif 指令的位置,請參閱指令位置

-i-o 選項分別是輸入與輸出檔案。-b 選項是定義部分複寫的複寫協議之 DN。您可以使用此指令尋找此 DN:


$ ldapsearch -h host -p port -D cn=admin,cn=Administrators,cn=config -w - \
 -b "cn=config" "(&(objectclass=nsds5replicationagreement) (nsDS5ReplicaPort=replica-port) \
 (nsDS5ReplicaHost=replica-host))" dn

例如:


$ ldapsearch -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "cn=config" "(&(objectclass=nsds5replicationagreement) \
 (nsDS5ReplicaPort=2090)(nsDS5ReplicaHost=host2))" dn
Enter bind password:
version: 1
dn: cn=host2:1389,cn=replica,cn=dc\=example\,dc\=com,cn=mapping tree,cn=config

如需 fildif 工具完整的指令行語法,請參閱 fildif(1) 線上手冊。

您接著可以使用 fildif 產生的 filtered.ldif 檔案,初始化此複寫協議中的用戶。如從 LDIF 檔案匯入資料中所述,傳輸檔案至用戶伺服器並匯入檔案。

使用二進位副本初始化複寫的尾碼

二進位副本可讓您使用某部伺服器的二進位備份檔案,復原相同的目錄內容到另一部伺服器上,以複製整部伺服器。您可以使用二進位副本初始化,或從主伺服器或集散伺服器的二進位副本重新初始化任何伺服器,或從其他用戶伺服器的二進位副本重新初始化用戶。


備註 –

此進階程序會與目錄伺服器的資料庫檔案互動,且應僅由有經驗的管理員使用。

如果複本有大型資料庫檔案,例如包含百萬條項目的複本,在此功能上設定某些限制有助執行與節省時間。


使用二進位副本的複寫限制

由於二進位副本會將資料庫檔案從一部機器移動到另一部,該機制會遵守下列嚴格限制:

建立初始化伺服器的二進位副本

本節說明如何建立初始化伺服器的二進位副本,以及如何建立使用最低磁碟空間的二進位副本。

Procedure建立初始化伺服器的二進位副本

本程序可用以執行二進位副本,以初始化複寫的伺服器,因為其使用標準備份功能建立伺服器資料庫檔案的副本。執行標準備份可確保所有資料庫檔案皆處於一致的狀態,而不需要停止伺服器。

本程序有幾點限制。備份與復原作業會在相同機器上建立資料庫檔案的副本,因此會加倍各機器上這些檔案所需的磁碟空間量。此外,如果目錄包含十億位元組的資料,這些檔案上的實際複製作業可能需要相當長的時間。

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 為新複寫的尾碼在目標機器上安裝目錄伺服器,視需要建立新的伺服器實例,並根據使用二進位副本的複寫限制配置伺服器。

  2. 在包含此複寫的尾碼之複寫拓樸中建立所有複寫協議。

    在此複本中包含來自供應者的協議。如果此複本不是專屬用戶,請在其用戶中包含來自此複本的協議。請參閱建立複寫協議

  3. 選取完整配置與想要初始化的相同類型 (主伺服器、集散中心或用戶) 之初始化複本,並根據二進位備份在複本上執行標準備份。

  4. 例如,使用 ftp 指令從備份目錄複製或傳輸檔案到目標機器上的目錄。

  5. 如果已在多重主伺服器複寫方案中初始化新主伺服器,請遵循復原多重主伺服器方案中的主伺服器中的程序。

Procedure使用二進位副本初始化使用最低磁碟空間的伺服器

本程序不會建立資料庫檔案的備份副本,因此會使用較少的磁碟空間與較少的時間。但是,您需要停止正在複製到排序中的伺服器,以確保資料庫檔案的狀態一致。


注意 – 注意 –

本程序不得用以重新初始化已在多重主伺服器複寫方案中使用的主伺服器,僅能用以重新初始化用戶伺服器或初始化新的主伺服器。若要重新初始化現有的主伺服器複本,請使用線上初始化,匯入 LDIF 檔案,或遵循建立初始化伺服器的二進位副本中的程序。


針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 為新複寫的尾碼在目標機器上安裝目錄伺服器,視需要建立新的伺服器實例,並根據使用二進位副本的複寫限制配置伺服器。

  2. 在包含此複本的複寫拓樸中建立所有複寫協議。

    在此複本中包含來自供應者的協議。如果此複本不是專屬用戶,請在其用戶中包含來自此複本的協議。請參閱建立複寫協議

  3. 啟動、停止與重新啟動目錄伺服器實例中所述,停止要初始化或重新初始化的目標伺服器。

  4. 選取完整配置與想要初始化的相同類型 (主伺服器、集散中心或用戶) 初始化的複本,同時停止此伺服器。

    如果複製的是多重主伺服器配置中的主伺服器複本,請確保已完整更新所有其他主伺服器最近的變更,再停止伺服器。

  5. 從目標伺服器移除所有資料庫檔案,包含作業事件記錄、變更記錄與區域檔案 (__db.xxx 檔案)。

    除非已遷移檔案,否則資料庫檔案與作業事件記錄會位於 instance-path/db 目錄中。

  6. 例如,使用 ftp 指令從來源複本機器複製或傳輸所有資料庫檔案 (包含作業事件記錄與變更記錄) 到目標機器。

    除非已遷移檔案,否則資料庫檔案與作業事件記錄會位於 instance-path/db 目錄中。

    如果初始化的是主伺服器或集散複本,也須複製變更記錄中的所有檔案,變更記錄預設會位於 instance-path/changelog 中。

  7. 重新啟動來源與目標伺服器。

在串聯複寫中初始化複本

串聯複寫中,請一律以下列程序中所示的順序初始化複本。

Procedure在串聯複寫中初始化複本

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 如果也有多重主伺服器複寫,請確保其中一部主伺服器有要複寫的完整資料集,再使用此主伺服器初始化其他主伺服器的複本。

  2. 從第一層集散複本的主伺服器複本初始化複本。

  3. 如果有多層集散中心,請從之前初始化的集散層級初始化每個層級。

  4. 從最後一層集散複本初始化專屬用戶上的複本。

編製複寫的尾碼之索引

索引不會從一部伺服器實例自動複寫到另一部伺服器實例。若要為所有保留複寫的尾碼之伺服器實例編製其屬性的索引,請執行下列動作之一。

遞增多個項目到大型複寫的尾碼

如果您的目錄已有大量項目,而還想再增加大量項目,請勿使用 ldapmodify -a,這麼做會很耗時。請改搭配在複寫的拓樸中增加項目之選項,使用 dsconf import 指令遞增新項目。當您匯入項目時,會產生包含增加項目與複寫中介資料的 LDIF 檔案。您可以接著匯入此產生的 LDIF 檔案至其他複本。產生的 LDIF 檔案可確保在您增加資料的複本之間持續同步化複寫。

Procedure將多個項目增加至大型複寫的尾碼

開始之前

本程序會產生大型 LDIF 檔案。在執行第一個 dsconf import 指令之前,請確定有足夠的磁碟空間可供產生的 LDIF 檔案使用。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。


注意 – 注意 –

您可以使用本程序以分次傳遞方式初始化有大量項目的伺服器。但是,如果其中一個匯入失敗,便會遺失整個資料庫。請務必於每次匯入之前備份資料。


  1. 匯入項目到任何主伺服器複本。


    $ dsconf import -h host -p port -K generated-LDIF-file suffix-DN
    

    -K 選項可確保不會移除現有的資料,也會產生包含複寫程序所需的新項目與資訊之檔案 generated-LDIF-file

  2. 在所有其他複本中,匯入上一個步驟所產生的檔案。


    $ dsconf import -h host -p port \
    -K -f incremental-output=no generated-LDIF-file suffix-DN
    

    選項 -f incremental-output=no 會指定不會產生其他 LDIF 檔案。本程序僅需要一個產生的 LDIF 檔案。

複寫與參照完整性

如果搭配複寫使用參照完整性外掛程式,則必須在所有主伺服器上啟用外掛程式。您不需要在集散伺服器或用戶伺服器上啟用外掛程式。

下列限制與在複寫環境中使用參照完整性外掛程式相關:

如需有關配置參照完整性外掛程式的資訊,請參閱配置參照完整性外掛程式

經由 SSL 的複寫

可以配置在複寫中包含目錄伺服器,如此一來,所有複寫作業會經由 SSL 連線執行。

Procedure配置 SSL 的複寫作業

本程序顯示在複寫拓樸中設定兩部主伺服器的複寫之指令範例。


備註 –

此範例顯示使用自行簽署的憑證之簡單複寫配置。在生產環境中設定經由 SSL 的複寫時,如果改用憑證授權機構信任的憑證會更安全。

如果供應者伺服器憑證為僅用於 SSL 伺服器的憑證,而無法在 SSL 訊號交換期間做為用戶端,則經由 SSL 的複寫會失敗。


經由 SSL 保護複寫時,複寫管理員的認證仍會使用簡單連結與密碼完成。您可以使用以用戶端為基礎的認證來完整保護複寫,但是這麼做需要更複雜的設定。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 建立並啟動新的伺服器。


    $ dsadm create -p 1389 -P 1636 /local/ds1
    $ dsadm create -p 2389 -P 2636 /local/ds2
    
    $ dsadm start /local/ds1
    $ dsadm start /local/ds2
  2. 在所有伺服器上建立空的尾碼。


    $ dsconf create-suffix -e -i -p 1389 dc=example,dc=com
    $ dsconf create-suffix -e -i -p 2389 dc=example,dc=com
  3. 在所有伺服器上設定多重主伺服器密碼檔案。


    $ dsconf set-server-prop -e -i -h example1.server -p 1389 \
     def-repl-manager-pwd-file:/local/ds1/replmanrpwd1.txt
    $ dsconf set-server-prop -e -i -h example2.server -p 2389 \
     def-repl-manager-pwd-file:/local/ds1/replmanrpwd2.txt
  4. 在所有伺服器上啟用複寫。


    $ dsconf enable-repl -h example1.server -p 1389 -e -i -d 1 master dc=example,dc=com
    $ dsconf enable-repl -h example2.server -p 2389 -e -i -d 2 master dc=example,dc=com
  5. 在所有伺服器上檢視現有的預設憑證。


    $ dsadm show-cert -F der -o certfile1 /local/ds1 defaultCert
    $ dsadm show-cert -F der -o certfile2 /local/ds2 defaultCert
  6. 從所有其他伺服器將 CA 信任的憑證增加至所有伺服器上。


    $ dsadm add-cert --ca /local/ds1 "ds2 Repl Manager Cert" certfile2
    $ dsadm add-cert --ca /local/ds2 "ds1 Repl Manager Cert" certfile1
  7. 在所有主伺服器與集散 (來源) 伺服器上,建立所有用戶 (目標) 伺服器的複寫協議。

    請注意,複寫協議使用 LDAP 安全連接埠。


    $ dsconf create-repl-agmt -h example1.server -p 1389 -e -i \
     --auth-protocol "ssl-simple" dc=example,dc=com example2.server:2636
    $ dsconf create-repl-agmt -h example2.server -p 2389 -e -i \
     --auth-protocol "ssl-simple" dc=example,dc=com example1.server:1636
  8. 請針對所有複寫協議,在複寫協議中將認證密碼檔案配置為用戶 (目標) 伺服器的複寫管理員密碼檔案。


    $ dsconf set-repl-agmt-prop -h example1.server -p 1389 -e -i \
     dc=example,dc=com example2.server:2636 auth-pwd-file:/local/ds1/replmanrpwd2.txt
    $ dsconf set-repl-agmt-prop -h example2.server -p 2389 -e -i \
     dc=example,dc=com example1.server:1636 auth-pwd-file:/local/ds1/replmanrpwd1.txt

    如果選擇該選項,在初始化尾碼之後,供應者會將所有複寫更新訊息經由 SSL 傳送給用戶,並將使用憑證。用戶初始化如果使用為 SSL 配置的協議透過 DSCC 執行,也將使用安全連線。

  9. 請在所有伺服器上重新啟動伺服器,以使配置變更生效。


    $ dsadm restart /local/ds1
    $ dsadm restart /local/ds2
  10. 在其中一部主伺服器上初始化尾碼。


    $ dsconf import -h example1.server -p 1389 -e -i /tmp/Example.ldif dc=example,dc=com
  11. 在尚未初始化的所有伺服器上,使用複寫協議初始化伺服器。


    $ dsconf init-repl-dest -e -i -h example1.server -p 1389 \
     dc=example,dc=com example1.server:2636

經由 WAN 的複寫

目錄伺服器可讓您執行所有格式的複寫,包含透過廣域網路 (WAN) 連線的機器之間的多重主伺服器複寫。此複寫可讓供應者伺服器初始化與更新用戶時,使用較高延遲與較低頻寬的最佳網路頻寬。


備註 –

部署或疑難排解經由 WAN 複寫的複寫拓樸時,必須檢查網路速度、延遲與資料封包遺失。這幾方面任何一個網路問題都可能會導致複寫延遲。

此外,複寫資料傳輸率在頻寬方面一律會比可用實際媒體允許的速率低。如果複本之間的更新磁碟區無法實際符合可用的頻寬,調校將無法避免複本在沉重的更新負載下有所差異。複寫延遲與更新效能受到許多因素的影響,包含但不限於:修改率、項目大小、伺服器硬體、錯誤率、平均延遲與平均頻寬。

如果您對貴環境中的複寫有任何疑問,請連絡 Sun 服務提供者。


複寫機制的內部參數預設會針對 WAN 進行最佳化。但是,如果複寫因為上述因素過慢,您可能需要憑經驗調整視窗大小與群組大小參數。您也能排程複寫避開網路尖峰時段,因而改善整體網路使用率。最後,目錄伺服器支援壓縮複寫資料以最佳情況使用頻寬。

配置網路參數

視窗與群組網路參數可決定複寫機制如何將項目群組化,以用更有效率的方式將其在網路上進行傳送。這些參數會影響供應者與用戶如何交換複寫更新訊息與回應。這些參數可配置於每個複寫協議中,讓您可以根據各用戶的特定網路條件自訂複寫效能。

監視您所做的任何修改效果,並據以調整參數。如需相關指示,請參閱取得複寫狀態。您無須中斷複寫以修改視窗大小與群組大小參數。

配置視窗大小

視窗大小 (預設值 10) 表示不需要用戶立即回應即可傳送的最大更新訊息數目。

快速連續傳送多則訊息,會比在每則訊息之後等待回應來得有效率。您可以使用適當的視窗大小,降低複本等待複寫更新或回應抵達的時間。

如果用戶複本比供應者慢,請將視窗大小增加到比預設值還要高的值,例如 100,並在進一步調整之前再次檢查複寫效能。當複寫更新率很高而使得更新之間的時間縮短時,即使是區域網路 (LAN) 連線的複本也會從較高的視窗大小獲益。

Procedure配置視窗大小

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    修改視窗大小。


    $ dsconf set-repl-agmt-prop -h host -p port suffix-DN consumer-host:consumer-port transport-window-size:value
    

    例如:


    $ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \
     transport-window-size:20

配置群組大小

群組大小 (預設值 1) 表示可以隨附在單一更新訊息中的最大資料修改數目。如果網路連線阻礙了複寫的進行,請將群組大小增加為比預設值還要高的值,例如 10,再重新檢查複寫效能。

增加群組大小時,請確定以下為真:

Procedure配置群組大小

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    修改群組大小。


    $ dsconf set-repl-agmt-prop -h host -p port suffix-DN \
     consumer-host:consumer-port transport-group-size:value
    

    例如:


    $ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \
     transport-group-size:10

排程複寫活動

如果複本之間立即同步化不是很重要,您可以在網路使用率低的期間排程複寫。資料複寫的完成速度應於網路使用率高時快得多。

您可以排程複寫在一天當中的某個時間開始與結束,以每天或每週為基準。您可以透過用戶各自的複寫協議,獨立為每個用戶執行此項作業。新排程會立即生效,而導致對應用戶的下一個資料複寫延遲到排程允許的第一個複寫完成。

Procedure排程複寫活動

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    修改複寫排程。


    $ dsconf set-repl-agmt-prop -h host -p port suffix-DN \
     host:port repl-schedule:value
    

    例如,若要設定複寫在每晚 2:00 與 4:00 之間執行,請鍵入:


    $ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \
     repl-schedule:"0200-0400 0123456"

    其中 0123456 表示一週內的各天,0 表示星期日,1 表示星期一,依此類推。

配置複寫壓縮

若要降低複寫使用的頻寬,可以配置複寫在更新用戶時壓縮要傳送的資料。複寫機制使用 Zlib 壓縮程式庫。供應者與用戶必須執行於 Solaris 或 Linux 平台上,才能啟用壓縮。

您應該憑經驗測試與選取壓縮層級,以在 WAN 環境中使用預期複寫時達到最佳結果。由於壓縮與解壓縮運算會使複寫變慢,因此請勿在具有廣域網路頻寬的地方設定 LAN 中的此參數。

Procedure配置複寫壓縮

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    在主伺服器的複寫協議項目上配置複寫壓縮。


    $ dsconf set-repl-agmt-prop -h host -p port suffix-DN \
     consumer-host:consumer-port transport-compression:level
    

    其中 level 可以是 highmediumlownone

    例如,若要在傳送複寫更新給 host1:1389 上的用戶時使用最快速的壓縮,請鍵入:


    $ dsconf set-repl-agmt-prop -h host2 -p 1389 dc=example,dc=com host1:1389 \
     transport-compression:high

    如需設定壓縮層級的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

修改複寫拓樸

本節說明管理現有複寫拓樸的以下幾方面:

變更複寫管理員

您可以編輯複寫協議,以變更用以連結至用戶伺服器的複寫管理員身份識別。若要避免複寫中斷,請在用戶上定義新的複寫管理員項目或憑證項目,再修改複寫協議。但是,如果複寫因為連結失敗而中斷,複寫機制將在複寫回復設定的限制內,於更正錯誤時自動傳送所有必要的更新。如需相關程序,請參閱使用非預設複寫管理員

管理複寫協議

您可以停用、啟用或刪除複寫協議。

停用複寫協議。

停用複寫協議時,主伺服器會停止傳送更新給指定的用戶。複寫到該伺服器的動作會停止,但是會保留協議中所有的設定。您可能會在稍後重新啟用協議而繼續複寫。如需有關中斷之後繼續複寫機制的資訊,請參閱啟用複寫協議

Procedure停用複寫協議。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    停用複寫協議。


    $ dsconf disable-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port
    

    例如:


    $ dsconf disable-repl-agmt -h host2 -p 1389 dc=example,dc=com host1:1389

啟用複寫協議

啟用複寫協議會繼續指定用戶的複寫。但是,如果複寫中斷的時間比複寫回復設定所允許的時間長,且其他供應者尚未更新用戶,就必須重新初始化用戶。複寫回復設定的大小為此供應者變更記錄的大小上限以及用戶清除延遲之最長存在期限 (請參閱執行進階用戶配置)。

當中斷時間很短且複寫可以回復時,主伺服器將會在重新啟用協議時自動更新用戶。

Procedure啟用複寫協議

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    啟用複寫協議。


    $ dsconf -h host -p port enable-repl-agmt suffix-DN consumer-host:consumer-port
    

    例如:


    $ dsconf -h host2 -p 1389 enable-repl-agmt dc=example,dc=com host1:1389

刪除複寫協議。

刪除複寫協議時會停止對應用戶的複寫,並會移除關於協議的所有配置資訊。若要在稍後繼續複寫,請改以停用複寫協議。中所述停用協議。

Procedure刪除複寫協議

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    刪除複寫協議。


    $ dsconf delete-repl-agmt -h host -p port suffix-DN consumer-host:consumer-port
    

    例如:


    $ dsconf delete-repl-agmt -h host2 -p 1389 dc=example,dc=com host1:1389

升級或降級複本

升級或降級複本會變更其在複寫拓樸中的角色。專屬用戶可升級為集散中心,而集散中心可升級為主伺服器。主伺服器可降級為集散中心,而集散中心也可降級為專屬用戶。但是,主伺服器無法直接降級為用戶,正如用戶無法直接升級為主伺服器。

多重主伺服器複寫機制內所允許的升級與降級使得拓樸非常具有彈性。之前由用戶複本提供服務的站點可能會增大,而需要集散中心與多個複本以處理負載。如果負載包含許多複本內容修改,集散中心會變成主伺服器以允許更快速的本機變更,而能接著複寫至其他站點的其他主伺服器。

升級或降級複本時,請注意下列事項:

Procedure升級或降級複本

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用下列其中一個指令升級或降級複本:


    $ dsconf promote-repl -h host -p port role suffix-DN
    

    $ dsconf demote-repl -h host -p port role suffix-DN
    

    其中 rolemasterhubconsumer

停用複寫的尾碼

停用複寫的尾碼會從複寫拓樸中移除該尾碼。若尾碼角色為主伺服器、集散中心或用戶,尾碼將再也無法更新或傳送更新。停用供應者伺服器上的尾碼會刪除所有複寫協議,且如果再次啟用複本,將必須重新建立複寫協議。

Procedure停用複寫的尾碼

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    停用複寫的尾碼。


    $ dsconf disable-repl -h host -p port suffix-DN
    

    例如:


    $ dsconf disable-repl -h host2 -p 1389 dc=example,dc=com

保持複寫的尾碼同步化

停止複寫中使用的目錄伺服器以進行定期維護之後,當伺服器再次連線時,必須確保伺服器會透過複寫立即更新。若是多重主伺服器環境中的主伺服器,必須有多重主伺服器集中的其他主伺服器更新目錄資訊。在其他情況下,集散伺服器或專屬用戶伺服器離線進行維護之後,當伺服器再次連線時,必須由主伺服器加以更新。

本節說明複寫重試演算法,並說明如何不等待下次重試便強制執行複寫更新。


備註 –

本節所述的程序僅能在已設定複寫已初始化用戶時使用。


複寫重試演算法

當來源複本複寫至目標失敗時,會定期依遞增時間間隔重試。重試間隔會視錯誤類型而定。

請注意,如果所配置的複寫協議一律會使來源複本與目標複本保持同步化,光是立即更新離線超過五分鐘的複本都會不足。

Procedure強制執行複寫更新

如果停止複寫,您可以強制執行目標尾碼的複寫更新。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    在來源伺服器上重新啟動目標伺服器的複寫更新。


    $ dsconf update-repl-dest-now -h host -p port suffix-DN destination-host:destination-port
    

    例如:


    $ dsconf update-repl-dest-now -h host2 -p 1389 dc=example,dc=com host1:1389

Directory Server 6.0 之前的版本複寫

節提供有關如何配置 Directory Server 6.0 之前的版本複寫的資訊。

在 Directory Server 6.0 與 Directory Server 5.1 或 5.2 之間進行複寫

Directory Server 5.1、5.2 與 6.0 在複寫配置方面相容,但下列幾點例外:

使用回溯變更記錄

LDAP 用戶端使用回溯變更記錄,確認目錄伺服器資料的變更歷程記錄。回溯變更記錄儲存在與目錄伺服器變更記錄不同的資料庫中,位於尾碼 cn=changelog 下。

回溯變更記錄可以在複寫拓樸中的獨立伺服器或每部伺服器上啟用。在一部伺服器上啟用回溯變更記錄時,預設會記錄該伺服器上所有尾碼的更新。回溯變更記錄可以配置為僅記錄指定尾碼的更新。

如需有關在複寫拓樸中使用回溯變更記錄以及使用回溯變更記錄的限制之資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的「Replication and the Retro Change Log Plug-In」

如需有關回溯變更記錄中某項目的屬性之資訊,請參閱 changeLogEntry(5dsoc) 線上手冊。

如需修改回溯變更記錄的更多資訊,請參閱 dsconf(1M) 線上手冊。

本節說明可以使用回溯變更記錄的各種方式。

Procedure啟用回溯變更記錄

若要使用回溯變更記錄,必須啟用記錄。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 修改回溯變更記錄配置項目:


    $ dsconf set-server-prop -h host -p port retro-cl-enabled:on
  2. 重新啟動伺服器。

    如需相關資訊,請參閱啟動、停止與重新啟動目錄伺服器實例

Procedure配置回溯變更記錄以記錄指定尾碼的更新

在一部伺服器上啟用回溯變更記錄時,預設會記錄該伺服器上所有尾碼的更新。本程序說明如何配置回溯變更記錄僅記錄指定尾碼的更新。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 修改回溯變更記錄配置項目:


    $ dsconf set-server-prop -h host -p port retro-cl-suffix-dn:suffix-DN
    

    例如,若要僅記錄在 cn=Contractors,dc=example,dc=com 尾碼與 ou=People,dc=example,dc=com 尾碼上的變更,請使用此指令:


    $ dsconf set-server-prop -h host2 -p 1389 \
     retro-cl-suffix-dn:"cn=Contractors,dc=example,dc=com" \
     retro-cl-suffix-dn:"ou=People,dc=example,dc=com"
  2. 重新啟動伺服器。

    如需相關資訊,請參閱啟動、停止與重新啟動目錄伺服器實例

Procedure配置回溯變更記錄以記錄刪除項目的屬性

本程序說明如何配置回溯變更記錄,以在刪除項目時記錄該項目的指定屬性。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 修改回溯變更記錄配置項目:


    $ dsconf set-server-prop -h host -p port retro-cl-deleted-entry-attr: \
     attribute1 attribute2
    

    例如,若要將回溯變更記錄設為記錄刪除項目的 UID 屬性,請使用此指令:


    $ dsconf set-server-prop -h host -p port retro-cl-deleted-entry-attr:uid
  2. 重新啟動伺服器。

    如需相關資訊,請參閱啟動、停止與重新啟動目錄伺服器實例

Procedure修剪回溯變更記錄

在指定的一段時間過後,回溯變更記錄中的項目可自動移除。若要配置一段時間使項目在此時間之後自動刪除,請確定已啟用回溯變更記錄,再設定 cn=Retro Changelog Plugin, cn=plugins, cn=config 項目中的 nsslapd-changelogmaxage 配置屬性。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 檢查是否已啟用回溯變更記錄。


    $ dsconf get-server-prop -h host -p port retro-cl-enabled
  2. 若未啟用回溯變更記錄,請啟用記錄。


    $ dsconf set-server-prop -h host -p port retro-cl-enabled:on
  3. 為記錄的變更設定最長存在期限。


    $ dsconf set-server-prop -h host -p port retro-cl-max-age: duration
    

    其中 duration 可以是undefined (無存在期限) 或下列其中之一:

    • s 表示秒

    • m 表示分鐘

    • h 表示小時

    • d 表示天

    • w 表示週

    例如,若要將回溯變更記錄最長存在期限設為兩天,請鍵入:


    $ dsconf set-server-prop -h host 2 -p 1389 retro-cl-max-age:2d

    下次在變更記錄上進行作業時會修剪回溯變更記錄。

存取控制與回溯變更記錄

回溯變更記錄支援搜尋作業。該記錄適用於包含此格式的篩選器之搜尋:


(&(changeNumber>=X)(changeNumber<=Y))

根據一般規則,請勿於回溯變更記錄項目上執行增加或修改作業。您可以刪除項目以修剪記錄大小。修改預設存取控制策略是唯一需要在回溯變更記錄上執行的修改作業。

建立回溯變更記錄時,預設會套用下列存取控制規則:

若要修改套用到回溯變更記錄的預設存取控制策略,請修改 cn=changelog 項目的 aci 屬性。請參閱第 6 章, 目錄伺服器存取控制

取得複寫狀態

您可以使用 DSCC 或指令行工具,取得複寫狀態。

在 DSCC 中取得複寫狀態

您可以使用 [尾碼] 標籤以圖形化方式檢視複寫,包含複寫協議與複寫延遲。如需更多資訊,請參閱 DSCC 線上說明。

此外,您可以使用 DSCC 檢視複寫拓樸,如下圖所示。

圖 10–1 複寫拓樸範例

DSCC 中的複寫拓樸範例。

透過使用指令行取得複寫狀態

如果無法使用 DSCC,請使用指令行工具取得複寫部署的相關資訊。

線上手冊提供完整的指令行語法與這些工具的使用範例。

若要尋找這些指令所在的目錄,請參閱指令位置

解決常見複寫衝突

多重主伺服器複寫使用約略一致的複寫模式。這表示相同的項目可能會在不同的伺服器上同時修改。當更新在兩部伺服器之間互傳時,必須解決所有衝突的變更。大多數的衝突會自動解決。例如,與各伺服器上的變更相關之時間戳記會經由使用最近的變更而獲得解決。但是,某些變更衝突需要手動介入才能解決。

本節包含下列主題:

使用 DSCC 解決複寫衝突

解決複寫衝突最簡單的方式是使用 DSCC。如需相關資訊,請參閱 DSCC 線上說明。

使用指令行解決複寫衝突

您可以使用指令行解決複寫衝突。無法經由複寫程序自動解決之變更衝突的項目,會包含操作屬性 nsds5ReplConflict 做為衝突記號。

若要尋找出現衝突的項目,請定期搜尋包含此屬性的項目。例如,您可以使用下列 ldapsearch 指令尋找衝突的項目:


$ ldapsearch -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config \
 -w - -b "dc=example,dc=com" "(nsds5ReplConflict=*)"

請注意,預設會編製 nsds5ReplConflict 屬性的索引。

解決命名衝突

具有相同 DN 的項目如果是在伺服器彼此複寫變更之前所建立的,則可能是建立在不同的主伺服器上。經過複寫之後,衝突解決機制會自動重新命名第二個建立的項目。

具有 DN 命名衝突的項目會在其 DN 中包含操作屬性 nsuniqueid 提供的唯一識別碼,進行重新命名。

例如,如果項目 uid=bjensen,ou=People,dc=example,dc=com 在兩部主伺服器上同時建立,則這兩部主伺服器在複寫之後會有以下兩個項目:

必須為第二個項目提供有用的 DN。您可以刪除衝突的項目,並再次以非衝突的名稱增加。但是,重新命名項目可確保其內容不會變更。重新命名程序會視命名屬性是單值或多值而有所不同。請參閱下列程序。

Procedure重新命名具有多值命名屬性的衝突項目

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 重新命名項目,同時保留舊 RDN 值,例如:


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: nsuniqueid=66446001-1dd211b2-66225011-2ee211db+uid=bjensen,dc=example,dc=com
    changetype: modrdn
    newrdn: uid=bj66446001
    deleteoldrdn: 0
    ^D

    您無法刪除此步驟中的舊 RDN 值,因為該值還同時包含無法刪除的 nsuniqueid 操作屬性。

  2. 移除命名屬性的舊 RDN 值與衝突記號屬性,例如:


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: uid=bj66446001,dc=example,dc=com
    changetype: modify
    delete: uid
    uid: bjensen
    -
    delete: nsds5ReplConflict
    ^D

Procedure重新命名具有單值命名屬性的衝突項目

複寫項目中的命名屬性為單值時,例如 dc (網域元件),您無法僅重新命名項目為相同屬性的其他值。相反的,您必須提供項目暫存名稱。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 使用不同的命名屬性重新命名項目,並保留舊 RDN,例如:


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: nsuniqueid=66446001-1dd211b2-66225011-2ee211db+dc=HR,dc=example,dc=com
    changetype: modrdn
    newrdn: o=TempHREntry
    deleteoldrdn: 0
    ^D

    您無法刪除此步驟中的舊 RDN 值,因為該值還同時包含無法刪除的 nsuniqueid 操作屬性。

  2. 將想要的命名屬性變更為唯一值,並移除衝突記號屬性,例如:


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: o=TempHREntry,dc=example,dc=com
    changetype: modify
    replace: dc
    dc: NewHR
    delete: nsds5ReplConflict
    ^D
  3. 將項目重新命名回預定命名屬性,例如:


    $ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    Enter bind password:
    dn: dc=NewHR,dc=example,dc=com
    changetype: modrdn
    newrdn: dc=HR
    deleteoldrdn: 1
    ^D

    您可以將 deleteoldrdn 屬性值設為 1,刪除成對的暫存屬性值組 o=TempHREntry。若要保留此屬性,請將 deleteoldrdn 屬性值設為 0

解決孤立項目的衝突

複寫刪除作業時,若是用戶伺服器發現要刪除的項目有子項目,衝突解決程序會建立接點項目,以避免目錄中出現孤立項目。

同理,複寫增加作業時,若是用戶伺服器找不到父項目,衝突解決程序就會建立表示父系的接點項目,使得新項目不會成為孤立項目。

接點項目是包含物件類別 glueextensibleObject 的暫存項目。接點項目會以下列各種方式建立:

解決可能的互通操作問題

如需依賴屬性唯一性的應用程式互通操作,例如郵件伺服器,您可能必須限制包含 nsds5ReplConflict 屬性的項目之存取權。如果沒有限制這些項目的存取權,僅需要一個屬性的應用程式會同時選擇原始項目與包含 nsds5ReplConflict 的衝突解決項目,而作業將因此失敗。

若要限制存取,您必須使用下列指令修改授予匿名讀取權的預設 ACI:


$ ldapmodify -h host2 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: dc=example,dc=com
changetype: modify
delete: aci
aci: (target ="ldap:///dc=example,dc=com")
 (targetattr !="userPassword"
 (version 3.0;acl "Anonymous read-search  access";
 allow (read, search, compare)(userdn = "ldap:///anyone");)
-
add: aci
aci: (target="ldap:///dc=example,dc=com")
 (targetattr!="userPassword")
 (targetfilter="(!(nsds5ReplConflict=*))")(version 3.0;acl
 "Anonymous read-search access";allow (read, search, compare)
 (userdn="ldap:///anyone");)
^D

新的 ACI 會避免搜尋結果中傳回包含 nsds5ReplConflict 屬性的項目。

第 11 章 目錄伺服器模式

目錄伺服器附有標準模式,內含數以百計的物件類別與屬性。雖然標準物件類別與屬性應足以因應您大部分的需求,但仍有可能需要建立新的物件類別與屬性,以延伸模式。如需標準模式的簡介與如何依據本身的部署設計模式的指示,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」

本章說明如何管理您的模式,其中包含下列主題:

管理模式檢查

開啟模式檢查後,目錄伺服器會確認所有的匯入、增加以及修改作業確實符合目前所定義的目錄模式。


備註 –

修改項目時,目錄伺服器會對整個項目執行模式檢查,而不是僅檢查進行修改的屬性。因此,若項目中有任何物件類別或屬性不符合模式,作業即可能失敗。

但模式檢查並不會驗證屬性值在語法方面的有效性。


模式檢查預設為開啟。一般情況下,在執行目錄伺服器時請開啟模式檢查。許多用戶端應用程式均假設,開啟模式檢查即表示所有項目皆符合模式。但在開啟模式檢查後,目錄伺服器並不會因此而驗證目錄中現有的內容。唯一能夠確保所有目錄內容均符合模式的方法,是在增加任何項目或重新初始化所有項目之前開啟模式檢查。

在某些情況下您會想關閉模式檢查,例如為使已知符合模式的 LDIF 檔案加快匯入作業速度而關閉,是其中之一。但如此做會有匯入項目不符合模式的風險。若關閉模式檢查,則無法偵測不符合模式的匯入項目。

如需在複寫環境中使用模式檢查的詳細資訊,請參閱複寫目錄模式

Procedure修正模式規範遵循問題

當項目不符合模式時,即可能無法搜尋此項目,而使項目的修改作業失敗。若要更正此問題,請遵循此程序中的步驟。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

開始之前

為避免日後需要修正模式規範遵循問題,請在進行部署前事先規劃您的模式,以儘可能減少模式變更。如需更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」

  1. 若想找出項目不符合的原因,請擷取該項目,並手動將其與目前定義的模式進行比較。

    如需詳細資訊,請參閱檢視屬性類型檢視物件類別

  2. 修改項目以符合模式,或修改模式以符合項目。

關於自訂模式

若標準模式不足以因應您的目錄需求,可以加以延伸。自訂模式時,請遵循下列指示:

自訂模式時,請勿在標準模式中修改、刪除或取代屬性或物件類別的任何現有定義。這些動作可能導致無法與其他目錄和 LDAP 用戶端應用程式相容的問題。

請勿修改任何目錄伺服器內部操作屬性。但您可以為外部應用程式建立您自己的操作變數。

一律定義物件類別,而不要使用 objectClass: extensibleObject。目錄伺服器不會對具有物件類別 extensibleObject 的項目執行模式檢查,因此無法限制或檢查項目中所含的屬性。目錄伺服器無法檢查出應用程式中的拼字錯誤,例如將 givenName 屬性類型誤植為 giveName。再者,目錄伺服器也必須假設 extensibleObject 項目所有其他未定義的屬性皆為多值屬性,且使用區分大小寫的字串語法。此外,有些應用程式須依賴具有特定物件類別的項目。一般而言,若您的應用程式必須使用物件類別的延伸,則不應放棄模式管理。此時應建立內含應用程式所需屬性的輔助物件類別。

本節包含有關預設目錄模式與建立自訂屬性與物件類別的資訊。

預設目錄伺服器模式

目錄伺服器隨附之模式的相關說明,位於儲存在 instance-path/config/schema/ 目錄中的檔案集內。

此目錄包含目錄伺服器與相關產品的所有共用模式。LDAP v3 標準使用者與組織模式位於 00core.ldif 檔案中。舊版目錄所使用的配置模式則位於 50ns-directory.ldif 檔案中。


備註 –

請勿在伺服器執行時修改此目錄中的檔案。


物件識別碼

每個 LDAP 物件類別或屬性,都必須指定唯一的名稱與物件識別碼 (OID)。定義模式時,OID 在您的組織中必須是唯一的。一個 OID 即足以因應您所有的模式需求。接著,您可以為屬性與物件類別的此 OID 新增分支。

取得及指定您模式中的 OID 時,須執行下列動作:

命名屬性與物件類別

建立新屬性與物件類別的名稱時,請讓名稱具有意義,以便使用模式。

您可以在自訂元素中加上唯一前綴,以避免自訂模式元素與現有模式元素之間產生命名衝突。以 Example.com Corporation 為例,它可在其各個自訂的模式元素前加上前綴 Example。它也可增加名為 ExamplePerson 的特殊物件類別,以識別其目錄中的 Example.com 員工。

請注意,在 LDAP 中,屬性類型名稱與物件類別名稱均會區分大小寫。應用程式應將其視為區分大小寫的字串。

定義新的物件類別時

當現有的物件類別不支援您必須儲存在目錄項目中的所有資訊時,您可以新增物件類別。

有兩種方法可新建物件類別:

在決定如何實作新的物件類別時,請考量下列事項。

定義新的屬性時

當現有的屬性不支援您必須儲存在目錄項目中的所有資訊時,您可以新增屬性。請儘可能使用標準屬性。請搜尋原本即已存在於預設目錄模式中的屬性,並使用與新的物件類別相關的屬性。

例如,您可能會發現,您想儲存到人員項目上的資訊,超出 personorganizationalPersoninetOrgPerson 物件類別所支援的範圍。您想在目錄中儲存生日時,標準目錄伺服器模式中卻沒有屬性存在。您可以建立名為 dateOfBirth 的新屬性。請定義允許此屬性的新輔助類別,以允許此屬性用於代表人員的項目上。

建立自訂模式檔案時

建立自訂模式檔案時,請留意下列事項,尤其是使用複寫時更需特別注意:

透過 LDAP 管理屬性類型

本節說明如何透過 LDAP 建立、檢視及刪除屬性類型。

建立屬性類型

cn=schema 項目具有多值屬性 attributeTypes,此屬性含有目錄模式中各種屬性類型的定義。您可以使用 ldapmodify(1) 指令增加至這些定義。

新的屬性類型定義,以及您對使用者定義的屬性類型所做的變更,都會儲存在 99user.ldif 檔案中。

對於每個屬性類型定義,您必須至少提供一個 OID 以定義您新的屬性類型。請考慮對新的屬性類型至少使用下列元素:

Procedure建立屬性類型

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 根據 RFC 4517 中所指定的語法,備妥您的屬性類型定義。

  2. 使用 ldapmodify(1) 指令,增加您的屬性類型定義。

    請注意,目錄伺服器會將 X-ORIGIN 'user defined' 增加到您所提供的定義中。


範例 11–1 建立屬性類型

下列範例使用 ldapmodify 指令,增加使用「目錄字串」語法的新屬性類型。


$ cat blogURL.ldif 
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.2.3.4.5.6.7 
 NAME ( 'blog' 'blogURL' ) 
 DESC 'URL to a personal weblog' 
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 
 SINGLE-VALUE )

$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -f blogURL.ldif
Enter bind password: 
modifying entry cn=schema

$

在生產環境中,您必須提供有效且唯一的 OID,而非 1.2.3.4.5.6.7


檢視屬性類型

cn=schema 項目具有多值屬性 attributeTypes,此屬性含有目錄模式中各種屬性類型的定義。您可以使用 ldapsearch(1) 指令讀取這些定義。

Procedure檢視屬性類型

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 ldapsearch 指令,檢視目前位於您目錄模式中的所有屬性類型定義。


範例 11–2 檢視屬性類型

下列指令可顯示所有屬性類型的定義:


$ ldapsearch -T -b cn=schema "(objectclass=*)" attributeTypes

-T 選項可使 ldapsearch 指令不會進行 LDIF 換行,而使您能夠更容易地使用 grepsed 之類的指令處理輸出。若您接著透過 grep 指令對此指令的輸出使用管道符號,就只能檢視目錄模式內使用者定義的延伸。例如:


$ ldapsearch -T -b cn=schema "(objectclass=*)" attributeTypes | grep "user defined"
 attributeTypes: ( 1.2.3.4.5.6.7 NAME ( 'blog' 'blogURL' ) 
 DESC 'URL to a personal weblog' 
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE 
 X-ORIGIN 'user defined' )

刪除屬性類型

cn=schema 項目具有多值屬性 attributeTypes,此屬性含有目錄模式中各種屬性類型的定義。您可以使用 ldapmodify(1) 指令刪除具有 X-ORIGIN 'user defined' 的定義。

模式係由 LDAP 檢視定義於 cn=schema 中,因此您可以使用 ldapsearchldapmodify 公用程式,以線上方式檢視及修改模式。但您只能刪除在 X-ORIGIN 欄位中具有 'user defined' 值的模式元素。伺服器將不會刪除其他定義。

您對使用者定義的屬性所做之變更,會儲存在 99user.ldif 檔案中。

Procedure刪除屬性類型

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 檢視所要刪除之屬性類型的定義。

    如需詳細資訊,請參閱檢視屬性類型

  2. 使用 ldapmodify(1) 指令,刪除模式中所出現的屬性類型定義。


範例 11–3 刪除屬性類型

下列指令將刪除範例 11–1 中所建立的屬性類型:


$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password: 
dn: cn=schema
changetype: delete
delete: attributeTypes
attributeTypes: ( 1.2.3.4.5.6.7 NAME ( 'blog' 'blogURL' ) 
 DESC 'URL to a personal weblog' 
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE 
 X-ORIGIN 'user defined' )
^D

請注意,您必須納入 X-ORIGIN 'user defined' 這項由目錄伺服器增加,而用以將此模式定義歸類為延伸的屬性。


透過 LDAP 管理物件類別

本節說明如何透過 LDAP 建立、檢視及刪除物件類別。

建立物件類別

cn=schema 項目具有多值屬性 objectClasses,此屬性含有目錄模式中各種物件類別的定義。您可以使用 ldapmodify(1) 指令增加至這些定義。

新的物件類別定義,以及您對使用者定義的物件類別所做的變更,都會儲存在 99user.ldif 檔案中。

若要建立數個繼承自其他物件類別的物件類別,您必須先建立父系物件類別。若您的新物件類別使用自訂屬性,則也必須先定義這些屬性。

對於每個物件類別定義,必須至少提供一個 OID。請考慮對新的物件類別至少使用下列元素:

Procedure建立物件類別

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 根據 RFC 4517 中所指定的語法,備妥您的物件類別定義。

  2. 使用 ldapmodify(1) 指令,增加您的物件類別定義。

    請注意,目錄伺服器會將 X-ORIGIN 'user defined' 增加到您所提供的定義中。


範例 11–4 建立物件類別

下列範例使用 ldapmodify 指令新增物件類別。


$ cat blogger.ldif 
dn: cn=schema
changetype: modify
add: objectClasses
objectClasses: ( 1.2.3.4.5.6.8 
 NAME 'blogger' 
 DESC 'Someone who has a blog' 
 SUP inetOrgPerson 
 STRUCTURAL 
 MAY blog )

$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w - -f blogger.ldif
Enter bind password: 
modifying entry cn=schema

$

在生產環境中,您必須提供有效且唯一的 OID,而非 1.2.3.4.5.6.8


檢視物件類別

cn=schema 項目具有多值屬性 objectClasses,此屬性含有目錄模式中各種物件類別的定義。您可以使用 ldapsearch(1) 指令讀取這些定義。

Procedure檢視物件類別

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    使用 ldapsearch 指令,檢視目前位於您目錄模式中的所有物件類別定義。


範例 11–5 檢視物件類別

下列指令可顯示所有物件類別的定義:


$ ldapsearch -T -b cn=schema "(objectclass=*)" objectClasses

-T 選項可使 ldapsearch 指令不會進行 LDIF 換行,而使您能夠更容易地使用 grepsed 之類的指令處理輸出。若您接著透過 grep 指令對此指令的輸出使用管道符號,就只能檢視目錄模式內使用者定義的延伸。例如:


$ ldapsearch -T -b cn=schema "(objectclass=*)" objectClasses | grep "user defined"
objectClasses: ( 1.2.3.4.5.6.8 NAME 'blogger'
 DESC 'Someone who has a blog' STRUCTURAL MAY blog
 X-ORIGIN 'user defined' )
$ 

刪除物件類別

cn=schema 項目具有多值屬性 objectClasses,此屬性含有目錄模式中各種物件類別的定義。您可以使用 ldapmodify(1) 指令刪除具有 X-ORIGIN 'user defined' 的定義。

模式係由 LDAP 檢視定義於 cn=schema 中,因此您可以使用 ldapsearchldapmodify 公用程式,以線上方式檢視及修改模式。但您只能刪除在 X-ORIGIN 欄位中具有「使用者定義」 值的模式元素。伺服器將不會刪除其他定義。

您對使用者定義的元素所做的變更,會儲存在 99user.ldif 檔案中。

Procedure刪除物件類別

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 檢視要刪除之物件類別的定義。

    如需詳細資訊,請參閱檢視物件類別

  2. 使用 ldapmodify(1) 指令,刪除模式中所出現的物件類別定義。


範例 11–6 刪除物件類別

下列指令將刪除範例 11–4 中所建立的物件類別:


$ ldapmodify -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password: 
dn: cn=schema
changetype: delete
delete: objectClasses
objectClasses: ( 1.2.3.4.5.6.8 NAME 'blogger' DESC 'Someone who has a blog' 
 STRUCTURAL MAY blog X-ORIGIN 'user defined' )
^D

請注意,您必須納入 X-ORIGIN 'user defined' 這項由目錄伺服器增加,而用以將此模式定義歸類為延伸的屬性。


延伸目錄伺服器模式

當您新增屬性至模式時,必須建立含有新屬性的新物件類別。雖然直接將屬性增加到已含有您所需之大部分屬性的現有物件類別中,似乎是很方便的做法,但此舉卻會危及與 LDAP 用戶端之間的互通操作。

目錄伺服器與現有 LDAP 用戶端之間的互通操作,依賴於標準 LDAP 模式。若您變更標準模式,也將在升級伺服器時遇到困難。同理,您亦不可刪除標準模式元素。

目錄伺服器模式儲存在 cn=schema 項目的屬性中。與配置項目相同,這也是可在伺服器啟動期間從檔案讀取的 LDAP 模式檢視。

您用以延伸目錄伺服器模式的方法,取決於您是否要控制模式延伸儲存時所使用的檔案名稱。此外也取決於您是否要透過複寫發送變更給用戶。請參閱下表,以根據您特定的情況決定所要執行的程序。

表 11–1 延伸模式的方式

作業 

指示 

您不使用複寫。想增加自訂模式檔案,藉以延伸模式。 

使用自訂模式檔案延伸模式

您希望透過 LDAP 延伸模式。 

透過 LDAP 延伸模式

您要使用複寫。想在所有伺服器上保留自訂模式檔案的檔案名稱。 

使用自訂模式檔案延伸模式

您要使用複寫。想在主伺服器複本上增加自訂模式檔案,藉以延伸模式。接著,要讓複寫機制將模式延伸複製到用戶伺服器上。 

使用模式檔案與複寫延伸模式

如需有關物件類別、屬性與目錄模式的更多資訊,以及如何延伸模式的相關指示,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Designing a Directory Schema」。如需有關標準屬性與物件類別的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Man Page Reference」

本節針對可延伸目錄模式的多種方法提供相關資訊。

使用自訂模式檔案延伸模式

模式檔案是位於 instance-path/config/schema/ 中的 LDIF 檔案。instance-path 對應於目錄伺服器實例所在的檔案系統目錄。例如,實例可能位於 /local/ds/ 中。這些檔案可定義標準模式,供目錄伺服器以及所有依賴目錄伺服器的伺服器使用。如需有關檔案與標準模式的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」「Sun Java System Directory Server Enterprise Edition 6.0 Man Page Reference」

模式檔案只會在伺服器啟動時讀取一次。檔案的 LDIF 內容會增加至 cn=schema 中模式的常駐記憶體 LDAP 檢視。模式定義的順序是很重要的,因此模式檔案名稱的開頭處會加上號碼,並依據字母數字順序載入。只有安裝期間所定義的系統使用者,才能寫入此目錄中的模式檔案。

直接在 LDIF 檔案中定義模式時,請勿於 X-ORIGIN 欄位中使用 'user defined' 值。此值必須保留給透過 cn=schema 的 LDAP 檢視所定義,同時出現在檔案 99user.ldif 中的模式元素使用。

99user.ldif 檔案含有其他 ACI,供 cn=schema 項目與所有使用指令行或 DSCC 增加的模式定義使用。新增模式定義時,即會覆寫 99user.ldif 檔案。若要修改此檔案,您必須立即重新啟動伺服器,以確保更新目前的變更。

請勿修改其他模式檔案中所定義的標準模式。但您可以新增檔案以定義新的屬性與物件類別。例如,若要在多部伺服器上定義新的模式元素,您可以先將元素定義於名為 98mySchema.ldif 的檔案中,再將此檔案複製到所有伺服器的模式目錄中。接著您必須重新啟動所有伺服器,以載入新的模式檔案。

Procedure使用自訂模式檔案延伸模式

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 建立您自己的模式定義檔案,如 98mySchema.ldif

    模式檔案中的定義所使用之語法,說明於 RFC 4517 中。

  2. (可選擇) 若此伺服器是可傳送更新至其他伺服器的主伺服器複本,請將您的模式定義檔案複製到複寫拓樸中的每個伺服器實例上。

    複寫機制無法偵測您對含有模式的 LDIF 檔案所做的任何直接變更。因此,即使在重新啟動主伺服器後,您的變更仍不會複寫至用戶。

  3. 請重新啟動已複製了模式定義檔案之每個目錄伺服器實例。

    您的變更將在伺服器重新啟動後生效,並重新載入模式定義。

透過 LDAP 延伸模式

模式係由 LDAP 檢視定義於 cn=schema 中,因此您可以使用 ldapsearchldapmodify 公用程式,以線上方式檢視及修改模式。但您只能修改在 X-ORIGIN 欄位中具有 'user defined' 值的模式元素。伺服器會拒絕對其他定義的任何修改。

新的元素定義,以及您對使用者定義的元素所做的變更,都會儲存在 99user.ldif 檔案中。

Procedure透過 LDAP 延伸模式

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

開始之前

從指令行修改模式定義很可能會發生錯誤,因為您必須一字不漏地鍵入冗長的值。但您可以在更新目錄模式時所需的程序檔中使用此功能。

  1. 使用 ldapmodify(1) 指令,增加或刪除個別的 attributeTypes 屬性值。

    如需詳細資訊,請參閱建立屬性類型刪除屬性類型

  2. 使用 ldapmodify(1) 指令,增加或刪除個別的 objectClasses 屬性值。

    如需詳細資訊,請參閱建立物件類別刪除物件類別

另請參閱

若要修改其中一個值,必須先刪除該特定值,再將其增加為新值。之所以必須這麼做,是因為這些屬性是多值屬性。如需詳細資訊,請參閱修改多值屬性的某個值

使用模式檔案與複寫延伸模式

如需有關自訂模式檔案的資訊,請參閱使用自訂模式檔案延伸模式。下列程序說明如何使用複寫機制,將模式延伸傳播至拓樸中的所有伺服器。

Procedure使用模式檔案與複寫延伸模式

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 以下列其中一種方式備妥您的模式延伸:

    • 建立您自己的模式定義檔案,如 98mySchema.ldif

    • 將模式延伸增加到 99user.ldif 中。

    模式檔案中的定義所使用之語法,說明於 RFC 4517 中。

  2. 在存放模式定義檔案的主伺服器上,執行 schema_push 指令。

    此程序檔不會實際將模式發送至複本。此程序檔會將特殊的屬性寫入模式檔案中,使模式檔案在載入時隨即進行複寫。如需更多資訊,請參閱 schema_push(1M) 線上手冊。

  3. 重新啟動存放模式定義檔案的主伺服器。

    複寫機制無法偵測您對含有模式的 LDIF 檔案所做的任何直接變更。當您在執行 schema_push 後重新啟動伺服器時,伺服器會載入所有模式檔案,接著複寫機制會將新的模式複寫至用戶。

複寫目錄模式

每當您在兩部伺服器之間配置一或多個尾碼的複寫時,模式定義也會自動複寫。模式定義的自動複寫可確保所有複本均具有完整且相同的模式,並以此模式定義所有可複寫至用戶的物件類別與屬性。主伺服器因此也含有主伺服器模式。

但模式複寫並不是即時的,即使您透過 LDAP 修改模式也是如此。目錄資料更新時,或在模式修改後第一次啟動複寫階段作業時,皆會觸發模式複寫。

若要對所有複本執行模式,至少必須對所有主伺服器啟用模式檢查。在執行 LDAP 作業的主伺服器上檢查模式時,模式並不需在用戶更新後進行檢查。為提昇效能,複寫機制會略過對用戶複本的模式檢查。


備註 –

請勿關閉集散中心與專屬用戶的模式檢查。模式檢查並不會影響用戶的效能。請持續開啟模式檢查,以指出複本內容是否符合其模式。


主伺服器會在用戶初始化期間自動將模式複寫至用戶。無論何時,只要模式透過 DSCC 或指令行工具進行修改,主伺服器也將自動複寫模式。依預設會複寫整個模式。任何在用戶上尚不存在的其他模式元素,皆會在用戶上建立,並儲存於 99user.ldif 檔案中。

例如,假設主伺服器在啟動時於 98mySchema.ldif 檔案中含有模式定義。此外同時假設,您接下來將定義與其他伺服器 (主伺服器、集散中心或專屬用戶) 的複寫協議。當您後續由此主伺服器初始化複本時,複寫的模式將含有來自 98mySchema.ldif 的定義,但定義會儲存在複本伺服器上的 99user.ldif 中。

於用戶初始化期間複寫模式後,若在主伺服器上修改 cn=schema 中的模式,也將使整個模式複寫至用戶。因此,透過指令行公用程式或 DSCC 對主伺服器模式所做的任何修改,均會複寫至用戶。這些修改會儲存在主伺服器的 99user.ldif 中,而透過前述的相同機制,這些修改亦可儲存在用戶的 99user.ldif 中。

請考量下列在複寫環境中維護模式一致性的指示:

配置部分複寫時,需同時考量下列事項:

限制模式複寫

複寫機制每次複寫模式時,預設會將整個模式傳送至用戶。以下兩種情況不適合將整個模式傳送至用戶:


備註 –

目錄伺服器使用 11rfc2307.ldif 模式檔案。此模式檔案符合 RFC 2307

Directory Server 5.2 之前的目錄伺服器版本使用 10rfc2307.ldif 模式檔案。


Procedure限制模式複寫

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    將模式複寫限定為僅複寫使用者定義的模式。


    $ dsconf set-server-prop -h host -p port repl-user-schema-enabled:on

    預設值 off 會在必要時進行整個模式的複寫。

第 12 章 目錄伺服器編製索引

目錄伺服器的索引如同書中的索引一般,經由建立搜尋字串與目錄內容參照的關聯可加速搜尋。

如需有關索引類型與索引調校的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 6 章「Directory Server Indexing」

本章包含下列主題:

管理索引

本節說明如何管理特定屬性的索引,包含建立、修改與刪除索引的相關資訊。如需虛擬清單檢視 (VLV) 作業特有的程序,請參閱管理瀏覽索引

Procedure列出索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    若要列出現有的索引與其特性,請使用此指令:


    $ dsconf list-indexes -h host -p port -v suffix-DN
    

Procedure建立索引


備註 –

您無法建立新的系統索引。僅會保留目錄伺服器內部定義的現有系統索引。


您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 建立新的索引配置。

    使用 dsconf create-index 指令行公用程式,指定要編製索引的屬性,以配置新的索引資訊。

    例如,若要建立 preferredLanguage 屬性的索引項目,請使用此指令:


    $ dsconf create-index -h host -p port dc=example,dc=com preferredLanguage

    備註 –

    指令 dsconf create-index 會設定索引配置,但是不會實際建立搜尋所需的索引檔案。產生索引檔案會影響效能。在建立新的索引配置之後手動產生索引檔案,可讓您在編製索引程序期間有更多的控制權。

    建立索引時,請一律使用屬性的主要名稱。請勿使用屬性的別名。屬性的主要名稱為模式中所列的第一個屬性名稱,例如 userid 屬性的主要名稱為 uid


  2. (可選擇) 使用 dsconf set-index-prop 指令設定索引特性。

    dsconf create-index 指令會以預設特性建立索引。若要修改這些特性,請使用 dsconf set-index-prop 指令。如需修改索引特性的詳細資訊,請參閱修改索引

  3. 產生索引檔案。

    請參閱產生索引

  4. 針對所有要編製索引的伺服器重複上述步驟。

Procedure修改索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 修改索引特性。


    $ dsconf set-index-prop -h host -p port suffix-DN attr-name property:value
    

    例如,若要啟用 preferredLanguage 索引的近似索引 approx-enabled,請使用此指令:


    $ dsconf set-index-prop -h host -p port dc=example,dc=com preferredLanguage approx-enabled:on

    您可以修改各個索引的下列特性:

    • eq-enabled 相同

    • pres-enabled 存在

    • sub-enabled 子字串

    想要修改的其中一個特性可能是選擇性的 nsMatchingRule 屬性。此屬性包含伺服器已知的所有相符規則之 OID。它會啟用國際化索引的語言比較順序之 OID,以及 CaseExactMatch 等其他的相符規則。如需支援的語言環境清單與相關比較順序的 OID,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

    如需索引配置屬性的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」

  2. 重新產生新的索引。

    請參閱產生索引

  3. 針對所有包含已修改屬性的索引之伺服器重複上述步驟。

Procedure產生索引

本程序會產生索引檔案,以讓新的或修改過的索引可進行搜尋。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    依下列其中一種方式產生索引檔案:

    • 以線上方式產生新的索引檔案。


      $ dsconf reindex -h host -p port [-t attr] suffix-DN
      

      其中 -t 會指定僅能重新編製特定單一屬性或特定多重屬性的索引,而不是所有屬性。

      例如,若要重新產生 preferredLanguage 索引,請鍵入:


      $ dsconf reindex -h host -p port -t preferredLanguage dc=example,dc=com

      dsconf reindex 指令執行期間,可透過伺服器使用尾碼內容。但是在指令完成之前,無法編製搜尋的索引。重新編製索引是相當耗費資源之作業,可能會影響到伺服器上其他作業的效能。

    • 以離線方式產生新的索引檔案。


      $ dsadm reindex -t attr instance-path suffix-DN
      

      例如,若要重新產生 preferredLanguage 索引,請鍵入:


      $ dsadm reindex -t preferredLanguage /local/ds dc=example,dc=com
    • 重新初始化尾碼可在離線狀態下快速重新產生所有的索引。

      重新初始化尾碼時,會自動重新產生所有索引檔案。根據目錄大小的不同,重新初始化尾碼一般會比重新編製兩個或兩個以上的索引還要快。但是,初始化期間無法使用尾碼。如需更多資訊,請參閱重新初始化以重新編製尾碼的索引


    備註 –

    如果在多個尾碼上平行執行 dsconf importdsconf reindex 或同時執行兩個指令,作業事件記錄會變大而可能對效能造成不良影響。


Procedure刪除索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    移除為屬性所配置的所有索引。


    $ dsconf delete-index -h host -p port suffix-DN attr-name
    

    例如,下列指令會刪除 preferredLanguage 屬性的所有索引:


    $ dsconf delete-index -h host -p port dc=example,dc=com preferredLanguage

    刪除預設索引時請特別小心,此舉會影響目錄伺服器運作。

變更索引清單臨界值

搜尋速度緩慢可能肇因於系統索引清單大小超過了索引清單臨界值。索引清單臨界值是每個索引鍵值的上限數。若要判定是否已超過索引清單臨界值,請檢查存取記錄。存取記錄 RESULT 訊息結尾的 notes=U 旗標表示執行了未編製索引的搜尋。相同連線與作業的前一則 SRCH 訊息會指定使用的搜尋篩選。下列兩行範例會追蹤未編製索引的搜尋 cn=Smith,並傳回 10,000 個項目。已從訊息移除時間戳記。


conn=2 op=1 SRCH base="o=example.com" scope=0 filter="(cn=Smith)"
conn=2 op=1 RESULT err=0 tag=101 nentries=10000 notes=U

如果系統經常會超過索引清單臨界值,請考慮提高臨界值以改善效能。下列程序使用 dsconf set-server-prop 指令修改 all-ids-threshold 特性。如需調校索引與 all-ids-threshold 特性的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的「Tuning Indexes for Performance」

Procedure變更索引清單臨界值

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 調整索引清單臨界值。

    您可以在下列任何一個層級調整索引清單臨界值:

    • 實例層級:


      dsconf set-server-prop -h host -p port all-ids-threshold:value
      
    • 尾碼層級:


      dsconf set-suffix-prop -h host -p port suffix-DN all-ids-threshold:value
      
    • 項目層級:


      dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold:value
      
    • 依搜尋類型的索引層級:


      dsconf set-index-prop -h host -p port suffix-DN all-ids-threshold search-type:value
      

      其中 search-type 為下列其中之一:

      • eq-enabled 相同

      • pres-enabled 存在

      • sub-enabled 子字串

      近似索引無法配置 all-ids-threshold 特性。

    您可以在依搜尋類型的索引層級使用 DSCC,設定臨界值。如需更多資訊,請參閱目錄伺服器線上說明。

  2. 重新產生尾碼索引。

    請參閱產生索引

  3. 如果已為舊的所有 ID 臨界值調校資料庫的快取大小,且伺服器有足夠的實體記憶體,請考慮加資料庫的快取大小。

    根據所有 ID 臨界值增量範圍的 25%,增加資料庫的快取大小。

    亦即,如果所有 ID 臨界值從 4000 提高到 6000,則可以增加資料庫的快取大小約 12 ½% 做為索引清單大小的增量。

    使用屬性 dbcachesize 設定資料庫的快取大小。憑經驗尋找最適大小,再將變更套用到生產伺服器。

重新編製尾碼的索引

如果索引檔案損毀,則必須重新編製尾碼的索引,以在對應資料庫目錄中重建索引檔案。您可以在目錄伺服器執行期間重新編製尾碼的索引,或重新初始化尾碼以重新編製尾碼的索引。

在目錄伺服器執行期間重新編製尾碼的索引

重新編製尾碼的索引時,伺服器會檢查尾碼包含與重建索引檔案的所有項目。尾碼的內容在重新編製索引期間為唯讀。由於伺服器必須掃描整個尾碼以尋找要重新編製索引的每個屬性,因此若尾碼有百萬個項目,本程序可能需要數小時。時間長度也會隨配置的索引而定。此外,在重新編製尾碼的索引期間無法使用索引,且伺服器的效能會受影響。

Procedure重新編製尾碼上的所有索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    重新編製尾碼上的所有索引。


    $ dsconf reindex -h host -p port suffix-DN
    

    例如,若要初始化 dc=example,dc=com 尾碼上的所有索引,請使用此指令:


    $ dsconf reindex -h host -p port dc=example,dc=com

重新初始化以重新編製尾碼的索引

重新初始化尾碼時會匯入新內容,亦即尾碼內容會遭取代且會建立新的索引檔案。由於所有屬性會在項目載入時平行編製索引,因此重新初始化尾碼會比重新編製多個屬性的索引還要快。但是請注意,重新初始化尾碼期間將無法使用尾碼。

Procedure透過重新初始化重新編製尾碼的索引

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 設定參照,並使尾碼變成唯讀模式中所述,將尾碼設為唯讀。

  2. 備份至 LDIF中所述,將整個尾碼匯出至 LDIF 檔案。

  3. 從 LDIF 檔案匯入資料中所述,匯入相同的 LDIF 檔案以重新初始化尾碼。

    初始化期間無法使用尾碼。初始化完成之後,便可以使用所有配置的索引。

  4. 設定參照,並使尾碼變成唯讀模式中所述,使尾碼再次可以寫入。

管理瀏覽索引

瀏覽索引是僅用以請求伺服器端排序結果的搜尋作業之特殊索引。「Sun Java System Directory Server Enterprise Edition 6.0 Reference」會說明瀏覽索引在目錄伺服器中的運作方式。

用戶端搜尋的瀏覽索引

排序用戶端搜尋結果的自訂瀏覽索引必須手動定義。若要建立瀏覽索引或虛擬清單檢視 (VLV) 索引,請使用下列程序。本節亦包含增加或修改瀏覽索引項目與重新產生瀏覽索引的程序。

Procedure建立瀏覽索引

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 使用 ldapmodify 指令新增瀏覽索引項目或編輯現有的瀏覽索引項目。

    如需相關指示,請參閱增加或修改瀏覽索引項目

  2. 執行 dsconf reindex 指令以產生一組新的瀏覽索引保留在伺服器上。

    如需相關指示,請參閱重新產生瀏覽索引

Procedure增加或修改瀏覽索引項目

瀏覽索引專用於指定基底項目與其子樹狀結構上指定的搜尋。瀏覽索引配置會在包含項目的尾碼資料庫配置中定義。

  1. 配置目錄伺服器上每個瀏覽索引的 vlvBasevlvScopevlvFilter 屬性。

    這些屬性會配置搜尋的基底、範圍與篩選器。這些屬性使用 vlvSearch 物件類別。

  2. 配置每個瀏覽索引的 vlvSort 屬性。

    此屬性會指定排序索引的一或多個屬性名稱。此項目是第一個項目的子項,並使用 vlvIndex 物件類別指定要排序的屬性與排序的順序。

    下列範例使用 ldapmodify 指令建立瀏覽索引配置項目:


    $ ldapmodify -a -h host -p port -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=people_browsing_index, cn=database-name,
    cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvSearch
    cn: Browsing ou=People
    vlvBase: ou=People,dc=example,dc=com
    vlvScope: 1
    vlvFilter: (objectclass=inetOrgPerson)
    dn: cn=Sort rev employeenumber, cn=people_browsing_index,
     cn=database-name,cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvIndex
    cn: Sort rev employeenumber
    vlvSort: -employeenumber
    ^D

    vlvScope 為下列其中之一:

    • 0 僅針對基底項目

    • 1 可針對該基底的下一層子項

    • 2 可針對根目錄在該基底的整個子樹狀結構

    vlvFilter 是用戶端搜尋作業中所用相同的 LDAP 篩選。由於所有瀏覽索引項目皆位於相同位置,因此您應使用描述性 cn 值命名瀏覽索引。

    每個 vlvSearch 項目至少必須有一個 vlvIndex 項目。vlvSort 屬性是定義要排序的屬性與排序順序之屬性名稱的清單。屬性名稱之前的破折號 (-) 表示反向順序。您可以經由定義數個 vlvIndex 項目,定義多個索引以供搜尋。您可以為之前的範例增加下列項目:


    $ ldapmodify -a -h host -p port
     -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=Sort sn givenname uid, cn=people_browsing_index,
     cn=database-name,cn=ldbm database,cn=plugins,cn=config
    objectClass: top
    objectClass: vlvIndex
    cn: Sort sn givenname uid
    vlvSort: sn givenname uid
    ^D
  3. 若要修改瀏覽索引配置,請編輯對應的 vlvSearch 項目或對應的 vlvIndex 項目。

  4. 若要移除瀏覽索引而使得伺服器不再保留該瀏覽索引,請移除個別 vlvIndex 項目。

    或者,如果僅存在一個 vlvIndex 項目,則同時移除 vlvSearch 項目與 vlvIndex 項目。

Procedure重新產生瀏覽索引

    建立瀏覽索引項目之後,請產生指定屬性的新瀏覽索引。


    $ dsadm reindex -l -t attr-index instance-path suffix-DN
    

    該指令會掃描目錄內容,並建立瀏覽索引的資料庫檔案。

    下列範例會產生上一節定義的瀏覽索引:


    $ dsadm reindex -l -b database-name -t Browsing /local/ds \
     ou=People,dc=example,dc=com

    如需 dsadm reindex 指令的更多資訊,請參閱 dsadm(1M) 線上手冊。

第 13 章 目錄伺服器屬性值唯一性

UID 唯一性外掛程式可確保指定的屬性值,在目錄或子樹狀結構的所有項目中是唯一的。若有任何作業嘗試增加含有現有指定屬性值的項目,此外掛程式均會加以阻止。此外掛程式也會阻止任何增加或修改目錄中已有之屬性值的作業。

UID 唯一性外掛程式預設為停用。此外掛程式啟用時,預設會確保 uid 屬性的唯一性。您可以建立新的外掛程式實例,以執行其他屬性值的唯一性。UID 唯一性外掛程式可確保單一伺服器上的屬性值唯一性。

本章包含下列主題:

屬性值唯一性簡介

UID 唯一性外掛程式是一種作業前外掛程式。它可在伺服器執行目錄的更新前,檢查 LDAP 增加、修改與修改 DN 作業。外掛程式可判斷作業是否會造成兩個項目具有相同屬性值。若是,伺服器即會終止作業,並傳回錯誤 19 LDAP_CONSTRAINT_VIOLATION 至用戶端。

您可以配置外掛程式,以在目錄的一或多個子樹狀結構中,或在特定物件類別的項目間執行唯一性。此配置可決定要執行唯一屬性值的項目集。

若要執行其他屬性的唯一性,您可以定義數個 UID 唯一性外掛程式實例。每個需要具備唯一值的屬性,各須定義一個外掛程式實例。您也可以為同一個屬性設定數個外掛程式實例,而在數個項目集內執行「個別的」唯一性。一個指定的屬性值在每個子樹狀結構集內只能允許一次。

當您在現有的目錄上啟用屬性唯一性時,伺服器並不會檢查現有項目間的唯一性。只有在增加項目,或於增加或修改屬性時,才會執行唯一性。

UID 唯一性外掛程式預設為停用,因為此外掛程式會影響多重主伺服器複寫。您可以在使用複寫時啟用 UID 唯一性外掛程式,但應留意對複寫使用唯一性外掛程式中所述的運作方式。

執行 uid 與其他屬性的唯一性

節說明如何啟用及配置 uid 屬性的預設唯一性外掛程式,以及如何執行任何其他屬性的唯一性。

Procedure執行 uid 屬性的唯一性

此程序說明如何使用 dsconf 指令,啟用及配置 UID 唯一性外掛程式。外掛程式配置項目的 DN 為 cn=uid uniqueness,cn=plugins,cn=config

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

使用 DSCC 期間,不可於執行其他屬性的唯一性時,修改預設 UID 唯一性外掛程式。若不需要 UID 唯一性外掛程式,請如執行其他屬性的唯一性中所述,將該外掛程式保留為停用,再為其他屬性建立新的外掛程式實例。

  1. 啟用外掛程式。


    $ dsconf enable-plugin -h host -p port "uid uniqueness"
  2. 根據您對要執行唯一性的子樹狀結構所將進行的指定,修改外掛程式引數。

    • 若要指定單一子樹狀結構的基底 DN,請鍵入:


      $ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:uid argument:subtreeBaseDN
      

      例如:


      $ dsconf set-plugin-prop -h host1 -p 1389 "uid uniqueness" argument:uid \
       argument:dc=People,dc=example,dc=com
    • 若要指定多個子樹狀結構,請以子樹狀結構的完整基底 DN,將更多引數增加為各個引數的值。


      $ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:uid \
       argument:subtreeBaseDN argument:subtreeBaseDN
      
    • 若子樹狀結構要根據其基底項目的物件類別進行指定,請將引數設為下列值。uid 屬性的唯一性會在每個具有 baseObjectClass 之項目的子樹狀結構中執行。您可以選擇在第三個引數中指定 entryObjectClass,使外掛程式僅在以具有此物件類別的項目為目標的作業中,執行唯一性。


      $ dsconf set-plugin-prop -h host -p port "uid uniqueness" argument:attribute=uid \
       argument:markerObjectClass=baseObjectClass argument:entryObjectClass=baseObjectClass
      
  3. 重新啟動伺服器,使變更生效。

Procedure執行其他屬性的唯一性

UID 唯一性外掛程式可用以執行任何屬性的唯一性。您必須在目錄中的 cn=plugins,cn=config 下建立新項目,以建立新的外掛程式實例。

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 建立新的外掛程式。


    $ dsconf create-plugin -h host -p port -H lib-path -F init-func \
     -Y type plugin-name 
    

    plugin-name 應為簡短同時包含屬性名稱的說明性名稱。例如,若要建立郵件 ID 屬性的唯一性外掛程式,請使用此指令:


    $ dsconf create-plugin -h host1 -p 1389 -H /opt/SUNWdsee/ds6/lib/uid-plugin.so \
     -F NSUniqueAttr_Init -Y preoperation "mail uniqueness"
  2. 設定外掛程式特性:


    $ dsconf set-plugin-prop -h host -p port plugin-name property:value
    

    例如,若要設定郵件唯一性外掛程式的特性:


    $ dsconf set-plugin-prop -h host1 -p 1389 "mail uniqueness" \
     desc:"Enforce unique attribute values..." version:6.0 \
     vendor:"Sun Microsystems, Inc." depends-on-type:database
  3. 啟用外掛程式。


    $ dsconf enable-plugin -h host -p port plugin-name
    
  4. 指定外掛程式引數。

    這些引數取決於您對要執行唯一性的子樹狀結構將要進行的指定。

    • 若一或多個子樹狀結構要根據其基底 DN 進行定義,則第一個引數必須是應具有唯一值之屬性的名稱。後續引數為子樹狀結構的基底項目之完整 DN。


      $ dsconf set-plugin-prop -h host -p port plugin-name argument:attribute-name \
       argument:subtreeBaseDN argument:subtreeBaseDN...
    • 若子樹狀結構要根據其基底項目的物件類別進行定義,則第一個引數必須包含 attribute= attribute-name,用以指定應具有唯一值之屬性的名稱。第二個引數必須是 baseObjectClass,用以決定要執行唯一性之子樹狀結構的基底項目。您可以選擇在第三個引數中指定 entryObjectClass,使外掛程式僅在以具有此物件類別的項目為目標的作業中,執行唯一性。


      $ dsconf set-plugin-prop -h host -p port plugin-name argument:attribute=attribute-name \
       argument:markerObjectClass=baseObjectClass argument:requiredObjectClass=entryObjectClass
      

    在所有外掛程式引數中,= 符號之前或之後皆不可有空格。

  5. 重新啟動伺服器,使變更生效。

對複寫使用唯一性外掛程式

在複寫作業中執行更新時,UID 唯一性外掛程式不會對屬性值執行任何檢查。這並不會影響單一主伺服器複寫,但外掛程式無法為多重主伺服器複寫自動執行屬性的唯一性。

單一主伺服器複寫案例

由於用戶端應用程式所做的所有修改都會在主伺服器複本上執行,因此 UID 唯一性外掛程式應在主伺服器上啟用。外掛程式應配置成在複寫的尾碼中執行唯一性。由於主伺服器可確保所需屬性的值皆是唯一的,因此您無需在用戶伺服器上啟用外掛程式。

在單一主伺服器的用戶上啟用 UID 唯一性外掛程式,並不會干擾複寫作業或正常的伺服器作業。但它可能會使效能稍微降低。

多重主伺服器複寫案例

根據設計,UID 唯一性外掛程式並不適用於多重主伺服器複寫作業。由於多重主伺服器複寫所使用的複寫模式不具嚴謹的一致性,即使在兩部伺服器上同時增加相同的屬性值,甚至雙方都啟用外掛程式,也無法偵測出此相同值。

然而,若要執行唯一性檢查的屬性是命名屬性,且已在所有主伺服器上為相同子樹狀結構中的同一屬性啟用唯一性外掛程式,則可使用 UID 唯一性外掛程式。

當這些條件都符合時,在複寫時所發生的唯一性衝突,將會報告為命名衝突。命名衝突必須以手動方式解決。如需更多資訊,請參閱解決常見複寫衝突

第 14 章 目錄伺服器記錄

本章說明如何管理目錄伺服器記錄。

如需協助定義記錄策略的資訊,請使用「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Designing a Logging Strategy」內之記錄策略資訊。

如需記錄檔與其內容的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 7 章「Directory Server Logging」

本章包含下列主題:

記錄分析工具

Directory Server Resource Kit 提供記錄分析工具 logconv,可讓您分析目錄伺服器存取記錄。記錄分析工具會擷取使用率統計,也會計算重大事件的出現次數。如需此工具的更多資訊,請參閱 logconv(1) 線上手冊。

檢視目錄伺服器記錄

您可以在 instance-path/logs 中直接從伺服器上檢視記錄,

或者透過目錄服務控制中心 (DSCC) 檢視記錄檔。DSCC 可讓您檢視與排序記錄項目。

下圖顯示 DSCC 中的目錄伺服器存取記錄範例。

圖 14–1 DSCC 存取記錄

透過 DSCC 檢視的存取記錄。存取記錄項目會以表格列出。

配置目錄伺服器的記錄

記錄檔有許多方面可以修改。以下包含其中一些範例:

下列程序說明如何修改記錄配置,以及如何啟用稽核記錄。

Procedure修改記錄配置

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 檢視要修改的記錄設定。


    $ dsconf get-log-prop -h host -p port log-type
    

    例如,若要列出現有的錯誤記錄設定,請鍵入:


    $ dsconf get-log-prop -h host1 -p 1389 error
    Enter "cn=Directory Manager" password:
    enabled                   :  on
    level                     :  default
    max-age                   :  1M
    max-disk-space-size       :  100M
    max-file-count            :  2
    max-size                  :  100M
    min-free-disk-space-size  :  5M
    path                      :  /tmp/ds1/logs/errors
    perm                      :  600
    rotation-interval         :  1w
    rotation-min-file-size    :  unlimited
    rotation-time             :  undefined
    verbose-enabled           :  off
  2. 設定新值。

    設定特性要使用的值。


    $ dsconf set-log-prop -h host -p port log-type property:value
    

    例如,若要將錯誤記錄的自動重建間隔設為兩天,請使用此指令:


    $ dsconf set-log-prop -h host1 -p 1389 error rotation-interval:2d

Procedure啟用稽核記錄

稽核記錄與存取記錄及錯誤記錄不同,預設不會啟用。您必須啟用稽核記錄後,才能加以檢視。

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    啟用稽核記錄。


    $ dsconf set-log-prop -h host -p port audit enabled:on

手動自動重建目錄伺服器記錄

記錄若是變得太大,則可以隨時手動自動重建記錄。自動重建會備份現有的記錄檔,然後建立一個全新的記錄檔。

Procedure手動自動重建記錄檔

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

    自動重建記錄檔。


    $ dsconf rotate-log-now -h host -p port log-type
    

    例如,若要自動重建存取記錄:


    $ dsconf rotate-log-now -h host1 -p 1389 access

第 15 章 目錄伺服器監視

目錄伺服器可利用多種方法加以監視。這些方法說明於「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 3 章「Directory Server Monitoring」內。

本章說明如何設定及管理目錄伺服器中的監視。

本章包含下列主題:

設定目錄伺服器的 SNMP

本節說明如何將伺服器設為透過 SNMP 接受監視。

如需目錄伺服器中 SNMP 實作的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的「Directory Server and SNMP」

Procedure設定 SNMP

針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。

  1. 啟用 Java ES Management Framework 外掛程式。

    請使用程序啟用 Java ES MF 監視。此程序亦會啟用屬於 Java ES MF 一部分的 Common Agent Container。

  2. 存取由 MIB 所定義,同時透過代理程式公開的 SNMP 管理物件。

    此步驟所需的作業,完全依存於您的 SNMP 管理系統。如需相關指示,請參閱 SNMP 管理系統文件。

    公開 MIB 時,您可以為此 MIB 使用 RFC 文字檔。這些檔案可自 http://www.ietf.org/rfc/rfc2605.txthttp://www.ietf.org/rfc/rfc2788.txt 取得。

啟用 Java ES MF 監視

若要使用 Sun Java ES Management Framework (Java ES MF) 進行監視,則必須啟用 Java ES MF 外掛程式。

如需有關管理 Java ES MF 的更多資訊,請參閱「Sun Java Enterprise System 5 Monitoring Guide」

Procedure啟用 Java ES MF 監視

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 初始化及註冊 Java ES Monitoring Framework。


    $ dsccsetup mfwk-reg

    如需此指令的位置,請參閱指令位置

  2. 啟用 Java ES Management Framework 外掛程式


    $ dsconf enable-plugin -h host -p port "Monitoring Plugin"
    Enter "cn=Directory Manager" password:
    Directory Server must be restarted for changes to take effect.
  3. 重新啟動目錄伺服器實例。


    $ dsadm restart instance-path
    
  4. 驗證是否啟用 Java ES Management Framework 外掛程式。


    $ dsconf get-plugin-prop -h host -p port -v "Monitoring Plugin"
    Enter "cn=Directory Manager" password:
    Reading property values of the plugin "Monitoring Plugin"...
    argument          :
    depends-on-named  :
    depends-on-type   :  database
    desc              :  Monitoring plugin
    enabled           :  on
    feature           :  Monitoring
    init-func         :  mf_init
    lib-path          :  /opt/SUNWdsee/ds6/lib/mf-plugin.so
    type              :  object
    vendor            :  Sun Microsystems, Inc.
    version           :  6.0

Java ES MF 監視的疑難排解

若 Java ES MF 監視無法運作,請確定您已如「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的第 1 章「Installation」中所述,正確地安裝了 Common Agent Container。

若仍無法解決問題,請參閱「Sun Java Enterprise System 5 Monitoring Guide」

使用 cn=monitor 監視伺服器

伺服器狀態、複寫狀態、資源使用率與其他監視資訊,皆可透過 DSCC 取得。

此外,您可以對下列項目執行搜尋作業,以從任何 LDAP 用戶端監視目錄伺服器目前的活動: