確保Zookeeper配置文件(如zoo.cfg
)及數據、日志目錄的權限正確,防止未授權訪問。
zoo.cfg
的所有者設為zookeeper
用戶,權限設為644
(僅所有者可寫)。sudo chown zookeeper:zookeeper /path/to/zoo.cfg
sudo chmod 644 /path/to/zoo.cfg
dataDir
)和日志目錄(logDir
)的所有者為zookeeper
,權限設為750
(所有者可讀寫執行,組用戶可讀執行,其他用戶無權限)。sudo chown -R zookeeper:zookeeper /path/to/dataDir
sudo chmod -R 750 /path/to/dataDir
sudo chown -R zookeeper:zookeeper /path/to/logDir
sudo chmod -R 750 /path/to/logDir
若系統啟用SELinux,需調整策略以允許Zookeeper訪問所需資源。
sudo setenforce 0
/etc/selinux/config
文件,將SELINUX=enforcing
改為SELINUX=disabled
,重啟系統生效。通過ACL限制節點訪問權限,確保只有授權用戶可操作特定路徑。
zkCli.sh
工具添加用戶(如user1
),并設置密碼。./zkCli.sh -server localhost:2181
addauth digest user1:password1
user1
讀寫執行(rwcda
),其他用戶只讀(r
):setAcl / digest:user1:password1:rwcda world:anyone:r
/configs
節點僅允許admin
用戶管理(cdrwa
):setAcl /configs digest:admin:admin_secret:cdrwa
使用SASL(推薦)或Kerberos實現客戶端身份驗證,防止非法連接。
/etc/zookeeper/conf/zookeeper_jaas.conf
),定義用戶憑證:Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_super="super_secret"
user_admin="admin_secret";
};
Client {
org.apache.zookeeper.server.auth.DigestLoginModule required;
};
zoo.cfg
,啟用SASL認證:authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
sudo systemctl restart zookeeper
addauth
命令提供認證信息:./zkCli.sh -server localhost:2181
addauth digest super_super:super_secret
加密客戶端與服務器間的數據傳輸,防止中間人攻擊。
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/pki/tls/private/zookeeper.key -out /etc/pki/tls/certs/zookeeper.crt
zoo.cfg
,指定證書路徑并啟用客戶端認證:ssl.keystore.location=/etc/pki/tls/certs/zookeeper.jks
ssl.keystore.password=zookeeper
ssl.truststore.location=/etc/pki/tls/certs/zookeeper.jks
ssl.truststore.password=zookeeper
ssl.clientAuth=need
限制僅允許可信IP訪問Zookeeper端口(默認2181
為客戶端端口,2888
/3888
為集群通信端口)。
sudo firewall-cmd --permanent --zone=public --add-port=2181/tcp # 客戶端端口
sudo firewall-cmd --permanent --zone=public --add-port=2888/tcp # 集群端口
sudo firewall-cmd --permanent --zone=public --add-port=3888/tcp # 集群端口
sudo firewall-cmd --reload
sudo iptables -A INPUT -p tcp --dport 2181 -s trusted_ip -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2181 -j DROP
log4j.properties
配置),記錄節點訪問、操作等信息;使用Prometheus+Granafa等工具監控集群狀態(如CPU、內存、連接數),及時發現異常。