如何在所有Zookeeper连接上强制SASL



我有一个最新的zookeeper版本(版本=3.4.3-1240972,于2012年6月2日10:48 GMT构建),在强制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文件将导致它无法查询。这是预期的行为。

然而,当我使用ruby"zookeeper"gem并运行(带有irb)时:

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

它正确地返回结果。如果我需要SASL登录,那么ruby客户端怎么会绕过安全性呢。我知道这不仅仅是一个读写问题,因为我也可以创建密钥。

在conf/zoo.cfg中,添加一行

requireClientAuthScheme=sasl

从这里的服务器配置部分,

requireClientAuthScheme=sasl是可选的:如果它被设置为任何值,它将只允许未经身份验证的客户端ping、创建会话等,关闭会话或sasl身份验证。

几年后我也遇到了类似的问题哈哈。我希望Zookeeper 3.5添加一种单独的、不那么棘手的方式来保护Zookeepper服务器。查看我的问题:保护动物园管理员

我遇到了类似的问题,并通过在env文件中添加JVM参数来解决它。(ZooKeeper 3.6.3)

export JVMFLAGS="-Djava.security.auth.login.config=`pwd`/conf/jaas.conf 
-Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider 
-Dzookeeper.allowSaslFailedClients=false 
-Dzookeeper.sessionRequireClientSASLAuth=true 
"

最新更新