Zookeeper的ACL权限控制

本文通过实战演示了如何在ZooKeeper中创建、修改和管理目录的ACL权限,包括使用超级管理员权限解决权限问题的过程。

权限测试

创建目录

[zk: localhost:2181(CONNECTED) 1] create /dlw "dlw"
Created /dlw

检查目录权限

[zk: localhost:2181(CONNECTED) 3] getAcl /dlw
'world,'anyone
: cdrwa

修改目录ACL权限,表示为/dlw目录添加accumulo用户,密码的MD5哈希码为SkvnZlrIQ19GNd7eLDXGKg0Esgw=,r表示只读

[zk: localhost:2181(CONNECTED) 5] setAcl /dlw digest:accumulo:SkvnZlrIQ19GNd7eLDXGKg0Esgw=:r
cZxid = 0x30000003f
ctime = Mon Feb 05 16:47:14 CHOT 2018
mZxid = 0x30000003f
mtime = Mon Feb 05 16:47:14 CHOT 2018
pZxid = 0x30000003f
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

再检查目录权限

[zk: localhost:2181(CONNECTED) 6] getAcl /dlw
'digest,'accumulo:SkvnZlrIQ19GNd7eLDXGKg0Esgw=
: r

发现此时该目录已经因为权限不足无法访问

[zk: localhost:2181(CONNECTED) 7] ls /dlw
Authentication is not valid : /dlw

突然发现虽然知道accumulo用户密码的MD5值,但是并不知道密码是多少,然后对/dlw目录就无法访问了

这时可以使用zookeeper的acl超级管理员进行操作

Zookeeper的ACL超级管理员

修改zookeeper的启动脚本

$ cd $ZOOKEEPER_HOME/bin
$ vi zkServer.sh

添加一行

SUPER_ACL="-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="
super:xQJmxLMiHGwaqBvst5y6rkB6HQs=表示super:admin

修改启动命令,找到nohup,把SUPER_ACL添加到启动命令中

nohup $JAVA $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
    "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "${SUPER_ACL}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

分发zkServer.sh到其它zookeeper节点,重启zookeeper服务

再登录zkCli.sh,连接超级管理员super,就可以对/dlw进行操作

[zk: localhost:2181(CONNECTED) 14] addauth digest super:admin
[zk: localhost:2181(CONNECTED) 15] ls /dlw
[]

把/dlw目录的Acl修改为初始默认的

[zk: localhost:2181(CONNECTED) 23] setAcl /dlw world:anyone:crwda
cZxid = 0x30000003f
ctime = Mon Feb 05 16:47:14 CHOT 2018
mZxid = 0x30000003f
mtime = Mon Feb 05 16:47:14 CHOT 2018
pZxid = 0x30000003f
cversion = 0
dataVersion = 0
aclVersion = 2
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 24] getAcl /dlw
'world,'anyone
: cdrwa

Zookeeper的认证方式

digest:Client端由用户名和密码验证,譬如user:password,digest的密码生成方式是Sha1摘要的base64形式

auth:不使用任何id,代表任何已确认用户。

ip:Client端由IP地址验证,譬如172.2.0.0/24

world:固定用户为anyone,为所有Client端开放权限

super:在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)

节点的权限(perms)主要有以下几种:

Create 允许对子节点Create操作

Read 允许对本节点GetChildren和GetData操作

Write 允许对本节点SetData操作

Delete 允许对子节点Delete操作

Admin 允许对本节点setAcl操作

ACL权限设置时分别用cdrwa简写表示

转载于:https://my.oschina.net/xiaozhublog/blog/1618691

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值