在 Linux 上搭建的 ZooKeeper,权限控制主要涉及 两方面:
下面分别说明。
不要用 root 跑 ZooKeeper。
useradd zookeeper
passwd 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"
chmod 750 /opt/zookeeper
chmod 700 /var/lib/zookeeper
确保只有 zookeeper 用户和 root 能访问。
只允许指定 IP 访问 2181:
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="2181" protocol="tcp" accept'
firewall-cmd --reload
ZooKeeper 支持 ACL(Access Control List),控制 ZNode 的访问。
常用:
world:所有人(默认)auth:已认证用户digest:用户名+密码(最常用)ip:指定 IPecho -n user:password | md5sum
例如:
user:123456 → md5
create /test nodeData digest:user:密码MD5:cdrwa
示例:
create /app digest:admin:21232f297a57a5a743894a0e4a801fc3:cdrwa
addauth digest admin:123456
之后才能访问 /app
示例:
digest:user:md5:rw
查看:
getAcl /app
修改:
setAcl /app digest:user:md5:cdrwa
world:anyonedigest 或 ipzoo.cfg 中:
# 只允许本地或指定网段
clientPortAddress=127.0.0.1
或配合防火墙使用。
| 层级 | 做法 |
|---|---|
| Linux | 专用用户 + 目录权限 + 防火墙 |
| ZooKeeper | digest/auth/ip ACL |
| 运维 | 不用 root、最小权限 |
如果你愿意,我可以: