我有一个最近的 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 客户端如何绕过安全性。我知道这不仅仅是读写问题,因为我也可以创建密钥。