在 Linux 上部署的 ZooKeeper 权限设置通常包含 两层面:
下面分别说明。
不要使用 root 直接运行。
useradd zookeeper
chown -R zookeeper:zookeeper /opt/zookeeper
chown -R zookeeper:zookeeper /var/lib/zookeeper
chown -R zookeeper:zookeeper /var/log/zookeeper
启动:
su zookeeper -c "/opt/zookeeper/bin/zkServer.sh start"
常见目录权限:
| 目录 | 建议权限 |
|---|---|
| conf | 750 |
| dataDir | 700 |
| dataLogDir | 700 |
| logs | 750 |
示例:
chmod 700 /var/lib/zookeeper
chmod 750 /opt/zookeeper/conf
只开放 2181(客户端)、2888、3888(集群):
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --reload
ZooKeeper 使用 ACL(Access Control List) 控制 znode 访问。
| 权限 | 含义 |
|---|---|
| READ | 读节点 |
| WRITE | 写节点 |
| CREATE | 创建子节点 |
| DELETE | 删除子节点 |
| ADMIN | 设置 ACL |
常用:
world:默认,所有人auth:已认证用户digest:用户名 + 密码(最常用)ip:IP 限制echo -n user:password | md5sum
例如:
user:password → abcd1234efgh5678
zkCli.sh
addauth digest user:password
create /test "data" digest:user:abcd1234efgh5678:rwadc
含义:
setAcl /test digest:user:abcd1234efgh5678:rwadc
getAcl /test
默认:
world:anyone:cdrwa
setAcl / digest:user:abcd1234efgh5678:cdrwa
zoo.cfg 中可限制:
# 只允许本地管理
4lw.commands.whitelist=stat,ruok,conf
❌ 用 root 跑 ZooKeeper
❌ 使用 world:anyone
❌ 忘记 addauth 导致无法访问
❌ ACL 设置后客户端未认证
✅ 使用独立 zookeeper 用户
✅ dataDir 权限 700
✅ 使用 digest ACL
✅ 禁止 world:anyone
✅ 防火墙限制端口
如果你需要:
可以继续问我。