zookeeper-3.8.3-基于ACL的访问控制

embedded/2025/1/31 23:56:22/

ZooKeeper基于ACL的访问控制

ZooKeeper 用ACL控制对znode的访问,类似UNIX文件权限,但无znode所有者概念,ACL指定ID及对应权限,且仅作用于特定znode,不递归。

ZooKeeper支持可插拔认证方案,ID格式为scheme:expression。客户端认证时,其对应ID与连接关联,访问znode时与ACL比对。

ACL权限
  • CREATE:可创建子节点。
  • READ:可获取节点数据和列出子节点。
  • WRITE:可设置节点数据。
  • DELETE:可删除子节点。
  • ADMIN:可设置权限。

CREATEDELETEWRITE分离实现细粒度控制,ADMIN类似所有者权限,所有人隐式有LOOKUP权限(可查看节点状态)。获取znode的ACL需READADMIN权限,无ADMIN权限时digest哈希值会被屏蔽。

内置ACL方案
  • world:ID为anyone,代表任何人。
  • auth:特殊方案,忽略expression,用当前用户认证信息,无认证用户时设ACL会失败。
  • digest:用username:password生成MD5哈希作ACL ID标识,认证时明文发送username:password
  • ip:用客户端主机IP作ACL ID标识,表达式为addr/bits
  • x509:用客户端X500主体作ACL ID标识,安全端口下客户端自动认证并设x509认证信息。
ZooKeeper C客户端API

C库提供权限常量(如ZOO_PERM_READ等)和标准ACL ID(如ZOO_ANYONE_ID_UNSAFE等),还有三个标准ACL(如ZOO_OPEN_ACL_UNSAFE完全开放)。相关操作有:

  • zoo_add_auth:用于客户端向服务器认证,可多次调用。
  • zoo_create:创建新节点,需父节点有CREATE权限。
  • zoo_get_acl:获取节点ACL信息,需READADMIN权限。
  • zoo_set_acl:替换节点ACL列表,需节点有ADMIN权限。

并给出使用“foo”方案认证并创建仅具创建权限临时节点的示例代码。

可插拔的ZooKeeper身份验证

ZooKeeper有可插拔身份验证框架,涉及客户端认证和在ACL中找对应条目两个操作。身份验证插件需实现特定接口:

public interface AuthenticationProvider {String getScheme();KeeperException.Code handleAuthentication(ServerCnxn cnxn, byte authData[]);boolean isValid(String id);boolean matches(String id, String aclExpr);boolean isAuthenticated();
}
  • getScheme返回插件标识字符串。
  • handleAuthentication处理客户端认证信息。
  • isValid验证ID格式。
  • matches匹配客户端认证信息和ACL条目。
  • isAuthenticated确定认证信息是否加入ACL。

内置ipdigest插件,可通过系统属性添加插件,服务器启动时查找zookeeper.authProvider.开头的属性并解析为插件类名,所有服务器插件定义需一致。

3.6.0版本提供另一抽象:

public abstract class ServerAuthenticationProvider implements AuthenticationProvider {public abstract KeeperException.Code handleAuthentication(ServerObjs serverObjs, byte authData[]);public abstract boolean matches(ServerObjs serverObjs, MatchValues matchValues);
}

扩展该类可接收额外参数(ServerObjsMatchValues) ,涉及ZooKeeperServer实例、当前连接、操作路径、操作值及setAcl()时设置的ACL列表等信息。


http://www.ppmy.cn/embedded/158478.html

相关文章

微信小程序获取位置服务

wx.getLocation({type: gcj02,success(res) {wx.log(定位成功);},fail(err) {wx.log(定位失败, err);wx.showModal({content: 请打开手机和小程序中的定位服务,success: (modRes) > {if (modRes.confirm) {wx.openSetting({success(setRes) {if (setRes.authSetting[scope.u…

CSS中的响应式布局初识

响应式布局是一种Web设计方法,使网站能够在各种设备(如台式电脑、平板电脑、手机等)上有良好的显示效果。响应式布局通常使用CSS媒体查询来调整页面布局以适应不同的屏幕尺寸和分辨率。下面我将通过一个简单的示例来讲解如何实现响应式布局。…

Fork/Join框架_任务分解与并行执行

1 概述 Fork/Join框架是Java 7引入的一个用于并行执行任务的框架。它特别适用于可以递归分解为多个子任务的工作,每个子任务可以独立执行,并且结果可以合并以获得最终结果。Fork/Join框架通过工作窃取(work-stealing)算法提高了多核处理器上的任务执行效率。 2 核心组件 …

学技术学英语:elasticsearch查询的两阶段queryingfetching

To understand Elasticsearch’s distributed search, let’s take a moment to understand how querying and fetching work. Unlike simple CRUD tasks, distributed search is like navigating through a maze of shards spread across the cluster. In Elasticsearch, CRU…

xss总结标签

前言&#xff1a; 在网上找标签费时间&#xff0c;而且有时候忘记怎么找了&#xff0c;所以现在写一篇 由以下大佬赞助发布 xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户 内容&#xff1a; <a>标签 <a href"javascript:alert(1)">test&l…

小南每日 AI 资讯 | AI模型扩展的快速增长时代正在放缓 | 25/01/30

AI模型扩展的挑战&#xff1a;随着研究人员发现单纯通过增加规模和计算能力难以获得更大回报&#xff0c;AI模型扩展的快速增长时代正在放缓。 GPT-5开发延迟&#xff1a;OpenAI雄心勃勃的GPT-5项目&#xff08;代号&#xff1a;Orion&#xff09;面临着显著的障碍&#xff0c…

蓝桥杯例题四

每个人都有无限潜能&#xff0c;只要你敢于去追求&#xff0c;你就能超越自己&#xff0c;实现梦想。人生的道路上会有困难和挑战&#xff0c;但这些都是成长的机会。不要被过去的失败所束缚&#xff0c;要相信自己的能力&#xff0c;坚持不懈地努力奋斗。成功需要付出汗水和努…

基于微信小程序的校园二手交易市场的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…