Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >zookeeper ACL 权限控制

zookeeper ACL 权限控制

作者头像
create17
发布于 2019-04-17 06:54:47
发布于 2019-04-17 06:54:47
6.5K00
代码可运行
举报
运行总次数:0
代码可运行

每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

放弃不难,但坚持很酷~

版本说明: zookeeper:3.4.6

一、概述

zooKeeper使用acl(Access Control List)来控制对其znode(zooKeeper数据树的数据节点)的访问。 不过,zookeeper的acl并不像HDFS系统的acl一样,可以递归控制权限。zookeeper的acl不是递归的,仅适用于特定的znode。比如/app这个znode,设置一些权限,只能某用户可以访问,但是/app/status的权限是与/app没有关系的,默认是world:anyone:cdrwa

总的来说。zookeeper的acl特点可以分为以下几点:

  • zooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限。
  • 每个znode支持设置多种权限控制方案和多个权限。多种权限控制方案以逗号分隔,例如:setAcl /hiveserver2 sasl:hive:cdrwa,world:anyone:r
  • 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点。

二、权限类型

当客户端连接到zooKeeper并对其自身进行身份验证,当客户端尝试访问znode节点时,将检查znode的acl。 acl由(scheme:expression:permission)对组成,表达式的格式特定于scheme。例如,该对(ip:19.22.0.0/16:r)为任何IP地址以19.22开头的客户端提供READ权限。

zookeeper默认所有节点都是world:anyone:cdrwa,即所有人都拥有这五个权限,按顺序分别为:

  • Create:允许对子节点Create操作
  • Delete:允许对子节点Delete操作
  • Read:允许对本节点GetChildren和GetData操作,有对本节点进行删除操作的权限
  • Write:允许对本节点SetData操作
  • Admin:允许对本节点setAcl操作

三、访问控制列表方案(ACL Schemes)

zookeeper的ACL Schemes有以下几种:

  • world:只有一个id即anyone,为所有Client端开放权限。
  • auth:不需要任何id,只要是通过auth的用户都有权限。
  • digest:Client端使用用户和密码的方式验证,采用username:BASE64(SHA1(password))的字符串作为节点ACL的id(如:digest:lyz:apNZxQYP6HbBQ9hRAibCkmPKGss=)。
  • ip:使用客户端的IP地址作为ACL的id,可以设置为一个ip段(如:ip:192.168.0.1/8)。Client端由IP地址验证,譬如172.2.0.0/24。
  • sasl:设置为用户的uid,通过sasl Authentication用户的id,在zk3.4.4版本后sasl是通过Kerberos实现(即只有通过Kerberos认证的用户才可以访问权限的znode),使用sasl:uid:cdwra字符串作为节点ACL的id(如:sasl:lyz:cdwra)。

四、示例

acl的相关命令如下表所示:

命令

使用方式

描述

getAcl

getAcl <path>

读取ACL权限

setAcl

setAcl <path> <acl>

设置ACL权限

addauth

addauth <scheme> <auth>

添加认证用户

通过以下命令进入zookeeper cli模式,默认连接localhost

1. world 模式

zookeeper创建的节点默认的权限就是world:anyone:cdrwa,即所有人在client端都拥有cdrwa这五个权限。如下图所示:

节点权限是world,也就是默认权限,为所有client端开放,这样肯定是不安全的,我们先基于auth模式进行权限的控制。

2. auth 模式

为/test1节点增加auth权限认证方式。设置方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
addauth digest <用户>:<明文密码> #添加认证用户
setAcl <path> auth:<user>:<acl>

客户端示例:

小结:

  • 首先,需要创建用户上下文 -- addauth,密码为明文密码。
  • 其次设置权限 -- setAcl
  • 查看节点权限的时候,密码会自动转为密文,该密文是采用user:BASE64(SHA1(password))的字符串。
  • 查看节点数据之前,必须确保拥有认证用户的上下文,否则会报:Authentication is not valid : /test1
3. digest 模式

设置方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setAcl <path> digest:<用户>:<密文>:<acl>

digest加密模式相对于auth来说要稍微麻烦一些,需要对明文密码进行BASE64(SHA1(password))的处理。

如何对password进行加密,有两种方法:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64

生成lyz:create17对应的加密密文,如下图所示:

