通過 open falcon 的 agent 的http 介面實現遠端系統命令呼叫
阿新 • • 發佈:2019-01-06
open falcon 的 agent 元件是一個比較綜合的採集客戶端,詳情可參考官方文件,此處不一一贅述,只是介紹以下如何開啟其遠端命令呼叫介面。
1 下載 open falcon 原始碼
該專案是go語言實現,我是通過 PyCharm 安裝 go 外掛,來進行編譯構建的。
2 介面示例
agent 提供了各種 http 介面,用來提供各種服務,如下圖,其中 run.go 就是支援遠端命令呼叫的介面;
可以通過http介面來進行遠端命令呼叫,還是很方便的。
示例:
curl -X POST --data 'cd /home; ls;' http://30.0.16.205:1998/run
上述 http 請求會執行 cd 命令,並返回 /home 目錄下的檔案列表。
3 修改 run.go 檔案,並重新構建
由於遠端呼叫涉及到使用者許可權的問題,agent 會通過配置 TrustableIps 進行配置。如果是在內部區域網,可以改動程式,將全部許可權放開。
檔案位置如下:
原始碼:
func configRunRoutes() {
http.HandleFunc("/run", func(w http.ResponseWriter, r *http.Request) {
if !g.Config().Http.Backdoor {
w.Write([]byte("/run disabled"))
return
}
if g.IsTrustable (r.RemoteAddr) {
if r.ContentLength == 0 {
http.Error(w, "body is blank", http.StatusBadRequest)
return
}
暴力更改為:
func configRunRoutes() {
http.HandleFunc("/run", func(w http.ResponseWriter, r *http.Request) {
if !g.Config().Http.Backdoor {
w.Write([]byte ("/run disabled"))
return
}
if g.IsTrustable('127.0.0.1') {
if r.ContentLength == 0 {
http.Error(w, "body is blank", http.StatusBadRequest)
return
}
編譯生成 falcon-agent-5.1.2.tar.gz
4 配置部署
#> mkdir /xxx/agent
#> tar -xf falcon-agent-5.1.2.tar.gz
#> mv cfg.example.json cfg.json
將 cfg.sjon 中的 ‘backdoor’ 配置為 true
然後啟動 agent
#> ./control start