Zookeeper在Linux下的权限控制设置
一 操作系统层权限
- 以专用系统用户运行:建议创建系统用户zookeeper并以其身份运行服务,避免以root运行。
- 示例:
sudo groupadd zookeeper && sudo useradd -g zookeeper zookeeper
- 示例:
- 目录与文件权限:将数据目录 dataDir、日志目录 dataLogDir及安装目录的所有权赋予zookeeper,并设置合适的权限。
- 示例:
sudo chown -R zookeeper:zookeeper /var/lib/zookeepersudo chmod -R 750 /var/lib/zookeepersudo chown -R zookeeper:zookeeper /var/log/zookeepersudo chmod -R 750 /var/log/zookeeper
- 示例:
- SELinux:若启用SELinux,必要时调整策略或临时设为宽容模式用于排查(生产环境不建议长期关闭)。
- 示例:
sudo setenforce 0(仅测试用途)
- 示例:
- 防火墙:开放客户端端口(默认2181/TCP)。
- 示例:
sudo firewall-cmd --permanent --zone=public --add-port=2181/tcp && sudo firewall-cmd --reload
以上措施确保Zookeeper进程对本地文件与端口具备所需的最小权限,降低被提权与越权访问的风险。
- 示例:
二 Zookeeper内置ACL权限模型
- 权限模型与模式
- 权限位:CREATE©、READ®、WRITE(W)、DELETE(D)、ADMIN(A)(可组合,如cdrwa)。
- 认证/授权模式:
- world:默认,标识为anyone,常用于开放或兜底权限。
- auth:对已认证主体生效(不指定具体身份)。
- digest:基于“用户名:密码”的摘要认证,形式为digest:用户名:Base64(SHA1(用户名:密码)),如示例
digest:zk:1LHmdzcxVxYZvefFlGjacOZfF8:cdrwa。 - ip:按客户端IP或网段限制,如ip:192.168.1.0/24:cdrwa。
- super:超级管理员,拥有对所有节点的完全权限(谨慎启用)。
- 常用ACL命令(zkCli.sh)
- 登录与认证:
addauth digest zk:test - 查看ACL:
getAcl /path - 设置ACL:
setAcl /path digest:zk:1LHmdzcxVxYZvefFlGjacOZfF8:cdrwa - 创建节点并带ACL:
create /test "data" digest:zk:1LHmdzcxVxYZvefFlGjacOZfF8:cdrwa - 基于IP的ACL:
setAcl /test-node-ip ip:192.168.0.33:cdwra
以上ACL机制用于细粒度控制对Znode的访问,是最核心的权限控制手段。
- 登录与认证:
三 快速上手示例
- 目标:以digest方式创建节点并设置管理员与只读两类权限。
- 步骤
- 生成摘要身份标识
- 计算Base64(SHA1(“用户名:密码”)),例如用户admin/Admin@123的摘要为:admin:qiTlqPLa5W+jEKgFJwzS1vFptdSiEw=(可用命令行工具计算)。
- 连接zkCli并认证
./zkCli.sh -server localhost:2181addauth digest admin:Admin@123
- 创建节点并设置ACL
create /app "hello" digest:admin:qiTlqPLa5W+jEKgFJwzS1vFptdSiEw=:cdrwasetAcl /app world:anyone:r,digest:reader:Uuq3IqWjf4+3e1uRK1vFptdSiEw=:r
- 验证
getAcl /app(应看到admin为cdrwa、reader为r)
- 生成摘要身份标识
- 提示
- 对存量节点设置ACL前,先完成
addauth并在测试环境验证,避免把自己锁在外面。 - 子节点默认不继承父节点ACL,必要时在创建时显式指定或在批量变更时逐层设置。
上述示例展示了digest认证与ACL组合的典型用法,可直接用于生产前的演练与落地。
- 对存量节点设置ACL前,先完成
四 生产环境加固建议
- 启用强认证:优先使用SASL/Kerberos或Digest认证,避免仅依赖world:anyone的宽松策略。
- 示例(启用SASL):在zoo.cfg中配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProviderrequireClientAuthScheme=sasl
- 示例(启用SASL):在zoo.cfg中配置
- 超级管理员:如确需启用super,通过JVM参数设置
- 示例:
-Dzookeeper.DigestAuthenticationProvider.superDigest=super:Base64(SHA1(super:password)) - 注意:妥善保管超级凭据,最小化使用场景。
- 示例:
- 最小权限原则:按业务划分只读/读写/管理等角色,按Znode层级设置ACL,避免“一刀切”的全局权限。
- 变更流程:先在测试环境验证ACL变更,变更窗口内保留回滚方案,变更后使用
getAcl复核。 - 合规与审计:结合运维与审计要求,定期巡检ACL与系统层权限配置,及时回收不再使用的账户与权限。
以上做法有助于在生产环境中兼顾安全性与可运维性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1464053.html