ZooKeeper设置ACL权限控制,删除权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper设置ACL权限控制,删除权限相关的知识,希望对你有一定的参考价值。

参考技术A

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

Zookeeper的ACL通过scheme:id:permissions来构成权限
scheme这边主要用到4种方式:
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用Ip地址认证

这次项目让设置一下dubbo连接zookeper的权限问题,于是看到了设置ACL权限,找到zookeeper下的bin文件夹,打开zk服务,启动./zkCli.sh

如果在dubbo中没有指定分组的话,dubbo会默认生成一个分组dubbo,也就是在zookeeper下面会有个子节点dubbo

1)增加一个认证用户
addauth digest 用户名:密码明文
eg:addauth digest user1:password1
2)设置权限
setAcl /path auth:用户名:密码明文:权限
eg. setAcl /test auth:user1:password1:cdrwa
3)查看Acl设置
getAcl /path

在添加用户之前,查看一下zookeper的节点信息,然后创建一个新的节点用来添加用户(使用绝对路径 要添加数据)

如果不加之前配置的认证用户

setAcl /path digest:用户名:密码密文:权限

注:这里的加密规则是SHA1加密,然后base64编码。

经过上面的过程结果还是不能绕过zookeeper未授权访问漏洞,经测试可以在其他服务器上通过echo envi|nc + ip + 端口 访问到zk的信息

因为zookeeper会默认启动这几个具有world和cdrwa权限的znode,“/” "/zookeeper" "/zookeeper/config"和"/zookeeper/quota"(根据zookeeper的版本不同可能存在不同,并且这几个节点虽然具有world和cdrwa权限,但是是无法删除的,不知道为什么,好在我们可以给它设置ACL列表。另外,官网对着几个节点也没有特别说明,估计和zk本身的一些配置相关吧,不删除最好)。就是这几个znode,会导致你的产品无法通过安全工具的漏洞扫描,解决办法也是很简单的,用我们前面说过的zk.setACL为这几个节点设置权限就OK了,千万别忘记根节点"/"了。

这里之所以设置完zookeeper节点还要设置quota
是因为 znode的ACL是相互独立的 。也就是说,任意不同节点可以用不同的acl列表,互不影响,并且 ACL是不可被继承的
好了,到这里,才是真正的解决了这个未授权访问漏洞问题了。

找到zookeeper的日志地址,把日志删除就行了,或者 delete /节点
linux环境下也可以使用命令,查询日志地址

参考博客:
https://blog.csdn.net/hekf2010/article/details/78844609
https://blog.csdn.net/wuxintdrh/article/details/73433283
https://www.cnblogs.com/ilovena/p/9484522.html

Zookeeper 客户端之ACL权限访问控制

Zookeeper ACL权限简单说明

Zookeeper 客户端操作节点五种权限:ACL(Access Control Lists)

  • CREATE:创建当前节点的子节点
  • READ:获取节点数据和子节点列表
  • WRITE:更新节点数据
  • DELETE:删除子节点的权限
  • ADMIN:设置节点ACL的权限。
    其中CREATE和DELETE这两种权限都是针对子节点的权限控制。

注意: 对应增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

ZooKeeper提供了如下几种验证模式(scheme):

  • digest:Client端由用户名和密码验证,譬如user:password,digest的密码生成方式是Sha1摘要的base64形式
  • auth:不使用任何id,代表任何已确认用户。
  • ip:Client端由IP地址验证,譬如172.2.0.0/24
  • world:固定用户为anyone,为所有Client端开放权限(默认)
  • super:在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)
     

 Zookeeper 客户端实践之新增用户并设置访问权限

1)增加一个认证用户
      addauth digest 用户名:密码明文
      eg. addauth digest user1:password1
2)设置权限
     setAcl /path auth:用户名:密码明文:权限
     eg. setAcl /test auth:user1:password1:cdrwa
3)查看Acl设置
     getAcl /path

Zookeeper 客户端实践之创建IP白名单

1)设置IP白名单,格式:setAcl 路径 ip:xxx.xxx.xxx.xx1:权限,ip:xxx.xxx.xxx.xx2:权限

     eg   setAcl /zkaa ip:127.0.0.1:cdrwa,ip:192.168.1.73:cdrwa

     注意:在设置IP白名单时,将本机ip 127.0.0.1也加上,让本机也可以访问及修改,否则到时本机服务器都无法进行查看及修改,到时会比较麻烦

Zookeeper 客户端实践之默认访问

1)ZooKeeper 默认访问,格式:setAcl 路径 world:anyone:cdrwa

eg setAcl /zkee world:anyone:cdrwa   # 设置/zkee 默认权限访问

eg getAcl /zkee  #获取/zkee 节点权限信息,使用默认权限访问

以上是关于ZooKeeper设置ACL权限控制,删除权限的主要内容,如果未能解决你的问题,请参考以下文章

ZooKeeper设置ACL权限控制

Zookeeper 客户端之ACL权限访问控制

ZooKeeper系列—— ACL 权限控制

Zookeeper:acl权限控制

Zookeeper 节点权限控制ACL详解

Zookeeper 节点权限控制ACL详解