概述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

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
本文来源:国外服务器--分布式服务管理框架Zookeeper节点ACL(分布式事务zookeeper)
本文地址:https://www.idcbaba.com/guowai/4145.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



