Elasticsearch:基于文件的用户认证

news2025/1/15 19:56:23

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

重要:作为集群的管理员,你有责任确保在集群中的每个节点上定义相同的用户。 Elastic Stack 安全功能不提供任何机制来保证这一点。 你还应该知道,你不能通过 user APIs 在文件域中添加或管理用户,也不能在 Management/Security/Users 页面上的 Kibana 中添加或管理它们。

文件域作为回退(fallback)或恢复(recovery)域非常有用。 例如,在集群无响应或安全索引不可用的情况下,或者当你忘记管理用户的密码时。 在这种情况下,文件域是一种方便的出路 — 你可以在文件领域中定义一个新的管理员用户,并使用它来登录和重置所有其他用户的凭据。

重要:当你在 elasticsearch.yml 中配置域时,只有指定的域用于身份验证。 要使用文件域,你必须明确地将其包含在域链中。 虽然可以定义一些其他域的多个实例,但你只能为每个节点定义一个文件领域。

文件域(file realm)默认已经添加到域链中。 你不需要显式配置文件域

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

$ pwd
/Users/liuxg/elastic/elasticsearch-8.5.2
$ ls config/
certs                             log4j2.properties
elasticsearch-plugins.example.yml role_mapping.yml
elasticsearch.keystore            roles.yml
elasticsearch.yml                 users
jvm.options                       users_roles
jvm.options.d

配置

我们在 config 下的 user_roles 里配置所需要的 roles,比如:

config/roles.yml

admins:
  cluster:
    - all
  indices:
    - names:
        - "*"
      privileges:
        - all


devs:
  cluster:
    - manage
  indices:
    - names:
        - "*"
      privileges:
        - write
        - delete
        - create_index
$ pwd
/Users/liuxg/elastic/elasticsearch-8.5.2
$ cat config/roles.yml 
# The default roles file is empty as the preferred method of defining roles is
# through the API/UI. File based roles are useful in error scenarios when the
# API based roles may not be available.
admins:
  cluster:
    - all
  indices:
    - names:
        - "*"
      privileges:
        - all


devs:
  cluster:
    - manage
  indices:
    - names:
        - "*"
      privileges:
        - write
        - delete
        - create_index

如上所示,我们在 roles.yml 里创建了两个 roles: admins 及 devs。这两个 roles 有不同的权限。admins 是超级用户的权限,而 devs role 具有 write, delete 及 create_index 的权限。

配置完后,我们重新 Elasticsearch。就像文章开头说的那样,我们通过这样的方法创建的 roles 并不能在 Management/Security/Role 中看到:

创建用户

接下来,我们就要使用 elasticsearch-users 这个工具来创建用户。我们使用如下的命令来创建一个用户 liuxg 及其密码 password。它所定义的 roles 为 networking 及 monitoring:

bin/elasticsearch-users useradd liuxg -p password -r network,monitoring
$ pwd
/Users/liuxg/elastic/elasticsearch-8.5.2
$ bin/elasticsearch-users useradd liuxg -p password -r network,monitoring
Warning: The following roles [monitoring,network] are not in the [/Users/liuxg/elastic/elasticsearch-8.5.2/config/roles.yml] file. Make sure the names are correct. If the names are correct and the roles were created using the API please disregard this message. Nonetheless the user will still be associated with all specified roles
Known roles: [apm_system, watcher_admin, viewer, logstash_system, rollup_user, kibana_user, beats_admin, remote_monitoring_agent, rollup_admin, snapshot_user, data_frame_transforms_admin, devs, monitoring_user, enrich_user, kibana_admin, logstash_admin, editor, data_frame_transforms_user, machine_learning_user, machine_learning_admin, watcher_user, apm_user, beats_system, transform_user, reporting_user, kibana_system, transform_admin, remote_monitoring_collector, transport_client, admins, superuser, ingest_admin]

如上所示,它给出了一些警告:monitoring 及 network 并没有在 roles.yml 里被定义。它还列出了可以被使用的 roles 的名称:

