5.3. LDAP 和 RBAC


RBAC(基于角色的访问控制)是一种为管理用户指定一组权限(角色)的机制。这允许用户获得不同的管理职责,而无需给予他们完全、不受限制的访问权限。有关 RBAC 的详情,请参阅 JBoss EAP 安全架构 指南 中的基于角色的访问控制小节

RBAC 仅用于授权,身份验证需单独处理。由于 LDAP 可以用于身份验证和授权,因此可使用以下方式配置 JBoss EAP:

  • 仅将 RBAC 用于授权,并且仅将 LDAP 或其他机制用于身份验证。
  • 使用 RBAC 和 LDAP 在管理界面中做出授权决策。

5.3.1. 独立使用 LDAP 和 RBAC

JBoss EAP 允许在安全域中独立配置身份验证和授权。这样,可以将 LDAP 配置为身份验证机制和 RBAC,并配置为授权机制。如果以这种方式配置,用户尝试访问管理界面时,将首先使用配置的 LDAP 服务器进行身份验证。如果成功,则用户的角色和配置权限将仅使用 RBAC,而不考虑 LDAP 服务器中的任何组信息。

有关仅将 RBAC 用作管理接口的授权机制的更多详细信息,请参阅 如何为 JBoss EAP 配置服务器 安全性。有关配置 LDAP 以使用管理接口进行身份验证的更多详细信息,请参见 上一节

5.3.2. 组合 LDAP 和 RBAC 进行授权

使用 LDAP 服务器或使用属性文件进行身份验证的用户可以是用户组的成员。用户组只是可分配给一个或多个用户的任意标签。RBAC 可以配置为使用此组信息自动为用户分配角色或将用户从角色中排除。

LDAP 目录包含用户帐户和组的条目,可通过属性来引用。根据 LDAP 服务器配置,用户实体可以映射用户通过 memberOf 属性属于的组;组实体可以通过 uniqueMember 属性或两者的组合来映射属于该用户的组。用户通过 LDAP 服务器成功身份验证后,将执行组搜索来加载该用户的组信息。根据使用的目录服务器,组搜索可使用其 SN(通常是身份验证中使用的用户名),或者通过使用目录中用户条目的 DN 执行。将 LDAP 设置为安全域中的授权机制时,会配置组搜索(group-search)以及用户名和可分辨名称(用户名到dn)之间的映射。

从 LDAP 服务器确定用户组成员资格信息后,将在 RBAC 配置中使用映射来确定用户具有哪些角色。此映射被配置为明确包含或排除组以及单个用户。

注意

用户连接到服务器的身份验证步骤始终先发生。成功验证用户后,服务器将加载用户的组。身份验证步骤和授权步骤各自都需要连接 LDAP 服务器。安全域通过为组加载步骤重复利用身份验证连接来优化此过程。

5.3.2.2. 使用用户名to-dn

可以在授权部分中定义规则,将用户的简单用户名转换为其可分辨名称。username-to-dn 元素指定如何将用户名映射到 LDAP 目录中条目的可分辨名称。这个元素 是可选的,只有在以下两者都满足时才需要:

  • 身份验证和授权步骤针对不同的 LDAP 服务器。
  • 组搜索使用可分辨名称。
注意

如果已执行 LDAP 身份验证,可以使用身份验证期间发现的 DN,这也适用于安全域支持 LDAP 和 Kerberos 身份验证以及 Kerberos 需要转换的实例。

它包含以下属性:

Expand
表 5.5. username-to-dn
属性描述

force

当 force 属性设置为 false 时,在授权查询期间用于区分名称映射的用户名的结果会被缓存,并在授权查询期间重复使用。当强制为 true 时,加载组时会在授权期间再次执行搜索。这通常在不同服务器执行身份验证和授权时执行。

使用以下方法之一配置 用户名至dn

username-is-dn

这将指定远程用户输入的用户名是用户的可分辨名称。

username-is-dn 示例

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=username-is-dn:add(force=false)

run-batch

这将定义 1:1 映射,并且没有额外的配置。

username-filter

将搜索指定属性与提供的用户名匹配。

username-filter 示例

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=username-filter:add(force=false, base-dn="dc=people,dc=harold,dc=example,dc=com", recursive="false", attribute="sn", user-dn-attribute="dn")

run-batch

Expand
属性描述

base-dn

要开始搜索的可分辨上下文名称。

递归

搜索是否扩展至子上下文。默认值为 false

attribute

用户条目的属性,以尝试和匹配提供的用户名。默认为 uid

user-dn-attribute

要读取的属性以获取用户的可分辨名称。默认值为 to dn

advanced-filter

此选项使用自定义过滤器来查找用户的可分辨名称。

advanced-filter 示例

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=advanced-filter:add(force=true, base-dn="dc=people,dc=harold,dc=example,dc=com", recursive="false", user-dn-attribute="dn",filter="sAMAccountName={0}")

