ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
zookeeper下载地址:
http://mirror.bit.edu.cn/apache/zookeeper/
传说中的zkClin.sh存在于apache-zookeeper-3.5.5-bin.tar.gz中:
windows下使用bash 运行zkCli.sh:
探测到zookeeper端口2181,可直接telnet登录并执行命令,或使用zkCli.sh -sever IP:PORT或者使用nc.exe 更加直观
如 echo stat| nc.exe IP PORT
相关命令摘抄如下:
四字命令Four Letter Words:
stat 查看状态信息
ruok 查看zookeeper是否启动
dump 列出没有处理的节点,临时节点
conf 查看服务器配置
cons 显示连接到服务端的信息
envi 显示环境变量信息
mntr 查看zk的健康信息
wchs 展示watch的信息
wchc和wchp 显示session的watch信息 path的watch信息
参考:
https://blog.csdn.net/dandandeshangni/article/details/80558383
https://blog.csdn.net/xiaolang85/article/details/13021339
安装参考:https://www.jianshu.com/p/ea0f11ab78c3
zookeeper存在未授权访问的问题,(详见https://www.cnblogs.com/xusweeter/p/8436195.html)
ZooKeeper的节点有5种操作权限:
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限
ZooKeeper的身份的认证有4种方式:
world:默认方式,相当于全世界都能访问
auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:使用Ip地址认证
二、解决思路:
1、world方式直接排除。
2、auth和digest通过用户名和密码方式可以有效进行权限控制,因应用中使用duboo和zookeeper做结合,有网友说Dubbo并没有实现认证的逻辑,实际测试发现确实无法进行注册。
报出如下错误:
java.lang.IllegalStateException: Failed to register
cause: org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /dubbo/com.common.crud.IEntityDao
参考资料:
https://yq.aliyun.com/articles/284281?utm_content=m_37169
3、最后只剩下了IP限制方式,通过IP白名单对连接ZK的客户端进行限制。
三、操作步骤:
因zookeeper不支持节点间权限的继承,所以需要对关键节点进行权限控制。
目前只对“/”、“/dubbo”、“/zookeeper”进行限制。
<ZooKeeper_HOME>/bin/ ./zkCli.sh -server ip:port setAcl / ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa setAcl /dubbo ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa setAcl /zookeeper ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa