2.7. 核心管理身份验证

核心管理身份验证负责使用 ManagementRealm 保护管理接口 HTTP 和原生的管理功能。它内置在核心管理中,默认启用和配置为核心服务。它仅负责确保管理接口的安全。

2.7.1. Security Realms

安全域是用户名、密码和组成员资格信息的身份存储,可用于对 Jakarta 企业 Bean、Web 应用和管理界面中的用户进行身份验证。最初,JBoss EAP 默认预配置了两个安全域: ManagementRealmApplicationRealm。两个安全域都使用 文件系统来存储用户和密码与用户和组成员资格信息之间的映射。默认情况下,它们在验证时使用摘要机制。

摘要机制是一种身份验证机制,它利用由多种信息组成的一次性单向哈希(包括用户名和密码映射属性文件中存储的信息)来验证用户。这使得 JBoss EAP 无需通过网络以纯文本形式发送任何密码,即可对用户进行身份验证。

JBoss EAP 安装包含一个脚本,可供管理员向两个域添加用户。以这种方式添加用户时,用户名和密码属性文件中存储用户名和密码密码。当用户尝试进行身份验证时,JBoss EAP 会将一次性使用编号 nonce 发回给客户端。然后,客户端使用用户名、密码、非ce 和一些其他字段生成单向哈希,并将用户名、非ce 和单向哈希发送到 JBoss EAP。JBoss EAP 查找用户预哈希的密码并使用该密码以及提供的用户名、非ce 和其他一些字段,以相同的方式生成另一个单向哈希。如果两端都使用相同的信息,包括正确的密码,哈希将匹配,用户通过身份验证。

虽然安全域默认使用摘要机制,但可以重新配置它们以使用其他身份验证机制。启动时,管理界面根据 ManagementRealm 中配置了哪些身份验证机制来确定将启用哪些身份验证机制。

安全域不涉及任何授权决策;但它们可以配置为加载用户组成员资格信息,随后可用于做出授权决策。用户通过身份验证后,将执行第二个步骤,以根据用户名加载组成员资格信息。

默认情况下,ManagementRealm 在管理接口的身份验证和授权中使用。ApplicationRealm 是默认的域,供 Web 应用和 Jakarta 企业 Bean 在验证和授权用户使用。

2.7.2. 默认安全性

默认情况下,核心管理身份验证以两种不同的形式保护 HTTP 和原生管理接口:本地客户端和远程客户端,它们默认配置为 ManagementRealm 安全 域。这些默认值可以不同配置或完全替换。

注意

开箱即用的管理接口配置为使用简单的访问控制,这不使用角色。因此,默认情况下,在使用简单访问控制时,所有用户都具有与 SuperUser 角色相同的特权,后者基本上可以访问所有内容。

2.7.2.1. 使用原生接口进行本地和远程客户端身份验证

原生接口或管理 CLI 可以在与运行 JBoss EAP 实例相同的主机上本地调用,或者从另一台计算机远程调用。尝试使用原生接口进行连接时,JBoss EAP 为客户端提供可用 SASL 身份验证机制的列表,如 本地 jboss 用户、BASIC 等。客户端选择其所需的身份验证机制,并尝试通过 JBoss EAP 实例进行身份验证。如果失败,它将使用任何剩余的机制重试或停止尝试连接。本地客户端可以选择使用 本地 jboss 用户身份验证 机制。这种安全机制基于客户端访问本地文件系统的能力。它验证尝试登录的用户实际上是否能够访问与 JBoss EAP 实例相同的主机上的本地文件系统。

这个验证机制会出现在四个步骤中:

  1. 客户端向服务器发送一条消息,其中包含使用 本地 jboss 用户 进行身份验证的请求。
  2. 服务器生成一次性令牌,将其写入唯一文件,然后向客户端发送一条包含文件完整路径的消息。
  3. 客户端从 文件读取令牌并将其发送到服务器,验证它对文件系统具有本地访问权限。
  4. 服务器验证令牌,然后删除 文件。

这种身份验证形式基于以下原则:如果实现对文件系统的物理访问,其他安全机制就是多余的。其原因是,如果用户具有本地文件系统访问权限,该用户有足够的访问权限来创建新用户,或者破坏其他安全机制。这有时被称为静默身份验证,因为它允许本地用户在不提供用户名或密码身份验证的情况下访问管理 CLI。

启用此功能是为了方便和协助本地用户运行管理 CLI 脚本,而无需额外的身份验证。这是一个非常有用的功能,因为本地配置的访问通常也让用户能够添加自己的用户详细信息或者以其他方式禁用安全检查。

