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