分布式服务管理框架Zookeeper节点ACL(分布式事务zookeeper)

分布式服务管理框架Zookeeper节点ACL(分布式事务zookeeper)

浏览次数:
信息来源: 用户投稿
更新日期: 2026-03-06
文章简介

概述ACL全称为AccessControlList(访问控制列表),用于控制资源的访问权限。zk利用ACL策略控制节点的访问权限,如节点数据读写、节点创建、节点删除、读取子节点列表、设置节点权限等。

2025阿里云双十一服务器活动

概述ACL全称为AccessControlList(访问控制列表),用于控制资源的访问权限。zk利用ACL策略控制节点的访问权限,如节点数据读写、节点创建、节点删除、读取子节点列表、设置节点权限等。

在传统的文件系统中,ACL分为两个维度,一个是属组,一个是权限,一个属组包含多个权限,一个文件或目录拥有某个组的权限即拥有了组里的所有权限,文件或子目录默认会继承自父目录的ACL。而在Zookeeper中,znode的ACL是没有继承关系的,每个znode的权限都是独立控制的,只有客户端满足znode设置的权限要求时,才能完成相应的操作。Zookeeper的ACL,分为三个维度:scheme、id、permission,通常表示为:scheme:id:permission,schema代表授权策略,id代表用户,permission代表权限。下面从这三个维度分别来介绍。

一、schemescheme即采取的授权策略,每种授权策略对应不同的权限校验方式。下面是zk常用的几种scheme:

1>digest语法:digest:username:BASE64(SHA1(password)):cdrwadigest:是授权方式username:BASE64(SHA1(password)):是id部分cdrwa:权限部份用户名+密码授权访问方式,也是常用的一种授权策略。id部份是用户名和密码做sha1加密再做BASE64加密后的组合,比如设置一个节点的用户名为yangxin,密码为123456,则表示方式为:yangxin:BASE64(SHA1(123456))?yangxin:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=。密码加密需要用到zk的一个工具类来生成,如下所示:

shell>java-Djava.ext.dirs=/usr/local/zookeeper/lib-cp/usr/local/zookeeper/zookeeper-3.4.9.jarorg.apache.zookeeper.server.auth.DigestAuthenticationProvideryangxin:123456

yangxin:123456->yangxin:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=

下面是演示创建节点,并添加授权信息操作节点的示例:

创建节点/node_05shell>create/node_05dataCreated/node_05设置权限shell>setAcl/node_05digest:yangxin:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=:cdrwacZxid=0x8ectime=MonNov1421:38:52CST2016mZxid=0x8emtime=MonNov1421:38:52CST2016pZxid=0x8ecversion=0dataVersion=0aclVersion=1ephemeralOwner=0x0dataLength=3numChildren=0获取节点刚刚设置的权限shell>getAcl/node_05'digest,'yangxin:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=:cdrwa

没有授权,创建节点失败shell>create/node_05/node_05_01dataAuthenticationisnotvalid:/node_05/node_05_01

添加授权信息shell>addauthdigestyangxin:123456

添加授权信息后,就可以正常操作了shell>create/node_05/node_05_01dataCreated/node_05/node_05_01

分布式服务管理框架Zookeeper节点ACL,分布式事务zookeeper

shell>setAcl/node_08ip:192.168.1.100:rw

语法:创建节点默认的scheme,所有人都可以访问。如下所示:

shell>create/node_06dataCreated/node_06shell>getAcl/node_06'world,'anyone:cdrwa

上面主要介绍了平时常用的三种scheme,除此之外,还有host、super、auth授权策略。

二、idid是验证模式,不同的scheme,id的值也不一样。scheme为digest时,id的值为:username:BASE64(SHA1(password)),scheme为ip时,id的值为客户端的ip地址。scheme为world时,id的值为anyone。

三、permission在介绍scheme的时候,提到了acl的权限,如:digest:username:BASE64(SHA1(password)):cdrwa中的cdrwa即是permission。1>CREATE(r):创建子节点的权限2>DELETE(d):删除节点的权限3>READ(r):读取节点数据的权限4>WRITE(w):修改节点数据的权限5>ADMIN(a):设置子节点权限的权限

创建/node_8节点,acl为cd(只能创建和删除子节点)shell>create/node_08datadigest:yangxin:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=:cdCreated/node_08

没有WRITE的权限,修改/node_8节点的数据失败shell>set/node_8update_dataAuthenticationisnotvalid:/node_08

没有READ的权限,读取子节点数据及查询子节点列表失败shell>get/node_8Authenticationisnotvalid:/node_08?shell>ls/node_8Authenticationisnotvalid:/node_08

没有ADMIN权限,设置节点权限失败shell>setAcl/node_08ip:192.168.1.100:cdrwaAuthenticationisnotvalid:/node_08

具备WRITE权限,可以创建节点shell>create/node_08/node_08_01abcCreated/node_08/node_08_01

具备DELETE权限,可以删除子节点shell>delete/node_08/node_08_01

标签:
敏捷与DevOps之间的主要区别(敏捷和devops的区别)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!