Apache zookeeper 如何以';超级';用户通过Zookeeper外壳?

Apache zookeeper 如何以';超级';用户通过Zookeeper外壳?,apache-zookeeper,Apache Zookeeper,根据,可以创建一种方式,以“超级”用户的身份访问Zookeeper集合。在配置和连接方法方面,这样做的方向有点模糊。它确实微妙地表明,这只能通过Java连接/API来实现 如何通过Zookeeper集成自己的CLI工具作为“超级”用户连接到该集成 动物园管理员文档确实很模糊 我是怎么做到的 cd your_zookeeper_home java -cp "./zookeeper-3.4.6.jar:./lib/slf4j-api-1.6.1.jar" org.apache.zookeeper.s

根据,可以创建一种方式,以“超级”用户的身份访问Zookeeper集合。在配置和连接方法方面,这样做的方向有点模糊。它确实微妙地表明,这只能通过Java连接/API来实现


如何通过Zookeeper集成自己的CLI工具作为“超级”用户连接到该集成

动物园管理员文档确实很模糊

我是怎么做到的

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(我使用此客户端)


这个建议完全奏效了!非常感谢你,艾蒂安! 我还可以尝试另一种选择,<代码> SkIPACL=是/<代码>,这是绕过安全性的另一种方法,但这种方法在一天当中使用起来是非常危险的。以下是我的详细资料:

  • 首先,它不是
    skipACL=true
    ,而是
    skipACL=yes
    ,即使在愚蠢的ZK文档页面中没有提到布尔值的具体措辞。这些文件不仅仅是“有点模糊”;我会说他们在某些地方很软弱
  • 其次,如果启用此选项(并小心地重新启动所有三个ZK节点,一次一个),它将开始完全忽略所有ACL。当然,您可以通过在您无权访问的节点上执行
    setAcl
    来解决这一问题。。。但是如果你的群集在一天当中,那么<强>所有发生的其他操作都忽略了ACL完全< /强>。这包括如果一个组件(比如Hive)创建了一个全新的ZK树空间块,那么父节点上的权限就不会下降因此,在您关闭skipACL后(即,返回到正常的强制执行),您就有了具有错误权限的随机ZK片段。该死
因此,这种方法(superDigest)要安全得多,因为它允许您在一个ZK CLI连接中成为超级用户,只需执行一个小操作,同时继续在集群其余部分实时发生的所有其他连接中强制执行正常的ZK安全规则。我希望这更容易做到,我希望有一种方法可以使用您已有的内置zkCli客户端执行修复,而不是下载单独的客户端

还要注意,这个特殊属性
zookeeper.DigestAuthenticationProvider.superDigest
仅可设置为Java系统属性,即通过
-D
环境变量,Etienne在这里演示了这一点。即使您可以将
skipACL
放入
zoo.cfg
,superDigest也只能通过JavaEnv变量——不要问我为什么。ZK文档页面上提到了这个细节(不是很清楚)


谢谢你,艾蒂安,感谢你提出这些简短的指示,并感谢Shlomi Noach编写了一个完全没有依赖关系的基于GO的程序,我可以在危机中下载并使用它的预建二进制文件。你们两个很慷慨,今天应该得到一颗金星。

这看起来很有用。我没有集群来针对ATM进行测试,但下次我会验证这个解决方案。谢谢非常感谢您的回答,在过去的几天里,我一直在与HMaster失败作斗争,没有出现任何错误,正确设置skipACL=yes帮助了我。我把它设为真,但没有效果。这救了我一个星期!属性始终设置为true/false,但此处设置为yes。。。。。几乎没有写在文件里
./zookeepercli --servers your_server  --auth_usr "super" --auth_pwd "password"  -c ls