jumpserver 工單系統 二次開發工單管理並開原始碼

春寒知冬冷發表於2024-12-10

介紹

JumpServer 是廣受歡迎的開源堡壘機,是符合 4A 規範的專業運維安全審計系統。JumpServer 幫助企業以更安全的方式管控和登入所有型別的資產,實現事前授權、事中監察、事後審計,滿足等保合規要求。

產品特色

  • 開源:零門檻,線上快速獲取和安裝;
  • 分散式:輕鬆支援大規模併發訪問;
  • 無外掛:僅需瀏覽器,極致的 Web Terminal 使用體驗;
  • 多雲支援:一套系統,同時管理不同雲上面的資產;
  • 雲端儲存:審計錄影雲端儲存,永不丟失;
  • 多租戶:一套系統,多個子公司和部門同時使用;
  • 多應用支援:資料庫,Windows 遠端應用,Kubernetes。

背景

  • 我們公司的windows資產,以前都是讓大家連線8年前的一個商用的跳板機奇治。老舊,資料混亂
  • 並且存在一個1.4.10的jumpserver。然後許可權也非常的混亂。
  • 大家連線資料庫查詢資料,都是用一臺共用的一臺windows,然後從這臺windows用資料庫客戶端連結。並且每一個人還擁有很多的資料庫賬號。資料庫側 那邊開通了各種賬號。
  • 反正就是特別的混亂
  • 並且沒有任何的審計,然後上次出現了一個事故,線上的資料被刪除清空了。最後是從備份恢復了資料。但是也缺少了點資料。幸好資料不是特別的重要
  • 之後領導就想整理這一塊的東西

計劃

  • 重新搭建新版jumpserver,替換老的jumpserver,以及商用的奇治跳板機
  • 以後windows linux資產都要透過新版的jumpserver登陸
  • 資料庫需要從jumpserver登陸,許可權細分到單庫上面

設計

  • 無非就是在新版的jumpserver給使用者新建各種伺服器以及資料庫的許可權
  • 並且資料庫,需要去資料庫裡面新建各種人的賬號,但是這樣的話跟之前一樣了。不方便管理
  • 所謂有了規矩,規則的話。那麼整個事情就變的 好維護,以及好管理了

伺服器許可權設計

  • 伺服器許可權的話 就分兩種,app和root。
  • 一個普通使用者的一個超級使用者的
  • 每一個使用者從jumpserver建立一個 資產授權。後期這個使用者也好管理

資料庫許可權設計

問題反思

  • 如果都是人工操作的話,不免麻煩,伺服器還好。但是資料庫就比較麻煩,因為涉及到給資料庫賬號授權。那麼你就得登陸資料庫,然後授權。
  • 那麼能不能直接弄一個自動化的形式,不需要人工干預。
  • 我在網上搜了,jumpserver確實有工單系統。但是這個是企業版的,我就是一個小打小鬧的,企業版的要1年小几萬。那肯定是不可能的,除非你們公司是大公司,對於jumpserver工單系統比較依賴
  • 而且很多公司 都是自己的工單系統
  • 最後我就準備自己寫一個工單管理系統

展示

開原始碼介紹

  1. 是在jumpserver(v3.10.9)上面二次開發出了一個簡單的工單申請
  2. 使用者可以申請伺服器和mysql庫的許可權
  3. mysql 許可權可以細分到庫表
  4. 自動建立授權,不用人為干預

軟體架構

jumpserver core程式碼
jumpserver lina程式碼

  1. 我這個是基於jumpserver v3.10.9 開發的。
  2. 大家可以試試別的版本,基本上只涉及到幾個介面
  3. 只要這幾個介面不變,我這個簡單版的工單申請 就可以執行的
  4. 只需要在你的版本程式碼上面 新增幾個介面就行
  5. 然後前端新增頁面就行

程式碼介面介紹

# 我新增的介面主要有以下幾個

# 都是在這個檔案裡面
jumpserver-ticket/jumpserver-v3.10.9/apps/perms/urls/user_permission.py

# 具體介面


# 自己新增的 工單申請
# 這個介面是獲取全部的資產的 
path('mytickets/getassets/', api.mytickets.get_all_node),

# 這個是建立申請伺服器的工單介面
path('mytickets/apply/', api.perm_apply.perm_application),

# 這個是建立申請mysql資料庫許可權的介面
path('mytickets/applydb/', api.perm_apply.perm_application_db),

# 這個是檢視自己的工單申請介面
path('mytickets/myapplication/', api.mytickets.my_application),

# 這個是管理員檢視並審批 使用者申請的介面
path('mytickets/myapproval/', api.mytickets.my_myapproval),

# 對接工單系統

# 這兩個介面是因為 我們本身就有工單系統平臺。
# 然後我給我們的開發專門寫的兩個介面

# 這個是建立伺服器許可權的介面
path('mytickets/createauthnodes/', api.mytickets.create_auth_nodes),
# 這個是建立mysql資料庫許可權的介面
path('mytickets/createauthmysql/', api.mytickets.create_auth_mysqls),

安裝教程

安裝的話 就按照官網的安裝就行

大概步驟的話:
  1. 從官網下載程式碼,修改程式碼(下載我的程式碼)
  2. 先編譯core程式碼,docker build -f Dockerfile-ce -t jumpserver/mycore-ce-v3-2:v3.10.9 . 最終會編譯出一個映象
  3. 編譯lina前端程式碼,yarn build。 最終會編譯出一個lina目錄

部署core:
# 進入docker compose資料夾
cd /opt/jumpserver-installer-v3.10.8/compose

# 批次替換core映象
sed -i "s/mycore-ce-v3-1/mycore-ce-v3-2/g" *
cd ..

# 停止服務
./jmsctl.sh stop

# 啟動服務
./jmsctl.sh start

部署lina:
# 因為前端打包出來的是一個lina資料夾
# 所以你可以再寫一個dockerfile,以原始的lina映象為基礎,把這個檔案給編譯進去

# 我採用了一種比較最簡單的方式 直接把檔案複製進去,然後重啟nginx
# 但是缺點就是容器重啟了 那麼你修改的lina程式碼就沒有了,得再複製一遍
# 方式有很多種,看你採用哪種都行

docker cp lina  7309df137aff:/tmp/lina
docker exec -it 7309df137aff bash
rm -rf lina
mv /tmp/lina .

nginx -t
nginx -s reload

這樣就部署好了

修改配置

  1. 下載我的程式碼
  2. 修改連線資料庫的賬號密碼,你得有資料庫賬號,並且許可權是。或者你用root賬號也行
  3. 你在全域性檔案裡搜 db_user 的行,然後把使用者名稱密碼 改成你有許可權的使用者
  4. 然後需要修改呼叫你本身jumpserver介面的 token。因為我沒有完全去讀和jumpserver的 程式碼,所以我這就是取巧。直接在程式碼裡面呼叫介面全域性檔案搜尋 admin_token 的行。然後把token替換成的你token。
  5. 具體怎麼獲取token,檢視jumpserver官方文件,要選擇private_token的方式。jumpserver官方文件建立token
  6. 然後再按照我上面的安裝步驟 就可以了

開源地址

jumpserver-Ticket

https://gitee.com/ccsang/jumpserver-ticket

結語

如果有大佬感興趣的,咱們可以一起交流。
或者有什麼問題的,請留言。

就是平時寫的一個小功能,願對大家有用。
一起進步,一起成長!

相關文章