角色是設計用來讓應用程式更有效且更容易使用的替代分組機制。雖然角色以類似群組的方式定義與管理,但是每個成員項目所產生的角色屬性會自動表示項目的角色。例如,應用程式可以讀取項目的角色,而不是選取群組並瀏覽成員清單。
角色的範圍預設會限制在所定義範圍的子樹狀結構內。但是,您可以延伸巢式角色的範圍。您可以允許範圍延伸到位於其他子樹狀結構的巢式角色以及包含目錄中任意位置的成員。如需詳細資訊,請參閱延伸角色的範圍與巢式角色定義的範例。
本節說明如何安全地使用角色,以及如何從指令行管理角色。
若要安全地使用角色,必須將存取控制指令 (ACI) 設為保護適當的屬性。例如,使用者 A 擁有管理角色 MR。管理角色相當於靜態群組,經由將 nsRoleDN 屬性增加至項目,明確地指定角色給每個成員項目。已透過指令行使用帳號停用鎖定 MR 角色。亦即,由於該使用者的 nsAccountLock 屬性經運算為 true,因此使用者 A 無法連結至伺服器。但是,假設使用者已連結,並知悉其已因 MR 角色而處於鎖定狀態。如果不存在 ACI 以防止使用者具備寫入存取 nsRoleDN 屬性,使用者可以從其本身的項目移除 nsRoleDN 屬性,並解除鎖定。
若要避免使用者移除 nsRoleDN 屬性,必須套用 ACI。針對篩選的角色,您必須保護能避免使用者修改屬性以放棄篩選的角色之篩選部分。應禁止使用者增加、刪除或修改篩選的角色所用之屬性。同理,如果已運算篩選的屬性值,可以修改篩選的屬性值之所有屬性皆須受到保護。由於巢式角色包含篩選與管理的角色,應針對巢式角色中所含的各角色考量以上幾點。
如需設定安全性 ACI 的詳細指示,請參閱第 6 章, 目錄伺服器存取控制。
角色會在 Directory Administrator 可以透過指令行公用程式存取的項目中定義。建立角色之後,可以依下列方式指定成員給角色:
管理角色的成員在其項目中有 nsRoleDN 屬性。
篩選角色的成員為符合 nsRoleFilter 屬性中指定之篩選的項目。
巢式角色的成員為巢式角色定義項目的 nsRoleDN 屬性中所指定之角色成員。
所有角色定義均繼承 LDAPsubentry 與 nsRoleDefinition 物件類別。下列範例顯示各種角色類型特定的其他物件類別與相關屬性。
若要為所有行銷員工建立一個角色,請使用下列 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 物件類別繼承 LDAPsubentry、nsRoleDefinition 與 nsSimpleRoleDefinition 物件類別。
依下列方式更新名為 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 物件類別繼承 LDAPsubentry、nsRoleDefinition 與 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 物件類別繼承 LDAPsubentry、nsRoleDefinition 與 nsComplexRoleDefinition 物件類別。nsRoleDN 屬性包含行銷管理角色與行銷經理篩選角色的 DN。上一個範例中的兩個使用者 Bob 與 Carla 會是此新巢式角色的成員。
此篩選範圍包含預設範圍 (亦即篩選所在的子樹狀結構) 以及任何 nsRoleScopeDN 屬性值下的子樹狀結構。此時,ManagerFilter 位於 ou=sales,ou=People,dc=example,dc=com 子樹狀結構中。此子樹狀結構必須增加至範圍。
目錄伺服器提供允許角色的範圍延伸到角色定義項目以外的子樹狀結構之屬性。此單值屬性 nsRoleScopeDN 包含要增加至現有角色的範圍 DN。nsRoleScopeDN 屬性僅能增加至巢式角色。請參閱巢式角色定義的範例。
無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。
nsRoleScopeDN 屬性可讓您延伸某個子樹狀結構中的角色範圍,以包含其他子樹狀結構的項目。例如,請想像 example.com 目錄樹狀結構中有兩個主要的子樹狀結構:o=eng,dc=example,dc=com (工程部門子樹狀結構) 與 o=sales,dc=example,dc=com (行銷部門子樹狀結構)。在工程部門子樹狀結構中,有某個使用者需要存取行銷部門子樹狀結構中的角色 (SalesAppManagedRole) 所管理之行銷部門應用程式。若要延伸角色範圍,請執行下列作業:
在工程部門子樹狀結構中建立使用者的角色。
例如,建立角色 EngineerManagedRole。此範例使用管理的角色,不過也有可能是篩選的角色或巢式角色。
例如,在行銷部門子樹狀結構中建立巢式角色 SalesAppPlusEngNestedRole,以裝載新建立的 EngineerManagedRole 與初始 SalesAppManagedRole。
使用要增加的工程部門子樹狀結構範圍 DN,將 nsRoleScopeDN 屬性增加至 SalesAppPlusEngNestedRole, 在此例中為 o=eng,dc=example,dc=com。
工程部門的使用者必須具備必要的權限,才能存取 SalesAppPlusEngNestedRole 角色,進而使用行銷部門的應用程式。此外還必須複寫整個角色範圍。
對巢式角色延伸範圍的限制,表示之前是某一個網域中管理角色的管理員,僅有權使用已在另一個網域存在的角色。管理員無法在另一個網域中建立任意的角色。