Zookeeper 在 Ubuntu 上的权限设置操作指南
一 系统与服务运行权限
- 创建专用系统用户与数据目录,避免使用 root 直接运行:
- 创建用户与家目录:
sudo useradd -m zookeeper
- 可选设置 shell:
sudo usermod --shell /bin/bash zookeeper
- 创建数据与日志目录:
sudo mkdir -p /data/zookeeper
- 设置目录属主:
sudo chown -R zookeeper:zookeeper /data/zookeeper
- 安装与解压 Zookeeper 后,将安装目录属主设为 zookeeper:zookeeper,例如:
sudo chown -R zookeeper:zookeeper /opt/zookeeper
- 以专用用户启动服务(避免直接用 root):
- 切换用户:
su - zookeeper
- 启动:
/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
- 使用 systemd 托管时,在单元文件中显式指定运行用户与组,确保最小权限运行:
- 示例关键项:
User=zookeeper、Group=zookeeper、WorkingDirectory=/opt/zookeeper、ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg。
二 文件与目录权限要点
- 配置与二进制文件:建议将 /opt/zookeeper/conf、安装目录及脚本的属主设为 zookeeper:zookeeper,仅对必要文件授予写权限,避免其他用户修改配置或二进制。
- 数据与日志目录:将 dataDir(如 /data/zookeeper)及其子目录属主设为 zookeeper:zookeeper,权限设置为仅属主可读写执行(如 700/750),防止其他系统用户访问敏感数据。
- 运行与日志文件:确保 Zookeeper 进程对日志输出目录与 PID 文件所在目录具备写权限,避免因权限不足导致启动失败或无法写入日志。
三 Zookeeper ACL 访问控制
- 启用基于 Digest 的身份认证与 ACL:
- 在服务器端创建 JAAS 配置(如 /opt/zookeeper/conf/zookeeper_jaas.conf),示例:
Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_super="SuperSecret" user_admin="AdminPass"; };
- 在 zoo.cfg 中启用 SASL/Digest 认证提供者:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
- 重启服务使配置生效。
- 客户端连接与登录:
- 连接时携带身份:
/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181 -auth digest:super:SuperSecret
- 或在 zkCli 内先登录:
addauth digest super:SuperSecret
- 设置与查看 ACL:
- 设置节点 ACL(示例对 /app 授予管理员完全权限,其他用户只读):
setAcl /app digest:admin:Base64(SHA1(admin:AdminPass)):cdrwa,digest:anyone:R
- 查看 ACL:
getAcl /app
- 常用权限位:c(create)、r(read)、d(delete)、w(write)、a(admin)。
- 安全建议:
- 避免使用 world:anyone 授予写或管理权限,生产环境仅授予最小必要权限。
- 统一使用 digest 认证,密钥按运维规范保管,必要时结合网络层限制(如防火墙/安全组)。
四 快速验证与常见问题
- 验证步骤:
- 以管理员身份连接并检查:/opt/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181 -auth digest:super:SuperSecret
- 创建测试节点:
create /test "hello";读取:get /test;删除:delete /test
- 使用非授权用户或匿名连接尝试相同操作,确认被拒绝。
- 常见问题与处理:
- 启动失败且提示无法写入数据目录:检查 dataDir 属主与权限是否为 zookeeper:zookeeper,目录是否存在。
- 客户端无权访问:确认已通过
-auth 或 addauth 登录,且节点的 ACL 已正确授予相应用户相应权限位。
- 修改 zoo.cfg 或 JAAS 后未生效:重启 Zookeeper 服务,确保新配置被加载。