温馨提示×

Zookeeper在Linux中如何进行权限控制

小樊
38
2025-12-28 07:26:56
栏目: 智能运维

Zookeeper在Linux中的权限控制实践

一 总体思路

  • 权限控制应覆盖两层:一是操作系统层(运行账户、目录权限、SELinux/AppArmor),二是 Zookeeper 内核层(基于 ACL 的认证与授权)。
  • 常用认证与授权方式包括:world、ip、auth、digest、SASL/Kerberos;常用权限集合为 CREATE、READ、WRITE、DELETE、ADMIN
  • 建议同时启用网络层控制(如 firewalld 限制来源网段、必要时启用 SSL/TLS 加密传输)。

二 操作系统层安全

  • 专用运行账户与目录权限
    • 创建系统账户与组,设置数据与日志目录属主,限制其他用户访问:
      • sudo groupadd zookeeper
      • sudo useradd -g zookeeper zookeeper
      • sudo mkdir -p /var/lib/zookeeper /var/log/zookeeper
      • sudo chown -R zookeeper:zookeeper /var/lib/zookeeper /var/log/zookeeper
      • sudo chmod -R 750 /var/lib/zookeeper /var/log/zookeeper
    • 配置 systemd 服务以 zookeeper 用户运行:
      • [Service] 中设置:User=zookeeper;Group=zookeeper
      • 执行:sudo systemctl daemon-reload && sudo systemctl restart zookeeper
  • SELinux/AppArmor 适配(如启用)
    • SELinux 示例:sudo chcon -Rt zookeeper_var_lib_t /var/lib/zookeeper;sudo chcon -Rt zookeeper_var_log_t /var/log/zookeeper
    • AppArmor:编辑相应 profile,放行数据/日志目录读写。

三 Zookeeper内置ACL配置

  • 常用权限模式与权限位
    • 模式:world(默认对所有主体开放)、ip(按客户端 IP 网段)、auth(基于当前已认证主体)、digest(用户名:密码的摘要认证,生产常用)、super(超级用户,谨慎启用)。
    • 权限:C(Create)、R(Read)、W(Write)、D(Delete)、A(Admin/ACL 管理)。
  • 命令行常用操作
    • 连接客户端:/path/to/zookeeper/bin/zkCli.sh -server localhost:2181
    • 查看 ACL:getAcl /exampleNode
    • 设置 ACL:setAcl /exampleNode world:anyone:r,ip:192.168.1.0/24:cdrwa,digest:user1:cdrwa,digest:user2:r
    • 创建节点并带 ACL:create /exampleNode “data” -acl “digest:user1:cdrwa,digest:user2:r”
    • 在会话中添加认证主体:addauth digest user1:password123
  • 生成 digest 身份标识
    • 摘要串生成:echo -n “user1:password123” | openssl dgst -sha1 -binary | base64
    • 在 ACL 中使用形如:digest:user1:Base64Digest:cdrwa(注意 Base64Digest 不含用户名与冒号)。

四 启用SASL与JAAS的强认证

  • 服务端配置(zoo.cfg)
    • 启用 SASL 提供者:authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
    • 可选:requireClientAuthScheme=sasl(强制客户端 SASL 认证)
  • JAAS 配置(/etc/zookeeper/zookeeper.jaas)
    • Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_user1=“password123” user_user2=“password456”; };
  • 启动参数
    • 方式一:export JVMFLAGS=“-Djava.security.auth.login.config=/etc/zookeeper/zookeeper.jaas”
    • 方式二:在 systemd 服务 Environment 中设置上述 JVM 参数
  • 客户端使用
    • zkCli.sh 连接后执行:addauth digest user1:password123
    • 对需要保护的节点设置 ACL(如:digest:user1:cdrwa)。

五 网络与加密加固

  • 防火墙限制来源网段
    • 仅放通受信网段访问 2181/tcp(或启用安全端口):
      • sudo firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port protocol=“tcp” port=“2181” accept’
      • sudo firewall-cmd --reload
  • 启用 SSL/TLS(可选但推荐)
    • 配置示例:
      • secureClientPort=2281
      • zookeeper.ssl.keyStore.location=/path/to/keystore.jks
      • zookeeper.ssl.keyStore.password=keystore_pass
      • zookeeper.ssl.trustStore.location=/path/to/truststore.jks
      • zookeeper.ssl.trustStore.password=truststore_pass
  • 运维要点
    • 避免在生产使用 world:anyone;ACL 变更前先在测试环境验证,变更后及时审计。
    • 定期审查 ACL 与系统账户权限,遵循最小权限原则;启用 SASL/Kerberos 与 TLS 提升整体安全基线。

0