温馨提示×

centos zookeeper如何进行安全设置

小樊
32
2025-12-25 15:54:43
栏目: 智能运维

CentOS 上 ZooKeeper 安全设置实操指南

一 基础加固

  • 运行账户与最小权限
    • 建议以专用系统用户(如 zookeeper:zookeeper)运行服务,避免使用 root
    • 配置文件与目录权限最小化:
      • 配置文件(如 /etc/zookeeper/conf/zoo.cfg)属主为 zookeeper,权限 600/640
      • 数据与日志目录(如 /var/lib/zookeeper/var/log/zookeeper)属主 zookeeper:zookeeper,权限 750
      • 示例:
        • sudo chown -R zookeeper:zookeeper /var/lib/zookeeper /var/log/zookeeper
        • sudo chmod -R 750 /var/lib/zookeeper /var/log/zookeeper
  • 网络与端口
    • 仅在内网开放必要端口,默认客户端端口 2181,集群通信端口 2888/3888
    • 使用 firewalld 限制来源(示例仅允许 192.168.1.0/24 访问 2181):
      • sudo firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“2181” protocol=“tcp” accept’
      • sudo firewall-cmd --reload
  • 系统与进程隔离
    • 将 ZooKeeper 数据/日志目录与系统其他服务隔离,避免共享挂载点。
    • 启用 systemd 服务隔离(如 ProtectHome=yesPrivateTmp=yesNoNewPrivileges=yes)以减小攻击面。

二 认证与访问控制

  • 启用 SASL/Digest 认证(服务端)
    • zoo.cfg 增加:
      • authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
      • jaasLoginRenew=3600000
      • requireClientAuthScheme=sasl
      • 可选(ZooKeeper 3.6+):sessionRequireClientSASLAuth=true(强制客户端 SASL 登录)
    • 创建 JAAS 文件(如 /etc/zookeeper/conf/zk_server_jaas.conf):
      • Server {
        • org.apache.zookeeper.server.auth.DigestLoginModule required
        • user_admin=“AdminPass123”
        • user_app=“AppPass456”;
      • };
    • 在启动环境(如 zookeeper-env.sh 或 systemd 服务 Environment)加入:
      • -Djava.security.auth.login.config=/etc/zookeeper/conf/zk_server_jaas.conf
  • 客户端与依赖组件(如 Kafka)认证
    • 客户端与服务端使用相同 JAAS 配置(Client 段),或在客户端设置环境变量:
      • export JVMFLAGS=“-Djava.security.auth.login.config=/etc/zookeeper/conf/zk_client_jaas.conf”
    • 若依赖组件(如 Kafka)连接 ZooKeeper,需为其进程配置相同的 JAAS 文件并重启。
  • 基于 ACL 的细粒度授权
    • 使用 zkCli.sh 设置节点 ACL(示例为 digest 模式):
      • 生成凭证(示例账户 app:secret):
        • echo -n app:secret | openssl dgst -binary -sha1 | openssl base64
        • 输出示例:ABCD1234+/==(记作 BASE64(SHA1(app:secret))
      • 在 zkCli 中:
        • addauth digest app:secret
        • create /app-node “data” digest:app:ABCD1234+/==:cdrwa
        • setAcl /app-node digest:app:ABCD1234+/==:cdrwa
    • 如需对根节点或关键路径设置 ACL,务必保留管理员凭证,避免锁死。
  • 超级管理员(谨慎使用)
    • 通过 JVM 参数设置超级 digest
      • -Dzookeeper.DigestAuthenticationProvider.superDigest=super:Base64(SHA1(super:password))
    • 仅在应急与运维场景使用,并做好密钥保管。

三 加密与网络安全

  • 传输加密(TLS)
    • 为客户端与服务端启用 SSL/TLS,生成 X.509 证书并在 zoo.cfg 配置 sslQuorumssl.clientAuth 等参数,客户端使用 zookeeper.client.secure=true 与信任库连接。
    • 适用于跨机房、公网或合规要求场景,能显著降低明文嗅探与中间人攻击风险。
  • 网络分区与访问控制
    • 集群节点间通信(2888/3888)应限制为 节点间私网/VPC 访问,不与客户端混布。
    • 结合 firewalld 或云安全组仅放通必要来源与端口,优先使用 源地址白名单 策略。

四 审计与合规

  • 日志与审计
    • 启用 audit log(如 zookeeper.audit.enable=true),记录关键操作(创建/删除节点、ACL 变更等)。
    • /var/log/zookeeper 纳入集中日志(如 rsyslog/ELK),设置保留周期与告警规则。
  • 四字命令安全
    • 限制或禁用危险四字命令(如 ruok、envi、stat、wchs 等),仅在内网通过本地控制台或跳板机执行;生产环境建议关闭对外暴露的四字命令端口。
  • 基线核查与持续监控
    • 定期核查:匿名访问是否关闭、ACL 是否覆盖关键路径、证书是否过期、JAAS 凭据强度、firewalld 规则是否最小化。
    • 建立监控告警(连接异常、ACL 频繁变更、认证失败激增等)。

五 快速检查清单

检查项 期望状态 验证方法
运行账户 专用账户(如 zookeeper),非 root ps -eo user,comm
配置与目录权限 配置 600/640;数据/日志 750,属主 zookeeper ls -ld /etc/zookeeper/conf/zoo.cfg /var/lib/zookeeper /var/log/zookeeper
匿名访问 已禁用或仅本地回环 echo stat
SASL 强制 已启用(3.6+ 建议 sessionRequireClientSASLAuth=true) grep -E "requireClientAuthScheme
ACL 覆盖 关键路径设置 digest/cdwrw 等 zkCli.sh getAcl /app
防火墙 仅放通必要来源与端口 firewall-cmd --list-all
证书与 TLS 启用并校验证书有效期与信任链 查看 zkEnv.sh 或 systemd 环境;客户端启用 secure 连接测试
审计日志 已启用并落盘集中 tail -f /var/log/zookeeper/zookeeper-audit.log

以上步骤覆盖了 身份鉴别、访问控制、加密传输、网络隔离、审计监控 等核心安全面,按此实施可显著提升 CentOSZooKeeper 的安全基线。

0