Sun Java logo     上一頁      目錄      索引      下一頁     

Sun logo
Sun Java(TM) System Directory Server 5.2 2005Q1 管理指南 

第 6 章
管理存取控制

控制存取您的目錄內容是建立安全目錄不可或缺的一部分。本章說明存取控制指令 (ACI),它可決定授與存取目錄的使用者哪一種權限。Directory Server 包含新的功能,可檢視指定使用者對指定項目擁有的有效權利。此功能可將管理複雜且功能強大之存取控制機制的作業簡化。

在目錄部署的計畫階段時,應該定義符合整體安全策略的存取控制策略。有關規劃存取控制策略的提示,請參閱 Directory Server Deployment Planning Guide

本章包含下列主題:


存取控制原則

定義存取權的機制稱為存取控制。當伺服器收到要求時,它會使用使用者在連結作業中所提供的驗證資訊,以及伺服器中定義的存取控制指令 (ACI),來允許或拒絕存取目錄資訊。伺服器可允許或拒絕權限,例如讀取、寫入、搜尋或比較。授與使用者的權限層級可能因所提供的驗證資訊不同而有所差異。

使用存取控制,您便可以控制存取整個目錄、目錄的樹狀子 目錄、目錄中的特定項目 (包括定義配置工作的項目)、特定的項目屬性組或特定的項目屬性值。可以設定特定使用者的權限、屬於特定群組或角色的所有使用者權限、或目錄中所有使用者 的權限。最後,可以定義以 IP 位址或 DNS 名稱識別的特定用戶端的存取權。

ACI 結構

控制存取指令以項目屬性的方式儲存在目錄中。aci 屬性是操作屬性;它可供目錄中的每個項目使用,不論項目的物件類別是否已定義此屬性。目錄伺服器在收到來自用戶端的 LDAP 要求時,Directory Server 會使用此屬性來評估要授與或拒絕的權利。如果有特別的要求,ldapsearch 作業中會傳回 aci 屬性。

ACI 敘述分為三個主要部分:

ACI 的權限與連結規則部分的設定是採用配對方式,這些配對也稱為存取控制規則 (ACR)。系統會根據伴隨指定權限的規則是否被評估為真實,來決定授與或拒絕存取目標的指定權限。如需詳細資訊,請參閱 ACI 語法

ACI 位置

如果包含 ACI 的項目中沒有任何子項目,則 ACI 僅套用在該項目;如果項目中有子項目,則 ACI 會套用在項目本身及其下所有的項目。因此,當伺服器評估任何指定項目的存取權限時,它會確認要求的項目與其根尾碼的基礎之間每個項目的 ACI。

aci 屬性是多重值屬性,這表示您可以為同一個項目或樹狀子目錄定義多個 ACI。

您在項目上建立的 ACI 不會直接套用在該項目上,而是套用該項目之下的樹狀子目錄中的部分或全部項目。這樣做的優點在於,您可以在樹狀目錄高層訂定一般性的 ACI,讓 ACI 可以有效地套用於位在樹狀目錄下層的項目。例如,可以在 organizationalUnit 項目或 locality 項目的層級建立 ACI,此 ACI 的目標是包含 inetorgperson 物件類別的項目。

可以利用此功能在高層的分支點上訂定一般性規則,使目錄中的 ACI 數目減到最低。若要限制更特殊規則的範圍,您應該儘可能地將規則放在離葉項目最近的位置。


備註

放在根 DSE 項目 (含 DN "") 的 ACI 只套用在該項目。


ACI 評估

為了評估特定項目的存取權利,伺服器會編譯一份 ACI 清單,這些 ACI 存在於項目本身上,以及存在於可向項目根尾碼的基礎回溯的父項目上。評估期間,伺服器會依此順序處理 AC。ACI 的評估會在項目及其根尾碼基礎間的所有尾碼和子尾碼中進行,而不在其他伺服器的鏈接尾碼之間進行。


備註

目錄管理員是唯一沒有套用存取控制,但具有權限的使用者。當用戶端以目錄管理員身份與目錄連結後,伺服器在執行作業之前不會評估任何 ACI。

因此,以目錄管理員執行 LDAP 作業的效能是無法與其他使用者的預期效能相提並論的。您應該要以一般使用者身份測試目錄效能。


依預設值,項目若沒有 ACI 可套用,則除了目錄管理員外,將拒絕所有使用者存取。必須由 ACI 明確授與存取權限,使用者才能存取伺服器中的任何項目。預設 ACI 定義匿名讀取存取,並允許使用者修改他們自己的項目,但維護安全性所需的屬性除外。如需詳細資訊,請參閱預設 ACI

雖然伺服器優先執行最接近目標項目的 ACI,但套用至項目的所有 ACI 的影響是累積的。除非有任何一個 ACI 拒絕由 ACI 授與的存取權限,否則系統會允許該存取權限。拒絕存取的ACI (不論出現在清單何處),其優先順序均高於允許存取同一資源的 ACI。

例如,如果您拒絕在目錄根層級中的寫入權限,則無論您是否授與任何特定的權限,任何使用者都無法寫入目錄。若要將目錄的寫入權限授與特定使用者,必須限制寫入權限的原始拒絕範圍,使它不包含該使用者。

ACI 限制

為目錄服務建立存取控制策略時,您必須知道下列限制:


預設 ACI

當安裝 Directory Server 時,系統會在您在配置期間所指定的根尾碼上定義下列預設 ACI:

當在目錄中建立新的根尾碼時,它的基礎項目擁有上述預設 ACI,但自我修改 ACI 除外。為加強安全性,應該依使用主控台建立新的根尾碼中所述加入此 ACI。

Administration Server 的 NetscapeRoot 樹狀子目錄有它自己的一組預設 ACI:

下列各節說明如何修改這些預設值,以符合組織的需要。


ACI 語法

ACI 是具有許多種可能變化的複雜結構。無論使用主控台或從指令行建立和修改 ACI,您都應該了解 LDIF 格式的 ACI 語法。下列各節將詳細說明 ACI 的語法。


提示

因為 ACI 語法太複雜,Directory Server Console 並不支援以視覺方式編輯所有 ACI。而且,為大量目錄項目設定存取控制時,使用指令行是比較快速的方式。因此,若要建立具有有效存取控制的安全目錄,了解 ACI 語法是很重要的。


aci 屬性的語法如下:

aci:(target)(version 3.0;acl "name";permission bindRules;)

其中:

可以擁有多個目標和權限-連結規則配對。這可讓您將作為目標的項目和屬性優化,並有效地為指定目標設定多重存取控制項。例如:

aci:(target)...(target)(version 3.0;acl "name"; permission bindRule;
 permission bindRule; ...; permission bindRule;)

下列為完整 LDIF ACI 的範例:

