1.1、ACL权限控制:

使用scheme、id、permission 来标识,主要涵盖 3 个方面:

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

授权对象(id):授权的对象

权限(permission):授予的权限

1.2、Zookeeper ACL的特性:

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

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

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

1.3、权限模式

方案 描述

world 只有一个用户:anyone,代表登录zokeeper所有人(默认)

ip 对客户端使用IP地址认证

auth 使用已添加认证的用户认证

digest 使用“用户名:密码”方式认证

1.4、授予权限

create、delete、read、writer、admin也就是 增、删、改、查、管理权限,这5种权限简写为cdrwa,注意:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限。

权限 ACL简写 描述

create c 可以创建子节点

delete d 可以删除子节点(仅下一级节点)

read r 可以读取节点数据及显示子节点列表

write w 可以设置节点数据

admin a 可以设置节点访问控制列表权限

2.1、启动ZooKeeper集群

启动ZooKeeper集群,具体步骤可以参考ZooKeeper 安装与部署。

2.2、启动zkCli客户端

cd /usr/cstor/zookeeper

bin/zkClin.sh

2.3、查看节点ACL

create /node1 “node1”

getAcl /node1

这是创建节点时的默认acl ,表示任何连接到Zookeeper的客户端都能对该节点进行cdrwa操作。权限设置要使用模式 acl的模式为 scheme: id:permission 比如 world:anyone:cdwa。

2.4、world权限

world权限模式只有一种设置模式。就是 setAcl world:anyone:[r][w][c][d][a]

(1)、取消节点读取数据权限:

setAcl /node1 world:anyone:cdwa     取消节点读取数据权限

getAcl /node1                     查看节点权限

get /node1                        获取node1节点值

设置以后尝试读取/node1节点将是没有权限 Authentication is not valid。

(2)、取消节点设置数据的权限

setAcl /node1 world:anyone:cda         取消设置数据权限

getAcl /node1                        查看节点权限

set /node1 "node111111"               修改node1节点值

(3)、取消节点创建子节点的权限

setAcl /node1 world:anyone:da           取消节点创建子节点权限

getAcl /node1                         查看节点权限

create /node1/node2 "node2"             在node1节点下创建子节点node2并赋值 node2

(4)、取消删除子节点的权限

create /node8 "888"    

create /node8/node9 "999"

setAcl /node8 world:anyone:a          取消删除子节点的权限

delete /node8/node9                  删除node8节点下的子节点node9

(5)、取消ACL相关权限

create /node666 "666"

setAcl /node666 world:anyone:           取消node666 全部权限

getAcl /node666

setAcl /node666 world:anyone:rwcda       

取消了a权限以后,getAcl setAcl命令都没有权限。

2.5、IP权限模式

该模式使用的ACL方式是 ip:10.30.196.4:[r][w][c][d][a]

create /node20 "node20"

setAcl /node20 ip:10.30.196.4:rwcda

getAcl /node20

get /node20

设置只有ip为10.30.196.3的客户端连接才能进行rwdca操作,其他ip啥操作都做不了。因为图中设置ACL的客户端不是这个ip,所以设置了后,他就失去对该节点的权限了,所以getAcl命令会没有权限。

getAcl /node20

get /node20

我们用ip为10.30.196.4的客户端链接,有rwdca权限,所以能够执行getAcl操作和读读取节点数据。

2.6、auth授权模式

这个要配合addauth命令。

第一步:先添加授权用户 addauth digest username:password

第二步:设置该节点只有登录了该授权用户的客户端连接才能进行操作。

addauth digest admin:123456

create /nodeAuth “nodeAuth”

setAcl /nodeAuth auth:admin:rwdca

getAcl /nodeAuth

  

把客户端quit退出重新连接后:

get /nodeAuth

失去了对该节点的权限。需要使用addauth命令添加授权才行。类似登录之后才能对该节点有权限。

addauth digest admin:123456

get /nodeAuth

2.7、digest授权模式

digest授权模式基于账号密码的授权模式,与Auth模式类似,只是他设置权限之前不用使用addauth digest username:password进行权限用户添加。直接使用命令 setAcl path digest:username:password:acl 进行授权就行(只是这里的密码要使用加密后的密码,不能使用铭文密码)。

linux命令行输入

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

zkCli客户端输入

create /nodeDigest "nodeDigest"

setAcl /nodeDigest digest:admin:0uek/hZ/V9fgiM35b0Z2226acMQ=:rwdca

getAcl /nodeDigest

get /nodeDigest

addauth digest admin:123456

getAcl /nodeDigest

get /nodeDigest

2.8多种授权模式

同一个节点可以同时使用多种模式授权

create /nodeManyAcl "nodeManyAcl"

addauth digest admin:123456

setAcl /nodeManyAcl ip:10.30.196.3:rdca,auth:admin:rwdca,digest:admin:0uek/hZ/V9fgiM35b0Z2226acMQ=:rwdca

getAcl /nodeManyAcl

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