zk004 - zk的ACL介绍

来源:互联网 发布:传智播客大数据第四期 编辑:程序博客网 时间:2024/05/21 14:49

传统的文件系统中,ACL分为两个维度,一个是属组,一个是权限,子目录/文件默认继承父目录的ACL。而在Zookeeper中,znode的ACL是没有继承关系的,是独立控制的。

zookeeper支持的权限

  • CREATE(c): 创建权限,可以在在当前node下创建child node
  • DELETE(d): 删除权限,可以删除当前的node
  • READ(r): 读权限,可以获取当前node的数据,可以list当前node所有的child nodes
  • WRITE(w): 写权限,可以向当前node写数据
  • ADMIN(a): 管理权限,可以设置当前node的permission

zookeeper ACL 的组成

Scheme:id:permission 比如: world:anyone:crdwa

  • Scheme: cheme对应于采用哪种方案来进行权限管理
  • Id: 权限被赋予的对象,比如ip或者某个用户
  • Permission: 权限,上面的crdwa,表示五个权限组合
  • 通过setAcl命令设置节点的权限
  • 节点的ACL无继承关系
  • getAcl可以查看节点的Acl信息

    ZooKeeper有如下几种内置的Schemes: world, auth, digest, ip .

world scheme

– Scheme:id:permission
– Id: 为固定的anyone,表示任何用户
– world:anyone:crdwa表示任何用户都具有crdwa权限

例子:

setAcl /zk-acl world:anyone:ca  getAcl /zk-acl

上述例子不设置读权限, 当调用getAcl会报 认证无效

auth scheme

  • Scheme:id:permission ,比如: auth:username:password:crdwa
  • 表示给认证通过的所有用户设置acl权限
  • 同时可以添加多个用户
  • 通过addauth 命令进行认证用户的添加
    • addauth digest :
  • Auth策略的本质就是digest
  • 如果通过addauth创建多组用户和密码,当使用setAcl修改权限时,所有的用户和密码的权限都会跟着修改
  • 通过addauth新创建的用户和密码组需要重新调用setAcl才会加入到权限组中去

例子:

addauth digest test1:123addauth digest test2:123create  /authpath 123 auth:test1:123:crdwaget /authpathgetAcl /authpath

digest

  • Scheme:id:permission ,比如: digest:username:password:crdwa
  • 指定某个用户及它的密码可以访问
  • 此处的username:password必须经过SHA-1和BASE64编码
    • BASE64(SHA1(username:password))
  • 通过addauth命令进行认证用户的添加
  • addauth digest :

例子:

create /digpath dddsetAcl /digpath digest:test1:ubmgtiw94At8IplZnri3fHnZhsA=:cdrwagetAcl /digpath

ip

  • Scheme:id:permission ,比如: ip:127.0.0.1:crdwa
  • 指定某个ip地址可以访问

super

在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)

  • 供运维人员维护节点使用
  • 有权限操作任何节点
  • 启动时,在命令参数中配置:
    • -Dzookeeper.DigestAuthenticationProvider.superDigest = admin:015uTByzA4zSglcmseJsxTo7n3c=
    • 打开zkCli.cmd(sh) 在命令行里增加配置.
    • 用户名和密码也需要通过sha1和base64编码
0 0
原创粉丝点击