作者:姜亦珊边_135 | 来源:互联网 | 2023-06-11 14:38
本文由编程笔记#小编为大家整理,主要介绍了配置Zookeeper ACL权限相关的知识,希望对你有一定的参考价值。==背景==阿里云ECS服务器提示“ZooKeeper未授权访问高危风险&
本文由编程笔记#小编为大家整理,主要介绍了配置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如下:
hadoop.tmp.dir
/home/radmin/data/hadoop/tmp
fs.defaultFS
hdfs://ns
dfs.journalnode.edits.dir
/home/radmin/data/hadoop/journal
ha.zookeeper.quorum
vm1:2181,vm2:2181,vm3:2181
ha.zookeeper.auth
@/home/radmin/hadoop-2.8.3/etc/hadoop/zk-auth.txt
ha.zookeeper.acl
@/home/radmin/hadoop-2.8.3/etc/hadoop/zk-acl.txt
ha.zookeeper.parent-znode
/hadoop-ha
ha.zookeeper.session-timeout.ms
5000
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
运行样例程序,以确认程序可以正常运行。