当前位置:   article > 正文

zookeeper--ACL详解

zookeeper--ACL详解

一、ACL组成简介 (Access Control List)

ACL 权限设置由scheme:expression, perms 三部分组成,分别代表了认证模式(scheme)、授权对象id、对应的权限;

1、认证模式(scheme)

(1)digest模式 ( user:password)

create /zk-node-create-schema mydata digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwad
set /zk-node-create-schema  digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwad
  • 1
  • 2

密码是加密密码,加密步骤如下:
1、首先先对user:password 使用sha1算法得出摘要(digest);
2、然后使用base64算法对该摘要加密;
命令如下:

echo -n user:password | openssl dgst -binary -sha1 | openssl base64 
  • 1

(2)world模式,即world:anynoe cdrwa

world模式是节点的默认模式,当一个节点被创建就会被赋予这种模式,world模式代表所有人对该节点有cdrwa权限。

(3)auth模式

要使用该模式,首先要使用addauth命令添加用户,否则会报错;权限设置命令如下:

create  /test10 hello  auth:user1:明文密码:permissions 
setAcl  /test10   auth:user1:明文密码:permissions 
  • 1
  • 2

在auth模式下,对应于上述命令,会自动忽略其中的user1和明文密码字段,而使用通过addauth命令添加的用户和密码,虽然会忽略user1和明文密码字段,但是不能取消,否则会报错;如果添加了多个用户,会对所有已添加的用户设置相同的权限,详情请见下文。

(4)ip模式 ip:具体ip:permissions

该模式对连接服务器的客户端ip进行认证,可以设置多个ip,多个ip通过逗号分隔;

setAcl  /test  ip:IP1:cr,ip:IP2,rw
  • 1

(5) x509模式

2、权限(permissions)

权限类型ACL简写说明
createc可以创建一个子节点
readr可以获取节点的数据以及列出子节点
writew可以对节点设置数据
deleted可以删除一个子节点
admina具有设置该节点ACL权限的权限

二、相关命令

1、create

创建节点的时候就指定权限,指定权限的同时需要执行节点值,否则会将权限设置为节点值;

create [-s] [-e] [-c] [-t ttl] path [data] [acl]

# create a node with the schema
[zkshell: 11] create /zk-node-create-schema mydata digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwad
	Created /zk-node-create-schema
[zkshell: 12] addauth digest user1:12345
[zkshell: 13] getAcl /zk-node-create-schema
	'digest,'user1:+owfoSBn/am19roBPzR1/MfCblE=
	: cdrwa
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、addauth scheme auth 与auth模式认证

==scheme一般是digest,并且auth中的密码是明文 ==

[zkshell: 9] getAcl /acl_digest_test
    Insufficient permission : /acl_digest_test
[zkshell: 10] addauth digest user1:12345
[zkshell: 11] getAcl /acl_digest_test
    'digest,'user1:+owfoSBn/am19roBPzR1/MfCblE=
    : cdrwa
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

addauth 命令用于在当前seesion中添加用户,当查询或者更改节点信息的时候,服务器会校验当前seesion中是否存在此用户,并校验其密码是否正确,否则会报错

当使用 以下两种方式创建ACL控制权限的时候,需要注意:

create  /test10 hello  auth:user1:明文密码:permissions 
setAcl  /test10   auth:user1:明文密码:permissions 
  • 1
  • 2

需要先使用addauth 添加用户,否则会报错,可以添加多个用户,如果添加多个用户,就会对所有用户赋一样的权限,例如:

addauth digest ramboo1:ramboo1
addauth digest ramboo2:ramboo2
addauth digest ramboo3:ramboo3
setAcl /auth auth:ramboo1:ramboo1:cdrwa
getAcl /auth
  • 1
  • 2
  • 3
  • 4
  • 5

结果如下

'digest,'ramboo1:JXpHVJcEMUsIf5MM6u7TlOp3pqo=
: cdrwa
'digest,'ramboo2:lTTHGKOT6A3iEwj/SV5meGTXbAM=
: cdrwa
'digest,'ramboo3:b8+HkvFoPszTILQTMB1YFQ+Yvus=
: cdrwa
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、setAcl

setAcl   /test10  scheme:expression, perms 
  • 1

4、getAcl 获取节点的ACL权限

[zkshell: 4] create /acl_test mydata ip:127.0.0.1:crwda
	Created /acl_test
[zkshell: 5] getAcl /acl_test
	'ip,'127.0.0.1
	: cdrwa
	[zkshell: 6] getAcl /testwatch
	'world,'anyone
	: cdrwa
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

三、ACL权限特性说明

  • 1、ACL权限控制是基于znode节点的,需要对节点设置权限;
  • 2、ACL权限控制只针对当前节点,并不会对子节点有效,即ACL权限并不会递归;
  • 3、一个节点最原始的权限是world:anynoe cdrwa,即任何人拥有所有权限;
  • 4、每个znode支持设置多种权限控制方案和多个权限;

四、实践

1、digest模式加密

[zhjl@yyzc-zhjlpi02 ~]$ echo -n lichf1:12345| openssl dgst -binary -sha1 | openssl base64
PLvXdiB/dq9VM2nkYPecse4HT98=
[zhjl@yyzc-zhjlpi02 ~]
  • 1
  • 2
  • 3

2、digest模式创建–需要先通过addauth添加用户才可以进行后续操作

[zk: localhost:2181(CONNECTED) 5] create /test7  'hello world ' digest:lichf1:PLvXdiB/dq9VM2nkYPecse4HT98=:crwad
Created /test7
[zk: localhost:2181(CONNECTED) 6] get /test7
Insufficient permission : /test7
[zk: localhost:2181(CONNECTED) 7] addauth digest lichf1:12345
[zk: localhost:2181(CONNECTED) 8] get /test7
hello world
[zk: localhost:2181(CONNECTED) 9] getAcl /test7
'digest,'lichf1:PLvXdiB/dq9VM2nkYPecse4HT98=
: cdrwa
[zk: localhost:2181(CONNECTED) 10]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3、模式错误会报错,并退出连接

[zk: localhost:2181(CONNECTED) 8] addauth lichf4
[zk: localhost:2181(CONNECTED) 9]
WATCHER:
WatchedEvent state:AuthFailed type:None path:null
2024-03-27 21:48:09,838 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@578] - EventThread shut down for session: 0x10b1f1382d70039
  • 1
  • 2
  • 3
  • 4
  • 5

4、auth模式

[zk: localhost:2181(CONNECTED) 0] addauth digest lichf:12345
[zk: localhost:2181(CONNECTED) 2] create /test12 hhh  auth:lichf:12345:crw
Created /test12
[zk: localhost:2181(CONNECTED) 3] getAcl /test12
'digest,'lichf:x
: crw
[zk: localhost:2181(CONNECTED) 4] get /test12
hhh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5、auth模式–addauth用户添加

添加了两个用户,两个用户分别对应不同的znode节点

[zk: localhost:2181(CONNECTED) 0] addauth digest lichf:12345
[zk: localhost:2181(CONNECTED) 1] addauth digest lichf1:12345
[zk: localhost:2181(CONNECTED) 2] getAcl /test12
'digest,'lichf:x
: crw
[zk: localhost:2181(CONNECTED) 3] getAcl /test11
'digest,'lichf1:PLvXdiB/dq9VM2nkYPecse4HT98=
: cdrwa
[zk: localhost:2181(CONNECTED) 4]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/739458
推荐阅读
相关标签
  

闽ICP备14008679号