elasticsearch未授权访问,elasticsearch未授权访问getshell

http://www.itjxue.com  2023-01-05 19:59  来源:未知  点击次数: 

elasticsearch远程代码执行漏洞 怎么解决

建议腾讯电脑管家修复,系统漏洞经常被黑客利用传播恶意程序(如网页挂马),必须及时修复系统漏洞才能有效防止计算机在上网时被黑客入侵,不过如果安装了安全软件,并且漏洞介绍看起来不是那么严重的话,可以选择不修复。

Windows系统漏洞是指操作系统在开发过程中存在的技术缺陷,这些缺陷可能导致其他用户在未被授权的情况下非法访问或攻击计算机系统。因此,系统开发商一般每月都会发布最新的补丁用以修复新发现的漏洞。目前,腾讯电脑管家支持修复Windows操作系统漏洞和部分第三方软件漏洞。

Elasticsearch启动及问题解决

配置JDK环境变量

在文件最后添加:

写好后按esc进入底部命令模式,输入:wq保存并退出

使配置文件生效

命令:

如果提示shasum命令找不到就试试yum install perl-Digest-SHA 我运行后就好使了

中途提示 选y就好

启动命令:

访问浏览器loalhost:9200

按照上面的步骤安装、访问浏览器9200端口,很多时候是访问不了,这时候需要查看es的日志。

注:出于安全考虑,elasticsearch默认不允许以root账号运行。故需要创建一个用户

解决办法:

创建用户,切换到创建的用户,再运行。

注:系统没有创建过普通用户,需要使用adduser命令先创建普通用户,再切换到普通用户,在重启es前需要使用kill把启动的进程杀掉。

这是切换自己创建的用户后运行时,因为不是root,所以文件权限不够。

解决办法:

先切换到root用户登录,然后修改配置文件:

配置文件中添加以下内容: (注意带*)

记得修改完,先切换到自己创建的用户,再运行elasticsearch

解决办法:

先切换到root用户下,然后执行修改配置文件

( 没有这个文件的话:root用户下vim会自动创建一个新的;自己创建的用户下,不额外配置的话,vim没有权限创建 )

所以说,先切换到root用户下

文件中添加以下内容:

然后执行命令:

记得修改完,先切换到自己创建的用户,再运行elasticsearch

先切换到root用户下,然后执行修改配置文件

修改文件中内容:

2019-08-22 03:16:26,465 main ERROR RollingFileManager (/home/leyou/elasticsearch/logs/elasticsearch.log) java.io.FileNotFoundException: /home/leyou/elasticsearch/logs/elasticsearch.log (权限不够) java.io.FileNotFoundException: /home/leyou/elasticsearch/logs/elasticsearch.log (权限不够)

解决办法:

切换到root用户下,再cd 到 elasticsearch安装目录下,进行用户授权

2.6.1、本地 curl localhost:9200 成功访问

其它机器通过ip无法访问

解决办法:

开放防火墙9200端口

2.6.2、bootstrap启动 报错,关键字 secComp

secComp,而elasticsearch5.2.0以上的版本默认bootstrap。system_call_filter为true进行检测,所以导致检测失败,失败后会导致es不能启动。

文件中添加以下内容

第一步:通过命令:ps -ef|grep elasticsearch

第二步:通过命令: kill -9 进程号 关闭此进程。我的进程号为2912

第三步:重新启动es。命令:./elasticsearch -d

参考文档: ;

参考文档:

elasticsearch使用中的问题

目前主要通过插件的形式来控制:

常用的插件主要包括:elasticsearch-http-basic,search-guard,shield

配置名 默认值 说明

http.basic.enabled true 开关,开启会接管全部HTTP连接

http.basic.user "admin" 账号

http.basic.password "admin_pw" 密码

http.basic.ipwhitelist ["localhost", "127.0.0.1"] 白名单内的ip访问不需要通过账号和密码,支持ip和主机名,不支持ip区间或正则

http.basic.trusted_proxy_chains [] 信任代理列表

http.basic.log false 把无授权的访问事件添加到ES的日志

http.basic.xforward "" 记载代理路径的header字段名

第二步:shutdown你要升级的节点

第三步:升级重启该节点,并确认该节点重新加入到了集群中

第四步:重复2-3步,升级重启其它要升级的节点。

第五步:重启启动集群的shard均衡

1、内存优化

在bin/elasticsearch.in.sh中进行配置

修改配置项为尽量大的内存:

ES_MIN_MEM=8g

ES_MAX_MEM=8g

两者最好改成一样的,否则容易引发长时间GC(stop-the-world)

elasticsearch默认使用的GC是CMS GC

如果你的内存大小超过6G,CMS是不给力的,容易出现stop-the-world

建议使用G1 GC

注释掉:

JAVA_OPTS=”$JAVA_OPTS -XX:+UseParNewGC”

JAVA_OPTS=”$JAVA_OPTS -XX:+UseConcMarkSweepGC”

JAVA_OPTS=”$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=75″

JAVA_OPTS=”$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly”

修改为:

JAVA_OPTS=”$JAVA_OPTS -XX:+UseG1GC”

JAVA_OPTS=”$JAVA_OPTS -XX:MaxGCPauseMillis=200″

如果G1 GC优点是减少stop-the-world在几率,但是CPU占有率高。

需要更优化的性能,你可以参考

2、合理配置主节点和数据节点

配置文件:conf/elasticsearch.yaml

node.master: true

node.data: true

3、设置合理的刷新时间

建立的索引,不会立马查到,这是为什么elasticsearch为near-real-time的原因

需要配置index.refresh_interval参数,默认是1s。

你可以像

文件中一样,调用接口配置

也可以直接写到conf/elasticsearch.yaml文件中

index.refresh_interval:1s

