温馨提示×

Zookeeper的ACL权限控制怎么设置

小樊
31
2025-12-24 10:25:52
栏目: 大数据

Zookeeper ACL权限控制设置指南

一 核心概念与默认行为

  • ACL由三部分组成:scheme:identity:permissions。常见scheme包括:world(任意客户端)、auth(当前会话已认证用户)、digest(用户名:Base64(SHA1(username:password)))、ip(按客户端IP)、sasl(Kerberos)。权限集合为:CREATE©READ®WRITE(w)DELETE(d)ADMIN(a)。ACL是按 znode 级别生效,子节点不继承父节点权限。新建节点默认ACL为:world:anyone:cdrwa。在3.5.6及以上版本,执行getAcl需要拥有该节点的读权限

二 常用命令与快速上手

  • 连接客户端:sh zkCli.sh -server IP:2181(默认端口2181)。查看/设置/获取ACL:ls /path;getAcl /path;setAcl /path acl表达式。会话登录:addauth scheme auth(如 digest:user:pwd)。创建节点时指定ACL:create /path data acl。在生产变更前,务必先getAcl确认现有条目,避免误删导致“锁死”。

三 典型场景与命令示例

  • 仅管理员完全控制(digest)
    1. 生成摘要:echo -n admin:Admin@123 | openssl dgst -binary -sha1 | openssl base64
      • 假设输出:ABCD1234+/==(即Base64(SHA1(admin:Admin@123)))
    2. 设置:setAcl /app digest:admin:ABCD1234+/==:cdrwa
    3. 验证:getAcl /app
  • 放开只读,管理员全权(保留world:anyone:r)
    • setAcl /app world:anyone:r,digest:admin:ABCD1234+/==:cdrwa
  • 按IP网段只读 + 管理员全权
    • setAcl /app ip:192.168.1.0/24:r,digest:admin:ABCD1234+/==:cdrwa
  • Kerberos/SASL(安全模式启用)
    • 先kinit获取票据,再:setAcl /app sasl:admin@HADOOP.COM:cdrwa
  • 创建节点时即指定ACL
    • create /app “data” digest:admin:ABCD1234+/==:cdrwa
  • 重要提示
    • 多主体时用英文逗号分隔;setAcl会覆盖原有ACL,如需保留旧条目请一并写入。
    • 避免移除ADMIN(a),否则后续将无法再修改该节点ACL。
    • 使用auth模式时,setAcl会基于当前会话的已认证用户,忽略命令中显式给出的用户名/密码。

四 安全与运维注意事项

  • 变更前先备份关键路径ACL;变更后在另一会话验证访问与setAcl能力,确保不会把自己锁在外面。
  • 不要随意移除world:anyoneREAD®ADMIN(a);缺少r会导致列表/读取失败,缺少a将无法再改回ACL。
  • 3.5.6+版本,执行getAcl需具备该节点的读权限,否则会报权限不足。
  • 使用sasl方案需集群启用安全模式;在“普通模式”下无法使用sasl ACL。
  • 需要紧急“救火”时,可在服务端配置超级管理员:在启动参数加入 -Dzookeeper.DigestAuthenticationProvider.superDigest=admin:ABCD1234+/== 重启后通过addauth digest admin:Admin@123临时获得全权(务必谨慎,用完移除或收回)。

0