当前位置:   article > 正文

ZooKeeper ACL权限控制

zookeeper acl

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客户端

  1. cd /usr/cstor/zookeeper
  2. bin/zkClin.sh

2.3、查看节点ACL

  1. create /node1 “node1
  2. 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)、取消节点读取数据权限:

  1. setAcl /node1 world:anyone:cdwa     取消节点读取数据权限
  2. getAcl /node1                     查看节点权限
  3. get /node1                        获取node1节点值

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

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

  1. setAcl /node1 world:anyone:cda         取消设置数据权限
  2. getAcl /node1                        查看节点权限
  3. set /node1 "node111111"               修改node1节点值

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

  1. setAcl /node1 world:anyone:da           取消节点创建子节点权限
  2. getAcl /node1                         查看节点权限
  3. create /node1/node2 "node2"             在node1节点下创建子节点node2并赋值 node2

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

  1. create /node8 "888"    
  2. create /node8/node9 "999"
  3. setAcl /node8 world:anyone:a          取消删除子节点的权限
  4. delete /node8/node9                  删除node8节点下的子节点node9

(5)、取消ACL相关权限

  1. create /node666 "666"
  2. setAcl /node666 world:anyone:           取消node666 全部权限
  3. getAcl /node666
  4. setAcl /node666 world:anyone:rwcda       

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

2.5、IP权限模式

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

  1. create /node20 "node20"
  2. setAcl /node20 ip:10.30.196.4:rwcda
  3. getAcl /node20
  4. get /node20

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

  1. getAcl /node20
  2. get /node20

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

2.6、auth授权模式

这个要配合addauth命令。

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

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

  1. addauth digest admin:123456
  2. create /nodeAuth “nodeAuth”
  3. setAcl /nodeAuth auth:admin:rwdca
  4. getAcl /nodeAuth

  

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

get /nodeAuth

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

  1. addauth digest admin:123456
  2. 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客户端输入

  1. create /nodeDigest "nodeDigest"
  2. setAcl /nodeDigest digest:admin:0uek/hZ/V9fgiM35b0Z2226acMQ=:rwdca
  3. getAcl /nodeDigest
  4. get /nodeDigest
  5. addauth digest admin:123456
  6. getAcl /nodeDigest
  7. get /nodeDigest

2.8多种授权模式

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

  1. create /nodeManyAcl "nodeManyAcl"
  2. addauth digest admin:123456
  3. setAcl /nodeManyAcl ip:10.30.196.3:rdca,auth:admin:rwdca,digest:admin:0uek/hZ/V9fgiM35b0Z2226acMQ=:rwdca
  4. getAcl /nodeManyAcl

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/467245
推荐阅读
相关标签
  

闽ICP备14008679号