温馨提示×

Linux环境下Zookeeper的权限设置指南

小樊
53
2025-10-12 04:32:14
栏目: 智能运维

Linux环境下Zookeeper权限设置指南

一、基础环境准备:创建专用用户与目录权限

为提升安全性,建议以非root用户运行ZooKeeper。首先创建专用用户及组,并设置数据/日志目录权限:

  1. 创建用户与组

    sudo groupadd zookeeper
    sudo useradd -g zookeeper zookeeper
    
  2. 创建目录并赋权

    sudo mkdir -p /var/lib/zookeeper  # 数据目录
    sudo mkdir -p /var/log/zookeeper  # 日志目录
    sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
    sudo chown -R zookeeper:zookeeper /var/log/zookeeper
    sudo chmod -R 755 /var/lib/zookeeper /var/log/zookeeper  # 允许用户读写,组及其他用户仅读执行
    
  3. 配置文件权限
    确保ZooKeeper配置文件(如/etc/zookeeper/conf/zoo.cfg)仅能被所属用户修改:

    sudo chown zookeeper:zookeeper /etc/zookeeper/conf/zoo.cfg
    sudo chmod 644 /etc/zookeeper/conf/zoo.cfg
    

二、SELinux/AppArmor配置(可选但推荐)

若系统启用SELinux或AppArmor,需调整策略以允许ZooKeeper访问资源:

  • SELinux配置
    sudo setsebool -P zookeeper_enable_home_dirs on  # 允许访问home目录(若需)
    sudo chcon -Rt zookeeper_var_lib_t /var/lib/zookeeper  # 设置数据目录SELinux类型
    sudo chcon -Rt zookeeper_var_log_t /var/log/zookeeper  # 设置日志目录SELinux类型
    
  • AppArmor配置
    编辑/etc/apparmor.d/usr.sbin.zookeeper,添加以下规则(根据实际路径调整):
    /var/lib/zookeeper/** rwk,
    /var/log/zookeeper/** rwk,
    
    重载AppArmor配置:
    sudo systemctl reload apparmor
    

三、ZooKeeper服务用户绑定

修改ZooKeeper服务文件(如/etc/systemd/system/zookeeper.service),指定运行用户:

[Service]
User=zookeeper
Group=zookeeper

重载systemd配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart zookeeper

四、ZooKeeper ACL权限配置(核心安全机制)

ZooKeeper通过**ACL(访问控制列表)**控制对znode(节点)的访问,支持digest(用户名/密码)、ip(IP地址)、world(所有人)等认证方式。

1. 启用SASL认证(可选但推荐)

编辑zoo.cfg,添加以下配置以启用SASL认证:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000  # JAAS配置刷新间隔(毫秒)

2. 创建JAAS配置文件

创建/etc/zookeeper/conf/zookeeper.jaas,定义用户及密码:

Server {
    org.apache.zookeeper.server.auth.DigestLoginModule required
    user_super="super_secret_password"  # 用户名=密码(明文,后续会加密)
    user_admin="admin_secret_password";
};

设置文件权限(仅root可读):

sudo chmod 600 /etc/zookeeper/conf/zookeeper.jaas

3. 启动时加载JAAS配置

通过环境变量指定JAAS文件路径:

export JVMFLAGS="-Djava.security.auth.login.config=/etc/zookeeper/conf/zookeeper.jaas"
bin/zkServer.sh start

4. 设置节点ACL规则

使用zkCli.sh工具创建节点并分配权限:

  • 创建节点并设置ACL
    bin/zkCli.sh -server localhost:2181
    create /secure_node "敏感数据" digest:super:base64_encoded_password:cdrwa
    
    其中,digest:super:base64_encoded_password需替换为实际编码(可通过echo -n "super:super_secret_password" | openssl dgst -sha1 -hmac "super_secret_password" | cut -d' ' -f2生成)。cdrwa表示创建、读取、删除、写入、管理ACL权限。
  • 验证ACL
    getAcl /secure_node
    
    输出应显示类似以下内容:
    'digest,'super:base64_encoded_password': cdrwa
    

5. 客户端认证与访问

客户端连接时需提供认证信息:

bin/zkCli.sh -server localhost:2181 -auth digest:super:super_secret_password

认证后,客户端可执行受限操作(如创建/secure_node节点)。

五、防火墙配置

开放ZooKeeper默认端口(2181),允许客户端连接:

sudo firewall-cmd --permanent --zone=public --add-port=2181/tcp
sudo firewall-cmd --reload

六、权限验证

  1. 验证目录权限
    确认/var/lib/zookeeper/var/log/zookeeper的所有者为zookeeper用户。
  2. 验证服务运行用户
    执行ps aux | grep zookeeper,确认进程用户为zookeeper
  3. 验证ACL权限
    使用未认证客户端尝试访问/secure_node,应收到Authentication failed错误;认证后应能正常操作。

通过以上步骤,可在Linux环境下完成ZooKeeper的权限配置,确保数据访问安全。

0