Zookeeper的权限管理核心是ACL(Access Control Lists,访问控制列表),通过定义认证模式(Schema)、**用户/组标识(ID)和权限(Permissions)**组合,实现对节点(znode)的细粒度访问控制。常见认证模式包括:
anyone(任何人),权限固定为cdrwa(创建、读、删、写、管理ACL);addauth添加的账号)均有权限;username:password的加密认证(密码经SHA1+BASE64处理),安全性最高;192.168.1.*);Zookeeper需以非特权用户(如zookeeper)运行,避免权限过高导致安全风险。
# 创建zookeeper用户及组
sudo useradd -r -s /sbin/nologin zookeeper
# 设置数据目录与日志目录权限(以默认路径为例)
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper # 数据目录
sudo chmod -R 750 /var/lib/zookeeper
sudo chown -R zookeeper:zookeeper /var/log/zookeeper # 日志目录
sudo chmod -R 750 /var/log/zookeeper
若系统启用SELinux,需调整策略允许Zookeeper访问资源:
# 临时关闭SELinux(测试用)
sudo setenforce 0
# 永久关闭(需修改/etc/selinux/config文件,设为disabled)
# 注意:生产环境建议通过策略调整而非完全关闭
开放Zookeeper默认端口(2181),限制访问IP(可选):
# 开放2181端口
sudo firewall-cmd --permanent --zone=public --add-port=2181/tcp
sudo firewall-cmd --reload
# 限制仅特定IP访问(如192.168.1.100)
sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.100
sudo firewall-cmd --reload
使用zkCli.sh工具连接Zookeeper服务器(默认端口2181):
./zkCli.sh -server localhost:2181
若使用digest认证,需先通过addauth命令添加账号密码:
addauth digest zkuser:zkpassword
# 创建节点/test,使用digest模式,账号zkuser拥有cdrwa权限
create /test "testdata" digest:zkuser:BASE64ENCODED_PASSWORD:cdrwa
其中BASE64ENCODED_PASSWORD为zkuser:zkpassword的SHA1哈希值的BASE64编码(可通过echo -n "zkuser:zkpassword" | sha1sum | base64生成)。
# 创建节点(无ACL)
create /test1 "testdata1"
# 设置ACL(digest模式,账号zkuser拥有读写权限)
setAcl /test1 digest:zkuser:BASE64ENCODED_PASSWORD:rw
使用getAcl命令查看节点的当前权限设置:
getAcl /test
输出示例:
'digest,'zkuser:BASE64ENCODED_PASSWORD': cdrwa
使用setAcl命令修改已有节点的权限(如将/test的权限改为仅zkuser可读):
setAcl /test digest:zkuser:BASE64ENCODED_PASSWORD:r
使用clearAcl命令清除节点的所有权限(慎用,会导致节点完全开放):
clearAcl /test
若需创建超级管理员账号(拥有所有节点的完全控制权),需修改Zookeeper启动参数:
# 编辑zoo.cfg,添加以下配置
-Dzookeeper.DigestAuthenticationProvider.superDigest=super:BASE64ENCODED_PASSWORD
其中BASE64ENCODED_PASSWORD为super:superpassword的SHA1哈希值的BASE64编码。超级管理员可直接访问所有节点,无需额外认证。
通过setAcl命令限制特定IP地址的访问:
# 限制192.168.0.33对/test-node-ip节点的读写权限
setAcl /test-node-ip ip:192.168.0.33:cdwr
对于企业级场景,可使用Apache Ranger实现Zookeeper的集中式权限管理:
digest模式替代world模式;