【zookeeper】ACL super 超级管理员

本文介绍如何在ZooKeeper中设置超级管理员权限,确保在忘记节点密码时仍能进行管理。通过在启动脚本中添加特定配置实现,并演示了添加权限的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zk的权限管理表有一种ACL的模式叫做super,该模式的作用是方便管理节点。一旦我们为某一个节点设置了acl,那么其余的未授权的节点是无法访问或者操作该节点的,那么系统用久了以后,假如忘记了某一个节点的密码,那么就无法再操作这个节点了,所以需要这个super超级管理员用户权限,其作用还是很大的。

下面看下如何加入一个超级管理员。

添加方式:

只能在启动服务器的时候添加。

假设这个超管是:super:admin,通过代码得到其哈希值:

String m = DigestAuthenticationProvider.generateDigest("super:admin");
m是:

super:xQJmxLMiHGwaqBvst5y6rkB6HQs=
那么打开zk目录下的/bin/zkServer.sh服务器脚本文件,找到如下一行:

nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"
这就是脚本中启动zk的命令,默认只有以上两个配置项,我们需要加一个超管的配置项:

"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="
第一个等号之后的就是刚才用户名密码的哈希值。

那么修改以后这条完整命令变成了:

nohup $JAVA "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="\
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
之后启动zk集群。


输入如下命令添加权限:

addauth digest super:admin

我的zk有一个节点/test,acl为:


有一个digest的cr权限。

正常情况下,这次登陆如果不用那个digest授权是不能访问/test的数据的。但是由于我们配置了超管,所以这次还是可以访问到的。


需要说明的是,这个超管只是在这次服务器启动期间管用,如果关闭了服务器,并修改了服务器脚本,取消了超管配置,那么下一次启动就没有这个超管了。







### ZooKeeper ACL配置与管理 #### 定义ACL机制 ZooKeeper 使用 ACL (Access Control Lists) 来控制 Znode 的访问权限[^2]。这种机制类似于 UNIX 文件系统的权限控制系统,通过设置不同的权限位来决定哪些操作是可以执行的。 #### 特殊模式——Super模式 存在一种特殊的工作模式称为 Super 模式,在此模式下级用户能够绕过所有的 ACL 限制并对任何数据节点实施全部的操作[^1]。这使得管理员可以在必要时拥有最高级别的控制权而无需考虑常规的安全约束。 #### ACL的具体构成要素 尽管 ZooKeeper 借鉴了类 Unix 系统中的权限模型,但它并不区分具体的用户、组或其他实体;相反,它依赖于身份验证方案(如 IP 地址或 Kerberos 认证)来定义谁具有特定的权利。 #### 实现方式及命令示例 为了管理和应用这些规则,可以利用 `addauth` 和 `set_acl` API 函数以及相应的 CLI 工具来进行配置。下面是一个简单的 Python 脚本例子展示如何向某个路径添加认证信息并设定其 ACL: ```python from kazoo.client import KazooClient zk = KazooClient(hosts='127.0.0.1:2181') zk.start() # 添加认证信息 zk.add_auth('digest', 'username:password') # 设置指定路径下的ACL列表 acls = [ {'perms': 31, 'scheme': 'world', 'id': 'anyone'}, # 给所有人读写删除创建子节点权限 ] path = "/example" zk.set_acls(path, acls) print(f"Set ACL on {path}") ``` 上述代码片段展示了怎样连接到本地运行的一个 Zookeeper 实例,并为其根目录 `/example` 下的所有资源赋予完全开放式的访问许可给所有客户端。 #### 默认挂载选项的支持情况 当操作系统默认挂载选项包含有 `user`, `xattr`, 或者 `acl` 字样时,则表明该文件系统支持扩展属性和访问控制列表功能[^3]。不过需要注意的是,这里提到的内容主要针对 Linux 文件系统的特性而非直接关联至 Zookeeper 自身的服务层面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值