确保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、内存、连接数),及时发现异常。