如何通过Zookeeper shell将Zookeeper集合作为“超级”用户进行访问?

时间:2016-02-22 00:52:31

标签: apache-zookeeper

Per the zookeeper docs,可以创建一种方式来访问Zookeeper集合作为“超级”用户。在配置和连接方法方面,这样做的方向有点模糊。它巧妙地暗示这只能通过Java连接/ API完成。

如何通过自己的CLI工具将Zookeeper集合作为“超级”用户连接?

2 个答案:

答案 0 :(得分:8)

这个提示完全奏效了!非常感谢,Etienne! 我还能尝试另一种方法,skipACL=yes,这是绕过安全的另一种方式,但这种方法在一天中间使用是非常危险的。以下是我的详细信息:

  • 首先,它不是skipACL=true,它是skipACL=yes,即使在愚蠢的ZK文档页面中没有提到布尔值的具体措辞。那些文档不只是有点模糊&#34 ;;我会称他们在某些地方很弱。
  • 第二,如果你打开它(并小心地重新启动所有三个ZK节点,一次一个),它会启动完全忽略所有ACL 。当然,您可以通过在您没有权限的节点上执行setAcl来解决这个问题...但如果您的群集在当天中途生效,那么所有发生的其他操作完全忽略ACL 。这包括如果一个组件(如Hive)创建一个全新的ZK树空间块 - 父节点上的权限不会涓涓细流!那么之后你关闭skipACL(即恢复正常执行),你有随机的ZK权限错误。当它。

所以这个方法(superDigest)远远更安全,因为它允许你只在一个ZK CLI连接中成为超级用户,做一点操作,同时继续在所有其他连接中强制执行正常的ZK安全规则实时在群集的其余部分。我希望这样做更容易,我希望有一种方法可以使用您已有的内置zkCli客户端进行修复,而不是下载单独的客户端。

另请注意,此特殊属性zookeeper.DigestAuthenticationProvider.superDigest仅可设置为Java系统属性,即通过-D环境变量,如Etienne在此处演示的那样。即使你可以将skipACL放入zoo.cfg,superDigest也只能通过Java env变量 - 不要问我为什么。在ZK文档页面上(非常清楚地)提到了这个细节。

再次感谢Etienne提供这些简短的说明,并感谢Shlomi Noach编写了一个完全没有依赖关系的Go-based程序,我可以在中间下载和使用的预构建二进制文件危机你们俩很慷慨,今天应该得到一颗金星。

答案 1 :(得分:4)

Zookeeper doc确实很模糊......

我这是怎么做的

cd your_zookeeper_home
java -cp "./zookeeper-3.4.6.jar:./lib/slf4j-api-1.6.1.jar" org.apache.zookeeper.server.auth.DigestAuthenticationProvider super:password 

插入密码而不是“密码”

你会得到一条这样的一行:

super:password->super:DyNYQEQvajljsxlhf5uS4PJ9R28= 

导出你的var或编辑zkServer.sh:

SERVER_JVMFLAGS=-Dzookeeper.DigestAuthenticationProvider.superDigest=super:DyNYQEQvajljsxlhf5uS4PJ9R28=

重新启动zookeeper,你就可以连接super(我使用这个客户端https://github.com/outbrain/zookeepercli

./zookeepercli --servers your_server  --auth_usr "super" --auth_pwd "password"  -c ls