❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️
文章目录
1、如何理解acl的权限控制
根据名称acl可以得出全称Access Controller List,无非就是访问控制列表,简单了说就是对zookeeper的节点做访问权限控制
2、权限模式
world | 只有一个用户:anyone,代表zookeeper所有人 |
ip | 对客户端使用ip地址认证 |
auth | 使用已经添加认证的用户认证 |
digest | 使用用户名,密码认证 |
3、授权的对象
授权对象指的是权限赋予的实体
4、授予的权限
权限 | ACL简写 | 描述 |
create | c | 可以创建子节点 |
delete | d | 可以删除子节点 |
read | r | 可以读取节点数据并显示子节点列表 |
write | w | 可以设置节点数据 |
admin | a | 可以设置节点访问权限控制列表权限 |
5、授权的相关命令
命令 | 使用方式 | 描述 |
getAcl | getAcl /path | 查看节点的权限 |
setAcl | setAcl /path [anyone] [权限] | 为节点设置权限 |
addauth | r | 可以读取节点数据并显示子节点列表 |
6、授权模式
Ⅰ、word授权模式
setAcl /path world:anyone:权限(cdraw) 设置权限
getAcl /path 获取节点权限
get /path 查看节点的权限setAcl /unity/node1 world:anyone:drwa 意思是为node1节点设置world模式授权方式,对于anyone用户都有drwa权限由于我没有设置create权限,所以无法在node1节点下创建子节点。
为/unity设置rwa权限,尝试删除/unity的子节点node2
很明显因为/unity没有delete权限,所有无法删除子节点
注意这些都是为父节点设置权限,操作子节点
注意如果设置权限为空,由于没有admin权限,则管理该节点的权限都没了
Ⅱ、IP授权模式
演示IP授权模式需要使用两台云服务器,为此我准备了两个
第二台需要安装jdk和zookeeper,第一章已经演示过就不再多说
第一章:zookeeper的单机安装
❤️ 此处默认已经配置好 ❤️
注意记得将第一台云服务器的2181端口对外开放
云服务器端口对外开放详解
开启第一台云服务器的zookeeper服务
./zkServer.sh start
将第二台服务器cd到zookeeper的bin目录下,连接第一台服务器的zookeeper客户端,执行以下命令
.zkCli.sh -server IP地址
在第一个窗口创建一个父节点和两个子节点
在第二个窗口查看权限模式
Ⅱ.Ⅰ、单ip授权模式
在窗口1设置ip授权模式
setAcl /unity ip:窗口2的ip地址:cdrwa在窗口2查看情况
此时由于设置了/unity节点的授权模式为ip模式:ip地址为
8.140.37.103;所以端口号为123.57.252.59的窗口1就不能访问
Ⅱ.Ⅱ、多ip授权模式
窗口1设置,查看权限(多ip中间用,隔开即可)
窗口2查看权限
Ⅲ、auth授权模式
上图中的密码是经过加密的由于已经登录过,所以有权限访问访问
当我退出重新登录连接客户端访问该节点时,就会无权限
重新认证之后再访问就可以了
Ⅳ、digest授权模式
setAcl /path digest:用户名:密码:权限
注意这里的密码是经过SHA1和BASE64处理的密文
可以通过以下生成
echo -n super:user | openssl dgst -binary -sha1 | openssl base64
此处的super是用户名,user是密码
认证:
addauth digest 用户名:密码(这里的密码是明文)
Ⅴ、多模式授权
setAcl /test ip:123.57.252.59:cdrwa,auth:user:cdrwa
7、ACL超级管理员
有时可能某个节点经过我们设置权限之后,可能任何用户都不能访问(包括本身),所以需要一个超级管理员来进行最终操作
打开zookeeper目录下的/bin/zkServer.sh 脚本文件
vim zkServer.sh
找到如下这一行
加入以下
这是脚本中启动zookeeper的命令,默认只有两个配置项,我们可以手动添加一个超级管理员配置项
"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:GR9f4mKrV2reacyCyiukMpZl5qc=“
“GR9f4mKrV2reacyCyiukMpZl5qc=”这一串是加密后的密码
之后重启服务,重新连接客户端即可
./zkServer.sh restart
./zkCli.sh -server 你的ip地址
创建一个node节点,然后设置ip授权模式,使得除了这个ip其他用户都无法访问node节点
本章结束~ ❤️