权限控制 ACL(access control list)
zk的权限控制是用过固定的字符串模式来表示的。
权限组成
1 | [scheme]:[id]:[permission] |
“[ ]”中是字符串变量。
scheme:验证策略,shceme有:world,auth,digest,ip,super。
id:权限被赋予的对象,不同的scheme有不同的id。
permission:权限组合,为:c[创建],r[读],d[删除],w[写],a[权限控制]中的一个或多个组成。如:crd。
1 | acl权限没有继承关系,仅仅会针对当前节点。 |
ACL组合
zk通过字符串组合确定访问客户端对zk节点的操作权限。
world
与world组合的id只有一个,就是anyone,代表任何人,permission字符串随意组合。
eg:
1 | #任何人拥有创建、读取和写入的权限 |
digest
指定账号密码访问。
1 | #服务器端指定acl,其中username和password为字符串 |
auth
auth的本质为digest,表示给认证通过的所有用户设置权限,通过
addauth digest
1 | #服务端,添加认证信息 |
ip
指定的ip或ip地址段拥有权限。
1 | #192.168.1.2拥有创建读取权限 |
super
有权限操作任何节点,用于zk管理和维护。
此scheme只能在服务端启动时添加虚拟机参数的形式使用。
在zkServer脚本中添加:
1 | SUPER_ACL=“-Dzookeeper.DigestAuthenticationProvider.superDigest=super:gG7s8t3oDEtIqF6DM9LlI/R+9Ss=” |
客户端添加super用户:
1 | addauth digest super:super |
可以看到,其实也是digest策略。
设置或获取ACL信息
设置使用
1 | setAcl [nodePath] [ACL组合] |
获取权限信息使用
1 | getAcl [nodePath] |