1. 程式人生 > >【zookeeper】ACL super 超級管理員

【zookeeper】ACL super 超級管理員

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的資料的。但是由於我們配置了超管,所以這次還是可以訪問到的。

需要說明的是,這個超管只是在這次伺服器啟動期間管用,如果關閉了伺服器,並修改了伺服器指令碼,取消了超管配置,那麼下一次啟動就沒有這個超管了。