run-batch

对于与 username-filter 示例中 的那些属性,其含义和默认值相同。还有一个额外的属性:

Expand
属性描述

filter

用于搜索用户条目的自定义过滤器,用户名将在 {0} 占位符中替换。

重要

这必须在过滤器定义后保持有效,以便在使用任何特殊字符(如 &)时确保使用正确的格式。例如 和 字符: 和 字符

5.3.2.3. 将 LDAP 组信息映射到 RBAC 角色

创建与 LDAP 服务器的连接并正确配置了组搜索后,需要在 LDAP 组和 RBAC 角色之间创建映射。此映射可以是包含的,也可以是独占性的,并且能够根据用户的组成员资格自动分配给用户一个或多个角色。

警告

如果尚未配置 RBAC,请在这样做时密切关注,特别是切换到新创建的 LDAP 域时。在没有正确配置用户和角色的情况下启用 RBAC 可能会导致管理员无法登录 JBoss EAP 管理界面。

注意

显示的管理 CLI 命令假定您在运行 JBoss EAP 单机服务器。有关将管理 CLI 用于 JBoss EAP 受管域的更多详细信息,请参见 JBoss EAP 管理 CLI 指南

确保已启用并配置 RBAC

在可以使用 LDAP 和 RBAC 角色之间的映射前,RBAC 必须启用并初始配置。

/core-service=management/access=authorization:read-attribute(name=provider)

它应产生以下结果:

{ "outcome" => "success", "result" => "rbac" }

有关启用和配置 RBAC 的更多信息,请参阅 如何为 JBoss EAP 配置服务器安全性 中的 基于角色的访问控制

验证现有角色列表

使用 read-children-names 操作获取配置的角色的完整列表:

/core-service=management/access=authorization:read-children-names(child-type=role-mapping)

这应该会产生一个角色列表:

{
  "outcome" => "success",
  "result" =>
    [ "Administrator", "Deployer", "Maintainer", "Monitor", "Operator", "SuperUser" ]
}

另外,可以检查角色的所有现有映射:

/core-service=management/access=authorization/role-mapping=Administrator:read-resource(recursive=true)
{
  "outcome" => "success",
  "result" =>
  {
    "include-all" => false,
    "exclude" => undefined,
    "include" => {
      "user-theboss" => {
        "name" => "theboss",
        "realm" => undefined,
        "type" => "USER"
      },
      "user-harold" => {
        "name" => "harold",
        "realm" => undefined,
        "type" => "USER"
      },
      "group-SysOps" => {
        "name" => "SysOps",
        "realm" => undefined,
        "type" => "GROUP"
      }
    }
  }
}

配置 Role-Mapping 条目

如果角色还没有 Role-Mapping 条目,则需要创建一个。例如:

/core-service=management/access=authorization/role-mapping=Auditor:read-resource()
{
  "outcome" => "failed",
  "failure-description" => "WFLYCTL0216: Management resource '[ (\"core-service\" => \"management\"), (\"access\" => \"authorization\"), (\"role-mapping\" => \"Auditor\") ]' not found"
}

添加角色映射:

/core-service=management/access=authorization/role-mapping=Auditor:add()
{
  "outcome" => "success"
}

验证:

/core-service=management/access=authorization/role-mapping=Auditor:read-resource()
{
  "outcome" => "success",
  "result" => {
    "include-all" => false,
    "exclude" => undefined,
    "include" => undefined
  }
}

将组添加到 Role for Inclusion 和 Exclusion

可以添加组以包含或从角色中排除。

注意

排除映射具有优先权或包含映射。

为包含添加组:

/core-service=management/access=authorization/role-mapping=Auditor/include=group-GroupToInclude:add(name=GroupToInclude, type=GROUP)

为排除添加组:

/core-service=management/access=authorization/role-mapping=Auditor/exclude=group-GroupToExclude:add(name=GroupToExclude, type=GROUP)

检查结果:

/core-service=management/access=authorization/role-mapping=Auditor:read-resource(recursive=true)
{
  "outcome" => "success",
  "result" => {
    "include-all" => false,
    "exclude" => {
      "group-GroupToExclude" => {
        "name" => "GroupToExclude",
        "realm" => undefined,
        "type" => "GROUP"
      }
    },
    "include" => {
      "group-GroupToInclude" => {
        "name" => "GroupToInclude",
        "realm" => undefined,
        "type" => "GROUP"
      }
    }
  }
}

删除组,使其无法排除或包含在 RBAC 角色绑定中

从包含中删除组:

/core-service=management/access=authorization/role-mapping=Auditor/include=group-GroupToInclude:remove

要删除组,请排除:

/core-service=management/access=authorization/role-mapping=Auditor/exclude=group-GroupToExclude:remove
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部