1. 安装Zookeeper
在Debian系统上,使用APT包管理器安装Zookeeper,确保软件包来源安全:
sudo apt update && sudo apt install zookeeper -y
2. 配置文件系统权限
Zookeeper的数据目录(默认/var/lib/zookeeper)和日志目录(默认/var/log/zookeeper)需设置严格的用户和组权限,避免未授权访问:
# 创建目录(若不存在)
sudo mkdir -p /var/lib/zookeeper /var/log/zookeeper
# 设置所有者为zookeeper用户及组
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper /var/log/zookeeper
# 设置目录权限(750:所有者可读写执行,组可读执行,其他无权限)
sudo chmod -R 750 /var/lib/zookeeper /var/log/zookeeper
3. 以非root用户运行Zookeeper
编辑Zookeeper的默认配置文件/etc/default/zookeeper,指定运行用户为zookeeper(系统默认已创建该用户):
ZOOKEEPER_USER=zookeeper
保存后重启服务使配置生效:
sudo systemctl restart zookeeper
4. 配置SASL认证(身份验证)
SASL是Zookeeper推荐的认证机制,需通过JAAS文件配置用户凭证:
/etc/zookeeper/conf/zookeeper_jaas.conf),添加Digest认证方式及用户信息:Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_admin "admin_password"; # 替换为实际强密码
user_kafka "kafka_password"; # 替换为实际强密码
};
zookeeper用户可访问):sudo chown zookeeper:zookeeper /etc/zookeeper/conf/zookeeper_jaas.conf
sudo chmod 600 /etc/zookeeper/conf/zookeeper_jaas.conf
/etc/default/zookeeper),指定JAAS文件路径:JAAS_CONF="/etc/zookeeper/conf/zookeeper_jaas.conf"
sudo systemctl restart zookeeper
5. 配置ACL(访问控制列表)
通过ACL限制用户对Zoo节点的访问权限,例如为/admin节点设置仅admin用户可读写:
/usr/share/zookeeper/bin/zkCli.sh -server localhost:2181
addauth digest admin:admin_password # 使用之前配置的Digest用户
/admin节点仅admin用户可读写):setAcl /admin digest:admin:admin_password:rwcda # r=read, w=write, c=create, d=delete, a=admin
/admin节点,应被拒绝):get /admin
6. 启用SSL/TLS加密通信
为防止数据在传输过程中被窃取,需配置SSL/TLS加密:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/zookeeper/ssl/zookeeper.key \
-out /etc/zookeeper/ssl/zookeeper.crt
keytool将证书导入密钥库(需安装openjdk-11-jdk):sudo keytool -import -alias zookeeper -file /etc/zookeeper/ssl/zookeeper.crt \
-keystore /etc/zookeeper/ssl/zookeeper.jks -storepass zoo_pass -keypass zoo_pass
zoo.cfg配置(添加SSL参数):ssl=true
ssl.keystore.location=/etc/zookeeper/ssl/zookeeper.jks
ssl.keystore.password=zoo_pass
ssl.truststore.location=/etc/zookeeper/ssl/zookeeper.jks
ssl.truststore.password=zoo_pass
sudo systemctl restart zookeeper
7. 配置防火墙限制访问
使用ufw(Uncomplicated Firewall)限制仅授权IP可访问Zookeeper的默认端口(2181):
# 允许本地回环接口
sudo ufw allow from 127.0.0.1 to any port 2181
# 允许特定IP段(如公司内网192.168.1.0/24)
sudo ufw allow from 192.168.1.0/24 to any port 2181
# 拒绝其他所有IP访问2181端口
sudo ufw deny 2181
# 启用防火墙
sudo ufw enable
8. 启用监控与审计日志
记录所有对Zoo节点的访问操作,便于后续审计和排查安全事件:
log4j.properties文件(/etc/zookeeper/conf/log4j.properties),开启审计日志:log4j.logger.org.apache.zookeeper.server.PrepRequestProcessor=INFO, audit
log4j.additivity.org.apache.zookeeper.server.PrepRequestProcessor=false
log4j.appender.audit=org.apache.log4j.RollingFileAppender
log4j.appender.audit.File=/var/log/zookeeper/audit.log
log4j.appender.audit.MaxFileSize=10MB
log4j.appender.audit.MaxBackupIndex=5
log4j.appender.audit.layout=org.apache.log4j.PatternLayout
log4j.appender.audit.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{1}:%L - %m%n
sudo systemctl restart zookeeper
9. 定期更新与安全维护
保持Zookeeper及系统软件为最新版本,及时修补已知安全漏洞:
# 更新软件包列表
sudo apt update
# 升级所有可升级的软件包
sudo apt upgrade -y
# 重启Zookeeper服务以应用更新
sudo systemctl restart zookeeper
10. 其他安全建议
/etc/ssh/sshd_config,设置PermitRootLogin no,并使用SSH密钥对认证。libpam-pwquality工具,配置复杂密码要求(如最小长度、包含大小写字母和数字)。/etc/ssh/sshd_config设置AllowUsers,仅允许特定用户通过SSH登录。