-
ACL(access control lists)权限控制
- 针对节点可以设置相关读写设置等操作权限,目的是为了保障数据安全性
- 权限permissions可以指定不同权限范围以及角色
-
ACL命令行
- getAcl:获取某个节点的acl权限信息
- setAcl:设置某个节点的acl权限信息
- addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密的形式存在的
- getAcl:获取某个节点的acl权限信息
-
ACL的构成
-
zk的acl通过[scheme:id:permissions]来构成权限列表
-
scheme:代表采用的某种权限机制
-
id:代表允许访问的用户
-
permissions:权限组合字符串
-
-
- scheme
-
world:world下只有一个id,即只有一个用户,也就是anyone。
-
组合写法:world:anyone:[perssionsions]
-
针对任何人都可以访问的节点
-
-
-
auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]
-
digest: 需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]
-
auth 与digest的区别
-
auth是明文,digest密文
-
setAcl /path auth:lee:lee:cdrwa
-
setAcl /path digest:lee:BASE64(SHA1(password))cdrwa
-
上这个两个语句是等价的,在通过 addauth digest lee:lee 后都能操作指定节点的权限
-
在实际的运用auth运用的不是很多
-
-
ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]
-
super:代表超级管理员,拥有所有的权限
-
-
- permissions
-
权限字符串缩写 crdwa
-
Create 创建子节点
-
Read 读取节点/子节点
-
Write 设置节点数据
-
Delete 删除子节点
-
ADMIN 可以用来设置权限,例如crdw
-
-
-
-
ACL命令行学习实例
- world : anyone : crdwa
- 首先我们hubbert子节点下创建aclNode节点,然后查看当前aclNode的权限
- 是cdrwa的权限
- 然后修改其aclNode权限为crwa,再对aclNode节点进行删除,结果发现是可以进行删除的
- 所以如果想要设置不能删除aclNode节点,应该设置hubbert节点不能有删除权限。
- 所以设置权限只是针对其子节点的操作权限,如下面所示
- 发现其子节点childAclNode无法删除
- 其他cdrwa则是同理
- 首先我们hubbert子节点下创建aclNode节点,然后查看当前aclNode的权限
- auth digest
- auth:user:pwd:cdrwa
- digest:user:BASE64(SHA1(pwd)):cdrwa
- addauth digest user:pwd
- 首先我们再本地创建一个authNode节点
- 然后通过auth 给authNode节点添加 username : password 这个用户
- 但是会提示添加失败,因为目前本地并没有这个 username : password 这个用户
- 所以通过addauth digetst username:password 注册用户后
- 再通过setAcl 对节点auth进行注册,最后密码是通过加密进行显示的
- digest
- digest username:password crwda
- 使用digest命令 密码需要使用密文
- ip命令行
- super命令行
- 超级权限用户
- 修改zkServer.sh 增加super管理员
- 重启zkServer.sh
- 在nohub 加上后面这句话即可。然后wd存储,进行restart
- 调用get命令不能查看 ip当前的权限
- 登录super账户后,可以进行查询
- world : anyone : crdwa
-
ACL常用使用场景
- 开发/测试环境分离,开发者无权操作测试库的节点,只能看。
- 生产环境上控制指定ip的服务可以访问相关节点,防止混乱
-
ACL四字命令(Four Letter Words)
- zk可以通过它自身提供的简写命令来和服务器进行交互
- 需要使用命令nc,安装:yum install nc
- echo [command] | nc [ip] [port]
- 【stat】查看zk的状态信息,以及是否mode(mode是指集群环境下的模式?还是单例模式,单机运行的?)
- 【ruok】查看当前zkserver是否启动,返回imok
- 【dump】 列出未经处理的会话和临时节点
- 创建临时节点
- 创建临时节点
- 【conf】查看服务器配置
-
- 【cons】展示连接到服务器的客户端信息
- 【envi】环境变量
- 【nmtr】监控zk健康信息
-
- 【wchs】展示watch的信息
-
- 【wchc】与【wchp】session与watch及path与watch 信息
- wchc与wchp默认没在zk的白名单中
- 在3.4.10版本后,wchc与wchp默认是没放在白名单中
- 需要在zoo.cfg里面进行配置
- 41w.commands.whitelist=*
- 然后保存重启才能生效
- 【stat】查看zk的状态信息,以及是否mode(mode是指集群环境下的模式?还是单例模式,单机运行的?)