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)
- 生成摘要:echo -n admin:Admin@123 | openssl dgst -binary -sha1 | openssl base64
- 假设输出:ABCD1234+/==(即Base64(SHA1(admin:Admin@123)))
- 设置:setAcl /app digest:admin:ABCD1234+/==:cdrwa
- 验证: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:anyone的READ®或ADMIN(a);缺少r会导致列表/读取失败,缺少a将无法再改回ACL。
- 在3.5.6+版本,执行getAcl需具备该节点的读权限,否则会报权限不足。
- 使用sasl方案需集群启用安全模式;在“普通模式”下无法使用sasl ACL。
- 需要紧急“救火”时,可在服务端配置超级管理员:在启动参数加入
-Dzookeeper.DigestAuthenticationProvider.superDigest=admin:ABCD1234+/==
重启后通过addauth digest admin:Admin@123临时获得全权(务必谨慎,用完移除或收回)。