Curator Framework 绕过 Zookeeper ACL 设置
Curator Framework bypasses Zookeeper ACL settings
我需要为访问 zookeeper 服务器内部数据的客户端设置 user:password 身份验证。我正在尝试使用 zkCli 和 Curator Framework 来弄清楚它是如何工作的,并且出于某种原因,从 Curator Framework 执行的代码绕过了所有安全设置,并且在它不应该拥有完全访问权限时表现得像它具有完全访问权限。
我一直在关注这些问题的答案:
zkCli:
[zk: localhost:7999(CONNECTED) 29] create /testpath contents digest:user:smGaoVKd/cQkjm7b88GyorAUz20=:cdrwa
Created /testpath
[zk: localhost:7999(CONNECTED) 4] getAcl /testpath
'digest,'user:smGaoVKd/cQkjm7b88GyorAUz20=
: cdrwa
[zk: localhost:7999(CONNECTED) 30] rmr /testpath
Authentication is not valid : /testpath
[zk: localhost:7999(CONNECTED) 31]
如上结果符合预期,我们添加了ACL限制,现在无法访问创建的节点。但是,当我尝试使用 Curator Framework 访问此节点时,它会删除它,但它不应该。
String zkConnectString = "hostname:7999";
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(zkConnectString)
.retryPolicy(retryPolicy)
.build();
client.start();
try {
client.delete().forPath("/testpath");
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
因此 java Curator Framework 代码成功删除了节点,而不是给出任何身份验证错误。我做错了什么?
产品版本:
策展人框架:2.11.1
动物园管理员服务器:3.4.5
动物园管理员java客户端:3.4.12
在 ZooKeeper CLI 中,您正在调用 rmr
,即全部删除。您遇到了 ACL 违规,因为 ACL 适用于 /testpath
下的节点,而您没有对 delete/get 下的节点的权限(这很可能是抱怨)/testpath
下的节点。请注意,如果您在 CLI 中改为尝试 delete /testpath
它会起作用(我自己测试过),因为节点 /testpath
采用其父节点的 ACL。老实说,我永远无法将 ZooKeeper ACL 牢记在心,于是我编写了 Curator。因此,简而言之,Curator 正在做正确的事情(与 CLI 所做的事情相同)。
我需要为访问 zookeeper 服务器内部数据的客户端设置 user:password 身份验证。我正在尝试使用 zkCli 和 Curator Framework 来弄清楚它是如何工作的,并且出于某种原因,从 Curator Framework 执行的代码绕过了所有安全设置,并且在它不应该拥有完全访问权限时表现得像它具有完全访问权限。
我一直在关注这些问题的答案:
zkCli:
[zk: localhost:7999(CONNECTED) 29] create /testpath contents digest:user:smGaoVKd/cQkjm7b88GyorAUz20=:cdrwa
Created /testpath
[zk: localhost:7999(CONNECTED) 4] getAcl /testpath
'digest,'user:smGaoVKd/cQkjm7b88GyorAUz20=
: cdrwa
[zk: localhost:7999(CONNECTED) 30] rmr /testpath
Authentication is not valid : /testpath
[zk: localhost:7999(CONNECTED) 31]
如上结果符合预期,我们添加了ACL限制,现在无法访问创建的节点。但是,当我尝试使用 Curator Framework 访问此节点时,它会删除它,但它不应该。
String zkConnectString = "hostname:7999";
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(zkConnectString)
.retryPolicy(retryPolicy)
.build();
client.start();
try {
client.delete().forPath("/testpath");
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
因此 java Curator Framework 代码成功删除了节点,而不是给出任何身份验证错误。我做错了什么?
产品版本:
策展人框架:2.11.1
动物园管理员服务器:3.4.5
动物园管理员java客户端:3.4.12
在 ZooKeeper CLI 中,您正在调用 rmr
,即全部删除。您遇到了 ACL 违规,因为 ACL 适用于 /testpath
下的节点,而您没有对 delete/get 下的节点的权限(这很可能是抱怨)/testpath
下的节点。请注意,如果您在 CLI 中改为尝试 delete /testpath
它会起作用(我自己测试过),因为节点 /testpath
采用其父节点的 ACL。老实说,我永远无法将 ZooKeeper ACL 牢记在心,于是我编写了 Curator。因此,简而言之,Curator 正在做正确的事情(与 CLI 所做的事情相同)。