`
javahigh1
  • 浏览: 1267147 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ZK ACL访问控制处理流程

 
阅读更多

Zk 对znode操作采用ACL进行了访问权限控制,类似于linux提供的读写权限,ZK将操作权限划分以下几种:CREATE/READ/WRITE/DELETE/ADMIN,

·CREATE: 表示有权限创建一个子节点

·READ: 表示可以getData或者getChildren

·WRITE: 表示可以setData

·DELETE: 表示可以delete子节点

·ADMIN: 表示可以通过setACL设置znode权限

Create和delete权限是从write权限中拆分出来的,注意与linux中write的区别。ZK中使用常量类来标明了这些权限。

将这些权限与一系列Id进行关联就构成了节点的ACL控制对,可以这么看这个映射关系。

ACL=PermßàID

而ID由scheme和实际的字符串id组成。Scheme表示了与实际字符串id对应的认证scheme标识符,也就是说在对字符串id进行认证时,需要根据scheme找到对应的认证服务提供者来对id进行校验认证,例如Scheme=digest id=qingxu:pwd,表示digest关键字对应的认证服务提供者来对qingxu:pwd进行认证,

ZK提供了目前提供了基于客户端IP(scheme=ip)和基于摘要(SHA1,scheme=digest)用户密码的两种提供者, 他们都实现了AuthenticationProvider接口, 用户也可以通过设置以zookeeper.authProvider.开头的系统属性来增加其他用户自定义的授权方式(ProviderRegistry在初始化时会将自定义的授权方式加载进来)。在ZK服务端,授权Provider以HashMap的方式驻留在内存中,key是scheme,value是AuthenticationProvider接口的实现类,这样通过AuthenticationProvider getProvider(String scheme) 就可以得到具体的认证服务了。

在客户端准备创建znode时,create方法要求指定对本znode的ACL列表,标明:谁(id)采用某种认证方式(scheme)之后可以采取某种操作(perm).

public String create(final String path,byte data[], List<ACL> acl,

CreateMode createMode)

可以对一个znode使用多个ACL,当服务器端创建节点时会将这个ACL列表与该znode关联,并在随后某个时间持久化到snapshot中,当客户端对这个节点或者子节点进行操作时,会检查当前连接上来的客户端是否具有权限操作该节点,如果没有权限,就会抛出No Auth异常。对于有的权限认证信息,客户端不需要传递额外的信息给服务器,例如anyone,表示任何人,对于类似digest的认证服务,由于需要客户端提供用户密码,然后与服务端的用户密码进行校验(用户密码两者组合起来被认为是一个用户id),客户端输入认证服务的地方是通过通过客户端ZK的addAuthInfo(String scheme, byte auth[])方法添加对应认证信息(例如用户密码),这些认证信息会传递到服务器端做一些处理(主要是scheme服务器是否支持,对于scheme=digest主要是判定下是否super超级用户登录来了,scheme=ip就简单记录下当前登录ip),并保存在authinfo这个客户端列表中,以后这个连接就可以一直使用这个认证信息.

addAuthInfo 后的服务端流程如下:

服务器在节点进行权限检查时checkACL()流程如下:

Super用户直接通过,不进行任何权限(perm比较),可以进行任何操作。

否则,当前要进行的操作需要的权限perm与znode拥有的权限一致时,再比较用户。如果与znode上所有ACLperm都不一致,就表示没有通过校验,抛出NoAuthException异常。

如果该节点ACL是任何人都能访问(shceme=world 并且id=anyone),直接通过验证,否则,根据scheme找到认证服务provider,然后从authinfo中查找与该scheme相等同时id也match的ACL,找到则认证通过。如果所有的都没有验证通过,就抛出NoAuthException


最后:如果ZK服务器不想进行checkACL,那么服务器系统属性zookeeper.skipACL=yes即可。



分享到:
评论

相关推荐

    ZK桌面管理工具

    ZNode是ZooKeeper中的基本存储单元,类似于文件系统中的文件或目录,可以存储数据并具有版本控制、ACL权限管理等特性。会话则是客户端与ZooKeeper服务器之间的连接,用于维持状态和接收Watcher事件。Watcher是...

    node-zk-browser-master

    在实际应用中,`node-zk-browser-master`的使用流程大致如下: 1. 解压缩下载的`node-zk-browser-master`文件。 2. 进入解压后的目录,找到`package.json`文件,这里包含了项目的所有依赖信息。 3. 使用Node.js的`...

    zookeeper可视化图形工具

    4. **权限管理**:展示并允许修改节点的ACL(访问控制列表),确保数据的安全性。 5. **事务日志查看**:查看Zookeeper服务器的事务日志,便于分析和故障排查。 6. **集群状态监控**:实时显示Zookeeper集群的节点...

    zkSourceReading:zk原始物阅读

    1. 请求处理流程:从客户端发起请求,经过网络层的序列化和反序列化,到达Zookeeper服务器的RequestProcessor链,每个Processor处理特定类型的操作,最后由CommitProcessor将更改提交到内存和磁盘。 2. Watcher实现...

    ZooKeeper源码

    每个ZNode都有唯一的路径标识,可以存储数据,同时具备ACL(访问控制列表)和时间戳。 1. ZNode类型:分为临时节点(ephemeral)和持久节点(persistent)。临时节点在客户端断开连接后自动删除,而持久节点一直...

    kafka-manager-1.3.3.7.zip

    4. 用户权限管理:对用户进行授权,控制对Kafka资源的访问。 二、Kafka-Manager 1.3.3.7编译 在获取到"kafka-manager-1.3.3.7.zip"压缩包后,首先需要解压并进行编译。编译步骤如下: 1. 解压:`unzip kafka-...

    zookeeper免安装版

    7. **ACL(Access Control List)**:Zookeeper提供了权限控制,可以对不同的Znode设置访问控制策略。 Zookeeper常用于分布式协调任务,如命名服务、配置管理、分布式锁、集群管理等。在大数据领域,Hadoop、Kafka...

    zkui.tar.gz

    - 查看并修改ZooKeeper的数据模型,包括节点数据、ACL(访问控制列表)等。 - 管理ZooKeeper集群,例如创建、删除、更新节点,查看节点版本信息等。 - 捕获并分析ZooKeeper的事件日志,帮助调试和优化系统性能。 - ...

    zookeeper 教程资料

    每个节点可以存储数据,同时具有版本号、ACL(访问控制列表)和时间戳等元数据。 2. **原子操作**:Zookeeper 提供的所有操作都是原子性的,这意味着每个操作要么成功,要么失败,不会出现部分完成的情况。 3. **...

    zookeeper-3.4.5.rar

    ZNode可以存储数据,并且具有版本号、ACL(访问控制列表)和元数据等属性。 2. **会话(Session)**:客户端与Zookeeper服务器之间的连接被称为会话。会话具有超时时间,如果在超时时间内服务器未接收到客户端的...

    Zookeeper单节点注册中心

    Znode是Zookeeper数据存储的基本单位,类似于文件系统中的文件或目录,可以存储数据,并具有版本号、ACL(访问控制列表)等属性。会话则是客户端与Zookeeper服务器之间的连接,它具有超时时间,并在会话期间可以触发...

    zookeeper可视化工具安装包

    你可以创建、删除、编辑 znodes,以及查看其数据内容和 ACL(访问控制列表)。 4. **监控与日志**:可视化工具通常具有实时监控功能,可以显示服务器状态、会话信息、操作日志等。这对于追踪和排查问题非常有用。...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    - **ACL(Access Control List):**用于控制节点的访问权限。 - **权限类型:**包括读、写、创建、删除、管理等。 **10. Chroot特性** - **Chroot:**类似于Unix/Linux系统中的chroot环境,提供了一个隔离的命名...

    1000道 互联网Java工程师面试题 485页

    - **处理流程**:服务端接收到Watcher事件后,将其放入队列中,然后异步处理这些事件。 - **异步发送**:服务端不会等待客户端确认Watcher事件,而是立即发送。 #### 8、客户端回调Watcher - **回调机制**:当...

Global site tag (gtag.js) - Google Analytics