概述

Zookeeper类似于unix文件系统,节点类比文件,客户端可以删除节点,创建节点,修改节点。Zookeeper可以使用ACL(access control list)访问控制列表来对节点的权限进行控制。

acl权限控制使用:scheme🆔permission来标志,主要涵盖三个方面:

  • 权限模式(scheme):授权的策略。
  • 权限对象(id):授权的对象。
  • 权限(permission):授予的权限。
Zookeeper acl的特性:
  1. Zookeeper的权限控制是基于znode节点的,需要对每个节点设置权限。
  2. 每个znode支持设置多种权限控制方案和多个权限。
  3. 子节点不会继承父节点的权限。客户端无法访问某个节点,但是可以访问他的子节点。

权限模式种类

模式描述
world这种模式方法的授权对象只有一个anyone,代表登录到服务器的所有客户端都能对该节点执行某种权限
ip对连接的客户端使用IP地址认证方式进行认证
auth使用以添加认证的用户进行认证
digest使用 用户:密码方式验证

权限的类型

类型ACL简写描述
readr读取节点及显示子节点列表的权限
writew设置节点数据的权限
createc创建子节点的权限
deleted删除子节点的权限
admina设置该节点ACL权限的权限

关于授权的命令

命令用法描述
getAclgetAcl path读取节点的ACL
setAclsetAcl path acl设置节点的ACL
createcreate path data acl创建节点时设置acl
addAuthaddAuth scheme auth添加认证用户,类似于登录操作
实战
  1. 查看节点acl
    在这里插入图片描述
    这是创建节点时的默认acl ,表示任何连接到Zookeeper的客户端都能对该节点进行cdrwa操作。

权限设置要使用模式 acl的模式为 scheme: id:permission 比如 world:anyone:cdwa

world权限模式实战

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

  1. 取消节点读取数据权限:
    使用命令 setAcl /node1 world:anyone:cdwa
    在这里插入图片描述
    设置以后尝试读取/node1节点将是没有权限 Authentication is not valid

  2. 取消节点设置数据的权限
    在这里插入图片描述

  3. 取消节点创建子节点的权限
    在这里插入图片描述

  4. 取消删除子节点的权限
    在这里插入图片描述

  5. 取消ACL相关权限
    在这里插入图片描述
    取消了a权限以后,getAcl setAcl命令都没有权限。

IP权限模式实战

该模式使用的acl方式是 ip:192.168.10.127:[a][d][c][w][r]
在这里插入图片描述
设置只有ip为192.168.18.135的客户端连接才能进行adc操作,其他ip啥操作都做不了。因为图中设置ACL的客户端不是这个ip,所以设置了后,他就失去对该节点的权限了,所以getAcl命令会没有权限。

在这里插入图片描述
这个是ip为192.168.18.135的客户端连接,有a权限,所以能够执行getAcl操作。但是没有r权限,所以还是不读读取节点数据。

auth授权模式实战

这个要配合addauth命令。
第一步:先添加授权用户 addauth digest username:password
第二步:设置该节点只有登录了该授权用户的客户端连接才能进行操作。
setAcl /path auth:username:acl
12在这里插入图片描述
0uek/hZ/…是账号admin 和密码123456 经过sha1和base64加密后的密文密码。

把客户端quit退出重新连接后:
在这里插入图片描述
失去了对该节点的权限。需要使用addauth命令添加授权才行。类似登录之后才能对该节点有权限。
在这里插入图片描述

digest授权模式实战

digest授权模式基于账号密码的授权模式,与Auth模式类似,只是他设置权限之前不用使用
addauth digest username:password进行权限用户添加。

直接使用命令 setAcl path digest:username:password:acl 进行授权就行。只是这里的密码要使用加密后的密码,不能使用铭文密码。

可以使用linux命令进行
echo -n username:password | openssl dgst -binary -sha1 | openssl base64 得到加密后的密码,这里的password是铭文密码

在这里插入图片描述
复制加密后的密码

在这里插入图片描述
设置权限后已经没有该节点的权限了,原因是我们没有登录。
在这里插入图片描述
登录后就有该节点的权限了,登录使用明文密码进行登录。

设置多个权限

可以设置多种acl,用逗号隔开就行。
在这里插入图片描述

以上权限是ip为192.168.18.130的客户端具有adc权限。
用admin登录的用户具有adcwr权限。
所有人都要r权限。

测试 用admin登录的用户具有adcwr权限。需要quit退出重新连接,因为你当前已经添加了该用户的授权。
这里就不粘图了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