当前位置: 首页 > news >正文

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

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.lryc.cn/news/527460.html

相关文章:

  • Java定时任务实现方案(四)——Spring Task
  • WGCLOUD运维工具从入门到精通 - 如何设置主题背景
  • Babylon.js 中的 setHardwareScalingLevel和getHardwareScalingLevel:作用与配合修改内容
  • Qwen2-VL:在任何分辨率下增强视觉语言模型对世界的感知 (大型视觉模型 核心技术 分享)
  • Docker——入门介绍
  • 02数组+字符串+滑动窗口+前缀和与差分+双指针(D2_字符串(D2_刷题练习))
  • 【redis进阶】集群 (Cluster)
  • Python案例--100到200的素数
  • C语言,无法正常释放char*的空间
  • 重回C语言之老兵重装上阵(十五)C语言错误处理
  • 基于微信的课堂助手小程序设计与实现(LW+源码+讲解)
  • Effective C++ 规则50:了解 new 和 delete 的合理替换时机
  • Alfresco Content Services dockerCompose自动化部署详尽操作
  • 学习第七十六行
  • YOLOv11改进,YOLOv11检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等任务
  • 一个基于Python+Appium的手机自动化项目~~
  • 【后端开发】字节跳动青训营之性能分析工具pprof
  • Linux:线程池和单例模式
  • 使用iis服务器模拟本地资源服务器unityaddressables热更新出错记录
  • TikTok广告投放优化策略:提升ROI的核心技巧
  • Hash表
  • 题解:P10972 I-Country
  • linux常用加固方式
  • 笔灵ai写作技术浅析(二):自然语言处理
  • PyCharm介绍
  • 深度解析:基于Vue 3与Element Plus的学校管理系统技术实现
  • Python从0到100(八十五):神经网络-使用迁移学习完成猫狗分类
  • 苍穹外卖 项目记录 day09 历史订单
  • 记录 | 基于Docker Desktop的MaxKB安装
  • WordPress web-directory-free插件存在本地文件包含导致任意文件读取漏洞(CVE-2024-3673)