zookeeper的Acl权限控制

1、概述

zookeeper类似文件系统,client可以创建结点、更新结点、删除结点,那么如何做到结点的权限控制呢?

zookeeperaccess control list 访问控制列表可以做到这一点

acl权限控制,使用scheme:id:permission来标识,主要涵盖3个方面:

  • 权限模式(scheme):授权的策略
  • 授权对象(id):授权的对象
  • 权限(permission):授予的权限

其特性如下:

  • zookeeper的权限控制是基于每个znode结点的,需要对每个结点设置权限

  • 每个znode支持多种权限控制方案和多个权限

  • 子结点不会继承父结点的权限,客户端无权访问某结点,但可能可以访问它的子结点:

    例如:

    setAcl /test2 ip:192.168.133.133:crwda  # 将结点权限设置为Ip:192.168.133.133 的客户端可以对节点进行增删改查和管理权限
    
2、权限模式

采用何种方式授权:

方案描述
world只有一个用户:anyone,代表登录zookeeper所有人(默认)
ip对客户端使用IP地址认证
auth使用已添加认证的用户认证
digest使用"用户名:密码"方式认证
8.3、授权对象
  • 给谁授予权限;
  • 授权对象ID是指,权限赋予的实体,例如:IP地址或用户。
8.4、授权的权限
  • 授予什么权限?

  • create、delete、read、writer、admin也就是 增、删、查、改、管理权限,这5种权限简写为 c d r w a,注意这五种权限中,有的权限并不是对结点自身操作的例如:delete是指对子结点的删除权限。

    可以试图删除父结点,但是子结点必须删除干净,所以delete的权限也是很有用的。

权限ACL简写描述
createc可以创建子结点
deleted可以删除子结点(仅下一级结点)
readr可以读取结点数据以及显示子结点列表
writew可以设置结点数据
admina可以设置结点访问控制权限列表
8.5、授权的相关命令
命令使用方式描述
getAclgetAcl读取ACL权限
setAclsetAcl设置ACL权限
addauthaddauth添加认证用户
8.6、案例

./zkServer.sh -server 192.168.133.133 可以远程登录

(1)world授权模式

  • getAcl /node // 读取权限信息
  • setAcl /node world:anyone:drwa // 设置权限(禁用创建子结点的权限)
[zk: localhost:2181(CONNECTED) 1] create /node1 "node1"
Created /node1
[zk: localhost:2181(CONNECTED) 2] getAcl /node1
'world,'anyone #world方式对所有用户进行授权
: cdrwa #增、删、改、查、管理
[zk: localhost:2181(CONNECTED) 3] setAcl /node1 world:anyone:cdrwa
cZxid = 0x2
ctime = Fri Dec 13 22:25:24 CST 2019
mZxid = 0x2
mtime = Fri Dec 13 22:25:24 CST 2019
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

(2)ip授权模式

./zkServer.sh -server 192.168.133.133 可以远程登录

  • setAcl /hadoop ip:192.168.133.133:drwa
  • 如果在两台不同的虚拟机中,另一台用远程连接的模式,进行上面这条命令,那么只会有一台被授权
  • 需要两台虚拟机一起授权的话需要用逗号将授权列表隔开:setAcl /hadoop ip:192.168.133.133:cdrwa,ip:192.168.133.132:cdrwa

(3)auth授权模式

addauth digest <user>:<password>

setAcl <path> auth:<user>:<acl>

create /hadoop "hadoop"           # 初始化测试用的结点
addauth digest itcast:123456      # 添加认证用户
setAcl /hadoop auth:itcast:cdrwa  # 设置认证用户
quit                              # 退出后再./zkCli.sh 进入
get /hadoop                       # 这个时候就没有权限了,需要再次认证
addauth digest itcast:123456      # 认证,密码错了的话 zookeeper 不会报错,但是不能认证
get /hadoop

(4)Digest授权模式

setAcl <path> digest:<user>:<password>:<acl>

这里的密码是经过SHA1以及BASE64处理的密文,在shell 中可以通过以下命令计算:

echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64
# 计算密码
echo -n itcast:12345 | openssl dgst -binary -sha1 | openssl base64
# 获取密码,设置权限列表
setAcl /hadoop digest:itcast:qUFSHxJjItUW/93UHFXFVGlvryY=:cdrwa
# 现在想要get /hadoop 需要登录了
addauth digest itcast:12345
get /hadoop

(5)多种授权模式

同一个节点可以同时使用多种模式授权,仅需逗号隔开:

[zk: localhost:2181(CONNECTED) 0] create /node5 "node5"
Created /node5
[zk: localhost:2181(CONNECTED) 1] addauth digest itcast:123456 
#添加认证用户
[zk: localhost:2181(CONNECTED) 2] setAcl /node5
ip:192.168.60.129:cdra,auth:itcast:cdrwa,digest:itheima:qlzQzCLKhBROgh
kooLvb+Mlwv4A=:cdrwa
8.7、acl 超级管理员

zookeeper的权限管理模式有一种叫做super,该模式提供一个超管可以方便的访问任何权限的节点。

假设这个超管是supper:admin,需要为超管生产密码的密文:

echo -n super:admin | openssl dgst -binary -sha1 | openssl base64

那么打开zookeeper目录下/bin/zkServer.sh服务器脚本文件,找到如下一行:

 #nohup 快速查找,可以看到如下
 nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"

这个就算脚本中启动zookeeper的命令,默认只有以上两个配置项,我们需要添加一个超管的配置项:

"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="

修改后命令变成如下:

nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-
Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-
Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBv
st5y6rkB6HQs="\
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT"
2>&1 < /dev/null &
# 重启后,现在随便对任意节点添加权限限制
setAcl /hadoop ip:192.168.1.1:cdrwa # 这个ip并非本机
# 现在当前用户没有权限了
getAcl /hadoop
# 登录超管
addauth digest super:admin
# 强行操作节点
get /hadoop
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值