3.2. 在目录服务器中使用角色


您可以使用角色对目录服务器条目进行分组。角色同时充当静态和动态组。角色比组更容易使用,因为它们在实施过程中更灵活。例如,应用可以通过查询条目本身而不是选择组来获取条目所属的角色列表,并浏览多个组的成员列表。

您可以使用命令行Web 控制台管理 角色。

3.2.1. 目录服务器中的角色

角色的行为与静态和动态组类似,类似于混合组:

  • 对于组,Directory 服务器作为成员在组条目中添加条目。
  • 使用角色时,Directory 服务器会向条目添加 role 属性,然后使用此属性自动识别角色条目中的成员。

角色成员是拥有角色的条目。您可以根据角色类型显式或动态指定角色的成员。目录服务器支持以下类型的角色:

  • 受管角色

    受管角色具有明确的成员列表。您可以使用受管角色来执行使用静态组执行的相同任务。

  • 过滤的角色

    您可以使用过滤的角色过滤角色成员,类似于使用动态组进行过滤。目录服务器根据条目是否具有角色中定义的特定属性,为过滤的角色分配条目。

  • 嵌套角色

    嵌套角色可以包含受管和过滤的角色。

当您创建角色时,请确定用户是否可以从角色中添加或删除自己。如需了解更多详细信息,请参阅 第 3.2.2 节 “在目录服务器中使用角色”

注意

与评估组相比,评估角色对目录服务器的资源密集型,因为服务器能够为客户端应用工作。使用角色时,客户端应用程序可以通过搜索 nsRole 属性来检查角色成员资格。nsRole 属性是一个计算属性,用于标识条目所属的角色。目录服务器不存储 nsRole 属性。从客户端应用程序视图中,检查成员资格的方法统一并在服务器端执行。

有关在目录服务器中使用角色的注意事项,请参阅 规划和设计目录服务器 文档中的 组和角色之间的声明

3.2.2. 在目录服务器中使用角色

在创建新角色时,请考虑用户是否可以轻松地向角色添加或删除自己。例如,您可以允许 Mountain Biking interest group 角色的用户轻松地添加或删除自己。但是,不得允许分配 marketing 角色的用户从角色中添加或移除自己。

一个潜在的安全风险是通过取消激活角色来取消激活用户帐户。Inactive 角色为后缀定义了特殊的访问控制指令(ACI)。如果管理员允许用户自由地添加或删除自己,则这些用户可以从不活动的角色中删除自己,以解锁其帐户。

例如,用户被分配了一个受管角色。当目录服务器通过使用 account inactivation 锁定此受管角色时,用户无法绑定到服务器,因为 Directory 服务器为该用户计算 nsAccountLock 属性为 true。但是,如果用户已经绑定到 Directory Server,且现在通过受管角色锁定,如果用户可以从其条目中删除 nsRoleDN 属性,并在未指定限制 ACI 时将其解锁自己。

要防止用户删除 nsRoleDN 属性,请根据角色类型使用以下 ACI:

  • 受管角色。对于作为受管角色成员的条目,请使用以下 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;acl "allow mod of nsRoleDN by self but not to critical values"; allow(write) userdn=ldap:///self;)
    Copy to Clipboard Toggle word wrap
  • 过滤的角色。保护作为过滤器一部分的属性(nsRoleFilter)。不允许用户添加、删除或修改过滤角色使用的属性。如果目录服务器计算 filter 属性的值,您必须保护所有可以修改此过滤器属性值的属性。
  • 嵌套角色。嵌套角色可以包含过滤和受管角色。因此,您必须为嵌套角色包含的角色的每个属性限制在 ACI 中修改操作。

3.2.3. 使用命令行管理目录服务器中的角色

您可以使用命令行查看、创建和删除角色。

3.2.3.1. 在目录服务器中创建受管角色

受管角色是具有显式枚举成员列表的角色。您可以使用 ldapmodify 工具创建受管角色。以下示例为市场营销团队创建一个受管角色。