也可以从其他服务器(甚至与远程客户端相同的服务器)访问原生接口。将原生接口作为远程客户端访问时,客户端将无法使用 本地 jboss 用户 进行身份验证,并且将强制使用其他身份验证机制,如 DIGEST。如果本地客户端无法使用 本地 jboss 用户 进行身份验证,它将自动回退并尝试将其他机制用作远程客户端。

注意

管理 CLI 可以从其他服务器调用,甚至使用与原生接口相反的 HTTP 接口。所有 HTTP 连接(CLI 或其他)都被视为远程连接,不包含在本地接口身份验证中

重要

默认情况下,原生接口不会被配置,所有管理 CLI 流量都由 HTTP 接口处理。JBoss EAP 7 支持 HTTP 升级,它允许客户端通过 HTTP 进行初始连接,然后发送请求将该连接升级到另一协议。对于管理 CLI,将通过 HTTP 向 HTTP 接口发出初始请求,但随后连接会升级到原生协议。此连接仍然通过 HTTP 接口处理,但它使用原生协议进行通信,而不是 HTTP。或者,如果需要,仍可启用和使用原生接口。

2.7.2.2. 使用 HTTP 接口进行本地和远程客户端身份验证

HTTP 接口可以由与运行 JBoss EAP 实例相同的主机上的客户端在本地调用,或者由客户端从另一台计算机远程调用。尽管允许本地和远程客户端访问 HTTP 接口,但访问 HTTP 接口的所有客户端都将被视为远程连接。

当客户端尝试连接 HTTP 管理接口时,JBoss EAP 会发回 HTTP 响应,其状态代码为 401 Unauthorized,还有一组列出受支持的身份验证机制的标头,如 Digest、GSSAPI 等。Digest 的标头还包括 JBoss EAP 生成的非ce。客户端查看标题并选择要使用的身份验证方法,并发送相应的响应。如果客户端选择 Digest,则会提示用户输入其用户名和密码。客户端使用提供的字段,如用户名和密码、非ce 以及一些其他信息片段来生成单向哈希。客户端随后将单向哈希、用户名和非作为响应发送到 JBoss EAP。JBoss EAP 采用该信息、生成另一个单向哈希,比较这两者并根据结果对用户进行身份验证。

2.7.3. 高级安全性

可以通过多种方式更改管理接口的默认配置,以及身份验证和授权机制,从而影响其保护方式。

2.7.3.1. 更新管理接口

除了修改身份验证和授权机制外,JBoss EAP 还允许管理员更新管理接口本身的配置。有许多选项:

配置管理接口以使用单向 SSL/TLS
仅使用单向 SSL/TLS 配置 JBoss EAP 管理控制台以进行通信可提高安全性。客户端和管理控制台之间的所有网络流量都加密,这降低了安全攻击的风险,比如中间人攻击的风险。管理 JBoss EAP 实例的任何人都拥有比非特权用户更高的权限,使用单向 SSL/TLS 有助于保护该实例的完整性和可用性。使用 JBoss EAP 配置单向 SSL/TLS 时,权威签名证书优先于自签名证书,因为它们提供信任链。允许自签名证书,但不建议使用。
使用双向 SSL/TLS
双向 SSL/TLS 身份验证(也称为客户端身份验证)使用 SSL/TLS 证书验证客户端和服务器。这不仅保证了它所说的服务器,而且客户端也是它的描述。
更新或创建新安全域
可以使用新的安全域更新或替换默认安全域。

2.7.3.2. 添加出站连接

些安全域连接到外部接口,如 LDAP 服务器。出站连接定义了如何进行此连接。预定义的连接类型 ldap-connection 设置所有必填和可选属性,以连接到 LDAP 服务器并验证凭据。

2.7.3.3. 在管理接口中添加 RBAC

默认情况下禁用 RBAC 系统。它通过从 简单的 to rbac 更改 provider 属性来 启用。这可以通过管理 CLI 来完成。在运行的服务器上禁用或启用 RBAC 时,必须先重新加载服务器配置才能生效。

为管理接口启用 RBAC 时,分配给用户的角色决定了他们有权访问的资源,以及他们可使用资源属性执行的操作。只有 AdministratorSuperUser 角色的用户才能查看和更改访问控制系统。

警告

在没有正确配置用户和角色的情况下启用 RBAC 可能会导致管理员无法登录到管理界面。

RBAC 在管理控制台中的影响

在管理控制台中,一些控件和视图被禁用,显示为灰显或根本不可见,具体取决于分配给用户的角色的权限。

如果用户对资源属性没有读取权限,则控制台中该属性将显示为空。例如,大多数角色无法读取数据源的用户名和密码字段。

如果用户具有读取权限,但没有对资源属性具有写入权限,则该属性将在资源的编辑表单中禁用。如果用户没有资源写入权限,则不会出现资源的编辑按钮。

如果用户没有访问资源或属性的权限,这意味着该角色无法寻址,则不会出现在该用户的控制台中。其中的一个示例是访问控制系统本身,它默认仅对几个角色可见。

