--- title: "Easysearch 集群通过 API 进行用户密码重置" date: 2025-01-12 lastmod: 2025-01-12 description: "本文介绍了在Easysearch中通过API接口和配置文件创建用户及重置密码的方法,包括普通用户与内置用户的管理方式,以及使用管理证书解决权限问题的具体操作步骤。" tags: ["Easysearch"] summary: "在日常使用 Easysearch 中,难免会遇到集群密码需要重置的情况(如密码遗失、安全审计要求等)。 通过查看 Easysearch 用户接口文档,创建用户使用如下接口: PUT _security/user/<username> { "password": "adminpass", "roles": ["maintenance_staff", "weapons"], "external_roles": ["captains", "starfleet"], "attributes": { "attribute1": "value1", "attribute2": "value2" } } 同样可以通过该接口对用户进行密码重置: PUT _security/user/<username> { "password": "adminpass111", "roles": ["maintenance_staff", "weapons"], "external_roles": ["captains", "starfleet"], "attributes": { "attribute1": "value1", "attribute2": "value2" } API 接口创建的用户 # 创建一个测试用户 test,并进行访问验证。 通过接口重置用户 test 密码,并进行访问验证。 配置文件创建的用户 # 在配置文件 user.yml 中添加测试用户(test1、test2)配置: ## Test users test1: hash: "$2y$12$ZNfKKCeeRQXOWX27W50tbu0Tq4NT4ADdCQOBoZzokI1zR8ZEUWm4W" # test1 reserved: true roles: - "readall_and_monitor" test2: hash: "$2y$12$m4/eSiDlzRII87vNeKwzteEHGpgpbdMr5tRvOfve/xIbEYdC4bU7a" # test2 reserved: false roles: - "readall_and_monitor" 其中 hash 字段是将用户密码哈希出来的值,可通过 bin/hash_password." --- 在日常使用 Easysearch 中,难免会遇到集群密码需要重置的情况(如密码遗失、安全审计要求等)。 通过查看 Easysearch [用户](https://docs.infinilabs.com/easysearch/main/docs/references/security/access-control/api.md#创建用户)接口文档,创建用户使用如下接口: ```json PUT _security/user/ { "password": "adminpass", "roles": ["maintenance_staff", "weapons"], "external_roles": ["captains", "starfleet"], "attributes": { "attribute1": "value1", "attribute2": "value2" } } ``` 同样可以通过该接口对用户进行密码重置: ```json PUT _security/user/ { "password": "adminpass111", "roles": ["maintenance_staff", "weapons"], "external_roles": ["captains", "starfleet"], "attributes": { "attribute1": "value1", "attribute2": "value2" } ``` ## API 接口创建的用户 创建一个测试用户 test,并进行访问验证。 {{% load-img "/img/blog/2025/easysearch-use-api-reset-user-password/1.png" %}} 通过接口重置用户 test 密码,并进行访问验证。 {{% load-img "/img/blog/2025/easysearch-use-api-reset-user-password/2.png" %}} ## 配置文件创建的用户 在配置文件 `user.yml` 中添加测试用户(test1、test2)配置: ```yaml ## Test users test1: hash: "$2y$12$ZNfKKCeeRQXOWX27W50tbu0Tq4NT4ADdCQOBoZzokI1zR8ZEUWm4W" # test1 reserved: true roles: - "readall_and_monitor" test2: hash: "$2y$12$m4/eSiDlzRII87vNeKwzteEHGpgpbdMr5tRvOfve/xIbEYdC4bU7a" # test2 reserved: false roles: - "readall_and_monitor" ``` 其中 `hash` 字段是将用户密码哈希出来的值,可通过 `bin/hash_password.sh -p "<明文密码>"` 生成。 进行用户访问验证。 {{% load-img "/img/blog/2025/easysearch-use-api-reset-user-password/3.png" %}} 对 test1、test2 用户进行密码重置。 {{% load-img "/img/blog/2025/easysearch-use-api-reset-user-password/4.png" %}} 用户 test1 重置失败,用户 test2 重置成功。用户 test1 重置失败是因为配置了 `reserved: true`,将用户 test1 指定为内置用户,使用用户 admin 会因为权限无法进行密码重置,那就需要使用有更高权限的[管理证书](https://docs.infinilabs.com/easysearch/main/docs/references/security/configuration/tls.md#配置管理证书)进行密码重置。默认在 Easysearch 集群执行初始化脚本 `bin/initialize.sh` 时,会在 `config` 目录下生成证书文件,其中 `admin.crt`、`admin.key` 为管理证书。 {{% load-img "/img/blog/2025/easysearch-use-api-reset-user-password/5.png" %}} test1 用户密码重置成功,进行访问验证。 {{% load-img "/img/blog/2025/easysearch-use-api-reset-user-password/6.png" %}}