前提条件

  • Directory Server 中存在 ou=people,dc=example,dc=com 父条目。
  • Directory Server 中存在 cn=Bob Jones,ou=people,dc=example,dc=com 用户条目。

流程

  1. 使用带有 -a 选项的 ldapmodify 命令创建 cn=Marketing managed role 条目:

    # ldapmodify -a -D "cn=Directory Manager" -W -H ldap://server.example.com -x << EOF
    dn: cn=Marketing,ou=people,dc=example,dc=com
    objectclass: top
    objectclass: LDAPsubentry
    objectclass: nsRoleDefinition
    objectclass: nsSimpleRoleDefinition
    objectclass: nsManagedRoleDefinition
    cn: Marketing
    description: managed role for the marketing team
    EOF
    Copy to Clipboard Toggle word wrap

    受管角色条目必须包含以下对象类:

    • ldapsubentry
    • nsRoleDefinition
    • nsSimpleRoleDefinition
    • nsManagedRoleDefinition
  2. 通过将 nsRoleDN 属性添加到此用户条目,将 cn=Marketing,ou=people,dc=example,dc=com 受管角色分配给 cn=Bob Jones,ou=people,dc=example,dc=com 用户条目:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x << EOF
    dn: cn=Bob Jones,ou=people,dc=example,dc=com
    changetype: modify
    add: nsRoleDN
    nsRoleDN: cn=Marketing,ou=people,dc=example,dc=com
    EOF
    
    modifying entry "cn=Bob Jones,ou=people,dc=example,dc=com"
    Copy to Clipboard Toggle word wrap
  3. 可选:为 userRoot 数据库中的 nsRoleDN 属性配置 equality 索引,以避免出现未索引的搜索:

    # dsconf <instance_name> backend index add --index-type eq --attr nsroleDN --reindex userRoot
    Copy to Clipboard Toggle word wrap

验证

  • 列出现在属于 cn=Marketing,ou=people,dc=example,dc=com 受管角色的用户条目:

    # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b "dc=example,dc=com" "(nsRole=cn=Marketing,ou=people,dc=example,dc=com)" dn 
    
    dn: cn=Bob Jones,ou=people,dc=example,dc=com
    
    dn: cn=Tom Devis,ou=people,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

3.2.3.2. 在目录服务器中创建过滤的角色

如果条目在角色中定义的特定属性,则目录服务器会将条目分配给过滤的角色。角色定义指定 nsRoleFilter LDAP 过滤器。与过滤器匹配的条目是角色的成员。

您可以使用 ldapmodify 工具创建过滤的角色。以下示例为销售部门经理创建了过滤的角色。

前提条件

  • Directory Server 中存在 ou=people,dc=example,dc=com 父条目。

流程

  1. 使用带有 -a 选项的 ldapmodify 命令创建 cn=SalesManagerFilter 过滤的角色条目:

    # ldapmodify -a -D "cn=Directory Manager" -W -H ldap://server.example.com -x << EOF
    dn: cn=SalesManagerFilter,ou=people,dc=example,dc=com
    changetype: add
    objectclass: top
    objectclass: LDAPsubentry
    objectclass: nsRoleDefinition
    objectclass: nsComplexRoleDefinition
    objectclass: nsFilteredRoleDefinition
    cn: SalesManagerFilter
    nsRoleFilter: o=sales managers
    Description: filtered role for sales managers
    EOF
    Copy to Clipboard Toggle word wrap

    cn=SalesManagerFilter 过滤的角色条目具有角色的 o=sales manager 过滤器。具有 o 属性且值为 sales managers 的所有用户条目都是过滤角色的成员。

    现在是过滤角色的成员的用户条目示例:

    dn: cn=Pat Smith,ou=people,dc=example,dc=com
    objectclass: person
    cn: Pat
    sn: Smith
    userPassword: password
    o: sales managers
    Copy to Clipboard Toggle word wrap

    过滤的角色条目必须具有以下对象类:

    • ldapsubentry
    • nsRoleDefinition
    • nsComplexRoleDefinition
    • nsFilteredRoleDefinition
  2. 可选:为 nsRoleFilter 角色过滤器中使用的属性配置 相等 索引,以避免未索引的搜索。在给定示例中,该角色使用 o=sales managers 作为过滤器。因此,索引 o 属性以提高搜索性能:

    # dsconf <instance_name> backend index add --index-type eq --attr o --reindex userRoot
    Copy to Clipboard Toggle word wrap

