1.概述
acl:access control list 访问控制列表,使用scheme:id:permission来表示
scheme:权限模式
id:授权对象
permission:授予的权限
其特性如下:
Zookeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限。
每个znode支持多种权限控制方案和多个权限
子节点不会继承父节点的权限,客户端无权访问某个节点,但可以访问它的子节点
2.授权模式
world 只有一个用户:anyone,代表登陆zookeeper所有人(默认)
ip 对客户端使用ip地址认证
auth 使用已添加认证的用户认证
digest 使用“用户名:密码”方式认证
3.授权对象
给谁授予权限
授权对象ID是指,权限赋予的尸体,例如:IP地址或用户。
4.授予的权限
权限
ACL简写
描述
create
c
可以创建子节点
delete
d
可以删除子节点(仅下一级节点)
read
r
可以读取节点数据及显示子节点列表
write
w
可以设置节点数据
admin
a
可以设置节点访问控制列表权限
5.相关命令
getAcl path #读取acl权限
setAcl path acl #设置acl权限
addauth scheme auth #添加认证用户
6.详细命令
world模式:
setAcl world:anyone:
ip模式:
setAcl ip::
auth模式:
先添加认证用户:
addauth digest :
setAcl auth::
digest模式:
setAcl digest:::
这里的面面是经过SHA1及BASE64处理的密文,在shell中可以通过一下命令计算:
echo -n : | openssl dgst -binary -sha1 | openssl base64
多种模式授权:
同一个节点可以使用多种模式授权,用逗号分隔
setAcl ip::,auth:::,digest:::
7.acl超级管理员
zookeeper的权限管理模式有一种叫做super,超管可以访问任何权限的节点。
假如超管是super:admin,首先生成密码的密文
echo -n super:admin | openssl dgst -binary -sha1 | openssl base64
编辑zookeeper的服务器脚本文件zkServer.sh:
找到该行
加入如下命令:其中super为超管的名字,后面为密码
"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="
然后重启zookeeper服务,配置即可生效。
addauth digest super:admin #添加超级管理员用户