一个ZooKeeper 的节点(znode)存储两部分内容:数据和状态,状态中包含ACL信息。创建一个znode 会产生一个ACL 列表。
(1)列表中每个ACL 包括:
①权限:perms
②验证模式:scheme
③具体内容:Ids
(2)ZooKeeper 提供了如下几种验证模式:
①Digest:Client端由用户名和密码验证,譬如user:pwd
②Host:Client端由主机名验证,譬如localhost
③Ip:Client端由IP地址验证,譬如172.2.0.0/24
④World:固定用户为anyone,为所有Client端开放权限
⑤auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
(3)权限许可集合如下,注意的是,exists操作和getAcl操作并不受ACL许可控制,因此任何客户端可以查询节点的状态和节点的ACL。
①Create:允许对子节点Create 操作
②Read:允许对本节点GetChildren 和GetData 操作
③Write :允许对本节点SetData 操作
④Delete :允许对子节点Delete 操作
⑤Admin :允许对本节点setAcl 操作
(4)Znode ACL 权限用一个int 型数字perms 表示,perms 的5 个二进制位分别表示:
setacl、delete、create、write、read。
例如:
① adcwr=0x1f
② ----r=0x1
③ a-c-r=0x15
与 ACL 相关的结构与常量:
struct Id 结构为:
struct Id { char * scheme; char * id; };
struct ACL 结构为:
struct ACL { int32_t perms; struct Id id; };
struct ACL_vector 结构为:
struct ACL_vector { int32_t count; struct ACL *data; };
参考:
 
zookeeper权限校验:等您坐沙发呢!