aci:(target="ldap:///uid=bjensen,dc=example,dc=com"
 (targetattr="*")(version 3.0; acl "example"; allow (write)
 userdn="ldap:///self";)

在此範例中,ACI 指明使用者 bjensen 有權修改她自己目錄項目中的所有屬性。

下列各節詳細說明 ACI 中每一部分的語法。

定義目標

目標會識別何者會套用 ACI。當用戶端要求對項目中的屬性執行作業時,伺服器會評估目標,了解是否必須評估 ACI 以允許或拒絕作業。如果未指定目標,則 ACI 會套用到包含 aci 屬性的項目中的所有屬性,及其下所有項目。

目標的一般語法為下列其中一項:

(keyword = "expression")

(keyword != "expression")

其中:

下表列出每個關鍵字及相關運算式:

表 6-1 LDIF 目標關鍵字

關鍵字

有效的運算式

允許萬用字元嗎?

target

ldap:///distinguished_name

targetattr

attribute

targetfilter

LDAP_filter

targattrfilters

LDAP_operation:LDAP_filter

將目錄項目設為目標

使用 target 關鍵字和 LDAP URL 內的 DN 可將特定目錄項目及其下任何項目設為目標。目標的 DN 必須位在 ACI 定義位置的項目下的樹狀子目錄中。目標運算式的語法如下:

(target = "ldap:///distinguished_name")
(target != "ldap:///distinguished_name")

辨別名稱必須位在以 ACI 定義位置的項目為根部的樹狀子目錄中。例如,以下目標可用於 ou=People,dc=example,dc=com 上的 ACI 中:

(target = "ldap:///uid=bjensen,ou=People,dc=example,dc=com")


備註

項目的 DN 必須是以字串表示 (RFC 2253) 的辨別名稱。因此字元在文法上對 dn 很重要,例如逗號必須以反斜線 (\) 忽略掉。例如:

(target="ldap:///uid=cfuentes,o=Example Bolivia\, S.A.")


也可以在 DN 中使用萬用字元,將任何符合 LDAP URL 的項目設為目標,項目數量不限。下列是萬用字元正確用法的範例:

允許使用多個萬用字元,例如 uid=*,ou=*,dc=example,dc=com。此範例比對 example.com 樹狀目錄中其辨別名稱包含 uidou 屬性的每個項目。


備註

辨別名稱的尾碼部分不能使用萬用字元。也就是,如果您的目錄使用尾碼 c=USc=GB,則不能 使用下列目標來參考這兩個尾碼:

(target="ldap:///dc=example,c=*")°C

也不能使用像 uid=bjensen,o=*.com 這樣的目標。


目標屬性

除了以目錄項目為目標之外,也可以將目標項目的一或多個屬性,或是一或多個屬性除外的所有屬性設為目標。這對於拒絕或允許存取項目的部分資訊非常有用。例如,您可以允許只存取指定項目的一般名稱、姓氏與電話號碼屬性;或者,您可以拒絕存取敏感的資訊,例如個人資料。

如果沒有 targetattr 規則,依預設值無法存取任何屬性。若要存取所有屬性,規則必須是 targetattr="*"

目標屬性不必存在目標項目或其樹狀子目錄中,但只要這些屬性存在,就會套用 ACI。您設為目標的屬性不必在模式中定義。這種缺乏模式檢查的方式讓您在匯入資料及其模式前便可實行存取控制策略。

若要將屬性設為目標,請用 targetattr 關鍵字並提供屬性名稱。targetattr 關鍵字使用下列語法:

(targetattr = "attribute")
(targetattr != "attribute")

可以使用下列語法利用 targetattr 關鍵字,將多個屬性設為目標:

(targetattr = "attribute1 || attribute2 ...|| attributen")
(targetattr != "attribute1 || attribute2 ...|| attributen")

例如,要將項目的一般名稱、姓氏及 uid 屬性設為目標,請使用:

(targetattr = "cn || sn || uid")

目標屬性包含命名屬性的所有子類型。例如,(targetattr = "locality") 也會以 locality;lang-fr 為目標。也可以特別將子類型設為目標,例如 (targetattr = "locality;lang-fr-ca")

您可以在 targetattr 規則中使用萬用字元,但並不鼓勵使用,因為沒有特別的用途,而且可能對效能有負面的影響。

將項目與屬性兩者設為目標

依預設值,包含 targetattr 關鍵字之 ACI 的目標項目是 ACI 所在位置的項目。也就是,如果將 ACI

aci:(targetattr = "uid")(accessControlRules;)

放在 ou=Marketing, dc=example,dc=com 項目上,則 ACI 會套用在整個 Marketing 樹狀子目錄。但您也可以用 target 關鍵字明確指定目標,用法如下:

aci:(target="ldap:///uid=*,ou=Marketing,dc=example,dc=com")
 (targetattr="uid") (accessControlRules;)

targettargetattr 關鍵字的指定順序不相關。

使用 LDAP 篩選條件將項目或屬性設為目標

可以使用 LDAP 篩選條件將符合某些條件的項目組設為目標。若要如此設定,請在 targetfilter 關鍵字中使用 LDAP 篩選條件。該 ACI 將套用在內含 ACI 的項目下樹狀子目錄中符合篩選條件的所有項目。

targetfilter 關鍵字的語法為:

(targetfilter = "LDAPfilter")

其中 LDAPfilter 是標準的 LDAP 搜尋篩選條件。如需關於篩選條件語法的詳細資訊,請參閱 LDAP 搜尋篩選條件

例如,假設代表員工的所有項目都有 salaried 或 contractor 狀態,還有一個代表工作時數的屬性,此屬性以全職工作的百分比形式表示。若要將代表 contractor 或兼職員工的所有項目設為目標,您可以使用下列篩選條件:

(targetfilter = "(|(status=contractor)(fulltime<=79))")

ACI 中不支援 Netscape 延伸篩選條件語法。例如,下列目標篩選條件無效:

(targetfilter = "(locality:fr:=<= Quebec)")

不過,它支援描述國際化值之對應規則的篩選條件語法,例如:

(targetfilter = "(locality:2.16.840.1.113730.3.3.2.18.1.4:=Quebec)")

目標篩選條件將全體項目選為 ACI 的目標。可以將 targetfiltertargetattr 關鍵字產生關聯,讓建立的 ACI 會套用在目標項目中的屬性子集上。

下列 LDIF 範例讓 Engineering Admins 群組的成員能夠修改 Engineering 業務類別中所有項目的 departmentNumbermanager 屬性。此範例使用 LDAP 篩選方式選擇 businessCategory 屬性設為 Engineering 的所有項目:

dn:dc=example,dc=com
objectClass:top
objectClass:organization
aci:(targetattr="departmentNumber || manager")
 (targetfilter="(businessCategory=Engineering)")
 (version 3.0; acl "eng-admins-write"; allow (write)
 groupdn ="ldap:///cn=Engineering Admins, dc=example,dc=com";)


提示

雖然當將散佈目錄各處的項目與屬性設為目標時,使用 LDAP 篩選條件會相當有用,但結果有時可能難以預測,因為篩選條件並不直接指定您要管理存取的物件名稱。篩選 ACI 的目標項目組可能會隨著屬性的加入或刪除而改變。因此,如果在 ACI 中使用 LDAP 篩選條件,則應在 ldapsearch 作業中使用相同的篩選條件,以確認目標是否為正確的項目和屬性。


使用 LDAP 篩選條件將屬性值設為目標

可以使用存取控制將特定屬性值設為目標。這表示您可以依據屬性值是否符合 ACI 中定義的條件,來授與或拒絕權限。依據屬性值授與或拒絕存取權的 ACI 稱為以值為基礎的 ACI。

例如,可以授與組織內所有使用者修改的權限,以修改他們自己項目中的 nsRoleDN 屬性。但是,您也希望確保他們不會為自己賦與某些重要角色,如「Top Level Administrator」。LDAP 篩選條件可用來檢查屬性值是否符合條件。

若要建立以值為基礎的 ACI,必須以下列語法使用 targattrfilters 關鍵字:

(targattrfilters="Op=attr1:F1 [(&& attr2:F2)*][;Op=attr:F [(&& attr:F)*]")

其中:

建立項目時,如果將篩選條件套用到新項目中的屬性,則該屬性的每個實例都必須滿足該篩選條件。刪除項目時,如果將篩選條件套用在該項目中的屬性,則該屬性的每個實例也都必須滿足該篩選條件。

修改項目時,如果作業加入屬性,則必須滿足套用在該屬性的加入篩選條件;如果作業刪除屬性,則必須滿足套用在該屬性的刪除篩選條件。如果已存在於項目中之屬性的個別值被取代了,則必須同時滿足加入與刪除篩選條件。

例如,請考慮下列屬性篩選條件:

(targattrfilters="add=nsroleDN:(!(nsRoleDN=cn=superAdmin)) && telephoneNumber:(telephoneNumber=123*)")

此篩選器可用來允許使用者將任何角色 (nsRoleDN 屬性) 加入到自己的項目中,但 superAdmin 角色除外。它也允許使用者加入字首為 123 的電話號碼。


備註

無法從 Directory Server Console 建立以值為基礎的 ACI。


將單一目錄項目設為目標

沒有明確的方法可以將單一項目設為目標。但還是可以做得到:

藉由使用 targetfilter 關鍵字,您便可以指定只會在所需項目中出現的屬性值。例如,在 Directory Server 安裝期間會建立下列 ACI:

aci:(targetattr="*")(targetfilter=(o=NetscapeRoot))
 (version 3.0; acl "Default anonymous access";
 allow (read, search) userdn="ldap:///anyone";)

此 ACI 只能套用在 o=NetscapeRoot 項目,因為只有這個項目的 o 屬性值是 NetscapeRoot

使用這些方法隨之而來的風險是您的樹狀目錄未來可能會改變,屆時請務必記得要修改此 ACI。

使用巨集定義目標

您可以使用巨集在 ACI 的目標部分中代表 DN,因此最佳化目錄中使用的 ACI 數目。如需詳細資訊,請參閱進階的存取控制:使用巨集 ACI

定義權限

權限可以指定允許或拒絕存取的類型。可以允許或拒絕在目錄中執行特定作業的權限。各種可供指定的作業稱為權利

設定權限分為兩個部分:

允許或拒絕存取

可以明確允許或拒絕存取樹狀目錄的權限。如需關於何時應允許與拒絕存取的詳細說明,請參閱 Directory Server Deployment Planning Guide 的「Designing Access Control」。

指定權利

權利詳細列出使用者可對目錄資料執行的特定作業。可以允許或拒絕所有權利,也可以指定下列一或多項權利:

讀取。表示使用者是否能讀取目錄資料。此權限僅適用於搜尋作業。

寫入。表示使用者是否能加入、修改或刪除屬性 以修改項目。此權限適用於修改與 modrdn 作業。

加入。表示使用者是否能建立項目。此權限僅適用於加入作業。

刪除。表示使用者是否能刪除項目。此權限僅適用於刪除作業。

搜尋。表示使用者是否能搜尋目錄資料。使用者必須擁有搜尋與讀取權利,才能將傳回的資料視為搜尋結果的一部分。此權限僅適用於搜尋作業。

比較。表示使用者是否能將他們提供的資料與目錄中儲存的資料做比較。若擁有比較權利,目錄在回應查詢時會傳回成功或失敗訊息,但使用者看不到項目或屬性的值。此權限僅適用於比較作業。

自寫。表示使用者是否能在目標項目的屬性中加入或刪除他們自己的 DN。此屬性的語法必須是「辨別名稱」。此權利僅供群組管理之用。自寫要配合代理驗證一起使用:它會授與從群組項目中加入或刪除代理 DN 的權利 (不是連結使用者的 DN)。

代理。表示指定的 DN 是否能使用另一個項目的權利存取目標。您可以使用目錄中任何使用者的 DN (目錄管理員 DN 除外) 授與代理存取權。不僅如此,您無法將代理權利授與目錄管理員。代理驗證 ACI 範例中提供了一個範例。

匯入。此存取權利為修改 DN 作業所使用。此存取權利表示一個項目是否能夠匯入到指定的 DN。

匯出。此存取權利為修改 DN 作業所使用。此存取權利表示一個項目是否能夠自指定的 DN 匯出。

全部。表示指定的 DN 對目標項目有下列權利:讀取、寫入、搜尋、刪除、比較和自寫。「全部」存取權利並沒有提供對目標項目的下列權利:代理、匯入和匯出。

權利的授與彼此獨立。這表示獲得加入權利的使用者可以建立項目,但如果該使用者不曾特別獲得刪除權利,則無法刪除項目。因此,規劃目錄的存取控制策略時,必須確定授與權利的方式對使用者有意義。例如,只授與寫入權限,卻不授與讀取與搜尋權限,便沒有意義。

LDAP 作業所需的權利

本節說明根據您要授權使用者執行之 LDAP 作業的不同,您必須授與使用者不同的權利。

加入項目:

刪除項目:

修改項目的屬性:

修改項目的 RDN:

將一個項目移動到另一個樹狀子目錄:

比較屬性值:

搜尋項目:

參照下列範例,可以更容易了解要允許使用者搜尋目錄所必須設定的權限。請思考下列搜尋:

(target="ldap:///dc=example,dc=com")
ldapsearch -h host -p port -D "uid=bjensen,dc=example,dc=com" \
           -w password -b "dc=example,dc=com" \
             "(objectclass=*)" mail

使用下列 ACI 決定 bjensen 使用者是否能獲得存取權:

aci:(targetattr = "mail")(version 3.0; acl "self access to \
 mail"; allow (read, search) userdn = "ldap:///self";)

搜尋結果清單空白,因為此 ACI 未允許 bjensenobjectclass 屬性上搜尋的權限。如果希望上述的搜尋作業能夠成功,必須修改 ACI 以便讀取,如下:

aci: (targetattr = "mail || objectclass")(version 3.0; acl \
"self access to mail"; allow (read, search) userdn = \
"ldap:///self";)

權限語法

在 ACI 敘述中,權限的語法為:

allow|deny (rights)

其中 rights 是括弧內以逗號分隔的關鍵字清單。有效關鍵字為 readwriteadddeletesearchcompareselfwriteproxyimport、exportall

all存取權利並沒有提供對目標項目的下列權利:proxyimport export

在下列範例中,如果連結規則的評估結果是真實,便允許讀取、搜尋與比較存取:

aci: (target="ldap:///dc=example,dc=com") (version 3.0;acl \
 "example"; allow (read, search, compare) bindRule;)


連結規則

視為目錄定義之 ACI 的不同,有些作業必須連結 到目錄。連結 表示提供連結 DN 與密碼 (如果使用 SSL,則提供憑證) 讓您自身登入目錄或通過目錄的驗證。連結作業中所提供的認證,以及連結的狀況均可決定是否允許或拒絕存取目錄。

ACI 中的每個權限組都有一個對應的連結規則,此規則詳細列出必要的認證與連結參數。

簡單的連結規則可能需要存取目錄的使用者必須屬於特定的群組。複雜連結規則可能指明使用者必須屬於特定群組,而且必須在上午 8 點到下午 5 點之間從特定 IP 位址的電腦登入。

連結規則規定可以存取目錄的人員、時間與地點。連結規則可以更具體地規定:

此外,可以使用布林運算子將這些條件加以組合,讓連結的結構更加複雜。如需更多資訊,請參閱使用布林連結規則

伺服器會根據類似評估 LDAP 篩選條件時所使用的三值邏輯,來評估 ACI 中所用的邏輯運算式,如「RFC 2251 輕量型目錄存取通訊協定 (v3)」中所述。總而言之,這表示如果運算式中任何的元件被評估成未定義 (例如,如果因為資源限制使運算式評估中止),則伺服器會正確地處理這種情況:它不會因為複雜的布林運算式中出現未定義的值,而錯誤地授與存取權。

連結規則語法

以 ACI 的連結規則是否評估為真實,作為是否要允許或拒絕存取的依據。連結規則使用下列兩種模式之一:

keyword = "expression";

keyword != "expression";

其中等於 (=) 表示 keywordexpression 必須符合,連結規則才會成為真實;而不等於 (!=) 則表示 keywordexpression 必須不符合,連結規則才會成為真實。


備註

timeofday 關鍵字也支援不相等運算式 (<、<=、>、>=)。這是唯一支援這些運算式的關鍵字。


expression 周圍的引號 ("") 和分隔的冒號 (;) 是必要的。可用的運算式須視關聯的 keyword 而定。

下表列出每個關鍵字與關聯的運算式,並指出運算式中是否允許萬用字元。

表 6-2 LDIF 連結規則關鍵字 

關鍵字

有效的運算式

允許萬用字元嗎?

userdn

ldap:///distinguished_name
ldap:///all
ldap:///anyone
ldap:///self
ldap:///parent
ldap:///suffix??sub?(filter)

是,僅限於 DN 中

groupdn

[ldap:///DN]

roledn

[ldap:///DN]

userattr

attribute#bindType
attribute#value

ip

IP_address

dns

DNS_host_name

dayofweek

sun
mon
tue
wed
thu
fri
sat

timeofday

0 - 2359

authmethod

none
simple
ssl
sasl authentication_method

下列各節將進一步詳細說明每個關鍵字的連結規則語法。

定義使用者存取 - userdn 關鍵字

使用者存取是用 userdn 關鍵字來定義。userdn 關鍵字需採用下列格式的一或多個有效辨別名稱:

userdn = "ldap:///dn [|| ldap:///dn]..."
userdn != "ldap:///dn [|| ldap:///dn]..."

其中 dn 可以是 DN 或是 anyoneallselfparent 等運算式之一。這些運算式會參照下列使用者:

userdn 關鍵字也可以表示為如下列格式的 LDAP 篩選條件:

userdn = ldap:///suffix??sub?(filter)


備註

字元在文法上對 dn 很重要,例如逗號必須以反斜線 (\) 忽略掉。


匿名存取 (anyone 關鍵字)

授與匿名存取目錄的權限,表示不論連結狀況如何,任何人都不需提供連結 DN 或密碼即可存取該目錄。可以將匿名存取限制在特定類型的存取 (例如,讀取存取或搜尋存取),或是限制在特定樹狀子目錄,或目錄中的個別項目。使用 anyone 關鍵字的匿名存取也允許任何驗證使用者存取。

例如,如果要允許匿名讀取和搜尋存取整個 example.com 樹狀目錄,請在 dc=example,dc=com 節點上建立下列 ACI:

aci:(version 3.0; acl "anonymous-read-search";
 allow (read, search) userdn = "ldap:///anyone";)

一般存取 (all 關鍵字)

可以用連結規則表示權限適用於成功連結該目錄的任何人。因此,all 關鍵字允許所有驗證使用者存取。如此一來既可以允許一般存取,同時又能防止匿名存取。

例如,如果要將整個樹狀目錄的讀取存取授與所有驗證使用者,請在 dc=example,dc=com 節點上建立下列 ACI:

aci:(version 3.0; acl "all-read"; allow (read)
 userdn="ldap:///all";)

自身存取 (self 關鍵字)

指定授權或拒絕使用者存取他們自己的項目。在此情況下,如果連結 DN 符合目標項目的 DN,便授與或拒絕存取。

例如,如果要授權 example.com 樹狀目錄中的所有使用者均可寫入存取其 userPassword 屬性,請在 dc=example,dc=com 節點上建立下列 ACI。

aci:(targetattr = "userPassword") (version 3.0; acl
 "modify own password"; allow (write) userdn = "ldap:///self";)

父項目存取 (parent 關鍵字)

指定唯有連結 DN 是目標項目的父項目時,才授與或拒絕使用者存取該項目。請注意,必須在 Server Console 中手動編輯 ACI,才能使用 parent 關鍵字。

例如,如果要允許使用者可修改他們連結 DN 的任何子項目,請在 dc=example, dc=com 節點上建立下列 ACI:

aci:(version 3.0; acl "parent access";
 allow (write) userdn="ldap:///parent";)

LDAP URL

可以在 ACI 中使用下列包含篩選條件的 URL,動態地將使用者設為目標:

userdn = "ldap:///<suffix>??sub?(filter)"

例如,根據下列 URL,動態地授權或拒絕 example.com 樹狀目錄中 accounting 與 engineering 分支內所有使用者存取目標資源的權限:

userdn = "ldap:///dc=example,dc=com??sub?(|(ou=eng)(ou=acct))"


備註

在 LDAP URL 中不要指定主機名稱或連接埠號碼。LDAP URL 永遠套用於本機伺服器。


如需關於 LDAP URL 的詳細資訊,請參閱 Directory Server Administration Reference

萬用字元

也可以使用萬用字元 (*) 指定一組使用者。例如,指定 uid=b*,dc=example,dc=com 的使用者 DN,可表示依據您設定的權限,只允許或拒絕連結 DN 是以 b 為開頭之使用者的存取權限。

LDAP URL 的邏輯 OR

指定數個 LDAP URL 或關鍵字運算式以建立使用者存取的複雜規則。例如:

userdn = "ldap:///uid=b*,c=example.com ||
 ldap:///cn=b*,dc=example,dc=com";

與任一 DN 模式連結的使用者之連結規則被評估為真。

排除特定 LDAP URL

使用不等於 (!=) 運算字定義排除特定 URL 或 DN 的使用者存取。例如:

userdn != "ldap:///uid=*,ou=Accounting,dc=example,dc=com";

如果用戶端不是以 accounting 樹狀子目錄中以 UID 為基礎的辨別名稱來連結,則連結規則會被評估為真實。只有當目標項目不在樹狀目錄的 accounting 分支下時,此連結規則才有道理。

定義群組存取 - groupdn 關鍵字

特定群組的成員可存取目標資源;這稱為群組存取。群組存取是用 groupdn 關鍵字定義,以指定使用者如果用屬於特定群組的 DN 連結,即授權或拒絕該使用者存取目標項目。

groupdn 關鍵字需要採用下列格式的一或多個群組:

groupdn="ldap:///groupDN [|| ldap:///groupDN]..."

如果連結 DN 屬於任何 groupDN 指定的群組,則連結規則會被評估為真實。下節使用 groupdn 關鍵字提供範例。


備註

字元在文法上對 dn 很重要,例如逗號必須以反斜線 (\) 忽略掉。


單一 LDAP URL

groupdn = "ldap:///cn=Administrators,dc=example,dc=com";

如果連結 DN 屬於 Administrators 群組,則連結規則會被評估為真實。如果要將整個樹狀目錄的寫入權限授與給 Administrators 群組,請在 dc=example,dc=com 節點上建立下列 ACI:

aci:(version 3.0; acl "Administrators-write"; allow (write)
 groupdn="ldap:///cn=Administrators,dc=example,dc=com";)

LDAP URL 的邏輯 OR

groupdn = "ldap:///cn=Administrators,dc=example,dc=com ||
ldap:///cn=Mail Administrators,dc=example,dc=com";

如果連結 DN 屬於 Administrators 或 Mail Administrators 群組,則連結規則會被評估為真實。

定義角色存取 - roledn 關鍵字

特定角色的成員可存取目標資源;這稱為角色存取。角色存取是用 roledn 關鍵字定義,以指定使用者如果用屬於特定角色的 DN 連結,即授權或拒絕該使用者存取目標項目。

roledn 關鍵字需要採用下列格式的一或多個有效辨別名稱:

roledn = "ldap:///dn [|| ldap:///dn]...[|| ldap:///dn]"

如果連結 DN 屬於指定的角色,則連結規則會被評估為真實。


備註

字元在文法上對 dn 很重要,例如逗號必須以反斜線 (\) 忽略掉。


roledn 關鍵字與 groupdn 關鍵字的語法與用法都一樣。

根據相符值定義存取

可以設定連結規則,以指定用來連結目錄的項目屬性值必須與目標項目的屬性值相符。

例如,可以指定連結 DN 必須與使用者項目中 manager 屬性的 DN 相符,才能套用 ACI。在此情況下,只有使用者的管理員可以存取該項目。

此範例是根據 DN 相符值。然而,可以將連結中所用項目的任何屬性與目標項目比對。例如,可以建立 ACI,允許 favoriteDrink 屬性為「beer」的任何使用者讀取其 favoriteDrink 值相同之其他使用者的所有項目。

使用 userattr 關鍵字

userattr 關鍵字可用來指定連結項目與目標項目之間必須相符的屬性值。

可以指定:

userattr 關鍵字的 LDIF 語法如下:

userattr = "attrName#bindType"

或者,如果目前使用的屬性類型需要的值為使用者 DN、群組 DN、角色 DN 或 LDAP 篩選條件以外的值:

userattr = "attrName#attrValue"

其中:

下列各節提供 userattr 關鍵字使用各種不同連結類型的範例。

使用 USERDN 連結類型的範例

下列為與以使用者 DN 為基礎之連結有關聯的 userattr 關鍵字範例:

userattr = "manager#USERDN"

如果連結 DN 與目標項目中 manager 屬性的值相符,則連結規則會被評估為真實。可以使用這種方式允許使用者的管理員修改員工屬性。只有當目標項目中的 manager 屬性表示成完整 DN 時,此機制才有作用。

下列範例會授權管理員可完整存取其員工項目的權限:

aci:(target="ldap:///dc=example,dc=com")(targetattr="*")
 (version 3.0;acl "manager-write";
 allow (all) userattr = "manager#USERDN";)

使用 GROUPDN 連結類型的範例

下列為與以群組 DN 為基礎之連結有關聯的 userattr 關鍵字範例:

userattr = "owner#GROUPDN"

如果連結 DN 是目標項目 owner 屬性中指定的群組成員,則連結規則會被評估為真實。例如,可以使用此機制以允許群組管理員工的狀態資訊。可以使用 owner 以外的屬性,只要所使用的屬性中包含群組項目的 DN。

您所指向的群組可以是動態群組,而且群組的 DN 可以在目錄的任何尾碼下。然而,由伺服器評估這類 ACI 會非常耗費資源。

如果使用與目標項目在同一尾碼下的靜態群組,可以使用下列運算式:

userattr = "ldap:///dc=example,dc=com?owner#GROUPDN"

在此範例中,群組項目位在 dc=example,dc=com 尾碼下。伺服器處理此類型的語法的速度會比上一個範例快。

使用 ROLEDN 連結類型的範例

下列為與以角色 DN 為基礎之連結有關聯的 userattr 關鍵字範例:

userattr = "exampleEmployeeReportsTo#ROLEDN"

如果連結 DN 屬於目標項目的 exampleEmployeeReportsTo 屬性中指定的角色,則連結規則會被評估為真實。例如,如果為公司中的所有管理員建立巢狀角色,您可以使用此機制授權所有階層的管理員可存取有關階層較管理員低之員工的資訊。

角色的 DN 可在目錄的任何尾碼下。此外,如果您使用篩選的角色,評估這類 ACI 會耗用伺服器上大量的資源。

使用 LDAPURL 連結類型的範例

下列為與以 LDAP 篩選條件為基礎之連結有關聯的 userattr 關鍵字範例:

userattr = "myfilter#LDAPURL"

如果連結 DN 符合目標項目的 myfilter 屬性中指定的篩選條件,則連結規則會被評估為真實。myfilter 屬性可以由包含 LDAP 篩選條件的任何屬性取代。

使用任何屬性值的範例

下列為與以任何屬性值為基礎之連結有關聯的 userattr 關鍵字範例:

userattr = "favoriteDrink#Beer"

如果連結 DN 與目標 DN 包含有 Beer 值的 favoriteDrink 屬性,則連結規則會被評估為真實。

在 userattr 關鍵字中使用繼承

當使用 userattr 關鍵字將連結所用項目與目標項目產生關聯時,ACI 只會套用在指定的目標,而不會套用在其下的項目。在某些狀況下,您可能希望將 ACI 的套用由目標項目向下延伸幾個層級。只要使用 parent 關鍵字,並指定目標之下應繼承 ACI 的層級數,就可以辦得到。

當使用與parent 關鍵字有關聯的 userattr 關鍵字時,語法如下:

userattr = "parent[inheritance_level].attribute#bindType"

其中 :

例如:

userattr = "parent[0,1].manager#USERDN"

如果連結 DN 與目標項目的 manager 屬性相符,則連結規則會被評估為真實。當連結規則評估為真實時,所授與的權限會套用在目標項目以及 它下一層的所有項目。

使用 userattr 繼承的範例

下圖中的範例表示允許 bjensen 使用者讀取與搜尋 cn=Profiles 項目,以及包含 cn=mailcn=news 的第一層子項目。

圖 6-1 在 userattr 關鍵字中使用繼承

圖解顯示使用繼承 userattr 關鍵字的 ACI。

在此範例中,如果不使用繼承,就必須執行下列任一項才能獲得同樣的結果:

使用 userattr 關鍵字授與加入權限

如果將 userattr 關鍵字搭配 alladd 權限一起使用,您可能發現伺服器的運作方式與預期狀況不相符。一般而言在目錄中建立新項目時,Directory Server 會對建立的項目而非父項目評估其存取權利。然而在使用 userattr 關鍵字的 ACI 中,此運作方式可能造成安全上的漏洞,因此要修改伺服器正常的運作方式以避免此情況發生。

請思考下列範例:

aci:(target="ldap:///dc=example,dc=com")(targetattr="*")
 (version 3.0; acl "manager-write"; allow (all)
 userattr = "manager#USERDN";)

此 ACI 將管理員直屬員工項目的全部權利授與管理員。但是,因為存取權利是在建立的項目上評估,這類 ACI 也會允許任何員工建立項目,並將 manager 屬性設為他們自己的 DN。例如,心懷不滿的員工 Joe (cn=Joe,ou=eng,dc=example,dc=com) 可能會在樹狀目錄的 Human Resources 分支中建立項目,以使用 (或濫用) 授與 Human Resources 員工的權限。

他可以利用建立下列項目來達成此目的:

dn:cn= Trojan Horse,ou=Human Resources,dc=example,dc=com
objectclass:top
...
cn:Trojan Horse
manager:cn=Joe,ou=eng,dc=example,dc=com

為避免這類安全性威脅,ACI 評估處理程序不會在層級 0 (也就是項目本身) 授與加入權限,但您可以用 parent 關鍵字授與現有項目下的加入權利。您必須指定父項目下需要加入權利的層級數。例如,下列 ACI 允許為 dc=example,dc=com 中的任何項目加入子項目,只要該項目有符合連結 DN 的 manager 屬性:

aci:(target="ldap:///dc=example,dc=com")(targetattr="*")
 (version 3.0; acl "parent-access"; allow (add)
 userattr = "parent[0,1].manager#USERDN";)

此 ACI 可確保加入權限只授與其連結 DN 與父項目的 manager 屬性相符的使用者。

定義來自特定 IP 位址的存取

使用連結規則,可以表示連結作業必須起源自特定 IP 位址。這通常用來強制讓所有目錄的更新均從指定的電腦或網路網域發生。

設定以 IP 位址為基礎的連結規則的 LDIF 語法如下:

ip = "IPaddressList"ip != "IPaddressList"

IPaddressList 是一張清單,以一或多個逗號將元素分隔,其中的元素可為下列任一項:

如果存取目錄的用戶端位在命名的 IP 位址中,則連結規則會被評估為真實。這對於只允許從特定子網路或電腦進行某種目錄存取而言是非常有用。來自使用者驗證的 IP 位址可能不是真實的,因此無法受到信任。請勿依這種資訊決定 ACI。

從 Server Console 上,可以透過編輯 ACI 對話方塊定義要套用 ACI 的特定電腦。如需詳細資訊,請參閱使用主控台建立 ACI

定義來自特定網域的存取

連結規則可以指定連結作業必須起源自特定網域或主機電腦。這通常用來強制讓所有目錄的更新均從指定的電腦或網路網域發生。

設定以 DNS 主機名稱為基礎的連結規則的 LDIF 語法如下:

dns = "DNS_Hostname"dns != "DNS_Hostname"


小心

dns 關鍵字要求您的電腦上必須使用 DNS 命名服務。如果命名服務不是 DNS,您應該改用 ip 關鍵字。


dns 關鍵字需要完整格式 DNS 網域名稱。若授與主機存取權,卻不指定網域,會造成潛在的安全性威脅。例如,下列運算式雖然可被允許,但並不建議您如此做:

dns = "legend.eng";

應該使用完整格式名稱,例如:

dns = "legend.eng.example.com";

dns 關鍵字允許萬用字元。例如:

dns = "*.example.com";

如果存取目錄的用戶端位在命名的網域,則連結規則會被評估為真實。這對於只允許從特定網域進行存取非常有用。請注意,如果系統使用的命名服務並非 DNS ,則萬用字元將無作用。在這種情況下,如果要限制存取特定網域,請使用 ip 關鍵字,如定義來自特定 IP 位址的存取中所述。

定義於特定時間或日期存取

可以用連結規則指定連結只能發生在一天中的某個時間,或一星期的某一天。例如,可以設定一條規則,只允許在星期一到星期五的上午 8 點到下午 5 點之間進行存取。用來評估存取權利的時間是目錄伺服器上的時間,而非用戶端上的時間。

設定以一天中某一時段為基礎的連結規則的 LDIF 語法如下:

timeofday operator "time"

其中 operator 可為下列符號之一:等於 (=)、不等於 !=}、大於 (>)、大於或等於 (>=)、小於 <} 或小於或等於 (<=)。以四位數表示 24 小時時間格式的時數與分鐘 (02359)。例如:

設定以一星期中某天為基礎的連結規則的 LDIF 語法如下:

dayofweek = "day1, day2 ..."

dayofweek 關鍵字可能的值為一星期中各天的三個英文字母縮寫:sunmontuewedthufrisat。指定您想要授與存取權的所有日期,例如:

dayofweek = "Mon, Tue, Wed, Thu, Fri";

如果在列出的其中一個日期存取目錄,則連結規則為真。

定義以驗證方法為基礎的存取

可以設定連結規則,指明用戶端必須使用特定驗證方法連結到目錄。可用的驗證方法如下:

您無法透過編輯 ACI 對話方塊設定以驗證為基礎的連結規則。

設定以驗證方法為基礎的連結規則的 LDIF 語法如下:

authmethod = "authentication_method"

其中 authentication_methodnonesimplesslsasl sasl_mechanism。例如:

範例

下列是 authmethod 關鍵字的範例:

使用布林連結規則

連結規則可以是使用布林運算式 ANDORNOT 的複雜運算式,以設定非常精確的存取規則。

您無法使用 Directory Server Console 建立布林連結規則,您必須建立 LDIF 敘述。

當建立布林連結規則時,永遠使用括弧來定義評估規則的順序。

位於結尾處的分號是必要的分隔字元,必須出現在最後的規則後。

例如,若要與 bindRuleA 連結,並與 bindRuleB,或是與 bindRuleC 以及 bindRuleD 連結,請使用下列語法:

(bindRuleA and (bindRuleB or (bindRuleC and bindRuleD));)

使用另一個範例,如果連結 DN 用戶端是由 example.com 網域之內存取,並且為 Administrators 群組,或同時為 Mail Administrators 及 Calendar Administrators 群組之成員,則下列連結規則會被評估為真實。

(dns = "*.example.com" and
(groupdn = "ldap:///cn=administrators,dc=example,dc=com" or
(groupdn = "ldap:///cn=mail administrators,dc=example,dc=com" and
groupdn = "ldap:///cn=calendar administrators,dc=example,dc=com"));)


從指令行建立 ACI

您可以使用 LDIF 敘述手動建立存取控制指令,並用 ldapmodify 指令將它們加入到您的樹狀目錄中。因為 ACI 值可能非常複雜,您最好檢視現有的值,然後複製起來幫您建立新的值。

檢視 ACI 屬性值

系統儲存 ACI 作為項目上 aci 屬性的一或多個值。aci 屬性是多重值操作屬性,目錄使用者可讀取與修改此屬性,而此屬性本身受到 ACI 保護。管理使用者通常對 aci 屬性擁有完整存取權,而且可使用下列其中一種方式檢視其內容。

可以在 [標準編輯器] 中檢視 aci 屬性值,就如同任何其他值一般。在 Directory Server Console 最上層的 [目錄] 標籤上,以滑鼠右鍵按一下有 ACI 的項目,並選擇 [以標準編輯器編輯] 功能表項目。但是,aci 值通常是長字串,不容易在此對話方塊中檢視與編輯。

因此,可以改為在樹狀目錄的項目上按一下滑鼠右鍵,再選擇 [設定存取權限] 功能表項目以呼叫 [存取控制編輯器]。選取 ACI 後按一下 [編輯],再按一下 [手動編輯],即可檢視對應的 aci 值。藉由在 ACI 的手動與視覺化編輯器之間切換,可比較 aci 值的語法與其配置。

如果您的作業系統允許,您可以從 [標準編輯器] 或 [手動存取控制編輯器] 中複製 aci 值,並將它貼入您的 LDIF 檔案。管理使用者也可以執行下列 ldapsearch 指令來檢視項目的 ACI 屬性:

ldapsearch -h host -p port -D "cn=Directory Manager" -w password \
             -b entryDN -s base "(objectclass=*)" aci

產生的結果是您可以貼入新的 LDIF ACI 定義以進行編輯的 LDIF 文字。因為 ACI 的值是長字串,所以 ldapsearch 操作上的輸出可能顯示在數行上,含有作為連續標記的第一個空格。複製和貼上 LDIF 輸出時將此列入考慮。


備註

若要檢視 aci 值對授與或拒絕權限所產生的影響,請參閱檢視有效權利



使用主控台建立 ACI

可以設定 Directory Server Console 以顯示目錄中哪些項目擁有 aci 屬性。選取或取消選取 [檢視] > [顯示] > [ACI 計數] 功能表選項,可切換此顯示。最上層 [目錄] 標籤內列出的項目便會附加上其 aci 屬性中已定義的 ACI 數目,接著您可以使用Directory Server Console檢視、建立、編輯與刪除目錄的存取控制指令。

如需 Directory Server 安全策略中常用的存取控制規則集合,以及使用Directory Server Console建立這些規則的逐步說明,請參閱存取控制用法範例

[存取控制編輯器] 無法讓您在 [視覺化] 編輯模式中建構比較複雜的 ACI。尤其是,您無法從編輯 ACI 對話方塊執行:

檢視項目的 ACI

  1. 在Directory Server Console最上層的 [目錄] 標籤上,瀏覽樹狀目錄,以顯示要設定存取控制的項目。必須具有目錄系統管理員或目錄管理員權限才能編輯 ACI。
  2. 以滑鼠右鍵按一下項目,並在快顯功能表中選取 [設定存取權限]。或者,以滑鼠左鍵按一下項目以選取項目,再選擇 [物件] 功能表中的 [設定存取權限]。
  3. 出現如下圖所示的管理存取控制對話方塊。圖中列出在選取的項目上定義之所有 ACI 的描述,並可讓您進行編輯,或移除後再建立新的描述。

    圖 6-2 管理存取控制對話方塊
    適用於 ou=People,dc=example,dc=com 的標題為「管理存取控制」的視窗,而且列出在此項目上定義的 ACI 之描述字串

    選取 [顯示繼承的 ACI] 核取方塊列出被選取項目之父項目所定義的所有 ACI,以及套用到項目的 ACI。繼承的 ACI 無法被編輯或移除,您必須在定義該 ACI 的項目上進行管理。

  4. 按一下 [新增] 在選取的物件及其整個樹狀子目錄上定義新的存取權限。出現如圖 6-3 所示的編輯 ACI 對話方塊。
  5. 圖 6-3 編輯 ACI 對話方塊
    適用於 ou=People,dc=example,dc=com 的標題為「編輯 ACI」的視窗,而且顯示定義 ACI 圖形介面

對話方塊上方的 ACI 名稱是出現在管理存取控制對話方塊中的 ACI 描述。因為描述性的 ACI 名稱會使整個目錄的 ACI 比較容易管理,尤其在檢視葉項目上繼承的 ACI 時。

編輯 ACI 對話方塊的各個標籤可讓您指定被授與或拒絕存取的使用者、存取中或遭限制的目標,以及進階參數,例如允許的主機名稱與作業時段等。如需關於 [存取控制] 標籤中個別欄位的詳細資料,請參閱線上說明。

編輯 ACI 對話方塊的各個標籤為 ACI 值的內容提供圖形顯示。按一下 [手動編輯] 按鈕可查看 ACI 值並用文字方式進行編輯。在文字編輯器中,可以定義無法透過標籤定義的進階 ACI。但是一旦編輯 ACI 值之後,即使 不使用進階功能,都一樣可能再也無法以視覺方式編輯 ACI。

建立新的 ACI

  1. 顯示 [存取控制編輯器]。
  2. 此工作在檢視項目的 ACI 中有說明。

    如果顯示的檢視與圖 6-3 不同,請按一下 [視覺化編輯] 按鈕。

  3. 在 [ACI 名稱] 文字方塊中輸入名稱,為 ACI 命名。
  4. 名稱可以是任何字串,以用於唯一識別此 ACI。如果不輸入名稱,伺服器會使用 unnamed ACI

  5. 在 [使用者/群組] 標籤中,藉由反白顯示 [全部使用者],或按一下 [加入] 按鈕在目錄中搜尋要加入的使用者,以選取要授與存取權的使用者。
  6. 在 [加入使用者和群組] 視窗中:

    1. 從下拉式清單中選取一個搜尋區域,在 [搜尋] 欄位中輸入搜尋字串,再按一下 [搜尋] 按鈕。
    2. 搜尋結果會顯示在下方的清單中。

    3. 反白顯示搜尋結果清單中您要的項目,再按一下 [加入] 按鈕將項目加入擁有存取權限的項目清單中。
    4. 按一下 [確定] 退出 [加入使用者和群組] 視窗。
    5. 您選取的項目現在會列在 ACI 編輯器的 [使用者/群組] 標籤上。

  7. 在編輯 ACI 對話方塊中,按一下 [權利] 標籤,再使用核取方塊選取要授與的權利。
  8. 按一下 [目標] 標籤,再按一下 [此項目] 以顯示作為 ACI 目標的節點。
  9. 可以變更目標 DN 的值,但新的 DN 必須是選取項目的直接或間接子項。

    如果不要將此節點下樹狀子目錄中的每一個項目都作為 ACI 的目標,您必須在 [子項目的篩選器] 欄位中輸入篩選條件。

    此外,可以在屬性清單中選取要作為目標的屬性,將 ACI 的範圍限制在某些屬性。

  10. 按一下 [主機] 標籤,再按一下 [加入] 以顯示 [加入主機篩選器] 對話方塊。
  11. 可以指定主機名稱或 IP 位址。如果指定 IP 位址,則可以使用萬用字元 (*)。

  12. 按一下 [時間] 標籤以顯示表格,列出允許存取的時段。
  13. 依預設值,隨時都允許存取。可以在表格上按一下並拖曳游標,以變更存取時段;您無法選擇不連續的時段。

  14. 當您完成編輯 ACI 後,請按一下 [確定]。
  15. 退出 ACI 編輯器,新的 ACI 會列在 [ACI 管理員] 視窗中。


    備註

    在建立 ACI 期間,可以隨時按一下 [手動編輯] 以顯示與您的輸入對應的 LDIF 敘述。可以修改此敘述,但所做的變更未必會顯示在圖形介面上。


編輯 ACI

若要編輯 ACI:

  1. 於 [目錄] 標籤上,在樹狀子目錄的項端項目上按一下滑鼠右鍵,再由快顯功能表中選擇 [設定存取權限]。
  2. 顯示管理存取控制視窗。該視窗包含屬於項目的 ACI 清單。

  3. 在管理存取控制視窗中,反白顯示要編輯的 ACI,再按一下 [編輯]。
  4. 顯示 [存取控制編輯器]。如需關於可用此對話方塊編輯資訊的詳細資料,請參閱線上說明。

  5. 在編輯 ACI 對話方塊的各個標籤中進行您要的變更。
  6. 當您完成編輯 ACI 後,請按一下 [確定]。
  7. 退出 ACI 編輯器,被修改的 ACI 會列在 [ACI 管理員] 中。

刪除 ACI

若要刪除 ACI:

  1. 於 [目錄] 標籤上,在樹狀子目錄的項端項目上按一下滑鼠右鍵,再由快顯功能表中選擇 [設定存取權限]。
  2. 顯示管理存取控制視窗。該視窗包含屬於項目的 ACI 清單。

  3. 在管理存取控制視窗中,選取要刪除的 ACI。
  4. 按一下 [移除]。
  5. [存取控制管理員] 中不再列示該 ACI。


存取控制用法範例

本節中的範例將說明一家想像的 ISP 公司 example.com 如何執行其存取控制策略。所有範例都會解釋如何從主控台及使用 LDIF 檔案執行指定的工作。

example.com 的業務內容是提供網站代管服務及網際網路存取。example.com 網站代管有部分的服務是儲存用戶端公司的目錄。實際上,example.com 儲存 Company333 與 Company999 這兩家中型公司的目錄,並負責部分管理工作。除此之外,它也為許多個人訂戶提供網際網路存取。

以下是 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" and dns="*.example.com";)

此範例假設將 aci 加入至 dc=example,dc=com 項目。請注意,userPassword 屬性不在 ACI 的範圍內。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄的 example.com 節點上按一下滑鼠右鍵,再選擇快顯式功能表的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 於 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Anonymous example.com"。請檢查 [全部使用者] 已經顯示在授與存取權限的使用者清單中。
  4. 在 [權利] 標籤上,勾選讀取、比較與搜尋權利的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [目標] 標籤上,按一下 [此項目],讓 dc=example,dc=com 尾碼在目標目錄項目欄位中顯示。在屬性表中找到 userPassword 屬性,並清除對應的核取方塊。
  6. 應該勾選所有其他的核取方塊。如果按一下 [名稱] 標頭,將屬性清單依字母順序排列,則這項工作會比較容易進行。

  7. 在 [主機] 標籤上按一下 [加入],並在 DNS 主機篩選條件欄位中輸入 *.example.com。按一下 [確定] 退出對話方塊。
  8. 在編輯 ACI 對話方塊中按一下 [確定]。
  9. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

ACI "Anonymous World"

在 LDIF 中,若要將個別訂戶樹狀子目錄的讀取與搜尋存取授與全世界,同時拒絕存取不列名訂戶的資訊,您可以撰寫下列敘述:

aci:(targetfilter= "(!(unlistedSubscriber=yes))")
 (targetattr="homePostalAddress || homePhone || mail")
 (version 3.0; acl "Anonymous World"; allow (read, search)
 userdn="ldap:///anyone";)

此範例假設將 ACI 加入至 ou=subscribers,dc=example, dc=com 項目。並假設每個訂戶項目都有 unlistedSubscriber 屬性,而且設為 yes 或 no。目標定義會根據此屬性值篩選掉不列名的訂戶。如需關於篩選條件定義的詳細資料,請參閱使用篩選條件設定目標

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄的 example.com 節點下的 [簽署者] 項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Anonymous World"。請檢查 [全部使用者] 已經顯示在授與存取權限的使用者清單中。
  4. 在 [權利] 標籤上,勾選讀取與搜尋權利的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [目標] 標籤上,按一下 [此項目],讓 dc=subscribers, dc=example, dc=com 尾碼在目標目錄項目欄位中顯示。
    1. 在次要項目欄位的篩選條件中,輸入下列條件:
    2. (!(unlistedSubscriber=yes))

    3. 在屬性表中,勾選 homePhonehomePostalAddressmail 屬性的核取方塊。
    4. 應該清除所有其他的核取方塊。若要讓工作更加容易,請按一下 [全部不選] 按鈕,便會清除表格中所有屬性的核取方塊,然後按一下 [名稱] 標頭依字母順序加以組織,再選取相關的屬性。

  6. 按一下 [確定]。
  7. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

授權可寫入存取個人項目

許多目錄管理員希望允許內部使用者變更他自己部分的屬性,但不是全部屬性。example.com 的目錄管理員希望允許使用者變更他們自己的密碼、住家電話號碼及住家地址,除此之外均不允許。這會在 ACI "Write example.com" 範例中解說。

example.com 的策略也允許訂戶更新 example.com 樹狀目錄中他們自己的個人資訊,前提是必須與目錄建立 SSL 連線。這會在 ACI "Write Subscribers" 範例中解說。

ACI "Write example.com"


備註

藉由設定此權限,您也可以授與使用者刪除屬性值的權利。


在 LDIF 中,若要授權 example.com 員工可更新其密碼、住家電話號碼及住家地址,請撰寫下列敘述:

aci:(targetattr="userPassword || homePhone ||
 homePostalAddress")(version 3.0; acl "Write example.com";
 allow (write) userdn="ldap:///self" and dns="*.example.com";)

此範例假設將 ACI 加入 ou=People,dc=example,dc=com 項目。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄的 ou=People,dc=example,dc=com 項目上按一下滑鼠右鍵,再選擇快顯式功能表的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Write example.com"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [搜尋] 區域設定為 [特權],並選取 [搜尋] 結果清單中的 [自身]。
    4. 按一下 [加入] 按鈕,在授與存取權限的使用者清單中列示 [自身]。
    5. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,勾選寫入權利的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [目標] 標籤上,按一下 [此項目],在目標目錄項目欄位中輸入 ou=People, dc=example,dc=com。在屬性表中,勾選 homePhonehomePostalAddressuserPassword 屬性的核取方塊。
  6. 應該清除所有其他的核取方塊。若要讓工作更加容易,請按一下 [全部不選] 按鈕,便會清除表格中所有屬性的核取方塊,然後按一下 [名稱] 標頭依字母順序加以組織,再選取相關的屬性。

  7. 在 [主機] 標籤上,按一下 [加入] 顯示 [加入主機篩選器] 對話方塊。在 DNS 主機篩選條件欄位中,輸入 *.example.com。按一下 [確定] 退出對話方塊。
  8. 在編輯 ACI 對話方塊中按一下 [確定]。
  9. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

ACI "Write Subscribers"


備註

藉由設定此權限,您也可以授與使用者刪除屬性值的權利。


在 LDIF 中,若要授權 example.com 訂戶可更新其密碼與住家電話號碼,請撰寫下列敘述:

aci:(targetattr="userPassword || homePhone")
 (version 3.0; acl "Write Subscribers"; allow (write)
 userdn= "ldap://self" and authmethod="ssl";)

此範例假設將 aci 加入至 ou=subscribers,dc=example, dc=com 項目。

請注意,example.com 訂戶對其住家地址沒有寫入存取,因為他們可能會刪除此屬性,而 example.com 需要這項資訊才能處理帳單。因此,住家地址是關鍵業務資訊。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄的 example.com 節點下的 [簽署者] 項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Write Subscribers"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [搜尋] 區域設定為 [特權],並選取 [搜尋] 結果清單中的 [自身]。
    4. 按一下 [加入] 按鈕,在授與存取權限的使用者清單中列示 [自身]。
    5. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,勾選要寫入的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [目標] 標籤上,按一下 [此項目],讓 dc=subscribers, dc=example, dc=com 尾碼在目標目錄項目欄位中顯示。
    1. 在次要項目欄位的篩選條件中,輸入下列條件:
    2. (!(unlistedSubscriber=yes))

    3. 在屬性表中,勾選 homePhonehomePostalAddressmail 屬性的核取方塊。
    4. 應該清除所有其他的核取方塊。若要讓工作更加容易,請按一下 [全部不選] 按鈕,便會清除表格中所有屬性的核取方塊,然後按一下 [名稱] 標頭依字母順序加以組織,再選取相關的屬性。

  6. 如果希望使用者使用 SSL 進行驗證,請按一下 [手動編輯] 按鈕以切換到手動編輯模式,並將 authmethod=ssl 加入 LDIF 敘述,使其如下:
  7. (targetattr="homePostalAddress || homePhone || mail")
     (version 3.0; acl "Write Subscribers"; allow (write)
     (userdn= "ldap:///self") and authmethod="ssl";)

    請注意這是一個分割以便於讀取的連續行。

  8. 按一下 [確定]。
  9. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

限制存取重要角色

可以在目錄中使用角色定義,以識別對業務、網路與目錄管理或其他用途具有關鍵影響的功能。

例如,您可以建立一個 superAdmin 角色,來識別公司全球各地的網站中,於特定日期時間可提供服務的系統管理員子集。或者,可以建立一個 First Aid 角色,包含特定網站上已完成急救訓練的所有工作人員。如需關於建立角色定義的資訊,請參閱指派角色

當角色會對重要的公司或業務功能賦與任何特殊的使用者權限時,應該考慮限制存取該角色。例如,在 example.com 中,員工可以在他們自己的項目中加入任何角色,但 superAdmin 角色除外。這會在 ACI "Roles" 範例中解說。

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" and dns="*.example.com";)

此範例假設將 ACI 加入 ou=People,dc=example, dc=com 項目。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄的 example.com 節點上按一下滑鼠右鍵,再選擇快顯式功能表的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入"Roles"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [加入使用者和群組] 對話方塊中的 [搜尋] 區域設定為 [特權],並選取 [搜尋] 結果清單中的 [自身]。
    4. 按一下 [加入] 按鈕,在授與存取權限的使用者清單中列示 [自身]。
    5. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,勾選要寫入的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [主機] 標籤上,按一下 [加入] 顯示 [加入主機篩選器] 對話方塊。在 DNS 主機篩選條件欄位中,輸入 *.example.com。按一下 [確定] 退出對話方塊。
  6. 若要為角色建立以值為基礎的篩選條件,請按一下 [手動編輯] 按鈕以切換到手動編輯模式。將下列加入 LDIF 敘述的開頭:
  7. (targattrfilters="add=nsRoleDN:
     (nsRoleDN != "cn=superAdmin, dc=example,dc=com")")

    LDIF 敘述應該如下:

    (targetattr="*") (targattrfilters="add=nsRoleDN:
     (nsRoleDN != "cn=superAdmin, dc=example,dc=com")")
     (target = "ldap:///dc=example,dc=com")
     (version 3.0; acl "Roles"; allow (write)
     (userdn = "ldap:///self") and (dns="*.example.com");)

  8. 按一下 [確定]。
  9. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

授與尾碼的群組完整存取

大部分目錄會有一個群組用來識別某些公司功能。這些群組可獲得目錄全部或部分的完整存取權。藉由在群組上套用存取權利,您可以避免為每個成員個別設定存取權利;只要將使用者加入群組,即可簡單地將這些存取權利授與使用者。

例如,使用 [一般安裝] 處理序安裝 Directory Server 時,便會預設建立一個對目錄擁有完整存取的 Administrators 群組。

在 example.com 中,Human Resources 群組可完整存取目錄的 ou=People 分支,使他們能夠更新員工目錄。這會在 ACI "HR" 範例中解說。

ACI "HR"

在 LDIF 中,若要將目錄中 employee 分支的全部權利授與 HR 群組,請使用下列敘述:

aci:(targetattr="*") (version 3.0; acl "HR"; allow (all)
 groupdn= "ldap:///cn=HRgroup,ou=People,dc=example,dc=com";}

此範例假設將 ACI 加入下列項目中:

ou=People,dc=example,dc=com

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄中 example.com 節點下的 example.com-people 項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 [HR]。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [搜尋] 區域設為 [使用者與群組],並在 [搜尋] 欄位中輸入"Hrgroup"。
    4. 此範例假設您已建立 HR 群組或角色。如需關於群組與角色的詳細資訊,請參閱第 5 章「管理身份和角色」

    5. 按一下 [加入] 按鈕,將 HR 群組列在被授與存取權限的使用者清單中。
    6. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,按一下 [全選] 按鈕。
  5. 除了代理權利外,應該勾選所有核取方塊。

  6. 按一下 [確定]。
  7. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

授與加入與刪除群組項目的權利

如果可提高工作效率,或增進公司動力,有些組織會希望允許員工在樹狀目錄中建立項目。

以 example.com 為例,公司有一個活躍的社交委員會,此委員會組織成幾個社團:網球社、游泳社、滑雪社、演藝社等。任何 example.com 員工都可以建立代表新社團的群組項目。這會在 ACI "Create Group" 範例中解說。任何 example.com 員工都可以成為這些群組的成員。這會在允許使用者在群組中加入或移除他們自己下的 ACI "Group Members" 範例中解說。只有群組擁有者可修改或刪除群組項目。這會在 ACI "Delete Group" 範例中解說。

ACI "Create Group"

在 LDIF 中,若要授權 example.com 員工可在 ou=Social Committee 分支下建立群組項目,請撰寫下列敘述:

aci:(target="ldap:///ou=social committee,dc=example,dc=com")
 (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";)


備註

  • 此 ACI 不授與寫入權限,也就是項目建立者無法修改項目。
  • 因為伺服器祕密地加入值 "top",您必須在 targattrfilters 關鍵字中指定 objectclass=top

此範例假設將 ACI 加入至 ou=social committee, dc=example,dc=com 項目。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄中 example.com 節點下的 Social Committee 項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Create Group"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [搜尋] 區域設定為 [特權],並選取 [搜尋] 結果清單中的 [所有已驗證的使用者]。
    4. 按一下 [加入] 按鈕,讓 [所有已驗證的使用者] 在授與存取權限的使用者清單中列出。
    5. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,勾選讀取、搜尋與加入的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [目標] 標籤上,按一下 [此項目],讓 ou=social committee, dc=example, dc=com 尾碼在目標目錄項目欄位中顯示。
  6. 在 [主機] 標籤上,按一下 [加入] 顯示 [加入主機篩選器] 對話方塊。在 DNS 主機篩選條件欄位中,輸入" *.example.com"。按一下 [確定] 退出對話方塊。
  7. 若要建立以值為基礎的篩選條件,讓員工只能在此樹狀子目錄中加入群組項目,請按一下 [手動編輯] 按鈕以切換到手動編輯模式。將下列加入 LDIF 敘述的開頭:
  8. (targattrfilters="add=objectClass:(objectClass=groupOfNames)
     |(objectClass=top)")

    LDIF 敘述應該如下:

    (targetattr = "*") (targattrfilters="add=objectClass:(objectClass=groupOfNames)
     |(objectClass=top)") (target="ldap:///ou=social  committee,dc=example,dc=com) (version 3.0; acl "Create Group";
     allow (read,search,add) (userdn= "ldap:///all") and
     (dns="*.example.com"); )

  9. 按一下 [確定]。
  10. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

ACI "Delete Group"

在 LDIF 中,若要授權 example.com 員工可修改或刪除 ou=Social Committee 分支下他們所擁有的群組項目,請撰寫下列敘述:

aci:(target="ou=social committee,dc=example,dc=com)
 (targetattr = "*")
 
(targattrfilters="del=objectClass:(objectClass=groupOfNames)")
 (version 3.0; acl "Delete Group"; allow (write,delete)
 userattr="owner#GROUPDN";)

此範例假設將 aci 加入至 ou=social committee, dc=example,dc=com 項目。

建立此 ACI 時,使用主控台並不是有效方法,因為您將必須使用手動編輯模式建立目標篩選條件,並檢查群組擁有權。

將條件式存取授與群組或角色

在許多情況中,當您將目錄的存取權限授與群組或角色時,您希望確認這些權限受到保護,不會讓侵入者冒用被授權的使用者。因此,在許多情況中,將重要存取權授與給群組或角色的存取控制規則往往附帶許多條件。

舉例來說,example.com 已為它代管的 Company333 與 Company999 兩家公司各建立一個目錄管理員角色。它希望這些公司能夠管理它們自己的資料,並執行它們自己的存取控制規則,同時又能確保不受侵入者干擾。基於這個原 因,Company333 與 Company999 對樹狀目錄中各自的分支擁有完整權利,但必須符合下列條件:

這些條件列在每家公司的單一 ACI 中,分別是 ACI "Company333" 與 ACI "Company999"。因為這兩個 ACI 的內容相同,下列範例僅解說 "Company333" ACI。

ACI "Company333"

在 LDIF 中,若要授權 Company333 可在上述條件下完整存取目錄中它們自己的分支,請撰寫下列敘述:

aci:(target="ou=Company333,ou=corporate-clients,dc=example,dc=com")
 (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"); )

此範例假設將 ACI 加入至 ou=Company333,ou=corporate-clients, dc=example, dc=com 項目。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄中 example.com 節點下的 Company333 項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Company333"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [搜尋] 區域設為 [使用者與群組],並在 [搜尋] 欄位中輸入 "DirectoryAdmin"。
    4. 此範例假設您已用 DirectoryAdmincn 建立一個系統管理員角色。

    5. 按一下 [加入] 按鈕,將系統管理員角色列在被授與存取權限的使用者清單中。
    6. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,按一下 [全選] 按鈕。
  5. 在 [目標] 標籤上,按一下 [此項目],讓 ou=Company333,ou=corporate-clients, dc=example,dc=com 尾碼在目標目錄項目欄位中顯示。
  6. 在 [主機] 標籤上,按一下 [加入] 顯示 [加入主機篩選器] 對話方塊。在 [IP 位址主機篩選條件] 欄位中輸入 255.255.123.234。按一下 [確定] 退出對話方塊。
  7. IP 位址必須是主機電腦上有效的 IP 位址,Company333 系統管理員使用此位址連線到 example.com 目錄。

  8. 在 [時間] 標籤上,選擇對應到星期一到星期四以及上午 8 點到下午 6 點的時段。
  9. 表格下方會出現訊息,指定您已選取的時段。

  10. 若要對來自 Company333 系統管理員的連線強制執行 SSL 驗證,請按一下 [手動編輯] 按鈕以切換到手動編輯模式。將下列加入 LDIF 敘述的尾碼:
  11. and (authmethod="ssl")

    LDIF 敘述應類似:

    aci:(targetattr = "*")(target="ou=Company333,
     ou=corporate-clients,dc=example,dc=com") (version 3.0; acl
     "Company333"; allow (all) (roledn="ldap:///cn=DirectoryAdmin,
     ou=Company333,ou=corporate-clients, dc=example,dc=com") and
     (dayofweek="Mon,Tues,Wed,Thu") and (timeofday >= "0800" and
     timeofday <= "1800") and (ip="255.255.123.234") and
     (authmethod="ssl"); )

  12. 按一下 [確定]。
  13. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

拒絕存取

如果目錄儲存關鍵業務資訊,您可能希望特別地拒絕其存取。

例如,example.com 希望所有訂戶能夠查看其項目下的帳單資訊 (如連線時間或帳戶餘額),但明確拒絕寫入存取該資訊。這會分別在 ACI "Billing Info Read"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";)

此範例假設已經在模式中建立相關的屬性,而且將 ACI 加入至 ou=subscribers, dc=example,dc=com 項目。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄的 example.com 節點下簽署者項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Billing Info Read"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [加入使用者和群組] 對話方塊中的 [搜尋] 區域設定為 [特權],並選取 [搜尋] 結果清單中的 [自身]。
    4. 按一下 [加入] 按鈕,在授與存取權限的使用者清單中列示 [自身]。
    5. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,勾選搜尋與讀取權利的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [目標] 標籤上,按一下 [此項目],讓 ou=subscribers, dc=example, dc=com 尾碼在目標目錄項目欄位中顯示 。在屬性表中,勾選 connectionTimeaccountBalance 屬性的核取方塊。
  6. 應該清除所有其他的核取方塊。若要讓工作更加容易,請按一下 [全部不選] 按鈕,便會清除表格中所有屬性的核取方塊,然後按一下 [名稱] 標頭依字母順序加以組織,再選取相關的屬性。

    此範例假設您已經將 connectionTimeaccountBalance 屬性加入至模式。

  7. 按一下 [確定]。
  8. 將新的 ACI 加入到管理存取控制視窗中所列示的 ACI 中。

ACI "Billing Info Deny"

在 LDIF 中,若要拒絕訂戶可修改他們自己項目中帳單資訊的權限,請撰寫下列敘述:

aci:(targetattr="connectionTime || accountBalance")
 (version 3.0; acl "Billing Info Deny";
 deny (write) userdn="ldap:///self";)

此範例假設已經在模式中建立相關的屬性,而且將 ACI 加入至 ou=subscribers, dc=example,dc=com 項目。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄的 example.com 節點下簽署者項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入"Billing Info Read"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [加入使用者和群組] 對話方塊中的 [搜尋] 區域設定為 [特權],並選取 [搜尋] 結果清單中的 [自身]。
    4. 按一下 [加入] 按鈕,在授與存取權限的使用者清單中列示 [自身]。
    5. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,勾選要寫入的核取方塊。請確認已經清除其他的核取方塊。
  5. 按一下 [手動編輯] 按鈕,並在顯示的 LDIF 敘述中,將 allow 變更為 deny
  6. 在 [目標] 標籤上,按一下 [此項目],讓 ou=subscribers, dc=example, dc=com 尾碼在目標目錄項目欄位中顯示 。在屬性表中,勾選 connectionTimeaccountBalance 屬性的核取方塊。
  7. 應該清除所有其他的核取方塊。若要讓工作更加容易,請按一下 [全部不選] 按鈕,便會清除表格中所有屬性的核取方塊,然後按一下 [名稱] 標頭依字母順序加以組織,再選取相關的屬性。

    此範例假設您已經將 connectionTimeaccountBalance 屬性加入至模式。

  8. 按一下 [確定]。
  9. 將新的 ACI 加入到管理存取控制視窗中所列示的 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") ;)

此範例假設將 ACI 加入至 ou=social committee, dc=example,dc=com 項目。

可執行下列作業,從主控台設定此權限:

  1. 於 [目錄] 標籤上,在左瀏覽樹狀目錄中 example.com 節點下的 People 項目上按一下滑鼠右鍵,再選擇快顯功能表中的 [設定存取權限] 以顯示 [存取控制管理員]。
  2. 按一下 [新增] 顯示 [存取控制編輯器]。
  3. 在 [使用者/群組] 標籤上的 [ACI 名稱] 欄位中,輸入 "Group Members"。請在授與存取權限的使用者清單中,執行下列作業:
    1. 選取並移除 [全部使用者],然後按一下 [加入]。
    2. 顯示 [加入使用者和群組] 對話方塊。

    3. 將 [加入使用者和群組] 對話方塊中的 [搜尋] 區域設定為 [特權],並選取 [搜尋] 結果清單中的 [所有已驗證的使用者]。
    4. 按一下 [加入] 按鈕,讓 [所有已驗證的使用者] 在授與存取權限的使用者清單中列出。
    5. 按一下 [確定] 退出 [加入使用者和群組] 對話方塊。
  4. 在 [權利] 標籤上,勾選自寫的核取方塊。請確認已經清除其他的核取方塊。
  5. 在 [目標] 標籤上,在目標目錄項目欄位中輸入 dc=example,dc=com 尾碼。在屬性表中,勾選 member 屬性的核取方塊。
  6. 應該清除所有其他的核取方塊。若要讓工作更加容易,請按一下 [全部不選] 按鈕,便會清除表格中所有屬性的核取方塊,然後按一下 [名稱] 標頭依字母順序加以組織,再選取相關的屬性。

  7. 按一下 [確定]。
  8. 將新的 ACI 加入到管理存取控制視窗中所列示的 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 範例

代理驗證方法是一種特殊形式的驗證:使用自己的身份連結到目錄的使用者會透過代理驗證獲得其他使用者的權利。

此範例假設:

為了讓用戶端應用程式能夠存取 Accounting 樹狀子目錄 (使用與 Accounting 管理員相同的存取權限):

設定此 ACI 後,MoneyWizAcctSoftware 用戶端應用程式可連結到目錄,並傳送 ldapsearchldapmodify 這一類需要代理 DN 之存取權利的 LDAP 指令。

在以上範例中,如果用戶端希望執行 ldapsearch 指令,該指令會包含下列控制項:

ldapsearch \
-D "uid=MoneyWizAcctSoftware,ou=Applications,dc=example,dc=com" \
-w password\
-y "uid=AcctAdministrator,ou=Administrators,dc=example,dc=com"\ ...

請注意,用戶端以本身連結,但獲得代理項目的權限。用戶端不需要代理項目的密碼。


備註

您不能使用目錄管理員的 DN 作為代理 DN,也不能將代理權利授與目錄管理員。不僅如此,如果 Directory Server 在同一個連結作業中收到多個代理驗證控制項,便會傳回錯誤給用戶端應用程式,而且連結嘗試不會成功。



檢視有效權利

維護目錄項目的存取策略時,若知道您定義的 ACI 對安全性有何影響是有用的。Directory Server 可讓您評估現有 ACI,並回報在指定項目上授與指定使用者的有效權利。

Directory Server 回應可能包含在搜尋作業中 [取得有效權利] 控制項。此控制項的回應是在搜尋結果中傳回有關項目與屬性的有效權利資訊。這個額外的資訊包括每個項目和每個項目中每個屬性的寫入權限。系統管理員可要求 搜尋所用連結 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";)

使用取得有效權利控制項

使用 ldapsearch 指令與 -J "1.3.6.1.4.1.42.2.27.9.5.2" 選項以指定 [取得有效權利] 控制項。依預設值,控制項將在搜尋結果中傳回項目與屬性上連結 DN 項目的有效權利。請使用下列選項變更預設的行為:

若使用 -c-X 屬性中任一項,或同時使用兩者時,則暗示 [取得有效權利] 控制項的 OID 具有 -J 選項,因此不需要指定。如果您指定有效權利控制項的 NULL 值,則擷取目前使用者的權限和以目前 ldapsearch 操作傳回的屬性與項目的權限。

接著您必須選擇要檢視的資訊類型,可能是簡單權利,或是解釋如何授與或拒絕這些權利的詳細記錄資訊。資訊的類型分別由加入 aclRightsaclRightsInfo 來決定,作為搜尋結果中傳回的屬性。可以要求兩個屬性都收到全部有效權利資訊,雖然簡單權利的資訊會在詳細記錄資訊中重複顯示。


備註

aclRightsaclRightsInfo 屬性擁有虛擬作業屬性的行為。它們不存在目錄中,而且除非明確要求,否則也不會傳回。這些屬性是 Directory Server 在回應 [取得有效權利] 控制項時所產生的。

基於這個原因,這兩個屬性都不能用於篩選條件或任何種類的搜尋作業。


有效權利功能繼承其他參數,而這些參數會影響來自啟動搜尋作業的使用者之存取控制 (例如驗證方法、機器位址和名稱)。

下列範例示範使用者如何檢視他在目錄中的權利。在結果中,1 表示授與權限,0 表示拒絕權限:

ldapsearch -J "1.3.6.1.4.1.42.2.27.9.5.2" \
           -h rousseau.example.com -p 389 \
           -D "uid=cfuente,ou=People,dc=example,dc=com" \
           -w password -b "dc=example,dc=com" \
           "(objectclass=*)" aclRights

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 rousseau.example.com -p 389 \
           -D "cn=Directory Manager" -w password \
           -c "dn:uid=cfuente,ou=People,dc=example,dc=com" \
           -b "dc=example,dc=com" \
           "(objectclass=*)" aclRights

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 rousseau.example.com -p 389 \
           -D "cn=Directory Manager" -w password \
           -c "dn:uid=cfuente,ou=People,dc=example,dc=com" \
           -b "dc=example,dc=com" \
           "(uid=cfuente)" aclRights "*"

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

了解有效權利結果

有效權利要求依指定的選項傳回下列資訊:

權利資訊

依下列的子類型提供有效權限資訊:

aclRights;entrylevel

提供項目層級權限資訊

aclRights;attributelevel

提供屬性層級權限資訊

aclRightsInfo;entrylevel

提供項目層級記錄資訊

aclRightsInfo;attributelevel

提供屬性層級記錄資訊

aclRights 字串的格式是:permission:value(permission:value)*

可能的項目層級權限是 add、delete、read、write、import、exportproxy。可能的屬性層級權限是 read、search、compare、write、selfwrite_add、selfwrite_deleteproxy

這些權限的值可能是下列其中一個:

Write、Selfwrite_add 和 Selfwrite_delete 權限

在 Directory Server 5.2 中只有寫屬性層級權限有 "?" 值。對於加入和刪除權限,您可以加入及刪除的項目視項目中的屬性值而定。在項目上傳回權限 (01),因為它們是以 ldapsearch 作業傳回,而不是傳回 "?"。

如果 write 權限的值是 1,則授與加入和刪除所有值 (授權 dn 值除外) 的 ldapmodify 作業之權限。寫入權限的值是 0,表示未授與加入或刪除任何值 (授權 dn 值除外) 的 ldapmodify 作業之權限。在其中一個 selfwrite 權限中,明確地傳回授權 dn  值的有效權限,也就是 selfwrite_addselfwrite_delete

雖然 selfwrite-addselfwrite-delete 屬性層級不存在 ACI 環境中,一組 ACI 可以授與使用者修改操作的 加入或 刪除部分的 selfwrite 權限。就 selfwrite 權限而言,正在修改中的屬性值是授權 dn。write 沒有同樣的差異,因為尚未定義為了寫入權限所修改的屬性值。

有效權限取決於 targattrfilters ACI 時,"?" 值表示如需有關權限的詳細資料,請參閱記錄資訊。根據 write、selfwrite_add 和 selfwrite_delete 權限之間的相對複雜互依性,表 6-3 說明這三個可能權限的組合所表示的意義。

表 6-3 有效權利權限互依性

寫入

selfwrite_
add

selfwrite_
delete

有效權利說明

0

0

0

無法加入或刪除此屬性的任何值。

0

0

1

只能刪除授權 dn 的值。

0

1

0

只能加入授權 dn 的值。

0

1

1

只能加入或刪除授權 dn 的值。

1

0

0

可以加入或刪除除了授權 dn 之外的所有值。

1

0

1

可以刪除所有包含 授權 dn 的值,而且可以加入所有排除 授權 dn 的值。

1

1

0

可以加入所有包含授權 dn 的值,而且可以刪除所有排除授權 dn 的值。

1

1

1

可以加入或刪除此屬性的所有值。

?

0

0

不可以刪除加入或刪除入授權 dn 的值,但可能可以加入或刪除其他值。有關寫入權限的詳細資料,請參閱記錄資訊。

?

0

1

可以刪除,但不能加入授權 dn 的值,而且可能可以加入或刪除其他值。有關寫入權限的詳細資料,請參閱記錄資訊。

?

1

0

可以加入,但不能刪除授權 dn 的值,而且可能可以加入或刪除其他值。有關寫入權限的詳細資料,請參閱記錄資訊。

?

1

1

可以加入和刪除授權 dn 的值,而且可能可以修改加入或修改刪除其他值。有關寫入權限的詳細資料,請參閱記錄資訊。

記錄資訊

有效權利記錄資訊可讓您了解和偵錯存取控制的困難。記錄資訊包含稱為 acl_summary 的存取控制摘要聲明,指示已允許或拒絕存取控制的原因。存取控制摘要聲明包含下列資訊:

如需精確的記錄檔格式,請參閱 Directory Server Administration Reference


進階的存取控制:使用巨集 ACI

在使用重複樹狀目錄結構的組織中,使用巨集可以最佳化目錄中所用的 ACI 數目。減少樹狀目錄中的 ACI 數目,可讓您更容易管理您的存取控制策略,並改善 ACI 的記憶體使用效率。

巨集是在 ACI 中用來代表 DN 或部分 DN 的預留位置。您可以使用巨集在 ACI 的目標部分或連結規則部分 (或兩者) 中代表 DN。事實上,當 Directory Server 收到傳入的 LDAP 作業時,便會比對 ACI 巨集與 LDAP 作業的目標資源,以決定對應子字串 (若有)。如果比對結果相符,就使用對應的子字串展開連結規則端的巨集,並評估展開的連結規則,來決定資源的存取權限。

巨集 ACI 範例

巨集 ACI 的優點及其運作方式可以用範例做最清楚的說明。圖 6-4 顯示一個樹狀目錄,在此樹狀目錄中有效的使用巨集 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-4 巨集 ACI 的樹狀目錄範例

圖解顯示巨集 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 位於 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 語法

為簡化本節中的討論,用來提供連結認證的 ACI 關鍵字 (如 userdnroledngroupdnuserattr) 合起來稱為 ACI 的主體。主體決定 ACI 的套用對象。

巨集 ACI 包含下列運算式類型,以取代 DN 或部分 DN:

表 6-5 顯示 ACI 中可使用 DN 巨集的部分:

表 6-5 ACI 關鍵字中的巨集

巨集

ACI 關鍵字

($dn)

target、targetfilter、userdn、roledn、groupdn、userattr

[$dn]

targetfilter、userdn、roledn、groupdn、userattr

($attr.attrName)

userdn、roledn、groupdn、userattr

適用下列限制:

目標中 ($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"

一旦展開巨集後,Directory Server 會依照正常程序評估 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 取代。
  3. 產生的主體是 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"。如果因為連結 DN 是該群組的成員而獲得權限,巨集展開就會停止,進行評估 ACI。如果不是成員,處理將會繼續。

  4. 將主體中的 [$dn]dc=hostedCompany1 取代。
  5. 產生的主體是 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=example,dc=com"。同樣地,測試連結 DN 是否為此群組的成員,如果是,就完整評估 ACI。如果不是成員,巨集展開在最後一個相符值的 RDN 處停止,並且此 ACI 的 ACI 評估至此完成。

[$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";}

它授與 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"

接下來,Directory Server 會根據正常的 ACI 評估演算法評估 ACI。

當巨集中指定的屬性是多重值屬性時,則會依序使用每個值來展開巨集,並使用第一個對應成功的值。


存取控制與複製

ACI 儲存為項目的屬性,因此,如果包含 ACI 的項目是複製尾碼的一部分,則 ACI 會與其他任何屬性一樣被複製。

ACI 總是在服務傳入 LDAP 要求的目錄伺服器上評估。這表示當用戶伺服器收到更新要求時,它會傳回主機伺服器的參照,然後再評估能否在主機上服務該要求。


存取控制和鏈接

如果使用鏈接將樹狀目錄分散在幾部伺服器上,則存取控制敘述中所使用的關鍵字會有一些限制:如需詳細資訊,請參閱 ACI 限制

當驗證使用者存取鏈接尾碼時,伺服器會傳送使用者的身份 給遠端伺服器。存取控制總是在遠端伺服器上評估。在遠端伺服器上評估的每一個 LDAP 作業都使用用戶端應用程式原始身份,此身份是透過代理驗證控制項所傳送。只有當使用者對遠端伺服器上包含的樹狀子目錄擁有正確的存取控制時,在遠端伺服器 上的作業才會成功。這表示,您必須將一般的存取控制加入到遠端伺服器上,並加上一些限制:如需詳細資訊,請參閱透過鏈接尾碼的存取控制


記錄存取控制資訊

若要取得錯誤記錄檔中有關存取控制的資訊,必須設定適當的記錄層級。

若要從主控台設定錯誤記錄檔層級:

  1. 在 Directory Server Console 最上層的 [目錄] 標籤上,以滑鼠右鍵按一下 cn=config 節點,並在快顯功能表中選擇 [以標準編輯器編輯]。
  2. 這會在 [標準編輯器] 上顯示出 cn=config 項目的內容。

  3. 將屬性值配對清單向下捲動,以找到 nsslapd-errorlog-level 屬性。
  4. nsslapd-errorlog-level 欄位中已顯示的值再加上 128。
  5. 例如,如果已顯示的值為 8192 (複製除錯),您應該將值變更為 8320。如需關於錯誤記錄檔層級的完整資訊,請參閱Directory Server Administration Reference

  6. 按一下 [確定] 儲存變更,並退出標準編輯器。


與舊版的相容性

有些舊版 Directory Server 所用的 ACI 關鍵字在 Directory Server 5.2 中已不再使用。但為了能與舊版相容性,所以仍然支援這些關鍵字。這些關鍵字是:

因此,如果您原先在舊提供者伺服器與用戶 Directory Server 5.2 之間已設定複製協議,應該不會在 ACI 的複製中遇到任何問題。

但建議您最好用 userattr 關鍵字的功能取代這些關鍵字,如根據相符值定義存取中所述。



上一頁      目錄      索引      下一頁     


文件號碼 819-2014。   Copyright 2005 Sun Microsystems, Inc. 版權所有。