在 Linux 上部署的 ZooKeeper,权限通常涉及 两层面:
下面分别说明。
不要用 root 运行 ZooKeeper:
useradd zookeeper
passwd zookeeper
假设 ZooKeeper 安装在 /opt/zookeeper,数据目录在 /data/zookeeper:
chown -R zookeeper:zookeeper /opt/zookeeper
chown -R zookeeper:zookeeper /data/zookeeper
chmod 750 /opt/zookeeper
chmod 700 /data/zookeeper
su zookeeper
/opt/zookeeper/bin/zkServer.sh start
ZooKeeper 使用 ACL(Access Control List) 控制 znode 访问。
| 权限 | 说明 |
|---|---|
| CREATE | 创建子节点 |
| READ | 读取节点和数据 |
| WRITE | 写数据 |
| DELETE | 删除子节点 |
| ADMIN | 设置 ACL |
组合示例:
world:anyone:cdrwa(默认,所有人可读写)auth::cdrwa(已认证用户)digest:user:password:cdrwajava -cp zookeeper.jar:lib/* org.apache.zookeeper.server.auth.DigestAuthenticationProvider user:123456
输出类似:
user:123456 -> user:6e6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d
zkCli.sh
create /test "data" digest:user:6e6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d:cdrwa
addauth digest user:123456
get /test
setAcl /test digest:user:6e6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d:cdrwa
getAcl /test
避免:
world:anyone:cdrwa
在 zoo.cfg 中:
aclProvider=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
iptables -A INPUT -p tcp --dport 2181 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 2181 -j DROP
| 场景 | 做法 |
|---|---|
| Linux 权限 | 专用用户 + 目录权限 |
| znode 权限 | ACL(digest 最常用) |
| 安全建议 | 禁用 world、限制 IP |
如果你愿意,我可以: