Zookeeper在Linux中的权限管理如何操作
导读:Zookeeper 在 Linux 中的权限管理实操 一 核心概念与权限模型 权限作用于 znode(节点),每个节点可独立设置 ACL,且子节点不会继承父节点权限。 ACL 由三元组构成:scheme:id:permissions。...
Zookeeper 在 Linux 中的权限管理实操
一 核心概念与权限模型
- 权限作用于 znode(节点),每个节点可独立设置 ACL,且子节点不会继承父节点权限。
- ACL 由三元组构成:scheme:id:permissions。
- 常用 scheme:world(anyone)、ip(按来源 IP)、auth(当前会话已认证用户)、digest(用户名:密码的摘要)。
- 常用权限:r(读)、w(写)、c(创建子节点)、d(删除子节点)、a(管理 ACL)。
- 常用命令:getAcl /path、setAcl /path acl、create /path data acl、addauth scheme auth。
- 默认情况下,新节点常为 world:anyone:cdrwa,生产环境应改为更严格的策略。
二 快速上手 使用 Digest ACL 的推荐做法
- 生成摘要身份标识
- 方式一(OpenSSL):
echo -n 用户名:密码 | openssl dgst -binary -sha1 | openssl base64 - 方式二(Zookeeper 自带工具):
java -cp $ZK_HOME/zookeeper.jar:lib/*:conf org.apache.zookeeper.server.auth.DigestAuthenticationProvider 用户名:密码
输出形如:用户名:BASE64(SHA1(用户名:密码)),在 ACL 中使用该字符串作为 id。
- 方式一(OpenSSL):
- 在 zkCli 中设置 ACL
- 连接:zkCli.sh -server localhost:2181
- 方案 A(直接写摘要):
setAcl /app digest:alice:BASE64SHA1:cdrwa - 方案 B(先登录再设置,便于当前会话操作):
addauth digest alice:password
setAcl /app digest:alice:BASE64SHA1:cdrwa
- 验证
- 未认证会话执行 getAcl /app 或 get /app,应提示 Insufficient permission。
- 使用 addauth 登录后再访问,应成功。
三 常见场景与命令示例
- 仅本机访问
setAcl /app ip:127.0.0.1:cdrwa - 网段白名单
setAcl /app ip:192.168.1.0/24:cdrwa - 多主体组合(IP + 用户)
setAcl /app ip:192.168.1.10:r, digest:bob:BASE64SHA1:cdrwa - 创建节点时同时设置 ACL
create /app “data” digest:alice:BASE64SHA1:cdrwa - 移除 world 权限需谨慎(避免把自己锁在外面)
setAcl /app world:anyone:(生产慎用) - 重要提示
- setAcl 会覆盖节点原有 ACL;
- 子节点不继承父节点 ACL,需逐层设置或借助脚本批量设置;
- 修改前先备份现有 ACL:getAcl /app > acl.bak。
四 进阶 启用 SASL Kerberos 或 JAAS 认证
- 服务端配置(zoo.cfg)
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000 - JAAS 配置(示例:/etc/zookeeper/conf/zookeeper_jaas.conf)
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/etc/krb5.keytab”
principal=“zookeeper/hostname@REALM.COM”;
} ; - 客户端连接
zkCli.sh -server zk1:2181 -auth SASL/PLAIN zkuser@REALM.COM - 适用场景:跨机房、多租户、强合规环境。配置完成后需重启服务使 SASL 生效。
五 运维与安全注意事项
- 操作系统层权限
- 确保数据/日志目录属主正确:
chown -R zookeeper:zookeeper /var/lib/zookeeper
chmod -R 750 /var/lib/zookeeper
- 确保数据/日志目录属主正确:
- 防火墙与端口
- 放行客户端端口(默认 2181/tcp):
firewall-cmd --permanent --zone=public --add-port=2181/tcp & & firewall-cmd --reload
- 放行客户端端口(默认 2181/tcp):
- SELinux
- 如遇访问受限,可临时 setenforce 0 排查,生产环境请使用正确的 SELinux 策略。
- 客户端与服务端一致性
- 使用 digest 时,客户端连接需携带相同 用户名:密码 或摘要身份;
- 使用 SASL/Kerberos 时,客户端需配置 JAAS 并指定正确的 principal。
- 变更流程
- 先在测试环境验证 ACL 与业务兼容性;
- 变更窗口内保留回滚方案(如备份 znode 数据与 ACL);
- 避免移除 a(admin) 权限导致无法再次修改 ACL。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Zookeeper在Linux中的权限管理如何操作
本文地址: https://pptw.com/jishu/789119.html
