4-4 zookeeper - ACL权限控制

ACL(access control lists)权限控制

  • 针对节点可以设置相关读写等权限,目的为了保障数据安全性
  • 权限permissions可以指定不同的权限范围以及角色(可以针对很多不同的角色去制造很多不同的组合,这些不同的组合其实也是类似)
ACL命令行

ACL命令行主要有三块

  • getAcl:获取某个节点的acl权限信息
  • setAcl:设置某个节点的acl权限信息
  • addauth:输入认证授权信息,注册时输入明文密码(登录)但是在zk的系统里,密码是以加密的形式存在的(注册某一个用户,要把某一个用户的密码输入到系统里进行注册,然后在某一个时间的时候,用户需要针对某一个指定的节点去登录,那么用户就必须使用addauth去注册,如果不进行这样的注册,是无法进行登录的
    Acl命令
    节点的默认权限
ACL的构成 一
  • zk的acl通过[scheme?permissions]来构成权限列表
    scheme:代表采用的某种权限机制(5种权限机制,有一种是不太认,可以说是4种
    id:代表允许访问的用户
    permissions:权限组合字符串(指定的一些权限)
    scheme和id是捆绑使用的
ACL的构成 二 - scheme
  • world:world下只有一个id,既只有一个用户,也就是anyone,那么组合的写法是 world:anyone:[permissions]
  • auth:代表认证登录,需要注册用户有权限就可以,形式为:auth:user:passwork:[permissions]
  • digest:需要对密码加密才能访问,组合形式为:digest:username:BASE64(SHA1(password)):[permissions] (需要输入加密后的设置密码的字符串才可以访问,不然会抛出异常)
  • auth与digest区别是,前者明文,后者密文,setAcl /path auth:lee:lee:cdrwa与setAcl /path digest:lee:BASE64(SHA1(lee)) cdrwa是等价的,在通过addauth digest lee:lee 后都能操作指定节点的权限,在真实的环境中,都是用加密的
  • ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.12:[permissions]
  • super:代表超级管理员,拥有所有的权限(这个一般是给运维人员用的,权限是最大的,这个需要修改相应的文档进行配置才可以,设置这个权限是很危险的,不可以随便给某个人开通这个权限
ACL的构成 三 - permissions

权限字符串缩写 crdwa

  • CREATE:创建子节点权限 (是crdwa中的c)
  • READ:获取当前节点/子节点的权限(是crdwa中的r)
  • WRITE:设置节点数据的权限(是crdwa中的w)
  • DELETE:删除子节点的权限(是crdwa中的d)
  • ADMIN:设置节点权限的权限(是crdwa中的a),当某个用户设置了此权限后,就可以拥有了设置该节点权限的权利

ACL命令行

ACL命令行 -第一种scheme - world
  • world:anyone:cdrwa
    默认权限
    world:anyone:cdrwa 默认权限是指:所有的用户拥有所有的权限操作
    setAcl /test/abc world:anynoe:crwa 设置所有用户对/test/abc目录下的所有节点不能删除
    设置所有用户对该节点没有删除权限
    setAcl /test/abc world:anyone:rwad 设置所有用户对该节点下不能创建子节点
    设置rwad权限, 不能在该节点下创建子节点
    可以组合crwda来分配不同的权限
acl命令行 - 第二种scheme - auth
  • auth:user:pwd:cdrwa
    digest: use:BASE64(SHA1(pwd)):cdrwa
    addauth digest user:pwd
    pwd密码auth可以使用明文,digest可以使用密文方式,平时项目中一般都是使用digest
    在这里插入图片描述
    在这里插入图片描述
    'digest,'imoocUser:zOdpTsuaE/uRFQt8ZIBQXUAA7a8= 这里是用BASE64(SHA1(‘imoocPw’))加密后的字符串
    : cdrwa
acl命令行 - 第三种scheme - digest

setAcl /names/test digest:imoocUser:zOdpTsuaE/uRFQt8ZIBQXUAA7a8=:cdra
digest的用法
digest的用法

acl命令行 - 第四种scheme - ip

ip:192.168.142.1:cdrwa
第三种scheme是用ip控制某个网段是否有权限访问某个目录节点,这种方式主要用来控制客户端对某个目录节点是否有权限
scheme ip

acl命令行 - 第五种scheme - super超级管理员

当某个节点使用ip或者用户名登录权限,如果没有使用ip客户端登录或者密码忘记了,登录不上,这个时候又需要更改节点信息,就可以使用super(超级权限),它可以操作任何权限的节点

  • Super
    1. 修改zkServer.sh增加super管理员
    2. 重启zkServer.sh
      修改zkServer.sh文件
      进入zookeeper安装目录\bin目录下,输入命令: ** vi ./zkServer.sh**
      演示思路:因为/name/ip的节点设置了只有使用ip客户端为192.168.142.1才可以访问,我们可以通过设置imoocUser用户为super超级管理员,就可以访问该ip节点。
      没有设置之前不能访问该节点,如下:
      没有设置super管理员时,不能访问
      进入zookeeper安装目录\bin目录下,输入命令: ** vi ./zkServer.sh**
      在这里插入图片描述
      根据源码信息,配置super管理员:
      将zookeeper-3.4.11.jar包添加到项目中
      在这里插入图片描述在这里插入图片描述在这里插入图片描述
      在这里插入图片描述
      根据superDigest上面的注释可以得知:需要在zkServer.sh文件里设置"zookeeper.DigestAuthenticationProvider.superDigest"这样的一个key,value是:“用户名:<base64encoded(SHA1(密码))>”,用户名后面是使用base64encoded(SHA1())加密后的字符串
      配置
      "-Dzookeeper.DigestAuthenticationProvider.superDigest=imoocUser:zOdpTsuaE/uRFQt8ZIBQX
      UAA7a8="
      添加好后,按Esc键,输入 :wq 退出保存,重启zkServer.sh,重启命令:zkServer.sh restart

注意: 前面有一个-D,如果没有加,有可能报以下错误:
在这里插入图片描述
设置好super后,按Esc进入命令模式,输入:wq保存退出,重启zkServer.sh,再次访问/names/ip,因为没有登录,没有权限访问
在这里插入图片描述
再次登录,可以访问该节点
在这里插入图片描述

ACL的常用使用场景

ACL是权限管理,根据不同的权限分配给不同的人,用权限字符串可以组合成不同的权限,例如使用场景如下:

  • 开发/测试环境分离,开发者无权操作测试库的节点,只能看
    在zookeeper里有命名空间的说法,例如:测试环境只能连到测试节点,开发环境连的是另外的一个节点,还有一个是生产环境节点,可以设置一到两个用户可以访问生产环境节点,但用户的权限不建议设置成super超级管理员权限。一般运维人员设置成super超级管理员
  • 生产环境上控制指定ip的服务可以访问相关节点,防止混乱
    这种方式有好有坏,好处是:非常有序,防止混乱;缺点是:如果集群里的ip为动态IP,一旦IP改变,就需要频繁的修改IP的配置

根据慕课网的课程整理的笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值