• Zookeeper权限控制


    Zookeeper提供了ACL(Access Control List)权限控制。

    使用权限控制,可以控制节点的操作权限,保证安全性。

    权限设置:将权限模式、授权对象、权限信息组成一条"scheme:id:permission"格式的ACL请求信息。

    权限模式(Scheme):

      1)World模式,默认的,任何人可以对zk上任意节点操作

      2)IP模式,针对ip或者ip段赋予权限。

      3)Digest验证,zk中使用Digest认证,相当于用户密码的方式。

      4)Super权限模式,相当于特殊的Digest认证,具有Super权限的客户端可以对zk的任意数据节点进行操作

    授权对象(ID):

      表示的就是将权限赋予谁,在ip模式中就是ip,在Digest或者Super中对应的是用户

    权限信息:

      c: create)创建权限,授权对象可以在数据节点下创建子节点;

      w: wirte)更新权限,授权对象可以更新该数据节点;

      r: read)读取权限,授权对象可以读取该节点的内容以及子节点的列表信息;

      d: delete)删除权限,授权对象可以删除该数据节点的子节点;

      a: admin)管理者权限,授权对象可以对该数据节点体进行 ACL 权限设置。

    如果认为网络安全程度比较高,不需要权限控制,可以通过系统参数zookeeper.skipACL=yes进行设置

    ACL相关命令:

    getAcl:获取某个节点的acl权限信息 

    setAcl:设置某个节点的acl权限信息 

    addauth: 输入认证授权信息,相当于注册用户信息,注册时输入明文密码,zk将以密文的形式存储

    生成授权ID的方法:

    String sId = DigestAuthenticationProvider.generateDigest("zk:test");

    或者使用xshell:

    echo -n zk:test | openssl dgst -binary -sha1 | openssl base64   # 输出结果:1LHmdzcxVxY+ZvefFlGjacOZfF8=

    设置ACL:

    1)创建时直接设置:

    [zk: localhost:2181(CONNECTED) 12] create /test aaaaaa digest:zk:1LHmdzcxVxY+ZvefFlGjacOZfF8=:cdrwa

    2)先创建后设置

    [zk: localhost:2181(CONNECTED) 12] create /test1 xxx
    [zk: localhost:2181(CONNECTED) 12] setAcl /test1 digest:zk:1LHmdzcxVxY+ZvefFlGjacOZfF8=:rw

    现在直接get节点数据,会返回无权限

      [zk: localhost:2181(CONNECTED) 12] get /test
      org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /test

    访问前授权:

    [zk: localhost:2181(CONNECTED) 13] addauth digest zk:test
    [zk: localhost:2181(CONNECTED) 14] get /test
    aaaaaa

    再看另一种授权方式,使用auth明文授权,其实也是属于用户名+密码的方式,使用之前先注册用户信息,之后再明文授权

    [zk: localhost:2181(CONNECTED) 20] delete /testnode
    [zk: localhost:2181(CONNECTED) 21] addauth digest test:test
    [zk: localhost:2181(CONNECTED) 22] create /testnode aaaaa auth:test:test:cdwra
    Created /testnode
    [zk: localhost:2181(CONNECTED) 23] get /testnode
    aaaaa

    IP模式授权:

    setAcl /test-node-ip ip:192.168.0.33:cdwra
    create /test-node-ip  data  ip:192.168.0.33:cdwra

    超级管理员模式,可以对任何节点进行操作,需要配置JVM启动参数:

    -Dzookeeper.DigestAuthenticationProvider.superDigest=super:<base64encoded(SHA1(password))

    现在用户名指定为super,后面的密码是加密的,现在使用test作为密码:

    echo -n super:test | openssl dgst -binary -sha1 | openssl base64
    D/InIHSb7yEEbrWz8b9l71RjZJU=

    重新启动进行验证,进入客户端

    addauth digest super:test

    之后可以对任何节点做任何权限的操作。

      

  • 相关阅读:
    MyBatisPlus乐观锁
    MyBatisPlus查询
    IDEA创建Java类时自动配置注释(作者,创建时间,版本等)
    MyBatisPlus自动填充处理
    Cannot read property '$createElement' of undefined
    IDEA中gradle的配置和使用
    android7.0以上https抓包
    转发unbuntu jdk 安装
    Unity 连接WebSocket
    Tween 使用
  • 原文地址:https://www.cnblogs.com/dlcode/p/14000390.html
Copyright © 2020-2023  润新知