一、ACL权限控制列表

针对节点可以设置相关读写等权限,目的为了保障数据安全性

权限permissions可以指定不同的权限范围以及角色

二、ACL命令行

getAcl:获取某个节点的acl权限信息

setAcl:设置某个节点的acl权限信息

addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密的形式存在的

三、ACL的构成

  • zk的acl通过【scheme:id:permissions】来构成权限列表
  • scheme:代表采用的某种权限机制
  • id:代表允许访问的用户
  • permissions:权限组合字符串

 1、scheme

  • world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:【permissions】
  • auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:passworld:【permissions】
  • digest:需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):【permissions】

auth与digest的区别就是,前者明文,后者密文,setAcl  /path  auth:lee:lee:cdrwa与set Acl /path digest:lee:BASE64(SHA1(password)):cdrwa是等价的,在通过addauth digest lee:lee后都能操作指定节点的权限

  •  ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如:ip:192.168.1.1:【permissions】
  • super:代表超级管理员,拥有所有的权限

2、permissions  权限字符串缩写crdwa

  • create:创建子节点
  • read:获取节点/子节点
  • write:设置节点数据
  • delete:删除子节点
  • admin:设置权限

 四、权限设置举例:

1、world:anyone:crdwa

如禁用删除权限

setAcl /xdsutest1/seq0000000001 world:anyone:crwa
cZxid = 0xe0000000c
ctime = Sat Jul 20 17:00:32 CST 2019
mZxid = 0xe00000010
mtime = Sat Jul 20 17:25:28 CST 2019
pZxid = 0xe0000000c
cversion = 0
dataVersion = 1
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] getAcl /xdsutest1/seq0000000001
'world,'anyone
: crwa
[zk: localhost:2181(CONNECTED) 8] create /xdsutest1/seq0000000001/666 whhh
Created /xdsutest1/seq0000000001/666
[zk: localhost:2181(CONNECTED) 9] delete /xdsutest1/seq0000000001/666
Authentication is not valid : /xdsutest1/seq0000000001/666

 2、

auth:user:pwd:crdwa

digest:user:BASE64(SHA1(password)):crdwa

addauth digest user:pwd

  [zk: localhost:2181(CONNECTED) 15] addauth digest xdsu:xdsu

[zk: localhost:2181(CONNECTED) 16] setAcl /xdsutest1/seq0000000001 auth:xdsu:xdsu:crdwa
cZxid = 0xe0000000c
ctime = Sat Jul 20 17:00:32 CST 2019
mZxid = 0xe00000010
mtime = Sat Jul 20 17:25:28 CST 2019
pZxid = 0xf00000008
cversion = 2
dataVersion = 1
aclVersion = 3
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 17] getAcl /xdsutest1/seq0000000001
'digest,'xdsu:BYxRIzx9MnAk2iBEDFRuoS1fYsM=
: cdrwa

ctrl+c退出后重新连接

[zk: localhost:2181(CONNECTED) 0] get /xdsutest1/seq0000000001
Authentication is not valid : /xdsutest1/seq0000000001

登录后可重新进行增删改查操作

[zk: localhost:2181(CONNECTED) 4] addauth digest xdsu:xdsu
[zk: localhost:2181(CONNECTED) 5] get /xdsutest1/seq0000000001
hh
cZxid = 0xe0000000c
ctime = Sat Jul 20 17:00:32 CST 2019
mZxid = 0xe00000010
mtime = Sat Jul 20 17:25:28 CST 2019
pZxid = 0xf00000008
cversion = 2
dataVersion = 1
aclVersion = 3
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 6] 

digest设置权限同理,不同的是密码密文

[zk: localhost:2181(CONNECTED) 6] setAcl /xdsutest1/seq0000000001 digest:xdsu:BYxRIzx9MnAk2iBEDFRuoS1fYsM=:crdwa
cZxid = 0xe0000000c
ctime = Sat Jul 20 17:00:32 CST 2019
mZxid = 0xe00000010
mtime = Sat Jul 20 17:25:28 CST 2019
pZxid = 0xf00000008
cversion = 2
dataVersion = 1
aclVersion = 4
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
[zk: localhost:2181(CONNECTED) 7] getAcl /xdsutest1/seq0000000001
'digest,'xdsu:BYxRIzx9MnAk2iBEDFRuoS1fYsM=
: cdrwa

 ip:192.168.1.1:crdwa

 super:超级管理员,拥有任何权限

1、修改zkServer.sh 增加super管理员

2、重启zkServer.sh

五、ACL的常用场景

开发/测试环境分离,开发者无权操作测试库的节点,只能看

生产环境上控制指定ip的服务可以访问相关节点,防止混乱