zk权限模块

 1 zk的权限控制
 2     概述:
 3         zk类似文件系统,client可以创建节点,更新节点,删除节点,使用zk的access control list 访问控制列表可以做到这一点。
 4         acl权限控制,使用scheme:id:permission来标识,主要涵盖3个方面:
 5             -权限模式(scheme):授权的策略
 6             -授权对象(id):授权的对象
 7             -权限(permission):授予的权限
 8         其特性如下:
 9             -zk的权限控制是基于每个znode节点,需要对每个接待你设置权限
10             -每个znode支持设置多种权限控制方案和多个权限
11             -子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的字节带你
12         eg:
13             setAcl /test2 ip:192.11.11.11:crwda #将节点权限设置为ip:192.11.11.11的客户端对节点执行增、删、改、查、管理权限
14     权限模式:
15         采用何种方式授权
16             -world:只有一个用户:anyone,代表zookeeper所有人(默认)
17             -ip:对客户端使用ip地址认证
18             -auth:使用已添加认证的用户认证
19             -digest:使用"用户名:密码"方式认证
20     授权对象:
21         给谁授予权限;
22         授权对象是指权限赋予的实体,例如ip地址或者用户;
23     授予的权限:
24         create,delete,read,write,admin;即创建,删除,读,写,管理权限。这五种权限简写为cdrwa。注意:这五种权限中,delete是指对子节点的删除权限,其它四种权限是指对自身节点的操作权限。
25         -create:可以创建子节点
26         -delete:可以删除子节点(仅下一级节点)
27         -read:可以读取节点数据及显示子节点列表
28         -write:可以设置节点数据
29         -admin:可以设置节点访问控制列表权限
30     授权的相关命令:
31         -getAcl:    getAcl [path] 读取acl权限
32         -setAcl:    setAcl [path] [acl] 设置acl权限
33         -addauth:   addauth [scheme] [auth] 添加认证用户
34     案例:
35         -world 授权模式:
36             命令:setAcl [path] world:anyone:[acl]
37         -ip 授权模式:
38             命令:setAcl [path] ip:[ipAddress]:[acl]
39         -auth授权模式:
40             命令:
41                 addauth digest [user]:[password] #添加认证用户
42                 setAcl [path] auth:[user]:[acl]
43         -digest授权模式:
44             命令:
45                 setAcl [path] digest:[user]:[password]:[acl]
46             这里的密码是经过SHA1及BASE64处理的密文,在SHELL中可以通过以下命令计算:
47                 echo -n [user]:[password] | openssl dgst -binary -sha1 | openssl base64
48                 eg:
49                     [gdc@cent701 bin]$ echo -n gdc:Lang..123 | openssl dgst -binary -sha1 | openssl base64
50                     dpWvWLODJkDYlzYvUE1tEbGXA5o= 
51                 其中生成的密文为:dpWvWLODJkDYlzYvUE1tEbGXA5o=
52             演示:
53                 -对节点/hadoop/node2/test1设置acl:
54                 setAcl /hadoop/node2/test1 digest:gdc:dpWvWLODJkDYlzYvUE1tEbGXA5o=:cdrwa
55                 -此时使用get获取节点信息时:get /hadoop/node2/test1:
56                 Authentication is not valid : /hadoop/node2/test1
57                 -添加认证用户:
58                 addauth digest gdc:Lang..123
59                 -添加认证用户后获取节点信息:get /hadoop/node2/test1:
60                 test1111
61                 cZxid = 0x4b
62                 ctime = Thu Jul 16 13:53:03 CST 2020
63                 mZxid = 0x4b
64                 mtime = Thu Jul 16 13:53:03 CST 2020
65                 pZxid = 0x4b
66                 cversion = 0
67                 dataVersion = 0
68                 aclVersion = 1
69                 ephemeralOwner = 0x0
70                 dataLength = 8
71                 numChildren = 0
72                 即可以正常访问
73         -多种模式授权:
74             同一个节点可以同时使用多种模式授权,其中用逗号分开即可:
75             setAcl /node5 ip:192.168.1.1:cdra,auth:gdc:cdrwa,digest:jdc:jiasjefoiaej+=:cdrwa
76     acl超级管理员:
77         -zk的权限管理模式提供一个超管可以方便的访问任何权限的节点,假设这个超管是:super:admin
78         -需要先为超管生成密码的密文:
79             echo -n super:admin | openssl dgst -binary -sha1 | openssl base64
80             生成的密文为:xQJmxLMiHGwaqBvst5y6rkB6HQs=
81         -打开zk目录下的bin/zkServer.sh服务器脚本文件,找到如下一行:
82             nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"\
83             -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
84         -这是脚本中启动zk的命令,默认只有以上两个配置项,我们需要加一个超管的配置项:
85             "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="
86         -添加后为:(注意添加时在行尾添加,勿回车另起一行,否则服务启动异常)
87             nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" 
88             "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="\
89              -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
90         -重启zk,输入命令添加权限:
91             addauth digest super:admin

 

posted on 2020-07-23 17:03  kongieg  阅读(556)  评论(0编辑  收藏  举报