5

我有一个最近的 zookeeper 版本(版本 = 3.4.3-1240972,建于 2012 年 2 月 6 日 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​​ 客户端如何绕过安全性。我知道这不仅仅是读写问题,因为我也可以创建密钥。

4

3 回答 3

3

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

requireClientAuthScheme=sasl

这里的服务器配置部分,

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

于 2012-07-11T05:03:43.073 回答
0

我有类似的问题,并通过将 JVM 参数添加到 env 文件来解决它。(动物园管理员 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 \
"
于 2022-01-21T03:52:52.717 回答
0

几年后我也遇到了类似的问题哈哈。我希望 Zookeeper 3.5 增加一种单独且不那么棘手的方法来保护 Zookeeper 服务器。看看我的问题:保护 Zookeeper

于 2015-08-28T14:26:15.577 回答