阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Zookeeper中的ACL简述

187次阅读
没有评论

共计 3290 个字符,预计需要花费 9 分钟才能阅读完成。

Access Control 在分布式系统中重要性是毋庸置疑的,今天这篇文章来介绍一下 Zookeeper 中的 Access Control(ACL)。

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

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

      • world: 它下面只有一个 id, 叫 anyone, world:anyone 代表任何人,zookeeper 中对所有人有权限的结点就是属于 world:anyone 的
      • auth: 它不需要 id, 只要是通过 authentication 的 user 都有权限(zookeeper 支持通过 kerberos 来进行 authencation, 也支持 username/password 形式的 authentication)
      • digest: 它对应的 id 为 username:BASE64(SHA1(password)),它需要先通过 username:password 形式的 authentication
      • ip: 它对应的 id 为客户机的 IP 地址,设置的时候可以设置一个 ip 段,比如 ip:192.168.1.0/16, 表示匹配前 16 个 bit 的 IP 段
      • super: 在这种 scheme 情况下,对应的 id 拥有超级权限,可以做任何事情(cdrwa)

    另外,zookeeper-3.4.4 的代码中还提供了对 sasl 的支持,不过缺省是没有开启的,需要配置才能启用,具体怎么配置在下文中介绍。

    • sasl: sasl 的对应的 id,是一个通过 sasl authentication 用户的 id,zookeeper-3.4.4 中的 sasl authentication 是通过 kerberos 来实现的,也就是说用户只有通过了 kerberos 认证,才能访问它有权限的 node.

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

    (3)permission: zookeeper 目前支持下面一些权限:

    • CREATE(c): 创建权限,可以在在当前 node 下创建 child node
    • DELETE(d): 删除权限,可以删除当前的 node
    • READ(r): 读权限,可以获取当前 node 的数据,可以 list 当前 node 所有的 child nodes
    • WRITE(w): 写权限,可以向当前 node 写数据
    • ADMIN(a): 管理权限,可以设置当前 node 的 permission
  • 2. 实现
    如前所述,在 zookeeper 中提供了一种 pluggable 的 ACL 机制。具体来说就是每种 scheme 对应于一种 ACL 机制,可以通过扩展 scheme 来扩展 ACL 的机制。在具体的实现中,每种 scheme 对应一种 AuthenticationProvider。每种 AuthenticationProvider 实现了当前机制下 authentication 的检查,通过了 authentication 的检查,然后再进行统一的 permission 检查,如此便实现了 ACL。所有的 AuthenticationProvider 都注册在 ProviderRegistry 中,新扩展的 AuthenticationProvider 可以通过配置注册到 ProviderRegistry 中去。下面是实施检查的具体实现:
void checkACL(ZooKeeperServer zks, List<acl> acl, int perm,
    List<id> ids) throws KeeperException.NoAuthException {
  if (skipACL) {
    return;
  }
  if (acl == null || acl.size() == 0) {
    return;
  }
  for (Id authId : ids) {
    if (authId.getScheme().equals("super")) {
      return;
    }
  }
  for (ACL a : acl) {
    Id id = a.getId();
    if ((a.getPerms() & perm) != 0) {
      if (id.getScheme().equals("world")
          && id.getId().equals("anyone")) {
        return;
      }   
      AuthenticationProvider ap = ProviderRegistry.getProvider(id
          .getScheme());
      if (ap != null) {
        for (Id authId : ids) {
          if (authId.getScheme().equals(id.getScheme())
              && ap.matches(authId.getId(), id.getId())) {
            return;
          }   
        }   
      }   
    }   
  }
  throw new KeeperException.NoAuthException();
}
</id></acl>
  • 3. server 配置
    可以通过下面两种方式把新扩展的 AuthenticationProvider 注册到 ProviderRegistry:
    配置文件 :在 zookeeper 的配置文件中,加入 authProvider.$n=$classname 即可
    JVM 参数:启动 Zookeeper 的时候,通过 -Dzookeeper.authProvider.$n=$classname 的方式,把 AuthenticaitonProvider 传入
    在上面的配置中, $n 是为了区分不同的 provider 的一个序号,只要保证不重复即可,没有实际的意义,通常用数字 1,2,3 等
  • 4. 管理 ACL
    可以通过 zookeeper client 来管理 ACL, zookeeper 的发行包中提供了一个 cli 工具 zkcli.sh,可以通过它来进行 acl 管理,下面通过一些例子来说明 acl 管理的基本方法:

Zookeeper 中的 ACL 简述

ZooKeeper 学习总结  http://www.linuxidc.com/Linux/2016-07/133179.htm

Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper  http://www.linuxidc.com/Linux/2014-12/110352.htm

CentOS 6 安装 sheepdog 虚拟机分布式储存  http://www.linuxidc.com/Linux/2013-08/89109.htm

ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm

使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm

分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm

ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm

ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm

ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm

Zookeeper3.4.6 的安装 http://www.linuxidc.com/Linux/2015-05/117697.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136703.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3290字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中