切记:生成的是lyz:create17对应的密文,如果将lyz换为其它,密文则不一样。

第二种方法:使用zookeeper提供的java类来生成密文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export ZK_CLASSPATH=/etc/zookeeper/conf/:/usr/hdp/current/zookeeper-server/lib/*:/usr/hdp/current/zookeeper-server/*
java -cp $ZK_CLASSPATH org.apache.zookeeper.server.auth.DigestAuthenticationProvider lyz:create17

执行效果如下图所示:

客户端示例:

小结:

  • 首先,获取密码加密后的密文
  • 然后可直接setAcl设置权限,不用添加身份认证
  • 如果要访问节点数据,必须确保拥有认证用户的上下文,再访问节点数据,否则会报:Authentication is not valid : /test2

digest 与 auth 模式之间的不同:

  • auth采取明文认证的模式,在对节点设置权限之前,需要先设置认证用户的上下文。访问节点数据也是同理。
  • digest采取密文认证的模式,可以直接对节点设置权限。当访问节点数据时,也需要提前设置认证用户的上下文。
4. ip 认证模式

设置方式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setAcl <path> ip:<ip>:<acl>

<ip>:可以是具体IP也可以是IP/bit格式,即IP转换为二进制,匹配前bit位,如192.168.0.0/16匹配192.168.*.*

客户端示例:

如上图所示,对/test3节点设置10.6.6.71全部权限,10.6.6.72可读权限。使用localhost访问/test3,自然是不可行的。接下来在10.6.6.71与72节点上测试一下:

在10.6.6.72节点进入zkCli模式:

执行命令:/usr/hdp/3.0.1.0-187/zookeeper/bin/zkCli.sh -server 10.6.6.72

在10.6.6.73节点进入zkCli模式,访问/test3数据,会报:Authentication is not valid : /test3

5. sasl 模式

该模式属于kerberos所特有的模式,需要依赖kerberos实现。只有通过Kerberos认证的用户才可以访问权限的znode。设置权限的方式,比如:setAcl /hiveserver2 sasl:hive:cdrwa

五、设置超级管理员

假如你忘记了你认证用户的密码,或者基于其它什么情况,导致某znode节点无法被操作,怎么办呢?其实我们可以为zookeeper设置超级管理员。

用户:密码还是以lyz:create17为例:

1.首先还是要获取lyz:create17的密文,这里就不赘述了,密文为:lyz:apNZxQYP6HbBQ9hRAibCkmPKGss=

2.编辑/usr/hdp/3.0.1.0-187/zookeeper/bin/zkServer.sh,添加一些配置。

"-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=lyz:apNZxQYP6HbBQ9hRAibCkmPKGss="添加至文件的第135行,注意前后空格。具体如下图所示:

3.保存文件,重启该节点上的zookeeper服务。这样,zookeeper的超级管理员就设置成功了。

4.执行命令进入zkCli模式:/usr/hdp/3.0.1.0-187/zookeeper/bin/zkCli.sh,再执行addauth digest lyz:create17认证身份,这样就具备超级管理员角色,可以操作任意节点了。

六、总结

本篇文章主要介绍了zookeeper的acl操作,介绍了acl的权限类型,还有acl的Schemes。主要是对Schemes如何使用进行了示例说明。

zookeeper的acl不支持级联操作,即子节点不会继承父节点的权限。这样就导致了修改节点权限比较麻烦,可能这种设计模式也有它的优点吧。如果有对这一方面了解的朋友,欢迎告知,谢谢。

更多acl知识,可参考zookeeper官网:

https://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据实战演练 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ZRobot CEO乔杨:区块链为信用租赁市场带来新变量
“租赁模式”在社会上的产生与发展渊源流长。作为一种拥有上千年历史的商业行为,租赁发展至今依然保持着其旺盛的生命力。
数据猿
2019/01/02
6200
关于共享出行,这里有一些你并不知道的“干货”
共享经济其实是一个非常宽泛的领域,其覆盖的行业有太多太多。 从2000年开始,随着互联网时代的到来,开始有大量的社区、BBS、论坛出现,在这些最原始的社交平台上,人们开始表达出自己的观点,并分享很多信
镁客网
2018/05/29
3620
灯塔原创 | 我对共享经济的3大疑问——用数据事实解开答案
导读: 共享单车,谁才是行业老大? 共享电单车,究竟怎么充的电? 共享猫咪、共享姨妈巾、共享男朋友,这些共享行业新闻是真是假? 最近,在国内共享单车之战打得如火如荼之时,又传来摩拜和OFO纷纷踏入海外
灯塔大数据
2018/04/04
7780
灯塔原创 | 我对共享经济的3大疑问——用数据事实解开答案
基于以太坊的去中心化智能锁
共享经济(Sharing Economy)是一种新生业务,利用互联网将顾客和服务提供商匹配起来,并在现实世界中进行交易,比如公寓短租和汽车搭乘服务。
lambeta
2018/08/17
2840
基于以太坊的去中心化智能锁
共享单车大败局:资本神话破灭始末
武汉市洪山区几栋排列齐整的高层居民楼旁,上万辆共享单车混乱地堆放着,一座小小的中式凉亭被尴尬地淹没在橙、黄、蓝、灰的单车海洋中。
亲民创业网
2018/12/25
3820
共享马扎、共享女友、共享卫生间……被网友玩坏的共享经济,不过是租赁而已
共享经济市场可谓冰火两重天。一边是町町单车等中小共享单车玩家出局,一边是新的共享经济项目不断出现。在共享充电宝、共享雨伞之后,又陆续出现共享睡眠仓、mini KTV、共享纸巾机、共享马扎、共享健身仓、
罗超频道
2018/04/25
1.1K0
共享马扎、共享女友、共享卫生间……被网友玩坏的共享经济,不过是租赁而已
区块链与共享经济
共享经济的本质——整合线下的闲散物品或服务者,让他们以较低的价格提供产品或服务。对于供给方来说,通过在特定时间内让渡物品的使用权或提供服务,来获得一定的金钱回报;对需求方而言,不直接拥有物品的所有权,而是通过租、借等共享的方式使用物品。
广州闪链科技
2018/10/17
7.5K0
区块链与共享经济
共享单车收的押金,都去哪了?
数据猿导读 近日,央视炮轰摩拜单车,指出其去年12月活跃用户313.5万人,押金超9亿。用户交的押金充进去容易退起来难,在一充一退的时间差里,这笔庞大的资金用来做什么呢?是否在监管范围内。 记者 |
数据猿
2018/04/23
5570
共享单车收的押金,都去哪了?
ofo获蚂蚁金服投资,头部资源聚集将成下一个滴滴?
创业公司和互联网巨头战略合作,往往是给融资埋下的伏笔。在与蚂蚁金融旗下的芝麻信用在上海、杭州等地合作“信用解锁”之后,4月22日ofo宣布获得蚂蚁金服战略投资,双方将在支付、信用、国际化等领域展开全面
罗超频道
2018/04/16
6120
ofo获蚂蚁金服投资,头部资源聚集将成下一个滴滴?
缺失的运维,困顿的共享单车
共享单车行业这几年来经历了起起伏伏的发展,这是有目共睹的,此前红极一时的小黄车OFO,如今还有很多人的押金没有退回,而曾经和OFO割据市场的摩拜单车,在卖身之后也几乎已经消失不见。
刘旷
2021/03/03
3510
灯塔原创|ofo与摩拜的斗争是否会走滴滴和快的老路?
他,眉头紧锁,不知遇到什么难题;他,剑眉星目,却透露着犹豫的神情。是什么让他举棋不定?是什么让他迟疑未决?他,会做出何种选择? 原来!是小黄车与摩拜单车! 近两年的北京,被橙、黄两色刷了屏。那一抹宛如夕阳般绚丽的橙色映衬着银杏般的黄色,辉映在人们的视野中。 ofo与摩拜单车之所以能够如此快速的占领市场,是由于较比传统的车辆租赁,他们有着天然的优势: 1. 摆脱了停车桩的束缚 用户可以随用随骑,不用前往停车桩找车,也不用寻找停车桩还车; 2. 无需办卡 不需要前往相关地点办理借车卡,省去了时间,也吸
灯塔大数据
2018/04/08
6410
灯塔原创|ofo与摩拜的斗争是否会走滴滴和快的老路?
ofo在广州免押金!免押金成共享单车大战的杀手锏
今天早晨打开ofo的App发现,广州也可以免押金骑车了,只要芝麻信用分在650以上的用户,经过信用授权之后即可免押金骑车。这是继上海、杭州之后,ofo免押金骑车支持的第三个城市。结合最近行业的种种迹象
罗超频道
2018/04/16
5500
ofo在广州免押金!免押金成共享单车大战的杀手锏
滴滴收购ofo一旦完成,共享单车的新战役或将开启
在摩拜投入到美团旗下之后,共享单车市场上人们开始关注ofo的未来走向。尽管ofo一直在向外界释放想要独立发展的信号的,但是靠低回报、高成本的运营模式告诉我们,仅仅依靠用户押金和租车费用难以支撑庞大的运营业务。
孟永辉
2018/08/01
2960
滴滴收购ofo一旦完成,共享单车的新战役或将开启
漩涡之下,共享单车如何才能成为“弄潮儿”?
文|孟永辉 共享单车的底牌越来越明显,继传出摩拜和ofo即将合并的传闻之后,又有投资人表示共享单车不能靠投资来维持,必须实现自我盈利。在经历了将近一年的发展之后,共享单车作为一种后“互联网+”时代的商业模式开始逐步进入到调整期。 不断有共享单车平台关门倒闭,不断有用户反馈押金无法及时退还,共享单车遭遇到的是越来越多的质疑和诟病。在整个行业的发展逐步进入到新技术阶段的当下,共享单车的发展模式似乎已经不再具有新颖性,资本和市场对于共享单车的耐心变得越来越少。 共享单车在刚刚出现的时候,之所以能够受到诸多资本巨头
孟永辉
2018/05/15
6070
别人疯狂造车,ofo却要靠连接+共享单车模式快速结束战斗
继滴滴快的之后,今年共享单车成为新的现象级公司。摩拜、ofo、小鸣们竞争十分激烈,据说已有20家投资机构、超过10亿资金涌入这一行业。拿到钱之后的共享单车平台现在的重点均是进入更多的城市、投放更多的车
罗超频道
2018/04/27
7780
别人疯狂造车,ofo却要靠连接+共享单车模式快速结束战斗
哈罗单车、美团单车、和滴滴青桔的新三国杀
近日,美团旗下摩拜单车发布的数据显示,截至今年12月,共有近18.92万用户通过App等渠道举报私占、破坏共享单车超27.87万次,涉及车辆超20.56万。
刘旷
2020/01/02
5690
哈罗单车、美团单车、和滴滴青桔的新三国杀
共享单车没了,我的押金怎么办?
企鹅号小编
2017/12/27
6290
滴滴、摩拜和ofo纷纷加码,为何共享电单车市场却起不来?
10月29日,据新京报报道,ofo小黄车的国内的运营主体东峡大通(北京)已经完成了电单车的专利申请,该专利名称为“电单车的车速控制方法、系统及电单车”,主要解决因电单车误操作而造成的车辆突然加速的问题。
罗超频道
2018/12/05
4510
共享单车并非共享,同样要经历下半场
文|孟永辉 基于共享经济产生的共享单车成功抓住了互联网下半场的尾巴,继轮番获得融资之后,共享单车的布局大战开始如火如荼地进行。很多人会将共享单车的兴起与人们最后一公里的出行痛点结合在一起,并将共享单车的出现看作是资本寒冬下一场由资本自导自演的闹剧。 存在即是合理。共享单车既然能够在短时间内占据人们的视野,并成为整个互联网圈都在议论的话题自然有它能够吸引人的地方。深入探究共享单车的出现和兴起,似乎与其前辈Uber、滴滴有着相同的路径。前期都是各路英雄蜂拥进入,用户抢夺大战此起彼伏,等到用户争夺行将结束,一个
孟永辉
2018/05/11
4890
ofo打响共享单车广告战第一枪,单车大战下一步还会怎么玩?
今天在朋友圈看到,ofo启动了一轮广告投放。 对于互联网业务而言,线下广告本身就是奢侈品,然而互联网玩家却对其趋之若鹜。 2011年初,美团网启动1.3亿元的广告投放计划,团宝网、大众点评和糯米的广告
罗超频道
2018/04/27
7920
ofo打响共享单车广告战第一枪,单车大战下一步还会怎么玩?
推荐阅读
相关推荐
ZRobot CEO乔杨:区块链为信用租赁市场带来新变量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验