1. 程式人生 > >通過 open falcon 的 agent 的http 介面實現遠端系統命令呼叫

通過 open falcon 的 agent 的http 介面實現遠端系統命令呼叫

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