权限acl介绍,acl的构成与id
acl是Access control lists 的缩写,也就是权限控制列表:
针对节点可以设置相关读写等权限,目的是为了保障数据安全性
权限permissions可以指定不同的权限范围以及角色
acl的构成:
zk的acl通过 [scheme:id:permissions] 来构成权限列表:
scheme:代表采用的某种权限机制
id:代表允许访问的用户
permissions:权限组合字符串
acl的构成-scheme,scheme有以下几种类型:
world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是 world:anyone:[permissions]
ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.77.130:[permissions]
auth:代表认证登录,需要注册用户获取权限后才可以登录访问,形式为 auth:userpassword:[permissions]
digest:需要对密码加密才能访问,组合形式为:digest:username:BASE64(SHA1(password)):[permissions]
auth与digest的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录。setAcl /path auth:lee:lee:cdrwa 与 setAcl /path digest:lee:BASE64(SHA1(password)):cdrwa是等价的,在通过 addauth digest lee:lee 后都能操作指定节点的权限。在实际情况中,digest要更为常用一些。
super:代表超级管理员,拥有所有的权限
acl的构成-permissions:
权限字符串缩写 crdwa :
CREATE:创建子节点权限
READ:访问节点/子节点权限
WRITE:设置节点数据权限
DELETE:删除子节点权限
ADMIN:管理员权限
acl命令:
getAcl 获取某个节点的acl权限信息
setAcl 设置某个节点的acl权限信息
addauth 输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密后的形式存在的
acl命令行world
使用 getAcl 命令获取某个节点的acl权限信息,示例:
[root@study-01 ~]# zkCli.sh
[zk: localhost:2181(CONNECTED) 5] create /testDir/testAcl test-data # 创建一个子节点
Created /testDir/testAcl
[zk: localhost:2181(CONNECTED) 6] getAcl /testDir/testAcl # 获取该节点的acl权限信息
'world,'anyone # 默认为world
: cdrwa
[zk: localhost:2181(CONNECTED) 7]
使用 setAcl 命令设置某个节点的acl权限信息,示例:
[zk: localhost:2181(CONNECTED) 7] setAcl /testDir/testAcl world:anyone:crwa # 设置该节点的acl权限
cZxid = 0x26
ctime = Mon Apr 23 17:28:30 CST 2018
mZxid = 0x26
mtime = Mon Apr 23 17:28:30 CST 2018
pZxid = 0x26
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
[zk: localhost:2181(CONNECTED) 8] getAcl /testDir/testAcl
'world,'anyone
: crwa # 设置成功后,该节点就少了d权限
[zk: localhost:2181(CONNECTED) 9] create /testDir/testAcl/xyz xyz-data # 创建子节点
Created /testDir/testAcl/xyz
[zk: localhost:2181(CONNECTED) 10] delete /testDir/testAcl/xyz # 删除该子节点
Authentication is not valid : /testDir/testAcl/xyz # 由于没有d权限