zookeeper--ACL详解

一、ACL组成简介 (Access Control List)

ACL 权限设置由scheme:expression, perms 三部分组成,分别代表了认证模式(scheme)、授权对象id、对应的权限;

1、认证模式(scheme)

(1)digest模式 ( user:password)

create /zk-node-create-schema mydata digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwad
set /zk-node-create-schema  digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwad

密码是加密密码,加密步骤如下:
1、首先先对user:password 使用sha1算法得出摘要(digest);
2、然后使用base64算法对该摘要加密;
命令如下:

echo -n user:password | openssl dgst -binary -sha1 | openssl base64 

(2)world模式,即world:anynoe cdrwa

world模式是节点的默认模式,当一个节点被创建就会被赋予这种模式,world模式代表所有人对该节点有cdrwa权限。

(3)auth模式

要使用该模式,首先要使用addauth命令添加用户,否则会报错;权限设置命令如下:

create  /test10 hello  auth:user1:明文密码:permissions 
setAcl  /test10   auth:user1:明文密码:permissions 

在auth模式下,对应于上述命令,会自动忽略其中的user1和明文密码字段,而使用通过addauth命令添加的用户和密码,虽然会忽略user1和明文密码字段,但是不能取消,否则会报错;如果添加了多个用户,会对所有已添加的用户设置相同的权限,详情请见下文。

(4)ip模式 ip:具体ip:permissions

该模式对连接服务器的客户端ip进行认证,可以设置多个ip,多个ip通过逗号分隔;

setAcl  /test  ip:IP1:cr,ip:IP2,rw

(5) x509模式

2、权限(permissions)

权限类型ACL简写说明
createc可以创建一个子节点
readr可以获取节点的数据以及列出子节点
writew可以对节点设置数据
deleted可以删除一个子节点
admina具有设置该节点ACL权限的权限

二、相关命令

1、create

创建节点的时候就指定权限,指定权限的同时需要执行节点值,否则会将权限设置为节点值;

create [-s] [-e] [-c] [-t ttl] path [data] [acl]# create a node with the schema
[zkshell: 11] create /zk-node-create-schema mydata digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwadCreated /zk-node-create-schema
[zkshell: 12] addauth digest user1:12345
[zkshell: 13] getAcl /zk-node-create-schema'digest,'user1:+owfoSBn/am19roBPzR1/MfCblE=: cdrwa

2、addauth scheme auth 与auth模式认证

==scheme一般是digest,并且auth中的密码是明文 ==

[zkshell: 9] getAcl /acl_digest_testInsufficient permission : /acl_digest_test
[zkshell: 10] addauth digest user1:12345
[zkshell: 11] getAcl /acl_digest_test'digest,'user1:+owfoSBn/am19roBPzR1/MfCblE=: cdrwa

addauth 命令用于在当前seesion中添加用户,当查询或者更改节点信息的时候,服务器会校验当前seesion中是否存在此用户,并校验其密码是否正确,否则会报错

当使用 以下两种方式创建ACL控制权限的时候,需要注意:

create  /test10 hello  auth:user1:明文密码:permissions 
setAcl  /test10   auth:user1:明文密码:permissions 

需要先使用addauth 添加用户,否则会报错,可以添加多个用户,如果添加多个用户,就会对所有用户赋一样的权限,例如:

addauth digest ramboo1:ramboo1
addauth digest ramboo2:ramboo2
addauth digest ramboo3:ramboo3
setAcl /auth auth:ramboo1:ramboo1:cdrwa
getAcl /auth

结果如下

'digest,'ramboo1:JXpHVJcEMUsIf5MM6u7TlOp3pqo=
: cdrwa
'digest,'ramboo2:lTTHGKOT6A3iEwj/SV5meGTXbAM=
: cdrwa
'digest,'ramboo3:b8+HkvFoPszTILQTMB1YFQ+Yvus=
: cdrwa

3、setAcl

setAcl   /test10  scheme:expression, perms 

4、getAcl 获取节点的ACL权限

[zkshell: 4] create /acl_test mydata ip:127.0.0.1:crwdaCreated /acl_test
[zkshell: 5] getAcl /acl_test'ip,'127.0.0.1: cdrwa[zkshell: 6] getAcl /testwatch'world,'anyone: cdrwa

三、ACL权限特性说明

  • 1、ACL权限控制是基于znode节点的,需要对节点设置权限;
  • 2、ACL权限控制只针对当前节点,并不会对子节点有效,即ACL权限并不会递归;
  • 3、一个节点最原始的权限是world:anynoe cdrwa,即任何人拥有所有权限;
  • 4、每个znode支持设置多种权限控制方案和多个权限;

