基本作用:
针对节点可以设置 相关读写等权限,目的为了保障数据安全性
权限permissions可以制定不同的权限范围以及角色
一:ACL构成
zk的acl通过[scheme:id:permissions]来构成权限列表
scheme:代表采用的某种权限机制
id:代表允许访问的用户
permissions:权限组合字符串
1、 scheme:
word:word下只有一个id,既只有一个用户,也就是anyone。那么组合的写法就是word:anyone:[permissions]
auth:代表认证登录,需要注册用户有权限就可以,形式为:auth:user:password:[permissions]
digest:需要对密码加密才能访问,组合行成为: digest:username:BASE64(SHA1(password)):[permissions]
简而言之,auth与digest的区别就是,一个明文,一个密文setAcl/path auth:lee:lee:cdrwa
与 setAcl/path digest:lee:BASE64(SHA1(password)):cdrwa
等价的,再通过addauth digest lee:lee 后都能操作指定节点的权限
ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如:
ip :192.168.1.1:[permissions]
super:比较特殊 代表超级管理员,拥有所有权限
3、ACL构成三 --- permissions
权限字符串缩写:crdwa
create:创建子节点
read:获取节点/子节点
write:设置节点数据
delete:删除子节点
admin:设置权限
二:ACL命令
getAcl:获取某个节点的acl权限信息
setAcl:设置某个节点的acl权限信息
addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是加密的形式存在的。
1、getAcl
2、wolrd
wolrd:anyoone:cdrwa
默认在节点创建完是允许所有匿名用户对该节点进行操作的。
如上图所示,我们给/wq/abc 设置了crwa(即创建、读、写、管理操作)。
注:由于我们的/wq默认在创建的时候会拥有cdrwa权限,此时我们删除/wq/abc肯定是可以的。
设置acl权限和验证
那么怎样来验证我们刚设的crwa权限呢?这里我们需要在/wq/abc下再创建一个子节点即/wq/abc/xyz从而来验证上一步我们给/wq/abc设置不能删除节点的权限。例:
3、Auth
第一步,先初始化一些节点,在根目录下新建节点/names,再在/names下新建节点hebe并查看其权限,如图示:
注:下面演示一下错误操作,直接给当前节点验证用户名hebe密码hebe,会出现如下错误信息:
这是由于我们的用户名密码并没有进行注册(即登录信息并未注册)。
那么就需要我们将该用户名/密码添加到库里,再登录并设置权限就行了,如下所示:
获取该节点Acl,并将我圈出部分即账户信息hebe:YDTbY1suR969/X/vk+9Fiwzfpd8=
拷贝(选中右键粘贴即可,不要ctrl+c,因为会退出)到本地记事本中,待会有用到。如图示:
后面添加的用户都会使用第一个用户的账号信息。
首先,为了演示,新加一个用户zyl:zyl,( zyl:AKsNqVOhO7ZXMtj51BNaV+Tv60A=)它的Acl信息如下:
即这里省略用户密码信息也是可以进入的。默认使用的是当前第一个的用户信息。
4、digest
使用digest首先我们需要退出当前用户,即ctrl+c退出客户端。再./zkCli.sh运行客户端。接下来在/names节点下新建test节点,如图示0:
设置Acl,用户信息就是上面我们拷贝的wq的用户信息,如图示:
登录addauth digest wq:wq,注意登录我们也不可能让用户输入暗文登录,所以还是使用明文密码登录。如图示:
5、使用 ip
Linux环境配置,配置Acl如图示:
6、使用 Super
6.1、 修改zkServer.sh增加super 管理员
首先需要vi zkServer.sh 利用/查询nohup,紧接着添加超级管理员配置信息
vi /usr/local/zookeeper/bin/zkServer.sh 或vim /usr/local/zookeeper/bin/zkServer.sh 打开如图示:
-Dzookeeper.DigestAuthenticationProvider.superDigest=zyl:AKsNqVOhO7ZXMtj51BNaV+Tv60A=我们之前设过的zyl的用户密码。
增加后内容。
6.2、重启zkServer.sh,再重启客户端zkCli.sh,如下所示:
6.3、验证超级管理员权限
通过上图,我们可以发现,一开始我们是没登录超级管理员,所以查看ip节点是没有权限的(因为上一步我们给ip节点加了固定ip权限才能操作),所以在使用addauth digest wq:wq登录我们的超级管理员后,就可以任意妄为地操作我们的节点了。
三:ACL使用场景
开发、测试环境分离,开发者无权操作测试库的节点,只能看;
生产环境上控制指定ip的服务可以访问相关节点,防止混乱。