❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️

文章目录


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 查看节点的权限

Ⅳ:zookeeper的acl权限控制_子节点

setAcl /unity/node1 world:anyone:drwa 意思是为node1节点设置world模式授权方式,对于anyone用户都有drwa权限

Ⅳ:zookeeper的acl权限控制_子节点_02


由于我没有设置create权限,所以无法在node1节点下创建子节点。


Ⅳ:zookeeper的acl权限控制_zookeeper_03

为/unity设置rwa权限,尝试删除/unity的子节点node2

Ⅳ:zookeeper的acl权限控制_zookeeper_04


很明显因为/unity没有delete权限,所有无法删除子节点

注意这些都是为父节点设置权限,操作子节点

注意如果设置权限为空,由于没有admin权限,则管理该节点的权限都没了

Ⅳ:zookeeper的acl权限控制_子节点_05

Ⅱ、IP授权模式

演示IP授权模式需要使用两台云服务器,为此我准备了两个

Ⅳ:zookeeper的acl权限控制_子节点_06


第二台需要安装jdk和zookeeper,第一章已经演示过就不再多说

第一章:zookeeper的单机安装

❤️ 此处默认已经配置好 ❤️

注意记得将第一台云服务器的2181端口对外开放
云服务器端口对外开放详解

开启第一台云服务器的zookeeper服务

./zkServer.sh start

将第二台服务器cd到zookeeper的bin目录下,连接第一台服务器的zookeeper客户端,执行以下命令

.zkCli.sh -server IP地址


在第一个窗口创建一个父节点和两个子节点

Ⅳ:zookeeper的acl权限控制_zookeeper_07

在第二个窗口查看权限模式

Ⅳ:zookeeper的acl权限控制_javascript_08

Ⅱ.Ⅰ、单ip授权模式

在窗口1设置ip授权模式
setAcl /unity ip:窗口2的ip地址:cdrwa

Ⅳ:zookeeper的acl权限控制_javascript_09

在窗口2查看情况

Ⅳ:zookeeper的acl权限控制_子节点_10

此时由于设置了/unity节点的授权模式为ip模式:ip地址为
8.140.37.103;所以端口号为123.57.252.59的窗口1就不能访问

Ⅳ:zookeeper的acl权限控制_javascript_11

Ⅱ.Ⅱ、多ip授权模式

窗口1设置,查看权限(多ip中间用,隔开即可)

Ⅳ:zookeeper的acl权限控制_子节点_12


窗口2查看权限

Ⅳ:zookeeper的acl权限控制_zookeeper_13

Ⅲ、auth授权模式

Ⅳ:zookeeper的acl权限控制_javascript_14


上图中的密码是经过加密的由于已经登录过,所以有权限访问访问

Ⅳ:zookeeper的acl权限控制_javascript_15


当我退出重新登录连接客户端访问该节点时,就会无权限

Ⅳ:zookeeper的acl权限控制_javascript_16


重新认证之后再访问就可以了

Ⅳ:zookeeper的acl权限控制_子节点_17

Ⅳ、digest授权模式

setAcl /path digest:用户名:密码:权限
注意这里的密码是经过SHA1和BASE64处理的密文
可以通过以下生成
echo -n super:user | openssl dgst -binary -sha1 | openssl base64

Ⅳ:zookeeper的acl权限控制_zookeeper_18


此处的super是用户名,user是密码

认证:

addauth digest 用户名:密码(这里的密码是明文)

Ⅴ、多模式授权

setAcl /test ip:123.57.252.59:cdrwa,auth:user:cdrwa

Ⅳ:zookeeper的acl权限控制_子节点_19

7、ACL超级管理员

有时可能某个节点经过我们设置权限之后,可能任何用户都不能访问(包括本身),所以需要一个超级管理员来进行最终操作

打开zookeeper目录下的/bin/zkServer.sh 脚本文件

vim zkServer.sh

找到如下这一行

Ⅳ:zookeeper的acl权限控制_javascript_20


加入以下


Ⅳ:zookeeper的acl权限控制_zookeeper_21

这是脚本中启动zookeeper的命令,默认只有两个配置项,我们可以手动添加一个超级管理员配置项

"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:GR9f4mKrV2reacyCyiukMpZl5qc=“

“GR9f4mKrV2reacyCyiukMpZl5qc=”这一串是加密后的密码

之后重启服务,重新连接客户端即可

./zkServer.sh restart
./zkCli.sh -server 你的ip地址

创建一个node节点,然后设置ip授权模式,使得除了这个ip其他用户都无法访问node节点

Ⅳ:zookeeper的acl权限控制_zookeeper_22


Ⅳ:zookeeper的acl权限控制_zookeeper_23


本章结束~ ❤️