ZooKeeper 的 ACL 权限控制和 Unix/Linux 操作系统的ACL有一些区别,我们可以从三个方面来理解 ACL 机制,分别是: 权限模式(Scheme)、授权对象(ID)和权限(Permission),通常使用 scheme:id:perm 来标识一个有效的ACL信息。
需要注意的是,ACL仅与指定 ZNode 有关,不适用于子节点。例如,如果 /app 节点仅可由 ip:172.16.16.1 读取,而 /app/status 设置为 world 模式,那么任何人都可以读取 /app/status 。不跟我们想象一样,ACL不是递归的。
1. 权限
权限(perm)就是指那些通过权限检查后可以被允许执行的操作。在 ZooKeeper 中,所有对数据的操作权限分为以下五大类:
权限
ACL简写
描述
CREATE
C
子节点的创建权限,允许授权对象在该数据节点下创建子节点。
DELETE
D
子节点的删除权限,允许授权对象删除该数据节点的子节点。
READ
R
数据节点的读取权限,允许授权对象访问该数据节点并读取其数据内容或子节点列表等。
WRITE
W
数据节点的更新权限,允许授权对象对该数据节点进行更新操作。
ADMIN
A
数据节点的管理权限,允许授权对象对该数据节点进行ACL相关的设置操作。
2. 授权对象
授权对象(id)指的是权限赋予的用户或一个指定实体,例如IP地址或是机器等。在不同的权限模式下,授权对象是不同的,下表中列出了各个权限模式和授权对象之间的对应关系。
权限模式
授权对象Id
IP
通常是一个IP地址或是IP段,例如 '192.168.0.110”或“192.168.0.1/24'
Digest
自定义,通常是 'username:BASE64(SHA-1(username:password))',例如 'user2:lo/iTtNMP+gEZlpUNaCqLYO3i5U='
World
只有一个ID:'anyone'
Auth
该模式不关注授权对象,但必须有
Super
与Digest模式一致
3. ACL管理
权限相关命令:
命令
使用方式
描述
getAcl
getAcl
读取 ACL 权限
setAcl
setAcl
设置 ACL 权限
addauth
addauth
添加认证用户
3.1 设置ACL