Per the zookeeper docs,可以创建一种方式来访问Zookeeper集合作为“超级”用户。在配置和连接方法方面,这样做的方向有点模糊。它巧妙地暗示这只能通过Java连接/ API完成。
如何通过自己的CLI工具将Zookeeper集合作为“超级”用户连接?
答案 0 :(得分:8)
这个提示完全奏效了!非常感谢,Etienne!
我还能尝试另一种方法,skipACL=yes
,这是绕过安全的另一种方式,但这种方法在一天中间使用是非常危险的。以下是我的详细信息:
skipACL=true
,它是skipACL=yes
,即使在愚蠢的ZK文档页面中没有提到布尔值的具体措辞。那些文档不只是有点模糊&#34 ;;我会称他们在某些地方很弱。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