一、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的服务可以访问相关节点,防止混乱