zookeeper未授權訪問危害
服務器信息泄露、集群被破壞
一、 四字命令未授權使用
1.1 測試
工具:netcat ,Linux或Windows都可以測
命令行輸入echo envi | nc 10.10.10.10 2181
即可查看服務器信息
命令有:envi stat ruok等
1.2 修復:
不想泄露信息可以修改zookeeper/conf/zoo.cfg(zookeeper為安裝目錄),注釋掉 4lw.commands.whitelist
相關的行。四字命令用於查詢狀態,zookeeper默認不開放這些命令,只有在白名單中才能運行。
二、 未授權連接及節點操作
2.1 測試
Linux下安裝zookeeper ,輸入
zookeeper/bin/zkCli.sh -server 10.10.10.10:2181
即可連接,可使用get /node watch
或set /node 1
等命令去操作節點,如果成功,則證明此節點存在未授權訪問。
Windows也可以安裝zookeeper來測試
作者用的百度雲,可能有點慢,我給出藍湊的下載地址,也呼吁大家不要用百度雲分享了 : https://wws.lanzous.com/iIlZvjdutij
如果Java8不是環境變量的話,首先編輯 bin 目錄下的 java-start.cmd 文件修改Java為你Java8安裝的地址,然后雙擊啟動
只要zktools連接成功,則證明所有節點存在未授權訪問。值得注意的是,如果某個節點有權限控制,那么zktools就無法連接成功,無法訪問其他未授權節點了。但是Linux下zkCli.sh仍可訪問其他未授權節點。
### 2.2 修復:
2.2.1 ip ACL授權策略
可以使用下列操作限制訪問節點的IP
setAcl -R /node ip:127.0.0.1:cdrwa,ip:10.10.11.11:cdrwa
#-R為遞歸,cdrwa為權限
2.2.2 auth ACL授權策略
即用戶模式,制定策略后,訪問者必須使用addauth digest user:passwd
登錄才能進行節點操作。
策略制定方法為,用zkCli.sh連接后,在其中運行addauth digest user:passwd(digest是固定的)
來注冊用戶,可以有多個用戶。然后運行setAcl /node auth::cdrwa(auth是固定的)
,之后可運行getAcl /node
查看,能發現之前注冊的用戶都被配入了節點的權限中。使用quit
退出,再連接,可發現只有在使用addauth
登錄之后才能操作節點。
2.2.3 digest Acl授權策略
不難發現策略2中,所有用戶對節點的權限都是一致的,只能統一設置,若想使不同用戶對節點的權限不同,可以使用digest Acl授權策略,參見 https://blog.csdn.net/u014630623/article/details/103749103
2.2.4 防火牆策略
使用以上策略限制節點后,任意用戶仍可登錄並用ls / 查看節點名字,但是無法獲得詳細信息和進行操作。若想不讓任意用戶訪問2181端口,可以配置防火牆。
(๑•̀ㅂ•́)و✧
往期精彩文章推薦: