Zookeeper 节点权限控制ACL详解

这篇具有很好参考价值的文章主要介绍了Zookeeper 节点权限控制ACL详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一:zooKeeper ACL权限控制概述

Zookeeper类似于unix文件系统,节点类比文件,客户端可以删除节点,创建节点,修改节点。Zookeeper可以使用ACL(access control list)访问控制列表来对节点的权限进行控制。

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

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


Zookeeper acl的特性:
Zookeeper的权限控制是基于znode节点的,需要对每个节点设置权限。
每个znode支持设置多种权限控制方案和多个权限。
子节点不会继承父节点的权限。客户端无法访问某个节点,但是可以访问他的子节点。

权限模式种类:

权限模式种类
模式                                                              描述
world 这种模式方法的授权对象只有一个anyone,代表登录到服务器的所有客户端都能对该节点执行某种权限
ip 对连接的客户端使用IP地址认证方式进行认证
auth 使用以添加认证的用户进行认证
digest 使用 用户:密码方式验证


权限的类型:

权限类型
ACL权限类型 ACL权限缩写 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 添加认证用户,类似于登录操作

二:zookeeper ACL权限控制实战

1.查看某个节点权限

getAcl path

[zk: localhost:2181(CONNECTED) 19] create /test_shao/test_node_xx
Created /test_shao/test_node_xx
[zk: localhost:2181(CONNECTED) 20] getAcl /test_shao/test_node_xx 
'world,'anyone
: cdrwa

##这是所有节点的默认acl,表示所有连接到zookeeper 的客户端都能对该节点进行cdrwa操作(即拥有所有权限)

2. 设置/修改 world 权限模式

1)设置或者修改 world 模式权限
[zk: localhost:2181(CONNECTED) 21] setAcl /test_shao/test_node_xx world:anyone:cdra
[zk: localhost:2181(CONNECTED) 22] getAcl /test_shao/test_node_xx 
'world,'anyone
: cdra
#当前设置会覆盖节点之前的权限(注意不要轻易去掉节点的a权限,否则所有人都无法对其进行权限设置)


2)取消 world 权限模式的所有权限
setAcl /test_shao/test_node_xx world:anyone:
#不要在生产环境轻易做该参数

3.设置/修改 ip 权限模式

1) 设置单个ip
[zk: localhost:2181(CONNECTED) 23] getAcl /test_shao/test_node_xx 
'world,'anyone
: cdra
[zk: localhost:2181(CONNECTED) 24] setAcl /test_shao/test_node_xx ip:127.0.0.1:cdrwa
[zk: localhost:2181(CONNECTED) 25] getAcl /test_shao/test_node_xx 
'ip,'127.0.0.1
: cdrwa
##这时只有通过 127.0.0.1 这个ip登录的客户端,才能访问 /test_shao/test_node_xx 节点。同时我们看到之前该节点的 world 模式权限被覆盖掉了。

2) 设置ip地址段
setAcl /test_shao/test_node_xx ip:192.168.1.0/16:cdrwa

4.设置/修改 auth 权限模式

1)设置 auth 权限模式
[zk: localhost:2181(CONNECTED) 26] addauth digest admin:root
[zk: localhost:2181(CONNECTED) 27] getAcl /test_shao/test_node_xx 
'ip,'127.0.0.1
: cdrwa
[zk: localhost:2181(CONNECTED) 29] setAcl /test_shao/test_node_xx auth:admin:cdra
[zk: localhost:2181(CONNECTED) 30] getAcl /test_shao/test_node_xx 
'digest,'admin:0sxEug2Dpm/NpzMPieOlFREd9Ao=
: cdra
##使用 auth 模式前,需要先通过 addauth 命令创建授权用户(admin:后面是密码加密后的字符串),auth权限模式又覆盖了之前的ip模式权限

这时退出重新登录zk后发现没有 /test_shao/test_node_xx 的操作权限,使用授权用户后可以正常操作
[zk: localhost:2181(CONNECTED) 0] get /test_shao/test_node_xx 
Insufficient permission : /test_shao/test_node_xx
[zk: localhost:2181(CONNECTED) 1] addauth digest admin:root
[zk: localhost:2181(CONNECTED) 2] get /test_shao/test_node_xx 
null



5.设置/修改 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是铭文密码

[root@ecs-38198 ~]# echo -n admin:root | openssl dgst -binary -sha1 | openssl base64
0sxEug2Dpm/NpzMPieOlFREd9Ao=

