zookeeper的ACL

1 权限控制概述

zookeeper的ACL权限控制使⽤"scheme:id:permission"来标识,主要涵盖如下三个⽅⾯:
权限模式(scheme):
所谓的权限模式指的是采⽤何种⽅式授权。
zookeeper⽀持以下⼏种权限模式:
world:
只有⼀个⽤户,即"anyone",代表登录zookeeper的所有⼈,这也是默认
的权限模式。
ip:
对客户端使⽤IP地址认证。
auth:
使⽤已添加认证的⽤户认证。
digest:
使⽤"⽤户名:密码"⽅式进⾏认证。

授权的对象(id):
所谓的授权对象指的是给谁授予权限。授权对象ID是指权限赋予的实体,例如: IP地
址或⽤户。
权限(permission):
指的是授权的权限。zookeeper⽀持以下⼏种权限:
create(简写"c"):
表示可以创建⼦节点。
delete(简称"d"):
可以删除⼦节点。
read(简称"r"):
可以读取节点数据及显示⼦节点列表。
write(简称"w"):
可以修改节点数据。
admin(简称"a"):
可以设置节点访问控制列表权限。
zookeeper的ACL的特点如下:
(1)zookeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限;
(2)每个znode⽀持设置多种权限控制⽅案和多个权限;
(3)⼦节点不会继承⽗节点的权限,也就是说,客户端⽆权访问某个znode,并不代表⽆法访
问它的⼦节点;

授权管理的相关命令:
getAcl:
读取ACL权限,使⽤语法:"getAcl [-s] path"。
setAcl:
设置ACL权限,使⽤语法:"setAcl [-s] [-v version] [-R] path acl"。
addauth
添加认证⽤户,使⽤语法:"addauth scheme auth"。

2 基于world授权模式及权限验证

setAcl /oldboyedu-linux world:anyone:wra
 对"/oldboyedu-linux"znode设置read,write,admin权限。

温馨提示:
 如果admin权限被移除,则意味着将⽆法对该znode进⾏权限修改了,⽣产环境中建议配置
超级管理员。

3 zookeeper的ACL-基于ip权限模式

setAcl /linux80 ip:10.0.0.102:rwa
 只允许"10.0.0.102"这个服务器IP来访问,其权限为read,write,admin。

setAcl /linux80 ip:10.0.0.0/24:ra
 只允许"10.0.0.0/24"这个网段IP来访问,其权限为read,admin。

setAcl /linux80 ip:10.0.0.101:ra,ip:10.0.0.103:rwa
 只允许"10.0.0.101"和"10.0.0.103"这两个服务器IP来访问。
 101的权限是read,admin。103的权限是read,write和admin。

4 zookeeper的ACL-基于auth权限

(1)添加账号
addauth digest admin:oldboyedu
(2)配置权限
setAcl /linux80 auth:admin:cra
(3)验证
addauth digest admin:oldboyedu
getAcl /linux80 

5 zookeeper的ACL-基于digest

(1)使⽤sha1加密算法及base64编码来进⾏⼀个密码的计算
echo -n admin:oldboyedu | openssl dgst -binary -sha1 | base64
 运⾏上述命令会得到: Tmbbt77KcTd1bAgjQaI+GqI0hjM=
(2)创建znode时同时指定ACL(⽆需登录,可以重新打开zkCli.sh脚本测试)
create /linux80 oldboyedu digest:admin:Tmbbt77KcTd1bAgjQaI+GqI0hjM=:rwa
(3)验证
addauth digest admin:oldboyedu
get /linux80

6 zookeeper的ACL-多个授权模式

(1)使⽤sha1加密算法及base64编码来进⾏⼀个密码的计算
echo -n admin:oldboyedu | openssl dgst -binary -sha1 | base64
 运⾏上述命令会得到: Tmbbt77KcTd1bAgjQaI+GqI0hjM=

(2)创建znode时同时指定ACL
addauth digest jason:123
create /oldboyedu-elk oldboyedu-linux80 
digest:admin:Tmbbt77KcTd1bAgjQaI+GqI0hjM=:rwa,auth:jason:rw,ip:10.0.0.10
2:dr,world:anyone:rc
(3)验证world权限
使⽤zkCli.sh脚本重连测试,配置"whoami"查看当前⽤户即可。主要验证read和create权
限。
(4)验证ip权限
使⽤zkCli.sh脚本重连测试,配置"whoami"查看当前⽤户即可。主要验证delete权限。
(5)验证auth权限
使⽤zkCli.sh脚本重连测试,配置"whoami"查看当前⽤户即可。主要验证write权限。
(5)验证digest权限
使⽤zkCli.sh脚本重连测试,配置"whoami"查看当前⽤户即可。主要验证admin权限。

7 配置超级⽤户B推荐部署集群的时候使⽤

(1)使⽤sha1加密算法及base64编码来进⾏⼀个密码的计算
echo -n admin:oldboyedu | openssl dgst -binary -sha1 | base64
 运⾏上述命令会得到: Tmbbt77KcTd1bAgjQaI+GqI0hjM=
(2)修改zkEnv.sh脚本,配置超级⽤户
vim /oldboyedu/softwares/zk/bin/zkEnv.sh 
...
export SERVER_JVMFLAGS="-
Dzookeeper.DigestAuthenticationProvider.superDigest=admin:Tmbbt77KcTd1bA
gjQaI+GqI0hjM= -Xmx{ZK_SERVER_HEAP}mSERVER_JVMFLAGS"
(3)同步脚本叫其他zk节点

(4)重启集群

温馨提示:
 ⽬前使⽤zookeeper 3.8版本貌似⽆法替换⽤户名,超级管理员⽤户名称暂时推荐使⽤
admin。
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: