请选择 进入手机版 | 继续访问电脑版

zookeeper未授权漏洞的修复方法

[复制链接]
查看936 | 回复0 | 2019-7-25 18:02:15 | 显示全部楼层 |阅读模式
一、漏洞介绍

zookeeper默认是对所有人开放访问,由此引起的未授权漏洞导致zookeeper的数据有泄露、丢失的风险。

# cd /zookeeper目录/bin/
连接zookeeper:
# ./zkCli.sh -server 127.0.0.1:2181

查看目录:
  1. [zk: 127.0.0.1:2181(CONNECTED) 4] ls /
  2. [zookeeper]
  3. [zk: 127.0.0.1:2181(CONNECTED) 5] ls /zookeeper
  4. [quota]
  5. [zk: 127.0.0.1:2181(CONNECTED) 6] ls /zookeeper/quota
  6. []
复制代码
[zk: 127.0.0.1:2181(CONNECTED) 是zookeeper的连接标识(最后面跟一个数字),在后面输入命令,其他行是命令执行后的输出。从上面可以看出,zookeeper跟linux的目录结构一样。可以使用ls命令查看各个目录下面的内容。执行完ls命令后返回的结果放在中括号里面,并用逗号分隔。如果中括号里面是空白的,表示这个目录下面没有内容。


二、修复方法

修复zookeeper的未授权漏洞的方法,可以只允许特定的地址访问zookeeper(通过系统自带的防火墙,允许指定的地址访问zookeeper的端口,可以实现,设置方法参考以下链接:
https://www.51anidea.com/forum.php?mod=viewthread&tid=1014&extra=page%3D1),也可以给zookeeper加上访问密码。加了访问密码后,访问zookeeper前必须先验证密码。
本文介绍加访问密码的设置方法。

加密 /:
  1. [zk: 127.0.0.1:2181(CONNECTED) 1] setAcl / auth:zookeeper:lsWT8qZ/Hgaj:cdrwa
  2. cZxid = 0x0
  3. ctime = Thu Jan 01 08:00:00 CST 1970
  4. mZxid = 0x0
  5. mtime = Thu Jan 01 08:00:00 CST 1970
  6. pZxid = 0x0
  7. cversion = -1
  8. dataVersion = 0
  9. aclVersion = 1
  10. ephemeralOwner = 0x0
  11. dataLength = 0
  12. numChildren = 1
复制代码
在 连接标识符:[zk: 127.0.0.1:2181(CONNECTED)  后面输入命令。
下面介绍下加密的完整命令:
setAcl / auth:zookeeper:qsWT8qZ*Hgaj
setAcl 是加密的命令,后面跟上的 / 表示zookeeper的根目录,跟Linux的根目录 / 是一个意思。auth:后面跟用户名和密码,用户名和密码之间用冒号: 隔开。用户名密码即 zookeeper  qsWT8qZ*Hgaj
以上命令执行后,就把zookeeper的 / 目录给加密了。
加密了根目录 / ,那根目录下面的目录还需要加密吗?答案是需要。所以,要想给zookeeper的所有目录加上访问密码,就必须找出zookeeper的所有目录,包括子目录。然后一个一个地加密。查找目录的方法:一直执行ls命令,直到输出空的中括号为止。

验证:
  1. [zk: 127.0.0.1:2181(CONNECTED) 2] getAcl /
  2. 'digest,'zookeeper:8Xwg6qDV20zUTl8q0qlyHdByDXs=
  3. : cdrwa
复制代码
执行getAcl命令可以查看指定目录的权限。getAcl后面跟想要查看的目录。从上可以看出 zookeeper:8Xwg6qDV20zUTl8q0qlyHdByDXs= 是加密后的用户名和密码。说明已经加密成功了。
接下来按照上面的方法给所有的目录和子目录加上密码。

加密 /zookeeper:
  1. [zk: 127.0.0.1:2181(CONNECTED) 3] setAcl /zookeeper auth:zookeeper:lsWT8qZ/Hgaj:cdrwa
  2. cZxid = 0x0
  3. ctime = Thu Jan 01 08:00:00 CST 1970
  4. mZxid = 0x0
  5. mtime = Thu Jan 01 08:00:00 CST 1970
  6. pZxid = 0x0
  7. cversion = -1
  8. dataVersion = 0
  9. aclVersion = 1
  10. ephemeralOwner = 0x0
  11. dataLength = 0
  12. numChildren = 1
复制代码

验证/zookeeper:
  1. [zk: 127.0.0.1:2181(CONNECTED) 7] getAcl /zookeeper
  2. 'digest,'zookeeper:8Xwg6qDV20zUTl8q0qlyHdByDXs=
  3. : cdrwa
复制代码

加密 /zookeeper/quota:
  1. [zk: 127.0.0.1:2181(CONNECTED) 4] setAcl /zookeeper/quota auth:zookeeper:lsWT8qZ/Hgaj:cdrwa
  2. cZxid = 0x0
  3. ctime = Thu Jan 01 08:00:00 CST 1970
  4. mZxid = 0x0
  5. mtime = Thu Jan 01 08:00:00 CST 1970
  6. pZxid = 0x0
  7. cversion = 0
  8. dataVersion = 0
  9. aclVersion = 1
  10. ephemeralOwner = 0x0
  11. dataLength = 0
  12. numChildren = 0
复制代码

验证/zookeeper/quota:
  1. [zk: 127.0.0.1:2181(CONNECTED) 8] getAcl /zookeeper/quota
  2. 'digest,'zookeeper:8Xwg6qDV20zUTl8q0qlyHdByDXs=
  3. : cdrwa
复制代码

输入 quit 退出。

三、验证

登陆zookeeper 验证
# ./zkCli.sh -server 127.0.0.1:2181
用ls命令显示根目录下面的内容:
  1. [zk: 127.0.0.1:2181(CONNECTED) 0] ls /
  2. Authentication is not valid : /
复制代码
提示验证没通过。

输入用户密码,并显示根目录下面的内容:
  1. [zk: 127.0.0.1:2181(CONNECTED) 1] addauth digest zookeeper:lsWT8qZ/Hgaj
  2. [zk: 127.0.0.1:2181(CONNECTED) 2] ls /                                 
  3. [zookeeper]
复制代码
验证通过。addauth digest 命令跟上用户名:密码 表示输入访问zookeeper的账号密码。

那么,怎样去掉zookeeper的访问密码呢?以下就是方法:
  1. [zk: 127.0.0.1:2181(CONNECTED) 24] setAcl /dubbo world:anyone:cdrwa
  2. cZxid = 0x2713
  3. ctime = Thu Jul 05 21:56:15 CST 2018
  4. mZxid = 0x2713
  5. mtime = Thu Jul 05 21:56:15 CST 2018
  6. pZxid = 0x2726
  7. cversion = 4
  8. dataVersion = 0
  9. aclVersion = 3
  10. ephemeralOwner = 0x0
  11. dataLength = 0
  12. numChildren = 4
复制代码
setAcl命令跟上 要去掉访问密码的目录,后面再跟上 world:anyone:cdrwa 表示允许所有人访问该目录。




上一篇:zookeeper连接方法
下一篇:更改zookeeper.out日志的路径
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1249

主题

2736

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
70208
QQ