[zk: localhost:2181(CONNECTED) 3] delete /test_shao/test_node_xx
[zk: localhost:2181(CONNECTED) 4] create /test_shao/test_node_xx "测试节点内容"
Created /test_shao/test_node_xx
[zk: localhost:2181(CONNECTED) 5] getAcl /test_shao/test_node_xx 
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 6] 
[zk: localhost:2181(CONNECTED) 6] setAcl /test_shao/test_node_xx digest:admin:0sxEug2Dpm/NpzMPieOlFREd9Ao=:cdrwa
[zk: localhost:2181(CONNECTED) 7] getAcl /test_shao/test_node_xx
'digest,'admin:0sxEug2Dpm/NpzMPieOlFREd9Ao=
: cdrwa

##退出重新登录后,发现没有权限操作该节点,需要登录后才有权限操作
zk: localhost:2181(CONNECTED) 0] get /test_shao/test_node_xx 
Insufficient permission : /test_shao/test_node_xx
[zk: localhost:2181(CONNECTED) 1] addauth digest admin:root
[zk: localhost:2181(CONNECTED) 2] get /test_shao/test_node_xx
测试节点内容

6.同时设置多个权限模式

#上面我们发现老的权限模式会被新的权限模式覆盖,如果想设置多种权限模式,可以在 setAcl 时同时指定多种权限模式通过逗号分割
[zk: localhost:2181(CONNECTED) 7] setAcl /test_shao/test_node_xx ip:127.0.0.1:cdrwa,auth:admin:cdrwa,world:anyone:cdrwa,digest:admin:0sxEug2Dpm/NpzMPieOlFREd9Ao=:cdrwa
[zk: localhost:2181(CONNECTED) 8] getAcl /test_shao/test_node_xx 
'ip,'127.0.0.1
: cdrwa
'digest,'admin:0sxEug2Dpm/NpzMPieOlFREd9Ao=
: cdrwa
'world,'anyone
: cdrwa
'digest,'admin:0sxEug2Dpm/NpzMPieOlFREd9Ao=
: cdrwa

8.设置超级权限

Zookeeper管理员会因为某些客户端对某些节点设置了权限,而导致在紧急的情况下无法修改这些节点感到困扰。在这种情况下,管理员可以通过Zookeeper超级用户模式访问这些节点,一旦设置了超级权限访问节点,后续的操作就不需要check ACL了文章来源地址https://www.toymoban.com/news/detail-620084.html

[zk: localhost:2181(CONNECTED) 4] setAcl /test_shao/test_node_xx world:anyone:r
[zk: localhost:2181(CONNECTED) 5] getAcl /test_shao/test_node_xx 
'world,'anyone
: r
[zk: localhost:2181(CONNECTED) 6] set /test_shao/test_node_xx "新的测试内容"
Insufficient permission : /test_shao/test_node_xx
[zk: localhost:2181(CONNECTED) 7] setAcl /test_shao/test_node_xx world:anyone:cdrwa
Insufficient permission : /test_shao/test_node_xx
##通过上面一通操作后,我们发现我们没有权限写/test_shao/test_node_xx 节点了,这时候怎么办?(还有比如我们使用了auth或者digest 权限模式后,忘记了密码,怎么办?)

这时我们可以设置超级权限,重启zk
1) 在 zkEnv.sh 添加如下行
export SERVER_JVMFLAGS="-Dzookeeper.DigestAuthenticationProvider.superDigest=super:g9oN2HttPfn8MMWJZ2r45Np/LIA= $SERVER_JVMFLAGS"
#这里指定的用户名密码为 super:superpw ,可以通过如下命令生成加密后的密码
[root@ecs-38198 bin]# echo -n super:superpw | openssl dgst -binary -sha1 | openssl base64
g9oN2HttPfn8MMWJZ2r45Np/LIA=

2)执行 zkEnv.sh
sh zkEnv.sh

3)重启 zk
zkServer.sh stop
zkServer.sh start

4)使用超级用户登录zk
[zk: localhost:2181(CONNECTED) 0] getAcl /test_shao/test_node_xx 
'world,'anyone
: r
[zk: localhost:2181(CONNECTED) 1] set /test_shao/test_node_xx "新的测试内容"
Insufficient permission : /test_shao/test_node_xx
[zk: localhost:2181(CONNECTED) 2] addauth digest super:superpw
[zk: localhost:2181(CONNECTED) 3] set /test_shao/test_node_xx "新的测试内容"
[zk: localhost:2181(CONNECTED) 4] get /test_shao/test_node_xx
新的测试内容
[zk: localhost:2181(CONNECTED) 5] setAcl /test_shao/test_node_xx world:anyone:cdrwa
[zk: localhost:2181(CONNECTED) 6] getAcl /test_shao/test_node_xx
'world,'anyone
: cdrwa

