centos zookeeper如何进行安全设置
导读:CentOS 上 ZooKeeper 安全设置实操指南 一 基础加固 运行账户与最小权限 建议以专用系统用户(如 zookeeper:zookeeper)运行服务,避免使用 root。 配置文件与目录权限最小化: 配置文件(如 /et...
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=yes、PrivateTmp=yes、NoNewPrivileges=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”;
- } ;
- Server {
- 在启动环境(如 zookeeper-env.sh 或 systemd 服务 Environment)加入:
- -Djava.security.auth.login.config=/etc/zookeeper/conf/zk_server_jaas.conf
- 在 zoo.cfg 增加:
- 客户端与依赖组件(如 Kafka)认证
- 客户端与服务端使用相同 JAAS 配置(Client 段),或在客户端设置环境变量:
- export JVMFLAGS=“-Djava.security.auth.login.config=/etc/zookeeper/conf/zk_client_jaas.conf”
- 若依赖组件(如 Kafka)连接 ZooKeeper,需为其进程配置相同的 JAAS 文件并重启。
- 客户端与服务端使用相同 JAAS 配置(Client 段),或在客户端设置环境变量:
- 基于 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
- 生成凭证(示例账户 app:secret):
- 如需对根节点或关键路径设置 ACL,务必保留管理员凭证,避免锁死。
- 使用 zkCli.sh 设置节点 ACL(示例为 digest 模式):
- 超级管理员(谨慎使用)
- 通过 JVM 参数设置超级 digest:
- -Dzookeeper.DigestAuthenticationProvider.superDigest=super:Base64(SHA1(super:password))
- 仅在应急与运维场景使用,并做好密钥保管。
- 通过 JVM 参数设置超级 digest:
三 加密与网络安全
- 传输加密(TLS)
- 为客户端与服务端启用 SSL/TLS,生成 X.509 证书并在 zoo.cfg 配置 sslQuorum、ssl.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 |
以上步骤覆盖了 身份鉴别、访问控制、加密传输、网络隔离、审计监控 等核心安全面,按此实施可显著提升 CentOS 上 ZooKeeper 的安全基线。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos zookeeper如何进行安全设置
本文地址: https://pptw.com/jishu/781468.html
