基于IP的ACL权限控制(节点级限制)
此方法直接针对ZooKeeper的节点(znode)设置IP白名单,操作步骤如下:
1. 进入ZooKeeper客户端
./zkCli.sh -server localhost:2181
2. 为指定节点设置IP访问规则使用setAcl命令,语法为
setAcl <节点路径> ip:<IP地址>:<权限>
- 示例
允许192.168.1.100对/节点的完全权限:
setAcl / ip:192.168.1.100:cdrwa # cdrwa表示所有操作权限
允许多个IP(如192.168.1.101只读、192.168.1.102读写):
setAcl / ip:192.168.1.101:r,ip:192.168.1.102:cdrw
3. 权限说明
- r:读取节点数据
- w:写入节点数据
- c:创建子节点
- d:删除子节点
- a:管理ACL权限
注意:
ACL权限不继承,需为每个节点单独设置。
默认权限为world:anyone:cdrwa(所有人可访问),需显式覆盖。
4. 访问测试
允许的IP访问时
不允许的IP访问时
5. 临时跳过ACL验证(推荐:适用于因为错误配置导致完全无法连接时)
若因ACL错误导致所有客户端均无法连接,需在服务端配置中跳过ACL验证:
1. 修改zoo.cfg配置文件,在文件末尾添加
vi zoo.cfg # 进入配置文件
skipACL=yes # 跳过ACL权限验证[9](@ref)
2. 重启ZooKeeper服务
./zkServer.sh restart # 重启服务使配置生效
3. 重新连接并修复ACL连接后使用setAcl重置权限(如恢复默认)
setAcl / world:anyone:cdrwa # 开放所有IP访问
4. 恢复ACL验证修复后务必删除skipACL=yes并重启服务,否则会暴露安全风险。
⚠️ 注意:此方法仅作临时恢复,长期跳过ACL会严重威胁集群安全。
评论区