温馨提示×

Zookeeper在Linux下的权限控制如何设置

小樊
44
2025-12-02 18:22:51
栏目: 智能运维

Zookeeper在Linux下的权限控制设置

一 操作系统层权限

  • 以专用系统用户运行:建议创建系统用户zookeeper并以其身份运行服务,避免以root运行。
    • 示例:sudo groupadd zookeeper && sudo useradd -g zookeeper zookeeper
  • 目录与文件权限:将数据目录 dataDir日志目录 dataLogDir及安装目录的所有权赋予zookeeper,并设置合适的权限。
    • 示例:
      • sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
      • sudo chmod -R 750 /var/lib/zookeeper
      • sudo chown -R zookeeper:zookeeper /var/log/zookeeper
      • sudo 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方式创建节点并设置管理员只读两类权限。
  • 步骤
    1. 生成摘要身份标识
      • 计算Base64(SHA1(“用户名:密码”)),例如用户admin/Admin@123的摘要为:admin:qiTlqPLa5W+jEKgFJwzS1vFptdSiEw=(可用命令行工具计算)。
    2. 连接zkCli并认证
      • ./zkCli.sh -server localhost:2181
      • addauth digest admin:Admin@123
    3. 创建节点并设置ACL
      • create /app "hello" digest:admin:qiTlqPLa5W+jEKgFJwzS1vFptdSiEw=:cdrwa
      • setAcl /app world:anyone:r,digest:reader:Uuq3IqWjf4+3e1uRK1vFptdSiEw=:r
    4. 验证
      • getAcl /app(应看到admin为cdrwa、reader为r
  • 提示
    • 对存量节点设置ACL前,先完成addauth并在测试环境验证,避免把自己锁在外面。
    • 子节点默认不继承父节点ACL,必要时在创建时显式指定或在批量变更时逐层设置。 上述示例展示了digest认证与ACL组合的典型用法,可直接用于生产前的演练与落地。

四 生产环境加固建议

  • 启用强认证:优先使用SASL/KerberosDigest认证,避免仅依赖world:anyone的宽松策略。
    • 示例(启用SASL):在zoo.cfg中配置
      • authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
      • requireClientAuthScheme=sasl
  • 超级管理员:如确需启用super,通过JVM参数设置
    • 示例:-Dzookeeper.DigestAuthenticationProvider.superDigest=super:Base64(SHA1(super:password))
    • 注意:妥善保管超级凭据,最小化使用场景。
  • 最小权限原则:按业务划分只读/读写/管理等角色,按Znode层级设置ACL,避免“一刀切”的全局权限。
  • 变更流程:先在测试环境验证ACL变更,变更窗口内保留回滚方案,变更后使用getAcl复核。
  • 合规与审计:结合运维与审计要求,定期巡检ACL与系统层权限配置,及时回收不再使用的账户与权限。 以上做法有助于在生产环境中兼顾安全性与可运维性。

0