温馨提示×

linux zookeeper如何设置权限

小樊
42
2026-09-19 15:03:52
栏目: 智能运维

在 Linux 上部署的 ZooKeeper 权限设置通常包含 两层面

  1. Linux 系统层面权限(谁能动 ZooKeeper 的文件/进程)
  2. ZooKeeper 内部 ACL 权限(谁能访问哪个 znode)

下面分别说明。


一、Linux 系统层面权限设置

1. 使用独立用户运行 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"

2. 目录权限控制

常见目录权限:

目录 建议权限
conf 750
dataDir 700
dataLogDir 700
logs 750

示例:

chmod 700 /var/lib/zookeeper
chmod 750 /opt/zookeeper/conf

3. 防火墙限制(重要)

只开放 2181(客户端)、2888、3888(集群):

firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --reload

二、ZooKeeper 内部 ACL 权限(核心)

ZooKeeper 使用 ACL(Access Control List) 控制 znode 访问。

1. ACL 权限类型

权限 含义
READ 读节点
WRITE 写节点
CREATE 创建子节点
DELETE 删除子节点
ADMIN 设置 ACL

2. 认证方式(Scheme)

常用:

  • world:默认,所有人
  • auth:已认证用户
  • digest:用户名 + 密码(最常用)
  • ip:IP 限制

三、digest 方式设置权限(最常用)

1. 生成密码

echo -n user:password | md5sum

例如:

user:password → abcd1234efgh5678

2. 启动客户端

zkCli.sh

3. 添加认证用户

addauth digest user:password

4. 创建带权限的节点

create /test "data" digest:user:abcd1234efgh5678:rwadc

含义:

  • user 可读、写、创建、删除、管理

5. 设置已有节点 ACL

setAcl /test digest:user:abcd1234efgh5678:rwadc

6. 查看 ACL

getAcl /test

四、禁止匿名访问(安全建议)

1. 默认风险

默认:

world:anyone:cdrwa

2. 修改为受限

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
✅ 防火墙限制端口

如果你需要:

  • Kafka + ZooKeeper 权限
  • ZooKeeper 集群 ACL
  • Docker / K8s 中配置

可以继续问我。

0