#这时我们看到我们可以正常操作节点的内容了,可以重新给该节点添加正确权限,让其他客户端能正常访问

到了这里,关于Zookeeper 节点权限控制ACL详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Zookeeper专题】Zookeeper特性与节点数据类型详解

    对于我们这些JavaCoder来说,市面上有各式各样,功能相似的中间件供我们使用。我想大家应该都清楚,要认识一个中间件,最好的方式应该是从它的创造背景开始说起。 ( PS:Zookeeper主要用来解决分布式集群中应用系统的一致性问题 ) ( PS:个人认为ZK最重要,或者说最有

    2024年02月06日
    浏览(34)
  • zookeeper第一课-Zookeeper特性与节点数据类型详解

    ZooKeeper 是一个开源的分布式协调框架,是Apache Hadoop 的一个子项目,主要用来解决分布式集群中应用系统的一致性问题。 Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

    2024年02月13日
    浏览(39)
  • Zookeeper特性与节点数据类型详解

    CAPBase理论 CAP理论 cap理论是指对于一个分布式计算系统来说,不可能满足以下三点:   一致性 : 在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的 特性,等同于所有节点访问同一份最新的数据副本。在一致性的需求下,当一个系统 在数据一致的状态下执

    2024年02月13日
    浏览(33)
  • 1.Zookeeper特性与节点数据类型详解

    ZooKeeper 是一个开源的分布式协调框架 ,是Apache Hadoop 的一个子项目, 主要用来解决分布式集群中应用系统的一致性问题。 Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

    2024年02月04日
    浏览(31)
  • 访问控制列表之基本ACL、高级ACL 、 高级ACL之ICMP、高级ACL之telnet

    在学习ACL(访问控制列表)之前首先要理解一下三个问题: 一、ACL的作用,以及不同类型的ACL的区别是什么? ACL的作用是:匹配感兴趣的数据包。 ACL分为基本ACL和 高级ACL, 基本ACL,只能匹配数据包的源IP地址,匹配数据不精准; 高级ACL,可以同时匹配数据包的源IP、目标

    2024年02月05日
    浏览(34)
  • hdfs中acl权限管理的简单实用

    在我们开发的过程中有这么一种场景, /projectA 目录是 hadoopdeploy 用户创建的,他对这个目录有 wrx 权限,同时这个目录属于 supergroup ,在这个组中的用户也具有这个目录的 wrx 权限,对于其他人,不可访问这个目录。现在有这么一个特殊的用户 root , 我想root用户可以访问这个

    2024年02月07日
    浏览(27)
  • ACL访问控制列表

    访问控制列表 ACL(Access Control List)是一种用于控制网络设备访问权限的技术。ACL通常用于限制某些用户或主机对网络资源的访问,通常由一系列规则组成,每个规则指定了一个源地址、目标地址和操作类型。当一个数据包到达网络设备时,设备会检查该数据包的源地址、目

    2024年02月08日
    浏览(31)
  • ACL(访问控制列表)

    ACL(访问控制列表),是一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃。 访问控制列表被广泛地应用于路由器和三层交换机,借助于访问控制列表,可以有效地控制用户对网络的访问,从而最大程度地保障网络安全。

    2024年02月09日
    浏览(23)
  • 【ACL】访问控制列表

    访问控制列表ACL (Access Control List)是一种基于 包过滤的访问控制技术 ,它可以根据设定的条件对接口上的数据包进行过滤, 允许其通过或丢弃 。 访问控制列表被广泛地应用于 路由器和三层交换机 ,借助于访问控制列表,可以有效地 控制用户对网络的访问 ,从而最大程度地

    2024年02月09日
    浏览(24)
  • Linux ACL访问控制

    在普通权限中,用户对文件只有三种身份,就是属主、属组和其他人;每种用户身份拥有读(read)、写(write)和执行(execute)三种权限。但是在实际工作中,这三种身份实在是不够用,我们举个例子来看看。 图 1 的根目录中有一个 /project 目录,这是班级的项目目录。班级

    2024年02月09日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包