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的客户端可以进行节点权限的查看和设置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | [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添加认证用户了,并且必须使用用户名和密码明文进行认证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #登录到另一个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集群也一样
1 2 3 4 5 6 7 8 9 10 11 12 13 | [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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2017-08-14 java反射获得泛型参数getGenericSuperclass():获取到父类泛型的类型
2017-08-14 (转) 密码学中的“盐值 Salt”
2017-08-14 (转)加密盐的意义和用途
2016-08-14 docker:从 tomcat 容器连接到 mysql 容器
2014-08-14 Ultra-QuickSort(poj 2299归并排序)