尽管如此,它只是一个警告。我接着查看如下的文件:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.5.2
$ cat config/users
liuxg:$2a$10$VJQzQftnxSwvdaxfuLGLx.lX4VGuIfLHV.R38HBySUUr1KJL2hrgW
$ cat config/users
liuxg:$2a$10$VJQzQftnxSwvdaxfuLGLx.lX4VGuIfLHV.R38HBySUUr1KJL2hrgW

我们可以看到上面的内容。liuxg 就是用户名,而后面是用掩码表示的密码。我们再查看 users_role 这个文件:

cat config/users_roles 
$ cat config/users_roles 
monitoring:liuxg
network:liuxg

它显示了各个角色(role)对应的用户。

我们现在用刚创建的用户 liuxg:password 来访问 Elasticsearch:

curl -k -u liuxg:password https://localhost:9200
$ curl -k -u liuxg:password https://localhost:9200 | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   541  100   541    0     0   5517      0 --:--:-- --:--:-- --:--:--  5755
{
  "error": {
    "root_cause": [
      {
        "type": "security_exception",
        "reason": "action [cluster:monitor/main] is unauthorized for user [liuxg] with effective roles [] (assigned roles [monitoring,network] were not found), this action is granted by the cluster privileges [monitor,manage,all]"
      }
    ],
    "type": "security_exception",
    "reason": "action [cluster:monitor/main] is unauthorized for user [liuxg] with effective roles [] (assigned roles [monitoring,network] were not found), this action is granted by the cluster privileges [monitor,manage,all]"
  },
  "status": 403
}

显然,我们不能进行登录。这是因为用户 liuxg 还没有相应的权限。

我们接下来使用编辑器来编辑 config/users_roles 文件,使其成为:

config/users_roles

$ pwd
/Users/liuxg/elastic/elasticsearch-8.5.2
$ cat config/users_roles 
monitoring:liuxg
network:liuxg
admins:liuxg

在上面,我们为 liuxg 这个用户添加了之前我们在 roles.yml 文件中定义的 admins 权限。这个 admins 是超级用户的权限。我们再次发送请求:

$ curl -k -u liuxg:password https://localhost:9200 | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   535  100   535    0     0  27225      0 --:--:-- --:--:-- --:--:-- 35666
{
  "name": "liuxgm.local",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "NvSlRkrSTaO33lAKdzNcqQ",
  "version": {
    "number": "8.5.2",
    "build_flavor": "default",
    "build_type": "tar",
    "build_hash": "a846182fa16b4ebfcc89aa3c11a11fd5adf3de04",
    "build_date": "2022-11-17T18:56:17.538630285Z",
    "build_snapshot": false,
    "lucene_version": "9.4.1",
    "minimum_wire_compatibility_version": "7.17.0",
    "minimum_index_compatibility_version": "7.0.0"
  },
  "tagline": "You Know, for Search"
}

这次显然我们的访问是成功的。我们的集群有救了。我们为它设置了一个崭新的账号。

我们还可以使用如下的命令来列出来在当前节点里的文件域中的用户:

bin/elasticsearch-users list
$ bin/elasticsearch-users list
liuxg          : monitoring*,network*,admins

 [*]   Role is not in the [/Users/liuxg/elastic/elasticsearch-8.5.2/config/roles.yml] file. If the role has been created using the API, please disregard this message.

我们可以使用如下的命令来重新设置用户的密码:

bin/elasticsearch-users passwd liuxg

上面的命令将为 liuxg 用户重置密码:

$ bin/elasticsearch-users passwd liuxg
Enter new password: 
Retype new password: 

在上面,我们为 liuxg 用户的密码重置为 123456。我们再次使用如下的命令来进行验证:

$ curl -k -u liuxg:123456 https://localhost:9200 | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   535  100   535    0     0   5533      0 --:--:-- --:--:-- --:--:--  5815
{
  "name": "liuxgm.local",
  "cluster_name": "elasticsearch",
  "cluster_uuid": "NvSlRkrSTaO33lAKdzNcqQ",
  "version": {
    "number": "8.5.2",
    "build_flavor": "default",
    "build_type": "tar",
    "build_hash": "a846182fa16b4ebfcc89aa3c11a11fd5adf3de04",
    "build_date": "2022-11-17T18:56:17.538630285Z",
    "build_snapshot": false,
    "lucene_version": "9.4.1",
    "minimum_wire_compatibility_version": "7.17.0",
    "minimum_index_compatibility_version": "7.0.0"
  },
  "tagline": "You Know, for Search"
}

