1. 配置文件系统权限
确保Zookeeper的数据目录(默认/var/lib/zookeeper)和日志目录(默认/var/log/zookeeper)仅能被Zookeeper进程读写。使用以下命令设置所有权和权限:
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper /var/log/zookeeper sudo chmod -R 750 /var/lib/zookeeper /var/log/zookeeper 这一步防止未经授权的用户篡改Zookeeper数据或日志。
2. 以非root用户运行Zookeeper
编辑/etc/default/zookeeper文件,设置ZOOKEEPER_USER=zookeeper,避免Zookeeper以root权限运行(降低权限提升风险)。修改后重启服务:
sudo systemctl restart zookeeper ```。 **3. 配置ACL(访问控制列表)** 通过ACL限制用户对ZooKeeper节点的访问权限。首先启用SASL认证(编辑`/etc/zookeeper/conf/zoo.cfg`添加`authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider`和`requireClientAuthScheme=sasl`),然后使用`zkCli.sh`工具设置ACL: ```bash # 连接到Zookeeper bin/zkCli.sh -server localhost:2181 # 创建用户(可选) adduser user1 # 设置节点ACL(示例:限制/mynode仅user1可读写) setAcl /mynode user1:user1:rw 这一步确保不同用户只能访问其有权限的节点。
4. 启用SASL/Kerberos认证
通过SASL(支持Kerberos)实现强身份认证。步骤如下:
/etc/zookeeper/conf/zoo.cfg添加认证配置;/etc/zookeeper/conf/zookeeper_jaas.conf),内容示例如下:Server { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/etc/krb5.keytab" principal="zookeeper/hostname@REALM.COM"; }; Client { useKeyTab=true keyTab="/etc/krb5.keytab"; }; chmod 600 /etc/zookeeper/conf/zookeeper_jaas.conf);/etc/default/zookeeper)添加JAAS_CONF环境变量:JAAS_CONF="/etc/zookeeper/conf/zookeeper_jaas.conf" 这一步防止未认证的用户连接到ZooKeeper。
5. 配置SSL/TLS加密通信
加密客户端与ZooKeeper服务器之间的通信,防止数据泄露。步骤如下:
keytool);/etc/zookeeper/conf/zoo.cfg添加加密配置:ssl=true ssl.keystore.location=/path/to/keystore.jks ssl.keystore.password=your_keystore_password ssl.truststore.location=/path/to/truststore.jks ssl.truststore.password=your_truststore_password 这一步确保数据传输过程中的机密性。
6. 配置防火墙限制访问
使用ufw(Uncomplicated Firewall)限制对ZooKeeper端口(默认2181)的访问,仅允许授权IP地址连接:
sudo ufw allow from trusted_ip to any port 2181 sudo ufw enable 这一步减少未经授权的网络访问风险。
7. 启用监控与审计日志
启用ZooKeeper的审计日志功能,记录所有节点访问和操作(如修改log4j.properties文件增加审计日志配置),并使用监控工具(如Prometheus+Granafa)实时监控ZooKeeper状态,设置异常警报(如连接数激增、节点宕机)。
8. 定期更新系统与软件
保持Debian系统和ZooKeeper软件处于最新状态,及时安装安全补丁(如使用sudo apt update && sudo apt upgrade),修复已知漏洞。
9. 其他安全建议
libpam-pwquality工具,配置复杂密码要求(如长度、特殊字符);/etc/ssh/sshd_config设置PermitRootLogin no,使用SSH密钥对进行身份验证;