ES(单机加集群)新增密码,解决Elasticsearch 未授权访问漏洞

单机版

新增密码
编辑配置文件 bin/elasticsearch.yml
新增配置

#开启密码验证
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
image.png

我们java程序访问试试
报错了,提示没有用户信息

Elasticsearch exception [type=security_exception, reason=missing authentication credentials for REST request [/seproject/_search?typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=query_then_fetch&batched_reduce_size=512&ccs_minimize_roundtrips=true]]

接下来,设置一下用户及密码
ES要先启动才能设置否则报错,如下图


image.png

启动ES

./elasticsearch -d

设置密码

./elasticsearch-setup-passwords interactive
image.png

这会访问需要密码了,输入刚才设置的密码就正常访问


image.png

java程序修改,新增用户及密码,密码放到配置里了

    RestHighLevelClient client() {
        RestClientBuilder build = RestClient.builder(createHosts()).setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
            @Override
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder builder) {
                return builder.setConnectTimeout(5000 * 1000) // 连接超时(默认为1秒)
                        .setSocketTimeout(6000 * 1000);// 套接字超时(默认为30秒)//更改客户端的超时限制默认30秒现在改为100分钟
            }
        });
        //加密码后增加
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
        build.setHttpClientConfigCallback((HttpAsyncClientBuilder httpAsyncClientBuilder) -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
       //加密码后增加
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(build);
        return restHighLevelClient;
    }

重启java应用再次访问,正常了

接下来看看Kibana,连不上了


image.png

配置Kibana config/kinana.yml
默认是注释掉的


image.png
elasticsearch.username: kibana
elasticsearch.password: password

使用刚才设置密码的用户登录


image.png
image.png

ES集群
首先至少是三个节点
1、生成证书(后面要用)
cd /home/elasticsearch-7.4.2/bin
./elasticsearch-certutil cert
回车,空密码(可以输入密码),回车


image.png

将elastic-certificates.p12 复制到三个节点下config

2、新增配置(三台都一样)
文件config/elasticsearch.yml
跟单机版差不多,增加了证书

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

3、重启集群
先停掉子节点,再停master
启动先起master,在起子节点
如果生产有访问,先停掉

4、设置密码(设置一台即可,会同步的)
可以自动设置密码
./elasticsearch-setup-passwords auto
copy密码保存
验证一下密码生效没有
curl http://10.192.32.158:9200
curl --user elastic:密码 http://10.192.32.158:9200

5、Kinana配置并重启
证书转换(elastic-certificates.p12 转换成elastic-certificates.pem)

openssl pkcs12 -in elastic-certificates.p12 -out elastic-certificates.pem -nodes

得到elastic-certificates.pem ,复制到kinana config下
修改配置(config/kinana.yml)


image.png

杀进程 重启(nohup ./kibana --allow-root &)

可以登录访问了,用户就是刚才设置过密码的用户,部分权限不够,使用elastic

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容