越是喧闹,越是孤独。越是寂寞,越是丰富
The more noisy, the more lonely. The more lonely, the more rich
越是喧闹,越是孤独。越是寂寞,越是丰富
The more noisy, the more lonely. The more lonely, the more rich
本站的全文搜索功能用的是elasticsearch搜索引擎,由于之前一直都是用node通过内网连接es,所以并没有为es设置密码。最近上线了kibana,用于es的可视化操作,由于kibana对公网开放了,所以就需要配置es的密码来提高网站的安全性了。本文将一步一步描述如何为elastic和kibana设置密码,以及如何来妥善保管密码。
01
—
为ElasticSearch设置密码
设置密码之前,需要先开启X-Pack安全设置。进入es的主目录(以ES_HOME表示),编辑es的配置文件:
vim config/elasticsearch.yml
在文件的最后增加一行配置:
xpack.security.enabled: true
保存后重启es。后台启动es的方式为:
bin/elasticsearch -d
然后执行 elasticsearch-setup-passwords,先查看下帮助:
$ bin/elasticsearch-setup-passwords -h
打印出如下信息:
Sets the passwords for reserved users
Commands
--------
auto - Uses randomly generated passwords
interactive - Uses passwords entered by a user
Non-option arguments:
(......)
主要使用两个选项 auto 和 interactive,我目前采用的方式是,在本地环境使用 interactive 方式设置固定的简短密码,在线上环境使用 auto 方式生成随机密码。这里我们采用auto的方式做演示。执行:
./elasticsearch-setup-passwords auto
按Y键确认后,然后系统就会随机生成各个用户的密码,我们这里将kibana_system和elastic两个用户的密码先保存下来。
02
—
为Kibana设置密码
进入Kibana的主目录,编辑配置文件:
vim config/kibana.yml
将下面这两项设置为刚才kibana_system用户的新密码即可:
elasticsearch.username: "kibana_system"
elasticsearch.password: "password"
然后重启Kibana。后台启动kibana的方式为:
nohup bin/kibana &
之后进入界面就需要认证了。输入elastic用户名和密码,就可以进入了。
03
—
保管密码
我们配置好密码后,就需要在代码中通过相关的Client API去连接 elasticsearch,而最简单直接的方式可能就是将密码明文硬编码到代码中。如果代码所在的仓库是public访问的,那么很有可能会被泄露造成安全隐患。所以我们尽量避免在代码中出现那些可能具有公网访问安全隐患的密码(password)或密钥(secret)等的字面量(例如微信公众平台的app_id和app_secret)。
那么这些密文怎么存储呢,本站目前采用的方式是将密文信息存储在MySQL中的一张配置表中,需要的时候从库里读取。由于MySQL的数据是不会被提交到代码仓库的,所以一定程度上可以增强安全性。
除了存储在数据库,类似的方法也可以通过读取服务器本地配置文件或系统环境变量的方式,来确保重要信息不被泄露。