zookeeper未授權訪問測試參考文章:
https://www.cnblogs.com/Hi-blog/p/Zookeeper-UnAuthorization-Access.html#_label04
探測2181
探測Zookeeper服務開放
如使用nmap探測某個目標地址是否運行Zookeeper服務,探測2181端口開放。
root@kali:~# nmap -Pn -p 2181 xx.xx.xx.xx
探測四字命令
用戶在客戶端可以通過 telnet 或 nc 向 ZooKeeper 提交四字命令,來探測四字命令是否開啟
參考文章:
https://www.cnblogs.com/kuku0223/p/8428341.html
https://www.jianshu.com/p/1d638fac4da8
https://zookeeper.apache.org/doc/r3.6.1/zookeeperAdmin.html#sc_zkCommands
- conf命令
輸出相關服務配置的詳細信息,端口、數據路徑、日志路徑、session 超時時間,最大連接數等。
root@kali:~# echo conf | nc xx.xx.xx.xx 2181
- cons命令
列出所有連接到當前服務器的客戶端/會話的詳細信息
root@kali:~# echo cons | nc xx.xx.xx.xx 2181 | more
- dump命令
輸出未處理的會話和臨時節點,leader 節點有效。
root@kali:~# echo dump | nc xx.xx.xx.xx 2181 | more
- envi命令
輸出服務器的詳細信息。
root@kali:~# echo envi | nc xx.xx.xx.xx 2181
用安裝好zk環境的客戶端連接測試
./zkCli.sh -server x.x.x.x:2181
ls /
# 輸出目錄就是 連接成功
# 輸出 Authentication is not valid : / 就是沒有權限
修復
修復步驟一 關閉四字命令
ZooKeeper3.4.6支持某些特定的四字命令與其的交互。它們大多是查詢命令,但也有重啟zk之類的命令,四字命令可以用來獲取、重啟 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端可以通過 telnet 或 nc 向 ZooKeeper 提交相應的命令。
從運維的角度看,這個功能很方便,但是從安全角度來看,就需要關閉這些特定的四字命令來確保安全了,修復方式為:升級zookeeper>=3.5.3(舊版本不能給四字命令加白名單哦,升級請自行評估風險),然后設置四字命令白名單、關閉http使用四字命令工具即可,示范如下:
/home/work/software/apache-zookeeper-3.6.1-bin/conf/zoo.cfg
#限制tcp使用4字命令的白名單,添加了白名單的四字命令才能執行 (升級到高版本以后默認的白名單4字命令里只有srvr這一個,請按需增加)
4lw.commands.whitelist=stat, srvr
#是否開啟jetty服務允許使用http方式執行4字命令,默認為true開啟,false為關閉(升級到高版本以后默認開啟http方式)
admin.enableServer=false
- 如果真的有需求要開啟http功能
如果有需求要開啟http功能,可以修改根路徑名稱,改成20位的隨機字符
#修改http四字命令的根路徑,默認為/commands
admin.commandURL=/2cgyS2rQGW4yzjJlXV0k
訪問路徑就會變成:curl http://10.39.27.200:8080/2cgyS2rQGW4yzjJlXV0k/envi
設置成功之后 ,繼續做修復步驟二;
參考文章:
https://www.cnblogs.com/kuku0223/p/8428341.html
https://www.jianshu.com/p/1d638fac4da8
https://zookeeper.apache.org/doc/r3.6.1/zookeeperAdmin.html#sc_zkCommands
修復步驟二 關閉未授權訪問
開啟SASL_PLAINTEXT認證(用戶名和密碼認證)
https://www.cnblogs.com/iamsach/p/9234624.html
或者用下面的方式
添加IP白名單對連接ZK的客戶端進行限制
通過IP白名單對連接ZK的客戶端進行限制,比較簡單,只需要收集一下IP即可。因zookeeper不支持節點間權限的繼承,所以需要對關鍵節點進行權限控制。
這里對“/”、“/dubbo”、“/zookeeper”節點進行限制,示范如下:
<ZooKeeper_HOME>/bin/
./zkCli.sh -server ip:port
setAcl / ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa
setAcl /dubbo ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa
setAcl /zookeeper ip:xx.xx.xx.152:cdrwa,ip:xx.xx.xx.151:cdrwa,ip:xx.xx.xx.156:cdrwa,ip:xx.xx.xx.155:cdrwa,ip:xx.xx.xx.150:cdrwa,ip:xx.xx.xx.149:cdrwa
設置完setAcl,然后用getAcl 查看一下是否配置成功.