• 第2关:ACL访问控制列表


    ACL访问控制列表

    Zookeeper作为一个分布式协调框架,其内部存储的都是一些关于分布式系统运行时状态的元数据,尤其是涉及到一些分布式锁,Master选举和协调等应用场景,这就需要保障ZooKeeper的节点数据安全。因此ZooKeeper使用ACL来控制节点的访问。

    ACL实现与UNIX文件访问权限非常相似:它使用权限位来允许/禁止针对节点的各种操作及范围。与标准UNIX权限不同,ZooKeeper节点不受usergroupworld的三个标准范围的限制。 ZooKeeper没有节点所有者的概念。相反,节点ACL指定一组ID集合及这些ID的权限。

    另外请注意, ACL不是递归的,仅适用于特定的节点,它不适用于该节点的子节点。例如,如果/app只能通过ip:172.16.16.1读取,那么其他ip不能读取该节点数据,但是/app/status节点权限为world(任意用户可读的),那么任何用户都可以读取/app/status,不能读取/app(除ip:172.16.16.1以外)。

    ZooKeeper支持可插拔身份验证方案。ID通常表示为scheme:id,其中scheme表示id的认证方式,id表示用户。例如,host:host1.corp.com是名为host1.corp.com的主机的ID

    当客户端连接到ZooKeeper并对其自身进行身份验证时,ZooKeeper会与客户端对应的所有ID与客户端连接相关联。当客户端尝试访问节点时,将根据节点的ACL检查这些IDACL由(scheme:expression,perms)对组成。每种scheme拥有特定的expression格式。例如,ACL对(ip:19.22.0.0/16,READ)表示为任何IP地址以19.22开头的客户端提供READ权限。

    ACL权限

    ZooKeeper支持以下权限:

    • CREATE:创建子节点。

    • READ:获取数据并列出其子节点。

    • WRITE:设置数据。

    • DELETE:删除子节点。

    • ADMIN:设置权限。

    总体来说,ZooKeeper的节点有5种操作权限就是增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)。

    :这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限。

    身份认证方式

    身份认证有以下4种方式:

    world:默认方式,相当于每个用户都能访问(cli中以world:anyone:cdrwa设置,其中权限可修改)。

    auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd来添加当前上下文中的授权用户)。

    digest:即用户名:密码这种方式认证,这也是业务系统中最常用的(cli中以digest:username:password:cdrwa设置,其中权限可修改)。

    ip:使用Ip地址认证(cli中以ip:xxx.xxx.xxx.xxx:cdrwa设置,其中权限可修改)。

    权限设置

    • 首先,需要添加认证,添加认证才可以进行节点权限的设置。这里我们以用户名、密码的方式为例。使用以下命令:

      addauth digest user1:12345

    • 创建具有ACL控制权限的节点。例如, 创建/auth节点,数据是auth, auth认证方式(代表已经认证通过的用户),读写权限。使用以下命令:

       
      create /auth "auth" auth::rw

    • 使用getAcl命令,可以查看当前节点控制权限。例如,查看/auth节点控制权限,使用以下命令:

    getAcl /auth

    • 由于第一步中添加了认证,这里会显示该节点的权限是user1的读

    setAcl /auth auth::rwca

    编程要求

    本关任务是使用命令行,进行以下操作:

    • 开启ZooKeeper服务器。

    • 使用客户端(zkCli.sh)连接客户端(IP:127.0.0.1,端口号:2181)。

    1. zkServer.sh start
    2. zkCli.sh -server 127.0.0.1:2181
    • 添加digest认证,用户名testZK,密码testZK

    addauth digest testZK:testZK
    • 创建/zknode持久节点(节点数据为ZK),ACL设置为用户testZK的密码认证,用户testZK对该节点拥有读,写,管理权限。

    1. create /zknode "ZK" digest:testZK:testZK:rwa
    2. getAcl /zknode
    3. setAcl /zknode zknode::rwca
    • 断开客户端(zkCli.sh)与客服端连接。

    quit 

  • 相关阅读:
    搭建 socket 服务端环境
    【Java第33期】:在普通的Maven项目中存储Bean对象并获取和使用
    在ubuntu中搭建Java开发环境
    抛砖系列之git仓库拆分工具git-filter-repo
    Java框架(四)--Spring AOP面向切面编程(2)--五种通知类型及利用注解配置Spring AOP
    也许你低估了defaultdict的偷懒能力!
    Nginx部署Vue前端项目
    HCIA --- VLAN实验配置
    助推智慧民航,美创亮相全国民航“互联网+”智慧机场建设发展高峰会
    预训练词嵌入Pretrained Word Embeddings
  • 原文地址:https://blog.csdn.net/qq_61604164/article/details/127887820