• 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
  • 相关阅读:
    C++操作Kafka使用Protobuf进行跨语言数据交互
    聊聊Disruptor 和 Aeron 这两个开源库
    DTrace arg0-kernel mode and arg1-user mode
    top
    how to write your first linux device driver
    how to compile and replace ubuntu kernel
    linux du
    c++ rvo vs std::move
    【Android】wifi开发
    无线局域网络 WIFI/WAPI/WLAN区别浅析
  • 原文地址:https://www.cnblogs.com/kongieg/p/13367346.html
Copyright © 2020-2023  润新知