Zookeeper添加SASL安全认证 修复方案

#作者:任少近

文章目录

1修复背景

Zookeeper未授权访问漏洞通常指的是Zookeeper服务未进行适当的安全配置,导致外部用户可未经认证和授权访问Zookeeper服务,从而获取到服务控制权。

2 修复方案说明

SASL:SASL(即简单身份验证和安全层)是一个身份验证框架,它指定和描述将身份验证机制插入应用程序协议的过程。它是一种用于验证远程计算机的互联网标准框架或跟踪方法。

涉及版本:3.6.0+

3 配置流程

3.1停止zookeeper服务

zookeeper]# ./bin/zkServer.sh stop

3.2Zookeeper添加SASL参数

  1. 先备份zookeeper/conf/zoo.cfg配置文件
  2. 在zookeeper/conf/zoo.cfg配置文件中添加如下SASL配置:
    authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
    sessionRequireClientSASLAuth=true

3.2.1配置解析

复制代码
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider	#启用 SASL 认证

sessionRequireClientSASLAuth=true #自 3.6.0 版本开始:当设置为 true 时,ZooKeeper 服务器将只接受通过 SASL 与服务器进行认证的客户端的连接和请求。未配置 SASL 认证或配置了 SASL 但认证失败(即凭证无效)的客户端将无法与服务器建立会话。在这种情况下,将返回一个类型错误代码(-124),之后 Java 和 C 客户端将关闭与服务器的会话,而不会尝试重新连接。

3.3配置jaas密码文件

  1. 创建zookeeper/conf/zk_jaas.conf密码文件并写入如下密码配置:

    Server {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="zkadmin" #服务端身份认证用户名
    password="zkadmin" #服务端身份认证密码
    user_zkuser1="password1"; #允许用户名zkuser1且密码为password1的用户访问
    user_zkuser2="password2"; #允许用户名zkuser2且密码为password2的用户访问
    user_zkuser3="password3"; #允许用户名zkuser3且密码为password3的用户访问
    ...
    };

    Client {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="zkuser1" #客户端用户名1
    password="password1"; #客户端密码1
    };

    Client {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="zkuser2"
    password="password2";
    };

    Client {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    username="zkuser3"
    password="password3";
    };

3.4 添加启动参数

  1. 先备份zookeeper/bin/zkEnv.sh脚本文件

  2. 在zookeeper/bin/zkEnv.sh中添加如下配置:

    export JVMFLAGS="-Djava.security.auth.login.config=/root/zookeeper/conf/zk_jaas.conf -Dzookeeper.requireClientAuthScheme=sasl"

3.5启动zookeeper服务

zookeeper]# ./bin/zkServer.sh start

3.6访问测试

  1. 使用配置zkEnv.sh的zkCli.sh命令
  2. 使用未配置zkEnv.sh的zkCli.sh命令

4 Kafka连接zookeeper服务端配置

4.1未配置身份认证

在kafka未配置zookeeper对应的Jaas.conf密码时,使用kafka去连接zookeeper,Kafka连接失败,出现缺少认证报错信息。

4.2停止kafka服务

复制代码
kafka]#./bin/kafka-server-stop.sh

4.3配置身份认证

4.3.1配置jaas密码文件

在/kafka/config/kafka_jaas.conf编写如下jaas.conf密码:

复制代码
Client {
       org.apache.zookeeper.server.auth.DigestLoginModule required
       username="zkuser"
       password="password";
};

4.3.2配置kafka启动参数

  1. 在/kafka/bin/kafka-run-class.sh脚本中# JMX settings下添加如下配置:

    -Djava.security.auth.login.config=/root/kafka/config/kafka_jaas.conf

  2. 整体配置展示:

    JMX settings

    if [ -z "$KAFKA_JMX_OPTS" ]; then
    KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.security.auth.login.config=/root/kafka/config/kafka_jaas.conf "
    Fi

  3. 配置图片

4.4启动kafka服务

kafka]#./kafka/bin/kafka-server-start.sh -daemon kafka/config/server.properties

5 回滚方案

5.1 Zookeeper回滚方案

  1. 停止zookeeper服务
  2. 恢复zookeeper的zkEnv.sh和zoo.cfg配置文件
  3. 启动zookeeper服务

5.2 Kafka回滚方案

  1. 停止kafka服务
  2. 恢复kafka的kafka-run-class.sh脚本文件
  3. 启动kafka服务
相关推荐
隐擎fox4 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
小蒋观天下6 小时前
社区AI智能摄像头完整选型指南
大数据·人工智能·安全·计算机视觉·语音识别·ai大模型
Amy187021118239 小时前
数据中心电气接点测温:从“被动抢修”到“主动预警”的安全革命
人工智能·安全
jimmyleeee9 小时前
GEN AI安全:威胁全景---从训练到运行的攻防实战
人工智能·安全
DolphinScheduler社区10 小时前
Apache DolphinScheduler 8 月报:权限安全加固,调度补火上线,性能与稳定性持续提升
大数据·安全·开源·apache·任务调度·海豚调度
竣达技术11 小时前
UPS 供电风险保护方案网络远程控制:免代理 SSH/Telnet UPS 安全关机方案
网络·安全·ssh
慧都小项11 小时前
看得见页面,却看不全风险:Burp Suite如何补齐API安全盲区
安全
Bruce_Liuxiaowei13 小时前
数字签名与“公钥制作者之谜“:信任从何而来
网络·安全·web安全
Black蜡笔小新14 小时前
运维提效!视频汇聚平台EasyCVR视频质量诊断,掉线花屏自动预警
运维·安全·音视频
数据知道15 小时前
哈希与密码存储——bcrypt、Argon2、盐值与彩虹表
网络·算法·安全·网络安全·密码学·哈希算法