这样所有新建的索引都使用这个刷新频率。

小贴士1:规划索引、分片 以及集群增长情况

ES使得创建大量索引和超大量分片非常地容易,但更重要的是理解每个索引和分片都是一笔开销。如果拥有太多的索引或分片,单单是管理负荷就会影响到ES集群的性能,潜在地也会影响到可用性方面。这里我们专注于管理负荷,但运行大量的索引/分片依然会非常显著地影响到索引和检索性能。

我们发现影响管理负荷的最大因素是集群状态数据的大小,因为它包含了集群中每个索引的所有mapping数据。我们曾经一度有单个集群拥有超过900MB的集群状态数据。该集群虽然在运行但并不可用。

让我们通过一些数据来了解到底发生了什么 。。。。。。

假如有一个索引包含50k的mapping数据(我们当时是有700个字段)。如果每小时生成一个索引,那么每天将增加24 x 50k的集群状态数据,或者1.2MB。如果需要在系统中保留一年的数据,那么集群状态数据将高达438MB(以及8670个索引,43800个分片)。如果与每天一个索引(18.25MB,365个索引,1825个分片)作比较,会看到每小时的索引策略将会是一个完全不同的境况。

幸运的是,一旦系统中有一些真实数据的话,实际上非常容易做这些预测。我们应当能够看到集群必须处理多少状态数据和多少索引/分片。在上到生产环境之前真的应该演练一下,以便防止凌晨3:00收到集群挂掉的电话告警。

小贴士3: 内存设置

Linux把它的物理RAM分成多个内存块,称之为分页。内存交换(swapping)是这样一个过程,它把内存分页复制到预先设定的叫做交换区的硬盘空间上,以此释放内存分页。物理内存和交换区加起来的大小就是虚拟内存的可用额度。

内存交换有个缺点,跟内存比起来硬盘非常慢。内存的读写速度以纳秒来计算,而硬盘是以毫秒来计算,所以访问硬盘比访问内存要慢几万倍。交换次数越多,进程就越慢,所以应该不惜一切代价避免内存交换的发生。

ES的mlockall属性允许ES节点不交换内存。(注意只有Linux/Unix系统可设置。)这个属性可以在yaml文件中设置:

bootstrap.mlockall: true

在5.x版本中,已经改成了bootstrap.memory_lock: true.

mlockall默认设置成false,即ES节点允许内存交换。一旦把这个值加到属性文件中,需要重启ES节点才可生效。可通过以下方式来确定该值是否设置正确:

curl

如果你正在设置这个属性,请使用-DXmx选项或ES_HEAP_SIZE属性来确保ES节点分配了足够的内存。

Elasticsearch默认使用服务发现(Zen discovery)作为集群节点间发现和通信的机制。Azure、EC2和GCE也有使用其他的发现机制。服务发现由discovery.zen.*开头的一系列属性控制。

在0.x和1.x版本中同时支持单播和多播,且默认是多播。所以要在这些版本的ES中使用单播,需要设置属性discovery.zen.ping.multicast.enabled为false。

从2.0开始往后服务发现就仅支持单播了。

首先需要使用属性discovery.zen.ping.unicast.hosts指定一组通信主机。方便起见,在集群中的所有主机上为该属性设置相同的值,使用集群节点的名称来定义主机列表。

属性discovery.zen.minimum_master_nodes决定了有资格作为master的节点的最小数量,即一个应当“看见”集群范围内运作的节点。如果集群中有2个以上节点,建议设置该值为大于1。一种计算方法是,假设集群中的节点数量为N,那么该属性应该设置为N/2+1。

初步判断该设置可以有效防止脑裂问题

小贴士5:当心DELETE _all

必须要了解的一点是,ES的DELETE API允许用户仅仅通过一个请求来删除索引,支持使用通配符,甚至可以使用_all作为索引名来代表所有索引。例如:

curl -XDELETE ‘ */ ’

这个特性非常有用,但也非常危险,特别是在生产环境中。在我们的所有集群中,已通过设置action.destructive_requires_name:true来禁用了它。

这项配置在1.0版本中开始引用,并取代了0.90版本中使用的配置属性disable_delete_all_indices。

小贴士6:使用Doc Values

2.0及以上版本默认开启Doc Values特性,但在更早的ES版本中必须显式地设置。当进行大规模的排序和聚合操作时,Doc Values相比普通属性有着明显的优势。本质上是将ES转换成一个列式存储,从而使ES的许多分析类特性在性能上远超预期。

为了一探究竟,我们可以在ES里比较一下Doc Values和普通属性。

当使用一个普通属性去排序或聚合时,该属性会被加载到属性数据缓存中。一个属性首次被缓存时,ES必须分配足够大的堆空间,以便能保存每一个值,然后使用每个文档的值逐步填充。这个过程可能会耗费一些时间,因为可能需要从磁盘读取他们的值。一旦这个过程完成,这些数据的任何相关操作都将使用这份缓存数据,并且会很快。如果尝试填充太多的属性到缓存,一些属性将被回收,随后再次使用到这些属性时将会强制它们重新被加载到缓存,且同样有启动开销。为了更加高效,人们会想到最小化或淘汰,这意味着我们的属性数量将受限于此种方式下的缓存大小。

相比之下,Doc Values属性使用基于硬盘的数据结构,且能被内存映射到进程空间,因此不影响堆使用,同时提供实质上与属性数据缓存一样的性能。当这些属性首次从硬盘读取数据时仍然会有较小的启动开销,但这会由操作系统缓存去处理,所以只有真正需要的数据会被实际读取。

Doc Values因此最小化了堆的使用(因为垃圾收集),并发挥了操作系统文件缓存的优势,从而可进一步最小化磁盘读操作的压力。

(责任编辑:IT教学网)

更多