验证

  • 列出现在属于 cn=SalesManagerFilter,ou=people,dc=example,dc=com 过滤角色的用户条目:

    # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b "dc=example,dc=com" "(nsRole=cn=SalesManagerFilter,ou=people,dc=example,dc=com)" dn 
    
    dn: cn=Jess Mor,ou=people,dc=example,dc=com
    
    dn: cn=Pat Smith,ou=people,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

3.2.3.3. 在目录服务器中创建嵌套角色

嵌套角色可以包含受管和过滤的角色。嵌套角色条目需要 nsRoleDN 属性来标识要嵌套的角色。

您可以使用 ldapmodify 工具创建嵌套角色。以下示例创建一个嵌套角色,其中包含在 Directory Server 中创建 受管角色和在 Directory Server 中创建受管角色 时创建的 过滤角色

前提条件

  • Directory Server 中存在 ou=people,dc=example,dc=com 父条目。

流程

  1. 使用带有 -a 选项的 ldapmodify 命令,创建 cn=MarketingSales 嵌套角色条目,其中包含 cn=SalesManagerFilter 过滤的角色和 cn=Marketing managed 角色:

    # ldapmodify -a -D "cn=Directory Manager" -W -H ldap://server.example.com -x << EOF
    dn: cn=MarketingSales,ou=people,dc=example,dc=com
    objectclass: top
    objectclass: LDAPsubentry
    objectclass: nsRoleDefinition
    objectclass: nsComplexRoleDefinition
    objectclass: nsNestedRoleDefinition
    cn: MarketingSales
    nsRoleDN: cn=SalesManagerFilter,ou=people,dc=example,dc=com
    nsRoleDN: cn=Marketing,ou=people,dc=example,dc=com
    EOF
    Copy to Clipboard Toggle word wrap

    (可选)角色可以具有 description 属性。

    嵌套角色条目必须具有以下对象类:

    • ldapsubentry
    • nsRoleDefinition
    • nsComplexRoleDefinition
    • nsNestedRoleDefinition

验证

  • 列出现在属于 cn=MarketingSales 嵌套角色的用户条目:

    # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b "dc=example,dc=com" "(nsRole=cn=MarketingSales,ou=people,dc=example,dc=com)" dn 
    
    dn: cn=Bob Jones,ou=people,dc=example,dc=com
    dn: cn=Pat Smith,ou=people,dc=example,dc=com
    dn: cn=Jess Mor,ou=people,dc=example,dc=com
    dn: cn=Tom Devis,ou=people,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

3.2.3.4. 查看条目的角色

要查看条目的角色,请使用带有明确指定 nsRole 虚拟属性的 ldapsearch 命令。

前提条件

  • 角色条目存在。
  • 将角色分配给 uid=user_name 用户条目。

流程

  • 使用指定的 nsRole virtual 属性搜索 uid=user_name 条目:

    # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -b "dc=example,dc=com" -s sub -x "(uid=user_name)" nsRole
    
    dn: uid=user_name,ou=people,dc=example,dc=com
    ...
    nsRole: cn=Role for Managers,dc=example,dc=com
    nsRole: cn=Role for Accounting,dc=example,dc=com
    Copy to Clipboard Toggle word wrap

    命令检索 uid=user_name 用户所属的所有角色。

3.2.3.5. 删除目录服务器中的角色

要删除目录服务器中的角色,您可以使用 ldapmodify 命令。

