zk的權限管理表有一種ACL的模式叫做super,該模式的作用是方便管理節點。一旦我們爲某一個節點設置了acl,那麼其餘的未授權的節點是無法訪問或者操作該節點的,那麼系統用久了以後,假如忘記了某一個節點的密碼,那麼就無法再操作這個節點了,所以需要這個super超級管理員用戶權限,其作用還是很大的。
下面看下如何加入一個超級管理員。
添加方式:
只能在啓動服務器的時候添加。
假設這個超管是:super:admin,通過代碼得到其哈希值:
String m = DigestAuthenticationProvider.generateDigest(“super:admin”);
m是:
super:xQJmxLMiHGwaqBvst5y6rkB6HQs=
那麼打開zk目錄下的/bin/zkServer.sh服務器腳本文件,找到如下一行:
nohup {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的數據的。但是由於我們配置了超管,所以這次還是可以訪問到的。
需要說明的是,這個超管只是在這次服務器啓動期間管用,如果關閉了服務器,並修改了服務器腳本,取消了超管配置,那麼下一次啓動就沒有這個超管了。
作者:絕世好阿狸
來源:CSDN
原文:https://blog.csdn.net/u010900754/article/details/78498291
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!