管理項目的最佳方式需視環境而定:
若您在管理方面多半使用 DSCC,而只想搜尋或修改少許項目,請使用 DSCC。如需有關 DSCC 的更多資訊,請參閱目錄服務控制中心介面。
若不對目錄伺服器執行任何管理作業,而只想搜尋或修改少許項目,請使用目錄編輯器。如需有關目錄編輯器的資訊,請參閱「Sun Java System Directory Editor 1 2005Q1 Installation and Configuration Guide」。
若要搜尋或修改大量項目,請使用指令行公用程式 ldapmodify 與 ldapdelete。
DSCC 可讓您檢視項目的所有可讀屬性以及編輯其可寫入的屬性。它也可讓您增加及移除屬性、設定多值屬性,以及管理項目的物件類別。如需有關如何使用 DSCC 管理項目的更多資訊,請參閱 DSCC 線上說明。如需更多有關 DSCC 的一般資訊,請參閱目錄服務控制中心介面。
目錄編輯器是一項易於使用的目錄編輯工具,可供管理員與一般使用者搜尋、建立與編輯資料。這項資料採用使用者、群組與容器的形式。
ldapmodify 與 ldapdelete 指令行公用程式提供完整的功能可進行增加、編輯與刪除目錄內容。使用這些公用程式,可讓您管理伺服器的配置項目與使用者項目中的資料。這些公用程式亦可用以寫入程序檔,以執行一或多個目錄的大量管理。
本書中的多項程序皆會用到 ldapmodify 與 ldapdelete 指令。以下幾節將說明執行程序時所需進行的基本作業。如需有關 ldapmodify 與 ldapdelete 指令的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.1 Reference」。
指令行公用程式的輸入一律用於 LDIF 中,可直接從指令行提供,也可以透過輸入檔提供。下節將提供 LDIF 輸入的相關資訊,而後續幾節將說明每個修改類型的 LDIF 輸入。
如需有關正確格式化 LDIF 輸入的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.1 Reference」中的「Guidelines for Providing LDIF Input」。
以下幾節將說明這些基本作業:
您可以使用 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 會列出下列屬性:
項目的 DN。
物件類別清單。
一或多個命名屬性。此為 DN 中所使用的屬性,並不一定是必要屬性之一。
所有物件類別的必要屬性清單。
您所要納入的任何允許的屬性。
鍵入 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 選項的使用情形而定。
您可以使用 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 |
您可以使用 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 |
您可以使用 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 |
您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
您可以使用 ldapsearch 指令行公用程式尋找及擷取目錄項目。請注意,ldapsearch 公用程式並不是 Solaris 平台隨附的公用程式,但屬於 Directory Server Resource Kit 的一部分。
如需有關使用 ldapsearch、一般 ldapsearch 選項、適用格式與範例的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.1 Reference」。
此程序會使用修改 DN 作業。執行此作業前,請確定您已熟悉使用修改 DN 作業的指示與限制一節。
在部分程序中,您可使用 DSCC 來執行本作業。如需其它資訊,請參閱目錄服務控制中心介面以及 DSCC 線上說明。其他部份的程序僅可使用指令行進行。
當您修改屬於群組的 uniquemember 之項目 DN 時,必須啟用參照完整性外掛程式。參照完整性可確保移除項目時,群組成員會獲得調整。如需有關如何啟用及配置參照完整性外掛程式的資訊,請參閱配置參照完整性外掛程式。
若要將項目從某父系移至另一個父系,請先擴充父系項目的 ACI 權限。
請在要移動之項目的目前父系項目上使用 allow (export ...) 語法,以確定 ACI 允許 export 作業
請在要移動之項目的未來父系項目上使用 allow (import ...) 語法,以確定 ACI 允許 import 作業
如需有關使用 ACI 的資訊,請參閱第 6 章, 目錄伺服器存取控制。
請確定修改 DN 作業已全域啟用,或至少已針對將受移動作業影響的一或多個尾碼啟用。
為確保與舊目錄伺服器發行版本的相容性,修改 DN 作業預設為不啟用。
若您先前已啟用修改 DN 作業,請跳至下個步驟。
若要全域啟用伺服器的修改 DN 作業,請使用此指令:
$ dsconf set-server-prop -h host -p port moddn-enabled:on |
執行 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) 線上手冊。
若在移動或重新命名含有大量項目的子樹狀結構時發生資源限制錯誤,請增加資料庫所能使用的鎖定數。
$ dsconf set-server-prop -h host -p port db-lock-count:value |
修改此特性後必須重新啟動伺服器,變更方能生效。
如上一節所述,在使用修改 DN 作業時,請遵循以下幾節所說明的指示。
請勿使用修改 DN 作業將項目從某個尾碼移至其他尾碼,或使用此作業移動根尾碼或將其重新命名。
請確定您所執行的是 Directory Server 5.2 2005Q1 或更高版本。修改 DN 作業無法使用於 Directory Server 5.2 2005Q1 之前的目錄伺服器版本。
請勿於應用程式中使用 entryid 作業屬性,因為此屬性保留僅限內部使用。項目的 entryid 屬性在項目移動後可能會變更。
為伺服器上的所有尾碼全域性地啟用修改 DN 作業,或針對要執行此作業的每個尾碼個別啟用。修改 DN 作業預設為停用。
針對要執行修改 DN 作業的每個尾碼,擴充其 ACI 權限。Import 存取權限可讓項目匯入指定的 DN。Export 存取權限可讓項目從指定的 DN 匯出。
執行修改 DN 作業前,請確定此作業不會中斷用戶端認證。若您移動了參照用戶端憑證的項目,用戶端認證即會中斷。移動項目後,請驗證您的憑證。
執行修改 DN 作業前,請確定此作業不會中斷您的應用程式。項目經過重新命名或移動後,可能會影響到數個尾碼,或變更項目的下列特性:
項目的已篩選角色範圍。
項目的巢式角色,此處的巢式角色含有篩選的角色。
項目的動態群組成員身份。
使用修改 DN 作業時若未符合下列需求,將可能導致複寫中斷,而使目錄服務失效。
請確定複寫拓樸中所有的伺服器至少執行 Directory Server 5.2,您無法在 Directory Server 5.2 以前的目錄伺服器版本上使用修改 DN 作業。
啟用複寫拓樸中所有伺服器的修改 DN 作業。若主伺服器支援修改 DN 作業,但用戶伺服器不支援,複寫即會失敗。供應者伺服器的錯誤記錄中將寫入如下訊息:
Unable to start a replication session with MODDN enabled
若要重新啟動複寫,請重新配置複寫拓樸,以啟用所有伺服器的修改 DN 作業。接著須以下列方式之一啟動複寫階段作業:
依照強制執行複寫更新中的指示進行作業。
藉由變更供應者伺服器的項目。變更即會複寫到用戶伺服器上。
啟用並配置拓樸中所有主伺服器複本的參照完整性外掛程式。此動作可確保伺服器能夠保持群組與角色的參照完整性。如需有關如何啟用及配置參照完整性外掛程式的資訊,請參閱配置參照完整性外掛程式。
執行修改 DN 作業後,請保留時間讓參照完整性外掛程式複寫其變更。