四、实践

1、digest模式加密

[zhjl@yyzc-zhjlpi02 ~]$ echo -n lichf1:12345| openssl dgst -binary -sha1 | openssl base64
PLvXdiB/dq9VM2nkYPecse4HT98=
[zhjl@yyzc-zhjlpi02 ~]

2、digest模式创建–需要先通过addauth添加用户才可以进行后续操作

[zk: localhost:2181(CONNECTED) 5] create /test7  'hello world ' digest:lichf1:PLvXdiB/dq9VM2nkYPecse4HT98=:crwad
Created /test7
[zk: localhost:2181(CONNECTED) 6] get /test7
Insufficient permission : /test7
[zk: localhost:2181(CONNECTED) 7] addauth digest lichf1:12345
[zk: localhost:2181(CONNECTED) 8] get /test7
hello world
[zk: localhost:2181(CONNECTED) 9] getAcl /test7
'digest,'lichf1:PLvXdiB/dq9VM2nkYPecse4HT98=
: cdrwa
[zk: localhost:2181(CONNECTED) 10]

3、模式错误会报错,并退出连接

[zk: localhost:2181(CONNECTED) 8] addauth lichf4
[zk: localhost:2181(CONNECTED) 9]
WATCHER:
WatchedEvent state:AuthFailed type:None path:null
2024-03-27 21:48:09,838 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@578] - EventThread shut down for session: 0x10b1f1382d70039

4、auth模式

[zk: localhost:2181(CONNECTED) 0] addauth digest lichf:12345
[zk: localhost:2181(CONNECTED) 2] create /test12 hhh  auth:lichf:12345:crw
Created /test12
[zk: localhost:2181(CONNECTED) 3] getAcl /test12
'digest,'lichf:x
: crw
[zk: localhost:2181(CONNECTED) 4] get /test12
hhh

5、auth模式–addauth用户添加

添加了两个用户,两个用户分别对应不同的znode节点

[zk: localhost:2181(CONNECTED) 0] addauth digest lichf:12345
[zk: localhost:2181(CONNECTED) 1] addauth digest lichf1:12345
[zk: localhost:2181(CONNECTED) 2] getAcl /test12
'digest,'lichf:x
: crw
[zk: localhost:2181(CONNECTED) 3] getAcl /test11
'digest,'lichf1:PLvXdiB/dq9VM2nkYPecse4HT98=
: cdrwa
[zk: localhost:2181(CONNECTED) 4]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android PKMS服务

前面我们介绍过Android AMS服务,今天我们看一下PKMS(PackageManagerService)服务,PKMS也是android系统中核心服务之一,负责应用程序的安装,卸载,信息查询等工作。 PKMS的启动 首先启动创建PKMS: private void start…

给网站添加安全措施 -- http -> https

快速上手 1、准备:腾讯云http域名、SSL证书、Nginx服务器。 2、在腾讯云平台内-我的域名,找到指定域名后添加解析映射IP。 3、腾讯云上搜索SSL证书,然后申请免费证书(1个工作日内通过)。 4、证书通过后,下…

深度学习算法概念介绍

前言 深度学习算法是一类基于人工神经网络的机器学习方法,其核心思想是通过多层次的非线性变换,从数据中学习表示层次特征,从而实现对复杂模式的建模和学习。深度学习算法在图像识别、语音识别、自然语言处理等领域取得了巨大的成功&#xf…

【STM32 HAL库SPI/QSPI协议学习,基于外部Flash读取。】

1、SPI协议 简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface),即串行外围设备接口,是 一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率 较高的场合。 SPI 物理层 SPI 通讯…

Nginx(Docker 安装的nginx)配置域名SSL证书

1.首先确保Linux环境上已经安装了docker(可参考Linux安装Docker-CSDN博客) 2.通过docker 安装nginx(可参考Linux 环境安装Nginx—源码和Dokcer两种安装方式-CSDN博客) 3.安装SSL证书 3.1 在宿主机中创建证书目录并上传证书&…

【数据结构与算法篇】动态顺序表及相关OJ算法题

【数据结构与算法篇】动态顺序表及相关OJ算法题 🥕个人主页:开敲🍉 🔥所属专栏:数据结构与算法🍅 目录 【数据结构与算法篇】动态顺序表及相关OJ算法题 1. 动态顺序表的实现 1.1 SeqList.h 头文件声明 1.…

