配置Zookeeper ACL权限

Posted quchunhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置Zookeeper ACL权限相关的知识,希望对你有一定的参考价值。

==背景==

阿里云ECS服务器提示“ZooKeeper未授权访问高危风险”

 

==相关组件及版本==

Linux:Centos 8.0

Zookeeper:3.5.6

Hadoop:2.8.3

Flink:1.10.0

 

==Zookeeper ACL介绍==

网上随便找一个网站看看就应该可以了解了,我看的是:https://blog.csdn.net/qq_34021712/article/details/82871976

 

【ACL 权限控制】

使用:scheme:id:perm 来标识,主要涵盖 3 个方面:

权限模式(Scheme):授权的策略

授权对象(ID):授权的对象

权限(Permission):授予的权限

其特性如下:

ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限

每个znode支持设置多种权限控制方案和多个权限

子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点

 

《scheme》

采用何种方式授权

world:默认方式,相当于全部都能访问

auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)

digest:即用户名:密码这种方式认证,这也是业务系统中最常用的。用username:password 字符串来产生一个MD5串,然后该串被用来作为ACL ID。

认证是通过明文发送username:password 来进行的,当用在ACL时,表达式为username:base64 ,base64是password的SHA1摘要的编码。

ip:使用客户端的主机IP作为ACL ID 。这个ACL表达式的格式为addr/bits ,此时addr中的有效位与客户端addr中的有效位进行比对。

 

《ID》

给谁授予权限

授权对象ID是指,权限赋予的用户或者一个实体,例如:IP 地址或者机器。

授权模式 授权对象
IP  通常是一个IP地址或IP段,例如“192.168.29.100”或“192.168.29.100/110”
Digest 自定义,通常是“username:BASE64(SHA-1(username:password))”,例如"foo:kWN6aNsbjcKWpqjiV7cg0N24raU="
Word 只有一个ID:“anyone”
Super 与Digest模式一致

 

《permission》

授予什么权限

CREATE   c 可以创建子节点

DELETE   d 可以删除子节点(仅下一级节点)

READ       r 可以读取节点数据及显示子节点列表

WRITE     w 可以设置节点数据

ADMIN     a 可以设置节点访问控制列表权限

注意:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

 

==设置ACL权限(Digest模式)==

语法:

digest:username:BASE64(SHA1(password)):cdrwa

 

1、生成密文

提前准备好用户名和密码的密文: 

echo -n zk_admin:RexelZkAdmin#982 | openssl dgst -binary -sha1 | openssl base64

技术图片

生成的密文为:

ohtM2mRqgIWcdWOUvA6Cc9lUQrY=

 

2、启动Zookeeper

在3个节点上分别执行命令:

sh /home/radmin/zookeeper-3.5.6/bin/zkServer.sh start

 

3、进入zkCli命令行

在任意一个几点上执行命令,启动zk客户端

sh /home/radmin/zookeeper-3.5.6/bin/zkCli.sh

 

4、查看目标节点的Acl

目标节点:/hadoop-ha

技术图片

 

5、创建节点并设置ACL

命令:

setAcl /hadoop-ha digest:zk_admin:ohtM2mRqgIWcdWOUvA6Cc9lUQrY=:cdrwa

 

6、验证ACL

setAcl之后,可以尝试getAcl查看权限,会发现权限失败,通过addauto为当前session添加授权信息之后,就可以查看了。

命令:

getAcl /hadoop-ha
addauth digest zk_admin:RexelZkAdmin#982
getAcl /hadoop-ha

技术图片

 

==设置Hadoop Zookeeper ACL==

1、配置core-site.xml

在原有配置基础之上,增加以下4个配置:

ha.zookeeper.auth
ha.zookeeper.acl
ha.zookeeper.parent-znode
ha.zookeeper.session-timeout.ms

 

配置之后的core-site.xml如下:

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/radmin/data/hadoop/tmp</value>
</property>

<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/radmin/data/hadoop/journal</value>
</property>

<property>
<name>ha.zookeeper.quorum</name>
<value>vm1:2181,vm2:2181,vm3:2181</value>
</property>

<property>
<name>ha.zookeeper.auth</name>
<value>@/home/radmin/hadoop-2.8.3/etc/hadoop/zk-auth.txt</value>
</property>

<property>
<name>ha.zookeeper.acl</name>
<value>@/home/radmin/hadoop-2.8.3/etc/hadoop/zk-acl.txt</value>
</property>

<property>
<name>ha.zookeeper.parent-znode</name>
<value>/hadoop-ha</value>
</property>

<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>5000</value>
</property>
</configuration>

 

zk-auth.txt内容如下:

digest:zk_admin:RexelZkAdmin#982

 

zk-acl.txt内容如下:

digest:zk_admin:ohtM2mRqgIWcdWOUvA6Cc9lUQrY=:cdrwa

 

【小贴士】

可以通过以下命令来获取acl。命令:

java -cp /home/radmin/zookeeper-3.5.6/lib/*:/home/radmin/zookeeper-3.5.6/lib/zookeeper-3.5.6.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider zk_admin:RexelZkAdmin#982

技术图片

 

2、重新启动Hadoop集群

##hadoop首次启动(需要按顺序)
[1]hdfs zkfc -formatZK
[1][2][3]hadoop-daemon.sh start journalnode
[1]hdfs namenode -format
[1]hadoop-daemon.sh start namenode
[2]hdfs namenode -bootstrapStandby
[2]hadoop-daemon.sh start namenode
[1][2]hadoop-daemon.sh start zkfc
[1][2][3]hadoop-daemon.sh start datanode
[1][2]yarn-daemon.sh start resourcemanager
[1][2][3]yarn-daemon.sh start nodemanager

##hadoop正常启动(需要按顺序)
[1][2][3]hadoop-daemon.sh start journalnode
[1][2]hadoop-daemon.sh start namenode
[1][2]hadoop-daemon.sh start zkfc
[1][2][3]hadoop-daemon.sh start datanode
[1][2]yarn-daemon.sh start resourcemanager
[1][2][3]yarn-daemon.sh start nodemanager

 

3、确认Yarn和Hdfs的web页面是否可用。

http://192.168.29.100:8088

http://192.168.29.100:50070

 

==Flink Zookeeper ACL==

1、修改flink-conf.xml的配置

配置项:

high-availability.zookeeper.client.acl: open

技术图片

 

2、启动Flink集群

命令:

cd /home/radmin/flink-1.10.0/bin/
./start-cluster.sh

 

3、确认集群状态

查看Web页面:http://192.168.29.100:8081

运行样例程序,以确认程序可以正常运行。

 

以上是关于配置Zookeeper ACL权限的主要内容,如果未能解决你的问题,请参考以下文章

kafka ACL常用权限操作

ZooKeeper系列—— ACL 权限控制

zookeeper权限acl与四字命令

zookeeper ACL权限

Zookeeper权限acl,acl的构成 scheme与id

Zookeeper:acl权限控制