赞
踩
ACL 权限设置由scheme:expression, perms 三部分组成,分别代表了认证模式(scheme)、授权对象id、对应的权限;
create /zk-node-create-schema mydata digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwad
set /zk-node-create-schema digest:user1:+owfoSBn/am19roBPzR1/MfCblE=:crwad
密码是加密密码,加密步骤如下:
1、首先先对user:password 使用sha1算法得出摘要(digest);
2、然后使用base64算法对该摘要加密;
命令如下:
echo -n user:password | openssl dgst -binary -sha1 | openssl base64
world模式是节点的默认模式,当一个节点被创建就会被赋予这种模式,world模式代表所有人对该节点有cdrwa权限。
要使用该模式,首先要使用addauth命令添加用户,否则会报错;权限设置命令如下:
create /test10 hello auth:user1:明文密码:permissions
setAcl /test10 auth:user1:明文密码:permissions
在auth模式下,对应于上述命令,会自动忽略其中的user1和明文密码字段,而使用通过addauth命令添加的用户和密码,虽然会忽略user1和明文密码字段,但是不能取消,否则会报错;如果添加了多个用户,会对所有已添加的用户设置相同的权限,详情请见下文。
该模式对连接服务器的客户端ip进行认证,可以设置多个ip,多个ip通过逗号分隔;
setAcl /test ip:IP1:cr,ip:IP2,rw
权限类型 | ACL简写 | 说明 |
---|---|---|
create | c | 可以创建一个子节点 |
read | r | 可以获取节点的数据以及列出子节点 |
write | w | 可以对节点设置数据 |
delete | d | 可以删除一个子节点 |
admin | a | 具有设置该节点ACL权限的权限 |
创建节点的时候就指定权限,指定权限的同时需要执行节点值,否则会将权限设置为节点值;
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
==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
addauth 命令用于在当前seesion中添加用户,当查询或者更改节点信息的时候,服务器会校验当前seesion中是否存在此用户,并校验其密码是否正确,否则会报错
当使用 以下两种方式创建ACL控制权限的时候,需要注意:
create /test10 hello auth:user1:明文密码:permissions
setAcl /test10 auth:user1:明文密码:permissions
需要先使用addauth 添加用户,否则会报错,可以添加多个用户,如果添加多个用户,就会对所有用户赋一样的权限,例如:
addauth digest ramboo1:ramboo1
addauth digest ramboo2:ramboo2
addauth digest ramboo3:ramboo3
setAcl /auth auth:ramboo1:ramboo1:cdrwa
getAcl /auth
结果如下
'digest,'ramboo1:JXpHVJcEMUsIf5MM6u7TlOp3pqo=
: cdrwa
'digest,'ramboo2:lTTHGKOT6A3iEwj/SV5meGTXbAM=
: cdrwa
'digest,'ramboo3:b8+HkvFoPszTILQTMB1YFQ+Yvus=
: cdrwa
setAcl /test10 scheme:expression, perms
[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
[zhjl@yyzc-zhjlpi02 ~]$ echo -n lichf1:12345| openssl dgst -binary -sha1 | openssl base64
PLvXdiB/dq9VM2nkYPecse4HT98=
[zhjl@yyzc-zhjlpi02 ~]
[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]
[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
[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
添加了两个用户,两个用户分别对应不同的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]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。