说说Zookeeper中的ACL

Access Control List,简称ACL,即访问控制列表,在分布式系统中重要性是毋庸置疑的。

概述

传统的文件系统中,ACL分为两个维度,一个是属组,一个是权限,子目录/文件默认继承父目录的ACL。而在Zookeeper中,node的ACL是没有继承关系的,是独立控制的。Zookeeper的ACL,可以从三个维度来理解:一是scheme; 二是user; 三是permission,通常表示为scheme:id:permissions, 下面从这三个方面分别来介绍:

scheme

scheme对应于采用哪种方案来进行权限管理,zookeeper实现了一个pluggable的ACL方案,可以通过扩展scheme,来扩展ACL的机制。zookeeper-3.4.4缺省支持下面几种scheme:

  1. world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的
  2. auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)
  3. digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication
  4. ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段
  5. super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)
  6. 另外,zookeeper-3.4.4的代码中还提供了对sasl的支持,不过缺省是没有开启的,需要配置才能启用,具体怎么配置在下文中介绍。
    sasl: sasl的对应的id,是一个通过sasl authentication用户的id,zookeeper-3.4.4中的sasl authentication是通过kerberos来实现的,也就是说用户只有通过了kerberos认证,才能访问它有权限的node.

id

id与scheme是紧密相关的,具体的情况在上面介绍scheme的过程都已介绍,这里不再赘述。

permission

zookeeper目前支持下面一些权限:

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

说说Zookeeper中的ACL》上有2条评论

  1. Pingback引用通告: ZooKeeper原理及使用 | 精彩每一天

  2. Pingback引用通告: PHP中zookeeper的类与方法 | 精彩每一天

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>