进入到安装目录:/wt/zookeeper/zookeeper1 建立和zookeeper服务端的连接

sh bin/zkCli.sh 或者 ./zkCli.sh

1 --查询子节点列表   ls /

增强版的ls /test       ls2 /

2--通过getAcl命令可以发现,刚创建的节点,默认是 world,anyone的认证方式,具有cdrwa所有权限

getAcl node_1 不合适添加/ etAcl /node_1

节点权限是world,也就是默认权限,为所有client端开放,这样肯定是不安全的

 

zookeeper支持sasl zookeeper setacl_zookeeper

1--auth 模式进行权限控制 方式一:(推荐)

3. auth加密形式 (还是依赖以上创建的test节点进行权限控制)
4. 为节点创建auth权限认证方式(drawc为上述具体操作权限)
setAcl /test auth:user:123:drawc
5. 登陆解密流程
	1. 创建用户上下文
	addauth digest user:123
	2. 设置登陆
	setAcl /test auth:user:123:drawc
6. 现在看一下是否能访问得了该节点,发现是没有问题的,因为现在权限上下文中是包含user:123 的信息的
ls /test
7. 现在看一下/test节点的权限信息
getAcl /test

1)增加一个认证用户

addauth digest wen:123456789

2)设置权限--/zookeeper/quota

setAcl /zookeeper auth:wen:123456789:cdrwa 再次执行: setAcl / auth:wen:123456789:cdrwa

3)查看权限

getAcl /zookeeper 再次执行: getAcl /

zookeeper支持sasl zookeeper setacl_运维_02

退出客户端 quit 重新连接客户端 ./zkCli.sh ls /zookeeper

 

zookeeper支持sasl zookeeper setacl_zookeeper支持sasl_03

会发现没有权限进行访问,此时进行登陆、授权访问该节点

8. 设置权限上下文 addauth digest unipay:suorui@157 9. 设置节点访问权限 setAcl /zookeeper auth:unipay:suorui@157:cdrwa 10. 访问test节点 get /node_1 11. 查看节点 ls /node_1 查看权限 getAcl /zookeeper

zookeeper支持sasl zookeeper setacl_duboo_04

 

2 --digest加密形式( 测试失败)

digest加密模式相对于auth来说要稍微麻烦一些,需要对要设置的密码进行BASE64(SHA1(password))的处理

  1. 首先,先把之前创建的测试节点干掉把,在创建一个没有权限控制的测试节点

delete /test 或者 rmr /test create /test mytest get /test

 

  1. 生成一个符合degist的密码(设置的密码是password哟)

echo -n zhaolei:zhao@157 | openssl dgst -binary -sha1 | openssl base64 #记录下生成随机密码

 

3. 为节点设置degist权限(这回不需要设置上下文)

password替换为生成的base64的编码 setAcl /test digest:user:tpUq/4Pn5A64fVZyQ0gOJ8ZWqkY=:drawc

 

查看节点权限后访问一下,发现是访问不了的 getAcl /test get /test 接下来设置一下权限再访问 addauth digest user:password

 

zookeeper支持sasl zookeeper setacl_zookeeper支持sasl_05

3--ip权限模式

还是刚才的test节点,删除后重新创建一个测试节点

delete /test create /test mytest get /test

设置节点访问权限为ip模式,现在有个小问题是在设置ip模式的时候呢,localhost是没办法设置的,所以本地要设置成127.0.0.1,所以我们在客户端连接zksercer的时候呢,要连接成127.0.0.1

connect 127.0.0.1:2181 #端口是安装时候端口

 

zookeeper支持sasl zookeeper setacl_duboo_06

查看节点 ls / 接下来对节点设置ip访问(安装的服务器和连接的电脑ip一定要设置 ,否则访问不了了就)) setAcl /test ip:127.0.0.1:drawc,ip:135.152.16.204:drawc

zookeeper支持sasl zookeeper setacl_zookeeper支持sasl_07

 

zookeeper支持sasl zookeeper setacl_JAVA_08

 

 

4--World方案:

setAcl /test world:anyone:cdrwa

 

 

5、java客户单实例:

import java.io.IOException; import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; import com.zookeeper.utils.CommonParams; public class Zookeeper_Acl_Create extends CommonParams implements Watcher { private static CountDownLatch latch = new CountDownLatch(1); private static CountDownLatch countDownLatch = new CountDownLatch(1); private static ZooKeeper zk = null; public void syncInit() { try { zk = new ZooKeeper(CONNECTION_IP, 5000, new Zookeeper_Acl_Create()); latch.await(); zk.addAuthInfo("digest", "username:password".getBytes()); zk.create("/act", "init".getBytes(), Ids.CREATOR_ALL_ACL, CreateMode.EPHEMERAL); ZooKeeper zk3 = new ZooKeeper(CONNECTION_IP, 5000, null); zk3.addAuthInfo("digest", "username:password".getBytes()); String value2 = new String(zk3.getData("/act", false, null)); System.out.println("zk3有权限进行数据的获取" + value2); ZooKeeper zk2 = new ZooKeeper(CONNECTION_IP, 5000, null); zk2.addAuthInfo("digest", "super:123".getBytes()); zk2.getData("/act", false, null); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (KeeperException e) { System.out.println("异常:" + e.getMessage()); System.out.println("zk2没有权限进行数据的获取"); countDownLatch.countDown(); } } @Override public void process(WatchedEvent event) { if (KeeperState.SyncConnected == event.getState()) { if (event.getType() == EventType.None && null == event.getPath()) { latch.countDown(); } } } public static void main(String[] args) throws InterruptedException { Zookeeper_Acl_Create acl_Create = new Zookeeper_Acl_Create(); acl_Create.syncInit(); countDownLatch.await(); } }

输出:

zk3有权限进行数据的获取init 异常:KeeperErrorCode = NoAuth for /act zk2没有权限进行数据的获取

 

遇到的坑:

1 连接通信启动报错:检查jdk环境变量或者在 :在zkCli.sh指定了下jdk

zookeeper支持sasl zookeeper setacl_运维_09

export JAVA_HOME=/app/jdk1.8.0_181
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH

启动状态没问题,但是报错,一直刷日志:chmod -R 777 data

3- 启动查询状态报错

zookeeper支持sasl zookeeper setacl_duboo_10

查看通信地址:如果都部署在本机:

cat /etc/hosts

差看下本机的ip配置多少 也就是 locallhost

server.1=127.0.0.1:2287:3387

server.2=127.0.0.1:2288:3388

server.3=127.0.0.1:2289:3389