2.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

    managed role 条目必须包含以下对象类:

    • LDAPsubentry
    • nsRoleDefinition
    • nsSimpleRoleDefinition
    • nsManagedRoleDefinition
  2. 通过将 nsRoleDN 属性添加到这个用户条目,将 cn=Marketing,ou=people,dc=example,dc=com managed role 分配给 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"
  3. 可选:为 userRoot 数据库中 nsRoleDN 属性配置等号索引,以避免未索引的搜索:

    #  dsconf -D "cn=Directory Manager" ldap://server.example.com backend index add --index-type eq --attr nsroleDN --reindex userRoot

验证

  • 列出现在属于 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

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

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

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

    dn: cn=Pat Smith,ou=people,dc=example,dc=com
    objectclass: person
    cn: Pat
    sn: Smith
    userPassword: password
    o: sales managers

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

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

    #  dsconf -D "cn=Directory Manager" ldap://server.example.com backend index add --index-type eq --attr o --reindex userRoot

验证

  • 列出现在属于 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

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 受管角色:

    # 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

    (可选)角色可以具有 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

2.3.4. 查看条目的角色

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

先决条件

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

流程

  • 使用指定的 nsRole 虚拟属性搜索 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

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

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"
    注意

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

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

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部