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