• Zookeeper的未授权访问漏洞解决


    这里用的是用户名密码的方式,需用别的方式请参考下面地址
    附大佬链接:(有三种解决方法)https://www.cnblogs.com/ilovena/p/9484522.html
    首先介绍下znode的5种操作权限:

    CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)

    注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

    身份的认证有4种方式:

    world:默认方式,相当于全世界都能访问

    auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)

    digest:即用户名:密码这种方式认证,这也是业务系统中最常用的

    ip:使用Ip地址认证

    本文以digest认证方式展开说明。我们在zk的客户端可以进行节点权限的查看和设置。

    [root@master ~]# /usr/local/zookeeper-3.4.14/bin/zkCli.sh -server 192.168.35.6:2181     #登录到zookeeper
    WATCHER::
    
    WatchedEvent state:SyncConnected type:None path:null
    [zk: 192.168.35.6:2181(CONNECTED) 0] 
    [zk: 192.168.35.6:2181(CONNECTED) 0] create /zmc data        
    Created /zmc
    [zk: 192.168.35.6:2181(CONNECTED) 1] getAcl /zmc
    'world,'anyone
    : cdrwa
    [zk: 192.168.35.6:2181(CONNECTED) 2] addauth digest user:password          #创建用户名和密码
    [zk: 192.168.35.6:2181(CONNECTED) 3] setAcl /zmc auth:user:password:cdrwa  #给创建的目录授权用户名和密码
    cZxid = 0x500000102
    ctime = Wed Jun 10 18:04:18 CST 2020
    mZxid = 0x500000102
    mtime = Wed Jun 10 18:04:18 CST 2020
    pZxid = 0x500000102
    cversion = 0
    dataVersion = 0
    aclVersion = 1
    ephemeralOwner = 0x0
    dataLength = 4
    numChildren = 0
    [zk: 192.168.35.6:2181(CONNECTED) 4] getAcl /zmc           
    'digest,'user:tpUq/4Pn5A64fVZyQ0gOJ8ZWqkY=
    : cdrwa
    
    [zk: 192.168.35.6:2181(CONNECTED) 5] ls /zmc
    []
    [zk: 192.168.35.6:2181(CONNECTED) 6] 

    从上述操作可以看出,zk新创建的znode默认访问方式为world。我们通过addauth和setAcl给/test节点设置访问权限为digest,操作权限为cdrwa,用户名为user,密码为password。

    当然,我们使用getAcl是无法获取可访问用户test的明文密码的(要是可以获取明文密码,不又是个漏洞嘛~~)。

    另启zk客户端,执行ls /test,发现当前用户已经无法访问/test节点,提示信息为“Authentication is not valid”。解决方法就是addauth添加认证用户了,并且必须使用用户名和密码明文进行认证。

    #登录到另一个zookeeper
    [root@slave1 ~]# /usr/local/zookeeper-3.4.14/bin/zkCli.sh -server 192.168.35.6:2181
    WATCHER::
    
    WatchedEvent state:SyncConnected type:None path:null
    [zk: 192.168.35.6:2181(CONNECTED) 0] ls /zmc        #没有授权,查看失败
    Authentication is not valid : /zmc
    [zk: 192.168.35.6:2181(CONNECTED) 1] addauth digest user:password      #授权成功
    [zk: 192.168.35.6:2181(CONNECTED) 2] ls /zmc                           #查看成功
    []
    
    [zk: 192.168.35.6:2181(CONNECTED) 3] getAcl /zmc
    'digest,'user:tpUq/4Pn5A64fVZyQ0gOJ8ZWqkY=
    : cdrwa
    其他zookeeper集群也一样
    [root@slave1 ~]# /usr/local/zookeeper-3.4.14/bin/zkCli.sh -server 192.168.35.7:2181
    WATCHER::
    
    WatchedEvent state:SyncConnected type:None path:null
    [zk: 192.168.35.7:2181(CONNECTED) 0] ls /zmc         #没有授权,查看失败
    Authentication is not valid : /zmc
    [zk: 192.168.35.7:2181(CONNECTED) 1] addauth digest user:password      #授权成功
    [zk: 192.168.35.7:2181(CONNECTED) 2] ls /zmc                           #查看成功
    []
    
    [zk: 192.168.35.7:2181(CONNECTED) 3] getAcl /zmc
    'digest,'user:tpUq/4Pn5A64fVZyQ0gOJ8ZWqkY=
    : cdrwa

        注意:给/路径加授权,并没有给/路径底下的目录加授权,此时直接访问/路径底下的目录是可以直接查看成功的,例如现在zookeerper有/demo1,/demo2两个路径,给setAcl / auth:user:password:cdrwa,之后通过zk客户端连接zk,没授权的话不可以ls /路径,但是可以直接访问/demo1,/demo2,如果需要对/demo1加认证需要setAcl /demo1 auth:user:password:cdrwa。

    去除授权的话  直接 setAcl 路径 world:anyone:cdrwa

    参考:https://blog.csdn.net/weixin_45858439/article/details/106680860

  • 相关阅读:
    linux安装教程
    html学习
    vscode编程nodejs初始安装
    Python 字符串前面加u,r,b的含义
    vs code中自动添加注释插件koroFileHeader
    *args和**kwargs用法
    python中map函数的用法
    Python中虚拟环境venv的基本用法
    ubuntu下安装git提示无root权限
    git连接gitee笔记
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/13500173.html
Copyright © 2020-2023  润新知