【zookeeper】ACL super 超级管理员
【zookeeper】ACL super 超级管理员
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010900754/article/details/78498291
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 &
输入如下命令添加权限:
addauth digest super:admin
我的zk有一个节点/test,acl为:
有一个digest的cr权限。
正常情况下,这次登陆如果不用那个digest授权是不能访问/test的数据的。但是由于我们配置了超管,所以这次还是可以访问到的。
需要说明的是,这个超管只是在这次服务器启动期间管用,如果关闭了服务器,并修改了服务器脚本,取消了超管配置,那么下一次启动就没有这个超管了。