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

时间:2012-07-10 17:27:24

标签: ruby apache-zookeeper sasl

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

2 个答案:

答案 0 :(得分:3)

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

requireClientAuthScheme=sasl

从“服务器配置”部分here

  

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

答案 1 :(得分:0)

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