zookeeper权限校验

一个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权限校验

 

参考:

ZooKeeper权限管理机制

zookeeper的ACL权限控制

Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍)

Zookeeper之Acl权限管理中的坑

 
喜欢 0
分享