基于文件的用户身份验证编辑

您可以使用内置的 file 领域来管理和验证用户。使用 file 领域,用户在集群中每个节点上的本地文件中定义。

作为集群的管理员,您有责任确保在集群中的每个节点上定义相同的用户。Elastic Stack 安全功能不提供任何机制来保证这一点。您还应该注意,您无法通过 用户 APIfile 领域中添加或管理用户,并且您无法在 Kibana 的 管理 / 安全 / 用户 页面中添加或管理它们。

file 领域非常有用,因为它可以作为备用或恢复领域。例如,在集群无响应或安全索引不可用,或者您忘记了管理用户的密码的情况下。在这种情况下,file 领域是一种便捷的解决方法 - 您可以在 file 领域中定义一个新的 admin 用户,并使用它登录并重置所有其他用户的凭据。

要定义用户,安全功能提供了 users 命令行工具。此工具使您能够添加和删除用户、分配用户角色以及管理用户密码。

配置文件领域编辑

您无需显式配置 file 领域。默认情况下,filenative 领域被添加到领域链中。除非另行配置,否则 file 领域将首先添加,然后是 native 领域。

虽然可以定义多个其他领域的实例,但您只能在每个节点上定义一个 file 领域。

有关 file 领域用户的全部数据都存储在集群中每个节点上的两个文件中:usersusers_roles。这两个文件都位于 ES_PATH_CONF 中,并在启动时读取。

usersusers_roles 文件由节点本地管理,由集群全局管理。这意味着,对于典型的多节点集群,需要在集群中的每个节点上应用完全相同的更改。

更安全的方法是在其中一个节点上应用更改,并将文件分发或复制到集群中的所有其他节点(手动或使用配置管理系统,例如 Puppet 或 Chef)。

  1. (可选) 在 elasticsearch.yml 中的 xpack.security.authc.realms.file 命名空间下添加领域配置。至少,您必须设置领域的 order 属性。

    例如,以下代码段显示了一个 file 领域配置,它将 order 设置为零,以便首先检查该领域。

    xpack:
      security:
        authc:
          realms:
            file:
              file1:
                order: 0

    您只能在 Elasticsearch 节点上配置一个文件领域。

  2. 重新启动 Elasticsearch。
  3. 将用户信息添加到集群中每个节点上的 ES_PATH_CONF/users 文件中。

    users 文件存储所有用户及其密码。文件中的每一行都代表一个单个用户条目,包含用户名和 哈希加盐 密码。

    rdeniro:$2a$10$BBJ/ILiyJ1eBTYoRKxkqbuDEdYECplvxnqQ47uiowE7yGqvCEgj9W
    alpacino:$2a$10$cNwHnElYiMYZ/T3K4PvzGeJ1KbpXZp2PfoQD.gfaVdImnHOwIuBKS
    jacknich:{PBKDF2}50000$z1CLJt0MEFjkIK5iEfgvfnA6xq7lF25uasspsTKSo5Q=$XxCVLbaKDimOdyWgLCLJiyoiWpA/XDMe/xtVgn1r5Sg=

    为了限制对凭据盗窃的暴露并减轻凭据泄露的影响,文件领域根据安全最佳实践存储密码并缓存用户凭据。默认情况下,用户凭据的哈希版本存储在内存中,使用加盐的 sha-256 哈希算法,密码的哈希版本存储在磁盘上,使用 bcrypt 哈希算法加盐和哈希。要使用不同的哈希算法,请参阅 用户缓存和密码哈希算法

    虽然可以使用任何标准文本编辑器直接修改 users 文件,但我们强烈建议使用 elasticsearch-users 工具来应用所需的更改。

    作为集群的管理员,您有责任确保在集群中的每个节点上定义相同的用户。Elasticsearch 安全功能不提供任何机制来保证这一点。

  4. 将角色信息添加到集群中每个节点上的 ES_PATH_CONF/users_roles 文件中。

    users_roles 文件存储与用户关联的角色。例如

    admin:rdeniro
    power_user:alpacino,jacknich
    user:jacknich

    每一行将一个角色映射到与该角色关联的所有用户的逗号分隔列表。

    您可以使用 elasticsearch-users 工具来更新此文件。您必须确保在集群中的每个节点上进行相同的更改。

  5. (可选) 更改检查 usersusers_roles 文件的频率。

    默认情况下,Elasticsearch 每 5 秒检查一次这些文件是否有更改。您可以通过更改 elasticsearch.yml 文件中的 resource.reload.interval.high 设置来更改此默认行为(因为这是 Elasticsearch 中的常见设置,更改其值可能会影响系统中的其他计划)。