2012-07-10 68 views
3

我有一個最近的zookeeper構建版本(版本= 3.4.3-1240972,構建於2012年6月2日10:48 GMT),並且無法強制SASL在所有客戶端連接。如何在所有Zookeeper連接上強制執行SASL

使用釋放本地的conf /目錄下,我有以下的配置(在Ubuntu 12.04上運行):

的conf/zoo.cfg

tickTime=2001 
initLimit=10 
syncLimit=5 
dataDir=/tmp/zookeeper 
clientPort=2181 
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider 

的conf /的Jaas.conf

Server { 
    org.apache.zookeeper.server.auth.DigestLoginModule required 
    user_super="1adminsecret"; 
}; 
Client { 
    org.apache.zookeeper.server.auth.DigestLoginModule required 
    username="super" 
    password="1adminsecret"; 
}; 

CONF/java.env

export JVMFLAGS="-Djava.security.auth.login.config=`pwd`/conf/jaas.conf" 

當我從zkCli.sh腳本連接,它將正常權威性,並改變Jaas.conf檔案將導致其無法查詢。這是預期的行爲。

然而,當我使用紅寶石 「動物園管理員」 的寶石,並運行(與IRB):

require 'zookeeper' 
z = Zookeeper.new("localhost:2181") 
z.get_children(:path => "/") 
z.create(path:'/asdf', data:'test') 

它返回的結果正常。如果我要求SASL登錄,那麼Ruby如何繞過安全性。我知道這不僅僅是一個讀寫問題,因爲我也可以創建密鑰。

+0

僅供參考,我使用以下資源來配置SASL:https://github.com/ekoontz/zookeeper/wiki和https://cwiki.apache.org/ZOOKEEPER/zookeeper-and -sasl.html – 2012-07-10 17:33:47

+0

你已經創建了一個java.env文件,你如何從zkCli.sh讀取該文件? – cheloncio 2016-04-07 16:59:47

回答

3

在CONF/zoo.cfg,添加行,

requireClientAuthScheme=sasl 

從服務器配置部分here

requireClientAuthScheme = SASL是可選的:如果它被設置爲任何值, 它只會允許未經身份驗證的客戶端進行ping操作,創建會話,關閉會話或sasl-authenticate。

+0

我添加了該行,它仍然允許所有內容通過。我在更改配置之前關閉了zkServer。 – 2012-07-11 22:05:03

+0

如果將此添加到您的zoo.cfg,會發生什麼情況maintain_connection_despite_sasl_failure = false – sbridges 2012-07-12 04:33:24

+0

我已將它添加到那裏以及命令行(-Dzookeeper ....),並且沒有運氣。清理「maintain_connection」和「requireClientAuthScheme」的源代碼不會返回任何內容,那麼甚至可以定義這些參數在哪裏?我已經嘗試了3.4.3和3.3.5,沒有運氣! – 2012-07-12 16:51:12

0

幾年後我有一個類似的問題哈哈。我希望Zookeeper 3.5添加一個單獨的,更簡單的方法來保護Zookeeper服務器。看看我的問題:Securing Zookeeper