很显然,密码的修改是成功的。

我们甚至可以使用如下的命令来移除不需要的 roles:

bin/elasticsearch-users roles liuxg -r network,monitoring -a user

上面的命令为 liuxg 用户移除 network 及 monitoring 角色,并添加 user 角色。

执行上面的命令后,我们重新检查用户的角色:

$ bin/elasticsearch-users list
liuxg          : user*,admins

显然之前的 network 及 monitoring 已经被移除了。

我们还可以使用如下的命令来删除一个用户:

bin/elasticsearch-users userdel liuxg

上面的命令将删除 liuxg 用户。我们再次使用 list 命令来查看:

$ bin/elasticsearch-users list
No users found

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ Reference: Standard C++ Library reference: Containers: map: map: erase

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/erase/ 公有成员函数 <map> std::map::erase C98 (1) void erase (iterator position); (2) size_type erase (const key_type& k); (3) void erase (iterator first, iterator last);…

HR是怎么看待PMP证书呢?

HR 也是打工人&#xff0c;企业需要什么样的人才就招聘什么样的求职者&#xff0c;问 HR 怎么看待 PMP 证书&#xff0c;其实也就是PMP 证书的市场价值怎么样。 市场上对PMP证书的评价争议非常大&#xff0c;尤其近两年考 PMP 的人越来越多&#xff0c;不可否认&#xff0c;很…

UNIAPP实战项目笔记52 输入手机号页面和输入验证码页面

UNIAPP实战项目笔记52 输入手机号页面和输入验证码页面 实际案例图片 输入手机号页面 输入验证码页面 显示输入手机号 使用验证码登录 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 完善布局页面和样式 代码 login-tel.vue页面 <templat…

33-Vue之ECharts-仪表盘图

ECharts-仪表盘图前言仪表盘的特点仪表盘的基本实现仪表盘的常见效果前言 本篇来学习写仪表盘图 仪表盘的特点 可以更直观的表现出某个指标的进度或实际情况 仪表盘的基本实现 ECharts 最基本的代码结构准备数据, 设置给 series 下的 data在 series 下设置 type:gauge &l…

毕业设计-国内疫情数据综合可视化分析系统

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

关于websocket抓包时的注意事项

总是需要一些原因&#xff0c;需要查看客户端和服务端的websocket数据交互&#xff0c;为了使得查看方便&#xff0c;客户端和服务端使用ws而非wss。 服务端部署在linux上&#xff0c;用tcpdump抓包后&#xff0c;在windows上用wireshark打开&#xff0c;如下所示&#xff1a; …

前端基础(十)_标签分类(行级标签、块级标签、行块标签)

标签分类 可以分为三类&#xff1a;行级标签、块级标签、行块标签 行级元素 常用的行级元素&#xff1a;span、b、i、em、strong、a、del、sub、sup等 注意&#xff1a; 1、默认宽度随元素的内容的变化而变化&#xff1b; 2、默认情况下高度由内容撑开&#xff1b; 3、不会…

【快速学习系列】Spring理解,IOC、DI、AOP的使用和代码示例及spring扩展(bean作用域、自动装配类型和拆分策略)

【快速学习系列】Spring理解&#xff0c;IOC、DI、AOP的使用和代码示例及spring扩展&#xff08;bean作用域、自动装配类型和拆分策略&#xff09; Spring概述 Spring设计理念 Spring是面向Bean的编程 Spring三大核心容器&#xff1a; Beans&#xff0c;Core&#xff0c;Conte…

使用vue-cli创建一个新项目

