#作者:任少近
文章目錄
- 1修復背景
- 2 修復方案說明
- 3 配置流程
- 3.1停止zookeeper服務
- 3.2Zookeeper添加SASL參數
- 3.3配置jaas密碼文件
- 3.4 添加啟動參數
- 3.5啟動zookeeper服務
- 3.6訪問測試
- 4 Kafka連接zookeeper服務端配置
- 4.1未配置身份認證
- 4.2停止kafka服務
- 4.3配置身份認證
- 4.4啟動kafka服務
- 5 回滾方案
- 5.1 Zookeeper回滾方案
- 5.2 Kafka回滾方案
1修復背景
Zookeeper未授權訪問漏洞通常指的是Zookeeper服務未進行適當的安全配置,導致外部用戶可未經認證和授權訪問Zookeeper服務,從而獲取到服務控制權。
2 修復方案說明
SASL:SASL(即簡單身份驗證和安全層)是一個身份驗證框架,它指定和描述將身份驗證機制插入應用程序協議的過程。它是一種用于驗證遠程計算機的互聯網標準框架或跟蹤方法。
涉及版本:3.6.0+
3 配置流程
3.1停止zookeeper服務
zookeeper]# ./bin/zkServer.sh stop
3.2Zookeeper添加SASL參數
- 先備份zookeeper/conf/zoo.cfg配置文件
- 在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密碼文件
- 創建zookeeper/conf/zk_jaas.conf密碼文件并寫入如下密碼配置:
Server {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername="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 requiredusername="zkuser1" #客戶端用戶名1password="password1"; #客戶端密碼1
};Client {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername="zkuser2"password="password2";
};Client {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername="zkuser3"password="password3";
};
3.4 添加啟動參數
- 先備份zookeeper/bin/zkEnv.sh腳本文件
- 在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訪問測試
- 使用配置zkEnv.sh的zkCli.sh命令
- 使用未配置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 requiredusername="zkuser"password="password";
};
4.3.2配置kafka啟動參數
- 在/kafka/bin/kafka-run-class.sh腳本中# JMX settings下添加如下配置:
-Djava.security.auth.login.config=/root/kafka/config/kafka_jaas.conf
- 整體配置展示:
# JMX settings
if [ -z "$KAFKA_JMX_OPTS" ]; thenKAFKA_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
- 配置圖片
4.4啟動kafka服務
kafka]#./kafka/bin/kafka-server-start.sh -daemon kafka/config/server.properties
5 回滾方案
5.1 Zookeeper回滾方案
- 停止zookeeper服務
- 恢復zookeeper的zkEnv.sh和zoo.cfg配置文件
- 啟動zookeeper服務
5.2 Kafka回滾方案
- 停止kafka服務
- 恢復kafka的kafka-run-class.sh腳本文件
- 啟動kafka服務