3.ZooKeeper的acl权限控制「第二章 ZooKeeper使用」「架构之路ZooKeeper理论和实战」

ZooKeeperACL权限控制, 可以控制节点的读写操作, 保证数据的安全性,ZookeeperACL权限设置分为3部分组成, 分别是:权限模式(Scheme ) 授权对象I(ID) 权限信息(Permission ) 。最终组成一条例如“scheme:id:permission"格式的ACL请求信息。

一、ACL组成

ZookeeperACL权限设置分为3部分组成, 分别是:权限模式(Scheme ) 授权对象I(ID) 权限信息(Permission ) 。最终组成一条例如“scheme:id:permission"格式的ACL请求信息。下面我们具体看一下这3部分代表什么意思:

(1)权限模式(scheme):授权的策略。

(2)权限对象(id):授权的对象。

(3)权限(permission):授予的权限。

1.1 权限模式(Scheme)

权限模式(scheme):授权的策略

模式

描述

world

这种模式方法的授权对象只有一个anyone,代表登录到服务器的所有客户端都能对该节点执行某种权限

ip

对连接的客户端使用IP地址认证方式进行认证

auth

使用以添加认证的用户进行认证

digest

使用 用户:密码方式验证


1.2
权限类型(permission)

权限(permission):授予的权限:

类型

ACL简写

描述

read

r

读取节点及显示子节点列表的权限

write

w

设置节点数据的权限

create

c

创建子节点的权限

delete

d

删除子节点的权限

admin

a

设置该节点ACL权限的权限


1.3
授权的命令

         授权的命令如下:

命令

用法

描述

getAcl

getAcl path

读取节点的ACL

setAcl

setAcl path acl

设置节点的ACL

create

create path data acl

创建节点时设置acl

addAuth

addAuth scheme auth

添加认证用户,类似于登录操作


1.4 ZK ACL
的特性

(1)ZooKeeper的权限控制是基于znode节点的,需要对每个节点设置权限。

(2)每个znode支持设置多种权限控制方案和多个权限。

(3)子节点不会继承父节点的权限。客户端无法访问某个节点,但是可以访问他的子节点。

二、ACL实操

         接下来我们具体看看一些小栗子,以此来对于ACL有一个更深的理解。

2.1 生成授权ID

         生成授权ID(账号:密码)有两种方式,一种就是通过代码提供的生成类,一种就是通过Shell命令。

(1)代码生成ID:

  1. public void generate() throws NoSuchAlgorithmException {
  2. String sId = DigestAuthenticationProvider.generateDigest("angel:123456");
  3. System.out.println(sId);
  4. }

(2)在xshell中生成:

echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64

         示例:

echo -n angel:123456 | openssl dgst -binary -sha1 | openssl base64

         返回的结果是:

5qPtfHTjrZrZ4DGSxBY8+G6AhiM=

2.2设置ACL的两种方式

(1)节点创建的同时设置ACL:

  1. create [-s] [-e] [-c]   path [data] [acl]

例子:

  1. create /test1 'hello'  digest:angel:5qPtfHTjrZrZ4DGSxBY8+G6AhiM=:cdrwa

(2)用setAcl 设置:

  1. setAcl /test1 digest:angel:5qPtfHTjrZrZ4DGSxBY8+G6AhiM=:cdrwa





2.2 授权访问

         添加授权信息后,不能直接访问,直接访问将报如下异常:

访问前需要添加授权信息:

$ addauth digest angel:123456

2.3 auth明文授权

         另一种授权模式: auth 明文授权。

使用之前需要先:

addauth  digest username:password  

注册用户信息,后续可以直接用明文授权。举例说明:

  1. addauth digest wuqian:123456
  2. create /test2 'hello2' auth:wuqian:123456:cdwra
  3. get /test2

2.4 IP授权模式

  1. 方式1:setAcl /test3 ip:192.168.0.106:cdwra
  2. 方式2:create /test data ip:192.168.0.106:cdwra

多个指定IP可以通过逗号分隔,如 setAcl /test ip:IP1:rw,ip:IP2:a

2.5 关闭ACL

         可以通过系统参数zookeeper.skipACL=yes进行配置,默认是no,可以配置为true, 则配置过的ACL将不再进行权限检测。

         编辑配置启动文件 vim bin/zkServer.sh,然后添加启动参数-D:

         重启zkServer,然后在使用zkCli进行访问get /test1这时候就可以进行访问了。

2.6 super超级管理员模式

         这是一种特殊的Digest模式, 在Super模式下超级管理员用户可以对Zookeeper上的节点进行任何的操作,需要在启动了上通过JVM 系统参数开启:

格式如下:

-Dzookeeper.DigestAuthenticationProvider.superDigest=super:<base64encoded(SHA1(password))

         具体操作:

(1)生成base64加密的SHA1加密的密码:

echo -n admin:123456 | openssl dgst -binary -sha1 | openssl base64

         输出结果是:0uek/hZ/V9fgiM35b0Z2226acMQ=

(2)修改vim bin/zkServer.sh文件,添加JVM的系统参数:

-Dzookeeper.DigestAuthenticationProvider.superDigest=admin:0uek/hZ/V9fgiM35b0Z2226acMQ=

         重启zkServer,然后zkCli重新进入:


购买完整视频,请前往:http://www.mark-to-win.com/TeacherV2.html?id=287