管理控制台还为以下常见 RBAC 任务提供了一个接口:

  • 查看和配置为每个用户分配或排除的角色。
  • 查看并配置为每个组分配或排除哪些角色。
  • 查看每个角色的组和用户成员资格。
  • 每个角色配置默认成员资格。
  • 创建有作用域角色。
注意

目前无法在管理控制台中配置限制。

RBAC 对管理 CLI 或管理 API 的影响

启用 RBAC 时,管理 CLI 或管理 API 的用户的行为略有不同。

无法读取的资源和属性会根据结果进行过滤。如果过滤过的项目可以被角色寻址,则在结果的 response -headers 部分中将其名称列为 filtered- attributes。如果资源或属性不能被角色寻址,则它不会被列出。

尝试访问不可寻址的资源将导致 Resource Not Found 错误。

如果用户尝试写入或读取他们可以寻址的资源,但缺少适当的写入或读取权限,则返回 Permission Denied 错误。

管理 CLI 可以执行与管理控制台相同的所有 RBAC 任务,以及一些额外的任务:

  • 启用和禁用 RBAC
  • 更改权限组合策略
  • 配置应用程序资源和资源敏感度限制

RBAC 对 Jakarta 管理的 Bean 的影响

基于角色的访问控制通过三种方式应用到 Jakarta 管理:

  1. JBoss EAP 的管理 API 公开为 Jakarta 管理 Bean。这些受管 Bean 称为 核心组件, 它们的访问会被控制和过滤,与底层管理 API 本身完全相同。
  2. jmx 子系统配置有敏感写入权限。这意味着只有 AdministratorSuperUser 角色的用户 才可以对该子系统进行更改。Auditor 角色的用户也可以读取此子系统配置。
  3. 默认情况下,所有管理用户可以访问由已部署的应用程序和服务或非核心 MBeans 注册的 Bean,但只有 MaintainerOperatorAdministratorSuperUser 角色的用户 可以向其写入。

RBAC 身份验证

RBAC 与 JBoss EAP 附带的标准身份验证提供商一同工作:

用户名/密码
用户通过用户名和密码组合进行验证,该组合通过 ManagementRealm 的设置进行验证,该设置可以使用本地属性文件或 LDAP。
客户端证书
truststore 为客户端证书提供身份验证信息。
本地 jboss 用户
如果服务器在同一计算机上运行,则 jboss-cli 脚本会自动以本地 jboss 用户 进行身份验证。默认情况下,本地 jboss 用户SuperUser 组的成员。

无论使用了何种提供程序,JBoss EAP 均负责将角色分配给用户。通过 ManagementRealm 或 LDAP 服务器进行身份验证时,这些系统可以提供用户组信息。JBoss EAP 还可以使用此信息将角色分配给用户。

2.7.3.4. 将 LDAP 与管理接口搭配使用

JBoss EAP 包含多个身份验证和授权模块,允许 LDAP 服务器用作 Web 和 Jakarta Enterprise Beans 应用的身份验证和授权授权。

要使用 LDAP 目录服务器作为管理控制台、管理 CLI 或管理 API 的身份验证源,必须执行以下任务:

  1. 创建与 LDAP 服务器的出站连接。
  2. 创建支持 LDAP 的安全域或更新现有安全域以使用 LDAP。
  3. 在管理界面中引用新的安全域。

LDAP 身份验证器首先建立与远程目录服务器的连接即可运行。然后,使用用户传递给身份验证系统的用户名执行搜索,以查找 LDAP 记录的完全限定区分名称(DN)。使用用户的 DN 作为用户提供的凭据和密码,建立与 LDAP 服务器的新连接。如果对 LDAP 服务器的此身份验证成功,则 DN 被验证为有效。

创建支持 LDAP 的安全域后,管理界面可以引用它。管理接口将使用安全域进行身份验证。JBoss EAP 也可以配置为使用 LDAP 服务器的出站连接,利用双向 SSL/TLS 在管理界面和管理 CLI 中进行身份验证。

2.7.3.5. Jakarta 身份验证和管理接口

Jakarta 身份验证可用于保护管理接口。将 Jakarta 身份验证用于管理接口时,必须将安全域配置为使用安全域。这引入了核心服务和子系统之间的依赖关系。虽然不需要使用 Jakarta Authentication 来保护管理接口,但建议管理员启用 SSL/TLS,以避免以不安全的方式意外传输敏感信息。

注意

当 JBoss EAP 实例以 仅管理员 模式运行时,不支持使用 Jakarta 身份验证来保护管理接口。如需有关 仅限管理员 模式的更多信息,请参阅 JBoss EAP 配置指南 中的仅管理模式运行 JBoss EAP。