您的位置:

Elasticsearch修改密码详解

Elasticsearch是一种开源的搜索引擎,被大多数人用来作为数据存储。如果你是 Elasticsearch 的用户,你可以使用默认密码"changeme" 登录,但是这个密码是不安全的。在保证数据安全性的基础上,我们需要修改 Elasticsearch 的默认密码,使其更加安全。

一、Elasticsearch修改密码的准备工作

在进行 Elasticsearch 修改密码之前,需要确认以下三个方面的准备工作:

1.确认Elasticsearch版本

确认 Elasticsearch 的版本,因为每个版本的语法不完全相同,这是区别最大的地方。假设你使用的是 Elasticsearch 2.x,那么下文中的文本方案将不适用于 Elasticsearch 5.x 以上版本。

2.创建管理员用户并赋权

在 Elasticsearch 中,我们需要创建一个具有管理员权限的用户。使用管理员用户具有以下两个好处:

  • 提升 Elasticserch 数据库安全性
  • 管理员用户拥有更多权限,可以做一些不同于普通用户的操作

3.安装Java的访问工具curl或使用Postman

Curl是一个在 UNIX平台下利用URL语法传输文件和数据的工具,可以用来发送 HTTP/HTTPS/FTP 等请求。 在我们的例子中,我们可以使用Curl或Postman来发送修改 Elasticsearch 密码的请求,所以在你开始前,你需要确保其已安装。

二、Elasticsearch修改密码过程

1.启用X-Pack 安全特性

X-Pack提供了安全、监控、报告和机器学习等功能,当然也包括了安全特性。


./bin/elasticsearch-plugin install x-pack

启用X-Pack 安全特性的操作很简单,只需要在安装目录下执行以下命令即可:


./bin/elasticsearch-setup-passwords interactive

在执行完以上命令后,你会看到如下的安全选项:


Modify Passwords

A built-in user database is enabled, but you haven't defined any users yet.
Would you like to create a user with the "superuser" role?
[createdefaultusers=Y/n]

这里建议创建一个具有管理员权限的用户,操作如下:


Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Passwords changed successfully!

输入以上的登录名和密码即可创建具有管理员权限的用户。

2.修改Elasticsearch管理员密码

建议将初始密码修改为更高安全性的密码。在进行 Elasticsearch 修改密码之前,先用创建的管理员用户使用以下命令获取 Elasticsearch的一些基本信息:


curl -u user:password 'http://localhost:9200/'

输入服务器的 IP 地址和端口,用创建的管理员用户访问 Elasticsearch。如果访问成功,你会看到 Elasticsearch 的基本信息。

在这之后,使用以下命令修改 Elasticsearch 管理员密码:


curl -XPUT -u user:password 'http://localhost:9200/_security/user/elastic/_password' -H "Content-Type: application/json" -d'
{
  "password": "newpassword"
}
'

请将 user 替换成具有管理员权限的用户名,password 替换成用户名的登录密码,newpassword 替换成你要设置的新密码。

三、避免Elasticsearch数据受到攻击

1.使用HTTPS

使用 HTTPS 可以避免数据中途被攻击者截获。在 Elasticsearch 中,可以使用 x-pack 进行设置。首先需要安装 x-pack,之后在 Elasticsearch 配置文件中添加以下参数:


xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.cert: /path/to/cert
xpack.security.http.ssl.key: /path/to/key
xpack.security.http.ssl.key_passphrase: yourpassword

其中,/path/to/cert 表示证书路径,/path/to/key 表示私钥路径,yourpassword 表示私钥密码。

2.禁止远程访问

对于一些内部使用的 Elasticsearch 数据库,建议禁止远程访问。在 Elasticsearch 配置文件中添加以下参数:


network.host: localhost

这样,Elasticsearch 只能在本地访问。

3.定期备份数据

尽管 Elasticsearch 可以确保最高的数据安全性,最好每天都备份数据。备份数据可以在数据丢失时用于恢复。

四、总结

在没有修改 Elasticsearch 初始密码时,Elasticsearch 是非常容易受到攻击的。通过创建管理员用户、修改管理员密码、使用 HTTPS 等方法,可以很好地保护 Elasticsearch 数据库的安全性。