Zookeeper权限控制ACL详解
概述Zookeeper类似于unix文件系统,节点类比文件,客户端可以删除节点,创建节点,修改节点。Zookeeper可以使用ACL(access control list)访问控制列表来对节点的权限进行控制。acl权限控制使用:scheme????permission来标志,主要涵盖三个方面:权限模式(scheme):授权的策略。权限对象(id):授权的对象。权限(permission):授予的
概述
Zookeeper类似于unix文件系统,节点类比文件,客户端可以删除节点,创建节点,修改节点。Zookeeper可以使用ACL(access control list)访问控制列表来对节点的权限进行控制。
acl权限控制使用:scheme🆔permission来标志,主要涵盖三个方面:
- 权限模式(scheme):授权的策略。
- 权限对象(id):授权的对象。
- 权限(permission):授予的权限。
Zookeeper acl的特性:
- Zookeeper的权限控制是基于znode节点的,需要对每个节点设置权限。
- 每个znode支持设置多种权限控制方案和多个权限。
- 子节点不会继承父节点的权限。客户端无法访问某个节点,但是可以访问他的子节点。
权限模式种类
模式 | 描述 |
---|---|
world | 这种模式方法的授权对象只有一个anyone,代表登录到服务器的所有客户端都能对该节点执行某种权限 |
ip | 对连接的客户端使用IP地址认证方式进行认证 |
auth | 使用以添加认证的用户进行认证 |
digest | 使用 用户:密码方式验证 |
权限的类型
类型 | ACL简写 | 描述 |
---|---|---|
read | r | 读取节点及显示子节点列表的权限 |
write | w | 设置节点数据的权限 |
create | c | 创建子节点的权限 |
delete | d | 删除子节点的权限 |
admin | a | 设置该节点ACL权限的权限 |
关于授权的命令
命令 | 用法 | 描述 |
---|---|---|
getAcl | getAcl path | 读取节点的ACL |
setAcl | setAcl path acl | 设置节点的ACL |
create | create path data acl | 创建节点时设置acl |
addAuth | addAuth scheme auth | 添加认证用户,类似于登录操作 |
实战
- 查看节点acl
这是创建节点时的默认acl ,表示任何连接到Zookeeper的客户端都能对该节点进行cdrwa操作。
权限设置要使用模式 acl的模式为 scheme: id:permission 比如 world:anyone:cdwa
world权限模式实战
world权限模式只有一种设置模式。就是 setAcl world:anyone:[r][w][c][d][a]
-
取消节点读取数据权限:
使用命令 setAcl /node1 world:anyone:cdwa
设置以后尝试读取/node1节点将是没有权限 Authentication is not valid -
取消节点设置数据的权限
-
取消节点创建子节点的权限
-
取消删除子节点的权限
-
取消ACL相关权限
取消了a权限以后,getAcl setAcl命令都没有权限。
IP权限模式实战
该模式使用的acl方式是 ip:192.168.10.127:[a][d][c][w][r]
设置只有ip为192.168.18.135的客户端连接才能进行adc操作,其他ip啥操作都做不了。因为图中设置ACL的客户端不是这个ip,所以设置了后,他就失去对该节点的权限了,所以getAcl命令会没有权限。
这个是ip为192.168.18.135的客户端连接,有a权限,所以能够执行getAcl操作。但是没有r权限,所以还是不读读取节点数据。
auth授权模式实战
这个要配合addauth命令。
第一步:先添加授权用户 addauth digest username:password
第二步:设置该节点只有登录了该授权用户的客户端连接才能进行操作。
setAcl /path auth:username:acl
12
0uek/hZ/…是账号admin 和密码123456 经过sha1和base64加密后的密文密码。
把客户端quit退出重新连接后:
失去了对该节点的权限。需要使用addauth命令添加授权才行。类似登录之后才能对该节点有权限。
digest授权模式实战
digest授权模式基于账号密码的授权模式,与Auth模式类似,只是他设置权限之前不用使用
addauth digest username:password进行权限用户添加。
直接使用命令 setAcl path digest:username:password:acl 进行授权就行。只是这里的密码要使用加密后的密码,不能使用铭文密码。
可以使用linux命令进行
echo -n username:password | openssl dgst -binary -sha1 | openssl base64 得到加密后的密码,这里的password是铭文密码
复制加密后的密码
设置权限后已经没有该节点的权限了,原因是我们没有登录。
登录后就有该节点的权限了,登录使用明文密码进行登录。
设置多个权限
可以设置多种acl,用逗号隔开就行。
以上权限是ip为192.168.18.130的客户端具有adc权限。
用admin登录的用户具有adcwr权限。
所有人都要r权限。
测试 用admin登录的用户具有adcwr权限。需要quit退出重新连接,因为你当前已经添加了该用户的授权。
这里就不粘图了。
更多推荐
所有评论(0)