1&#xff0c;在文件夹中打开命令行输入&#xff1a; vue create educationcloud-pc 2&#xff0c;这里我选择手动创建配置 3&#xff0c;我会选择我用到的几个 空格键是选中 取消 a是全选 4&#xff0c;这里我暂时使用vue2版本 5&#xff0c;是否使用history路由 6&#xf…

skyBox 近地时角度倾斜问题,天空倾斜

近地出现角度不对问题 将下面代码放入js文件&#xff0c;引入项目。 本质是在Cesium.skyBox的代码上修改&#xff0c;并给Cesium重新增添近地的天空盒 需要注意的是&#xff0c;代码最后的Cesium.GroundSkyBox SkyBoxOnGround 调用方式&#xff1a; import ‘…/…/路径’ 然后…

地址汇总详细讲解(内附非纯末梢)

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

5.2 词向量Word Embedding

在自然语言处理任务中&#xff0c;词向量&#xff08;Word Embedding&#xff09;是表示自然语言里单词的一种方法&#xff0c;即把每个词都表示为一个N维空间内的点&#xff0c;即一个高维空间内的向量。通过这种方法&#xff0c;实现把自然语言计算转换为向量计算。 如 图1 …

转转用户画像平台实践

文章目录1. 背景2. 什么是用户画像3. 标签画像的应用场景4. 转转用户画像平台的实践4.1 系统结构图4.2 标签画像的构建原则4.3 标签类型和规则4.4 标签的生产加工4.5 标签的存储设计4.6 用户洞察4.7 用户分群计算4.8 ID-MAPPING5 未来规划6 总结1. 背景 转转作为二手电商交易领…

Linux C编程一站式学习笔记2

Linux C编程一站式学习笔记 chap2 常量、变量和表达式 本书以C99为标准 一.继续hello world 加入更多注释的hello world 可以用ctrl(shift)v复制到vim里面 #include <stdio.h>/* * comment1* main: generate some simple output*/int main(void) {printf(/* comment2 */…

【JS ES6】了解Symbol类型

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 目录声明定义Symbol的几种方式使用Symbol解决字符串耦合问题扩展特性与对象属性保护声明定义Sym…

Qt5.6.1移植海思Hi3521d(三)

系列文章目录 Qt5.6.1移植海思Hi3521d&#xff08;一&#xff09; Qt5.6.1移植海思Hi3521d&#xff08;二&#xff09; 前言 本章讲解如何将编译好的qt程序移植到海思Hi3521D板子上&#xff0c;并且能够启动qt界面&#xff0c;和正常显示中文 一、移植qt库 创建qt.conf&#…

不再封控,各高校要如何开展教学

疫情政策逐步放开&#xff0c;石家庄、福州、广西等地各高校发布寒暑假和期末课程安排。 广西科技大学要求从2022年12月13日下午起&#xff0c;停止所有线下课程&#xff0c;未完成的教学任务启动线上教学。 在疫情这三年里&#xff0c;线上教学已经成为学校的主要教学手段&…

Python操作Excel

文章目录xlrd模块安装xlrd库打开Excel文件读取获取指定工作表操作指定行操作指定列操作指定单元格使用示例xlrd模块 xlrd是Python处理Excel表格数据的一个模块&#xff0c;能够对Excel中的数据进行读取。 安装xlrd库 在命令行或终端中输入以下命令进行安装&#xff1a; pip…

python数据分析 之 pandas数据统计

目录 一&#xff1a;数据集准备 二&#xff1a;加载文件 三&#xff1a;分组操作进行统计 一&#xff1a;数据集准备 可以创建一个txt&#xff0c;并放置pycharm工程目录下 下面是博主的数据集测试&#xff0c;所用数据&#xff0c;需要的自取 1001,Chinese,1,80 1001,Chine…

富芮坤蓝牙FR801xH开发环境搭建

富芮坤蓝牙FR801xH方案开发资源包网盘下载链接&#xff1a;网盘 提取码&#xff1a;30qu 搭建过程&#xff1a; 安装Keil开发工具:mdk525.exe 可以从Keil官网下载&#xff1a;http://www.keil.com/files/eval/MDK525.EXE 也可以使用网盘tools目录里的包装包 其中需要注意选择的…