角色是一种备用组机制,在设计上可以使应用程序使用起来更加轻松有效。虽然角色的定义和管理方式与组类似,但是每个成员条目中生成的角色属性将自动表示条目的角色。例如,应用程序可以读取条目的角色,而不必选择组并浏览成员列表。
默认情况下,角色的范围被限定为定义该范围时所在的子树。但是,您可以扩展嵌套角色的范围。可以允许范围嵌套其他子树中的角色,并包含位于目录中任意位置的成员。有关详细信息,请参见扩展角色的范围和嵌套角色定义的示例。
本部分介绍如何安全地使用角色,以及如何从命令行管理角色。
要安全地使用角色,必须设置访问控制指令 (Access Control Instruction, ACI) 以保护相应的属性。例如,用户 A 具有受管理角色 MR。受管理角色相当于静态组,通过将 nsRoleDN 属性添加到每个成员条目来为该条目明确指定角色。已通过命令行使用帐户去活锁定了 MR 角色。这意味着用户 A 无法绑定到服务器,因为该用户 nsAccountLock 属性的计算结果为 "true"。但是,假定该用户已经绑定,并发现自己现在因 MR 角色而被锁定。如果没有相应的 ACI 来阻止用户具有 nsRoleDN 属性的写入访问权限,则该用户可以从自己的条目中删除 nsRoleDN 属性并解除锁定。
要阻止用户删除 nsRoleDN 属性,必须应用 ACI。使用过滤角色时,必须保护过滤器中可阻止用户通过修改属性放弃过滤角色的部分。应禁止用户添加、删除或修改过滤角色所使用的属性。同理,如果已计算过滤属性的值,则必须保护可以修改过滤属性值的所有属性。由于嵌套角色可以包含过滤角色和受管理角色,因此对于嵌套角色中包含的每个角色,都应考虑上述几点。
有关设置 ACI 以获得安全性的详细说明,请参见第 6 章,目录服务器访问控制。
角色是在目录管理者可以通过命令行实用程序访问的条目中定义的。创建角色之后,可按以下方式为角色指定成员:
受管理角色的成员在条目中具有 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(在本案例中为 o=eng,dc=example,dc=com)将 nsRoleScopeDN 属性添加到 SalesAppPlusEngNestedRole 中。
必须为工程用户授予必要的权限,以便该用户可以访问 SalesAppPlusEngNestedRole 角色,进而可以使用销售应用程序。此外,还必须复制角色的整个范围。
对嵌套角色扩展范围的限制意味着,以前在某个域中管理角色的管理员只有权使用其他域中已存在的角色。该管理员无法在其他域中创建任意角色。