以下是从 Directory Server 中删除 cn=Marketing managed 角色的示例。

流程

  • 要删除 cn=Marketing managed role 条目,请输入:

    # ldapmodify -D "cn=Directory Manager" -W -H ldap://server.example.com -x << EOF
    dn: cn=Marketing,ou=People,dc=example,dc=com
    changetype: delete
    EOF
    
    deleting entry "cn=Marketing,ou=People,dc=example,dc=com"
    Copy to Clipboard Toggle word wrap
    注意

    当您删除角色时,Directory 服务器只删除角色条目,不会删除每个角色成员的 nsRoleDN 属性。要删除每个角色成员的 nsRoleDN 属性,请启用 Referential Integrity 插件并配置此插件来管理 nsRoleDN 属性。

    有关 referential Integrity 插件的更多信息,请参阅使用参考完整性来维护条目之间的关系

您可以在 web 控制台中使用 LDAP 浏览器 来查看、创建和删除角色。

3.2.4.1. 在 LDAP 浏览器中创建角色

您可以使用 web 控制台中的 LDAP 浏览器 向导为 Red Hat Directory Server 条目创建角色。

前提条件

  • 访问 Web 控制台。
  • 目录服务器中存在父条目。

流程

  1. 登录 Web 控制台并点 Red Hat Directory Server
  2. 在 Web 控制台加载 Red Hat Directory Server 界面后,打开 LDAP 浏览器
  3. 选择一个 LDAP 条目,并打开 Options 菜单(alsa)。
  4. 从下拉菜单中选择 New,再单击 Create a new role
  5. 按照向导中的步骤操作,并在完成每个步骤后点 Next 按钮。
  6. 要创建角色,请查看 Create Role 步骤中的角色设置,然后单击 Create 按钮。您可以单击 Back 按钮来修改角色设置,或者单击 Cancel 按钮以取消角色创建。
  7. 要关闭向导窗口,点 Finish 按钮。

验证

  • 展开 LDAP 条目,并验证新角色显示在条目参数中。

3.2.4.2. 在 LDAP 浏览器中删除角色

您可以使用 Web 控制台中的 LDAP 浏览器 从 Red Hat Directory Server 条目中删除角色。

前提条件

  • 访问 Web 控制台。
  • 目录服务器中存在父条目。

流程

  1. 登录 Web 控制台并点 Red Hat Directory Server
  2. 在 Web 控制台加载 Red Hat Directory Server 界面后,点 LDAP 浏览器
  3. 展开 LDAP 条目,选择您要删除的角色。
  4. 打开 Options 菜单(3.3.0),然后选择 Delete
  5. 验证您要删除的角色的数据,然后点 Next 按钮,直到您到达 删除 步骤。
  6. 将开关切换为 Yes,我确定 位置,然后点 Delete 按钮。
  7. 要关闭向导窗口,点 Finish 按钮。

验证

  • 展开 LDAP 条目,并验证角色不再是条目参数的一部分。

3.2.4.3. 在 LDAP 浏览器中修改角色

您可以使用 Web 控制台中的 LDAP 浏览器 来修改 Red Hat Directory Server 条目的角色参数。

前提条件

  • 访问 Web 控制台。
  • 目录服务器中存在父条目。

流程

  1. 登录 Web 控制台并点 Red Hat Directory Server
  2. Web 控制台加载 红帽目录服务器 界面后,单击 LDAP 浏览器
  3. 展开 LDAP 条目,再选择您要修改的角色。
  4. 点 Options 菜单(swig)并选择 Edit 来修改角色或 Rename 的参数来重命名角色。
  5. 在向导窗口中,修改必要的参数,并在每个步骤后点 Next,直到您观察 LDIF Statements 步骤。
  6. 检查更新的参数,然后单击 Modify EntryChange Entry Name
  7. 要关闭向导窗口,点 Finish 按钮。

验证

  • 展开 LDAP 条目,并验证角色是否列出了更新的参数。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat