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

pkwftd7m  于 2022-12-09  发布在  Apache
关注(0)|答案(3)|浏览(381)

我有一个最近的zookeeper版本(版本=3.4.3-1240972,构建于02/06/2012 10:48 GMT),在强制SASL用于所有客户端连接时遇到了问题。
使用发行版的本地conf/目录,我有以下配置(运行在Ubuntu 12.04上):

配置文件/zoo.cfg

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

配置文件/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";
};

配置文件/java.环境

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

当我从www.example.com脚本连接时zkCli.sh,它将正确地进行身份验证,而更改jaas.conf文件将导致它无法查询。这是预期的行为。
然而,当我使用Ruby“zookeeper”宝石,并运行(与irb):

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

它会正确地返回结果。如果我需要SASL来登录,为什么ruby客户端会绕过安全性呢?我知道这不仅仅是读与写的问题,因为我也可以创建键。

wljmcqd8

wljmcqd81#

在conf/zoo.cfg中,添加以下行:

requireClientAuthScheme=sasl

在“服务器配置”部分here中,
requireClientAuthScheme=sasl是可选的:如果将其设置为任何值,则只允许未验证的客户端ping、创建会话、关闭会话或进行sasl-authenticate。

jljoyd4f

jljoyd4f2#

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

omhiaaxx

omhiaaxx3#

我也遇到过类似的问题,通过在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 \
"

相关问题