介紹
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建立一個 資產授權。後期這個使用者也好管理
資料庫許可權設計
- 我設計的是給資料庫那邊新建一個根據使用者名稱的賬號,後面我們用這個賬號給授權不同的許可權。
- 然後我們給每一個人建立一個 資產授權。方便後期管理。
- 那麼就會表現成 資料庫有一個jump_db_fanlichun_r的資料庫賬號
- 然後給這個jump_db_fanlichun_r使用者授權,比如查詢,修改,等等
- 最後我們給這個使用者建立一個 資產授權。名稱也是jump_db_fanlichun_r。
問題反思
- 如果都是人工操作的話,不免麻煩,伺服器還好。但是資料庫就比較麻煩,因為涉及到給資料庫賬號授權。那麼你就得登陸資料庫,然後授權。
- 那麼能不能直接弄一個自動化的形式,不需要人工干預。
- 我在網上搜了,jumpserver確實有工單系統。但是這個是企業版的,我就是一個小打小鬧的,企業版的要1年小几萬。那肯定是不可能的,除非你們公司是大公司,對於jumpserver工單系統比較依賴
- 而且很多公司 都是自己的工單系統
- 最後我就準備自己寫一個工單管理系統
展示
開原始碼介紹
- 是在jumpserver(v3.10.9)上面二次開發出了一個簡單的工單申請
- 使用者可以申請伺服器和mysql庫的許可權
- mysql 許可權可以細分到庫表
- 自動建立授權,不用人為干預
軟體架構
jumpserver core程式碼
jumpserver lina程式碼
- 我這個是基於jumpserver v3.10.9 開發的。
- 大家可以試試別的版本,基本上只涉及到幾個介面
- 只要這幾個介面不變,我這個簡單版的工單申請 就可以執行的
- 只需要在你的版本程式碼上面 新增幾個介面就行
- 然後前端新增頁面就行
程式碼介面介紹
# 我新增的介面主要有以下幾個 # 都是在這個檔案裡面 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),
安裝教程
安裝的話 就按照官網的安裝就行
大概步驟的話:
- 從官網下載程式碼,修改程式碼(下載我的程式碼)
- 先編譯core程式碼,docker build -f Dockerfile-ce -t jumpserver/mycore-ce-v3-2:v3.10.9 . 最終會編譯出一個映象
- 編譯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
這樣就部署好了
修改配置
- 下載我的程式碼
- 修改連線資料庫的賬號密碼,你得有資料庫賬號,並且許可權是。或者你用root賬號也行
- 你在全域性檔案裡搜 db_user 的行,然後把使用者名稱密碼 改成你有許可權的使用者
- 然後需要修改呼叫你本身jumpserver介面的 token。因為我沒有完全去讀和jumpserver的 程式碼,所以我這就是取巧。直接在程式碼裡面呼叫介面全域性檔案搜尋 admin_token 的行。然後把token替換成的你token。
- 具體怎麼獲取token,檢視jumpserver官方文件,要選擇private_token的方式。jumpserver官方文件建立token
- 然後再按照我上面的安裝步驟 就可以了
開源地址
jumpserver-Ticket
https://gitee.com/ccsang/jumpserver-ticket
結語
如果有大佬感興趣的,咱們可以一起交流。
或者有什麼問題的,請留言。
就是平時寫的一個小功能,願對大家有用。
一起進步,一起成長!