配置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模式)==

ACL語法:

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

命令:

getAcl /

 

5、設置ACL

命令:

setAcl / digest:zk_admin:ohtM2mRqgIWcdWOUvA6Cc9lUQrY=:cdrwa

 

6、驗證ACL

setAcl之后,可以嘗試getAcl查看權限,會發現權限失敗,通過addauto為當前session添加授權信息之后,就可以查看了。

命令:

getAcl /
addauth digest zk_admin:RexelZkAdmin#982
getAcl /
getAcl /yarn-leader-election

 

7、取消acl權限設置。(如果需要)

命令:

setAcl / world:anyone:cdrwa

 

==設置Hadoop ACL==

1、配置core-site.xml

在原有配置基礎之上,增加以下4個配置:

ha.zookeeper.auth
ha.zookeeper.acl

 

配置之后的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>
</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、配置yarn-site.xml

增加兩個配置:

yarn.resourcemanager.zk-acl
yarn.resourcemanager.zk-auth

 

配置之后的yarn-site.xml為:

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>

<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>ns</value>
</property>

<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>

<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>rexel-ids001</value>
</property> 

<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>rexel-ids002</value>
</property>

<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>rexel-ids001:8289</value>
</property>

<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>rexel-ids002:8289</value>
</property>

<property>
<name>yarn.resourcemanager.zk-address</name>
<value>rexel-ids001:2181,rexel-ids002:2181,rexel-ids003:2181</value>
</property>

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

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

<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
<description>default is 8192(MB).</description>
</property>

<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>

<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
<description>default is 8192(MB).</description>
</property>

<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>10</value>
<description>The maximum number of application master execution attempts.</description>
</property>
</configuration>

 

3、重新啟動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

備注:[1][2][3]表示在第幾個節點執行命令

 

4、確認Yarn和Hdfs的web頁面是否可用。

http://192.168.29.100:8088

http://192.168.29.100:50070

 

==Flink Zookeeper ACL==

目前試了一下,不需要對配置進行任何的修改,運行了一個實時流任務,沒有發現任何問題。

猜測是因為任務委托給yan執行的原因。

 

==一個小坑==

驗證的時候對/yarn-leader-election目錄也執行了setAcl,結果yarn的resourcemanager就無論如何也啟動不起來了。

后來取消了/yarn-leader-election的acl,只在根節點上設置了acl之后,集群就可以啟動起來了。

 

--END--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM