zookeeper ACL(access control lists)权限控制

基本作用:
       针对节点可以设置 相关读写等权限,目的为了保障数据安全性
       权限permissions可以制定不同的权限范围以及角色
一:ACL构成
        zk的acl通过[scheme:id:permissions]来构成权限列表
        scheme:代表采用的某种权限机制
        id:代表允许访问的用户
        permissions:权限组合字符串
     1、  scheme:
             word:word下只有一个id,既只有一个用户,也就是anyone。那么组合的写法就是word:anyone:[permissions]
             auth:代表认证登录,需要注册用户有权限就可以,形式为:auth:user:password:[permissions]
             digest:需要对密码加密才能访问,组合行成为: digest:username:BASE64(SHA1(password)):[permissions]
         
            简而言之,auth与digest的区别就是,一个明文,一个密文setAcl/path auth:lee:lee:cdrwa
                                                                            与                     setAcl/path digest:lee:BASE64(SHA1(password)):cdrwa
            等价的,再通过addauth digest lee:lee   后都能操作指定节点的权限
           
           ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如:
           ip :192.168.1.1:[permissions]  
            
          super:比较特殊  代表超级管理员,拥有所有权限
 
    3、ACL构成三  --- permissions 
          权限字符串缩写:crdwa
          create:创建子节点
             read:获取节点/子节点
            write:设置节点数据
          delete:删除子节点
          admin:设置权限
二:ACL命令
       getAcl:获取某个节点的acl权限信息
       setAcl:设置某个节点的acl权限信息
       addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是加密的形式存在的。
 
 1、getAcl
        
 2、wolrd
            wolrd:anyoone:cdrwa
            默认在节点创建完是允许所有匿名用户对该节点进行操作的。
           
如上图所示,我们给/wq/abc 设置了crwa(即创建、读、写、管理操作)。
注:由于我们的/wq默认在创建的时候会拥有cdrwa权限,此时我们删除/wq/abc肯定是可以的。
 
设置acl权限和验证
那么怎样来验证我们刚设的crwa权限呢?这里我们需要在/wq/abc下再创建一个子节点即/wq/abc/xyz从而来验证上一步我们给/wq/abc设置不能删除节点的权限。例:
 
3、Auth
   第一步,先初始化一些节点,在根目录下新建节点/names,再在/names下新建节点hebe并查看其权限,如图示:
 
注:下面演示一下错误操作,直接给当前节点验证用户名hebe密码hebe,会出现如下错误信息:
这是由于我们的用户名密码并没有进行注册(即登录信息并未注册)。
那么就需要我们将该用户名/密码添加到库里,再登录并设置权限就行了,如下所示:
获取该节点Acl,并将我圈出部分即账户信息hebe:YDTbY1suR969/X/vk+9Fiwzfpd8=
拷贝(选中右键粘贴即可,不要ctrl+c,因为会退出)到本地记事本中,待会有用到。如图示:
 
后面添加的用户都会使用第一个用户的账号信息。
首先,为了演示,新加一个用户zyl:zyl,( zyl:AKsNqVOhO7ZXMtj51BNaV+Tv60A=)它的Acl信息如下:
 
即这里省略用户密码信息也是可以进入的。默认使用的是当前第一个的用户信息。

4、digest
    使用digest首先我们需要退出当前用户,即ctrl+c退出客户端。再./zkCli.sh运行客户端。接下来在/names节点下新建test节点,如图示0:
 
设置Acl,用户信息就是上面我们拷贝的wq的用户信息,如图示:
登录addauth digest wq:wq,注意登录我们也不可能让用户输入暗文登录,所以还是使用明文密码登录。如图示:
 
5、使用 ip
     Linux环境配置,配置Acl如图示:
6、使用 Super
    6.1、  修改zkServer.sh增加super 管理员
  首先需要vi zkServer.sh 利用/查询nohup,紧接着添加超级管理员配置信息
  vi /usr/local/zookeeper/bin/zkServer.sh  或vim /usr/local/zookeeper/bin/zkServer.sh   打开如图示:
 
-Dzookeeper.DigestAuthenticationProvider.superDigest=zyl:AKsNqVOhO7ZXMtj51BNaV+Tv60A=我们之前设过的zyl的用户密码。

增加后内容。

6.2、重启zkServer.sh,再重启客户端zkCli.sh,如下所示:
  
6.3、验证超级管理员权限
通过上图,我们可以发现,一开始我们是没登录超级管理员,所以查看ip节点是没有权限的(因为上一步我们给ip节点加了固定ip权限才能操作),所以在使用addauth digest wq:wq登录我们的超级管理员后,就可以任意妄为地操作我们的节点了。
三:ACL使用场景
     开发、测试环境分离,开发者无权操作测试库的节点,只能看;
  生产环境上控制指定ip的服务可以访问相关节点,防止混乱。
原文地址:https://www.cnblogs.com/haoliyou/p/10517782.html