Ubuntu Zookeeper权限设置指南
确保Ubuntu系统已安装Zookeeper(推荐版本≥3.5.0)。若未安装,可通过以下命令完成:
sudo apt update
sudo apt install zookeeper zookeeperd -y
安装完成后,服务默认以zookeeper用户身份运行(后续需确认用户权限)。
为隔离权限,创建专用用户和组,并设置数据目录归属:
# 创建组和用户(--system表示系统用户,--no-create-home不创建家目录)
sudo addgroup zookeeper
sudo adduser --system --group --no-create-home --home /var/lib/zookeeper zookeeper
# 设置数据目录所有权(ZooKeeper数据默认存放在/var/lib/zookeeper)
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
# 设置数据目录权限(所有者可读写执行,组和其他用户无权限)
sudo chmod -R 750 /var/lib/zookeeper
ZooKeeper主配置文件(/etc/zookeeper/conf/zoo.cfg)需限制为root和zookeeper用户访问:
sudo chown zookeeper:zookeeper /etc/zookeeper/conf/zoo.cfg
sudo chmod 640 /etc/zookeeper/conf/zoo.cfg
若需远程访问,开放ZooKeeper默认端口(2181/tcp):
sudo ufw allow 2181/tcp
sudo ufw enable # 启用防火墙(若未启用)
ACL(访问控制列表)是Zookeeper权限管理的核心,支持world(全局)、auth(认证用户)、digest(用户名:密码)、ip(IP地址)等认证方式。
编辑zoo.cfg,配置SASL作为认证提供者:
# 打开zoo.cfg文件
sudo nano /etc/zookeeper/conf/zoo.cfg
# 添加以下配置(启用SASL认证)
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000 # JAAS配置刷新间隔(毫秒)
创建JAAS配置文件(/etc/zookeeper/conf/jaas.conf),定义用户凭据:
sudo nano /etc/zookeeper/conf/jaas.conf
# 添加以下内容(替换为实际用户名和密码)
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_super="super_secret" # 用户super的密码
user_admin="admin_secret"; # 用户admin的密码
};
通过JVM参数指定JAAS文件路径,编辑/etc/default/zookeeper:
sudo nano /etc/default/zookeeper
# 在文件末尾添加(指向JAAS配置文件)
ZOOKEEPER_OPTS="-Djava.security.auth.login.config=/etc/zookeeper/conf/jaas.conf"
使配置生效:
sudo systemctl restart zookeeper
sudo systemctl enable zookeeper # 设置开机自启
连接到Zookeeper客户端,执行以下命令:
# 连接到本地Zookeeper服务器
zkCli.sh -server localhost:2181
# 添加认证用户(如super)
addauth digest super:super_secret
# 创建节点并设置ACL(示例:创建/test节点,仅super用户可读写)
create /test "initial data"
setAcl /test digest:super:super_secret:cdrwa # cdrwa=创建、读、写、删除、管理
# 验证ACL(查看/test节点的权限)
getAcl /test
setAcl /public_node world:anyone:r
setAcl /ip_restricted_node ip:192.168.1.100:cdrwa
# 定义角色(如dev_role)并授权
createRole dev_role "user_dev"
grant dev_role "read,write" /dev_node
使用super用户连接并操作受保护节点:
zkCli.sh -server localhost:2181
addauth digest super:super_secret
create /test/new_child "child data" # 应成功(super有cdrwa权限)
使用未授权用户(如guest)连接,尝试操作受保护节点:
zkCli.sh -server localhost:2181
create /test/new_child "child data" # 应失败(提示"Authentication failed")
auth(认证用户)权限高于world(全局),digest(用户名:密码)权限高于ip(IP地址)。cp /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo.cfg.bak)。通过以上步骤,可在Ubuntu系统上实现Zookeeper的精细化权限管理,保障数据安全。