基于LSB(最低有效位)的图像水印算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

php将网页用wkhtmltoimage内容生成为图片

php架构ThinkPHP6 1. 安装 knp-snappy架构 composer require knplabs/knp-snappy use Knp\Snappy\Image; use Illuminate\Support\Facades\Storage;// 生成图片 /user/local/bin/wkhtmltoimage为你的wkhtmltoimage的位置。 $snappy new Image(/usr/local/bin/wkhtmltoimage…

智慧城市数字孪生,综合治理一屏统览

现代城市作为一个复杂系统,牵一发而动全身,城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维,从构成城市诸多要素、结构、功能等方面入手,系统推进…

【鸿蒙HarmonyOS开发笔记】通用型工具封装之关系型数据库操作类的封装

概述 开发中难免遇到操作关系型数据库的场景,但是原生的relationalStore使用起来略显繁琐,此文封装一个通用的关系型数据库增删改查的工具类,只需要少量修改配置即可使用,大幅简化我们的开发成本,提高开发效率 完整代…

算法学习——LeetCode力扣单调栈篇

算法学习——LeetCode力扣单调栈篇 739. 每日温度 739. 每日温度 - 力扣(LeetCode) 描述 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个…

vue图片压缩

1.使用插件 1.image-conversion 1.1安装 npm i image-conversion --save 1.2使用 //引用 import * as imageConversion from image-conversion//使用(主要方法)//压缩到指定大小 beforeAvatarUpload(file) {const isJpgOrPng file.type image/jpeg || file.type image/png…

关系型数据库mysql(7)sql高级语句①

目录 一.MySQL常用查询 1.按关键字(字段)进行升降排序 按分数排序 (默认为升序) 按分数升序显示 按分数降序显示 根据条件进行排序(加上where) 根据多个字段进行排序 ​编辑 2.用或(or&…

Rust语言中Option和Result两种类型的使用

异同之处 不同之处主要在于用途不同 都可以用于Error handle的&#xff0c;都是枚举类型,都可以作为function的返回类型&#xff0c; 二者源码如下 pub enum Option<T> {None,Some(T), }pub enum Result<T, E> {Ok(T),Err(E), }为什么这么设计 有场景才有设计的…

ESP8266 控制 LED 亮灭

一、引脚对应 二、按键控制 LED 亮灭 2.1样例1 #include <ESP8266WiFi.h>const int ledPin D2; // LED 连接到 D2 引脚 const int keyPin D4; // 按键连接到 D4 引脚volatile bool flag false; // 记录 LED 状态的标志// 外部中断处理函数 ICACHE_RAM_ATTR void han…

重新温习广软puthon爬虫技术。

下面是我不断试错的一个过程&#xff0c;好多知识点全忘记了&#xff0c;只能不断调实例&#xff0c;不断优化&#xff0c;重构&#xff0c;实现自己的需求。下面是我的运行截图。还是导包的问题。 个人感觉关键的还是这几部&#xff0c;被划了下划线的&#xff0c;存在问题&a…

【智能算法】猎人猎物算法(HPO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年&#xff0c;Naruei等人受到自然界动物猎食过程启发&#xff0c;提出了猎人猎物算法&#xff08;Hunter-Prey Optimization&#xff0c; HPO&#xff09;。 2.算法原理 2.1算法思想 HPO模拟…

输出1到10的阶乘--C语言

#include<stdio.h> int fac(int n){if(n<1){return 1;}elsereturn fac(n-1)*n; } int main(){int i, result;for(i1;i<10;i){resultfac(i);printf("%d!%d\n",i,result);}} 输出结果&#xff1a;

Java并发编程基础_Thread类

线程 Thread.class 1. 线程的六种状态 NEW 尚未启动的线程处于此状态。RUNNABLE 在Java虚拟机中执行的线程处于此状态。BLOCKED 被阻塞等待监视器锁定的线程处于此状态。WAITING 正在等待另一个线程执行特定动作的线程处于此状态。TIMED_WAITING 正在等待另一个线程执行动作达到…

C++中浅拷贝和深拷贝对象复制概念

1.浅拷贝&#xff08;Shallow Copy&#xff09;&#xff1a; 浅拷贝是指在对象复制时&#xff0c;只是复制对象的值&#xff0c;而不会复制对象指向的资源。这意味着对象和其副本会指向同一块内存空间&#xff0c;当一个对象改变时&#xff0c;另一个对象也会受到影响。 #inclu…