標籤:唯一約束 好的 環境 ima 項目 實現 記錄 dem -o
Bastion Host介紹
很多人覺得,Bastion Host就是跳板機,這是不全面的。跳板功能只是Bastion Host所具備的功能的其中一項。Bastion Host還有以下兩個至關重要的功能:
- 許可權管理 : 使用者使用Bastion Host帳號登入Bastion Host系統。不需要知道別的主機的帳號和密碼,都是由Bastion Host系統管理的。使用者可以登入的主機和每台主機上所擁有的許可權也是由Bastion Host系統管理的。
- 審計管理 : 使用者的所有操作都是在Bastion Host上執行的,所以都會被記錄儲存。其實對於操作的結果(就是螢幕上列印的結果),如果需要也是可以記錄儲存的。不過一般不那麼做,而且資料量也會有點大。
開源Bastion Host項目
號稱沒有好的開源項目,因為底層的SSH還是通過paramiko模組的長連結的ssh實現的。但是這個和原生的ssh比還是不太穩定,不太好用。不適合生產環境。要好用還是得去改原生的ssh,但是我們不會,我們只會改python。總之這章就是實現一個Bastion Host的功能,真要做個好用的以後再說吧。
比較有名的大概是這個:jumpserver - 開源跳板機
paramiko模組的長串連
雖然上面說了,用這個模組不穩定,但是我們也沒辦法,畢竟只會這個。
paramiko之前已經學習過了,不過當時用的都是短串連。即:串連一次,執行一條命令,返回結果,斷開。這裡我們要用長串連。
長串連的代碼在demos檔案夾下的demo.py這個檔案裡,另外還要用到interactive.py這個檔案。安裝模組的時候不安裝這個demos檔案夾,所以我們去github上下下來:
https://github.com/paramiko/paramiko/tree/master/demos
利用demo.py程式,我們可以進行ssh的長串連。下面的開發都是基於這個程式為基礎,在這個程式的基礎上,修改該程式的源碼添加上記錄使用者輸入的代碼,並寫入資料庫。於是審計管理便實現了。
Bastion Host構架
任何人只能通過Bastion Host登入裝置,Bastion Host可以連結管理所有的裝置:
配置環境變數
還需要確保使用者一登入Bastion Host就進入你的程式,並且不能退出(一退出就退出整個Bastion Host),就是只能在你的做的shell下運行,不能進入原生的shell。可以通過設定環境變數實現:
環境變數儲存在這裡: ~/.bashrc,修改檔案在最後加上這句: python3 /etc/myJunpServer.py 直接運行你的程式。首次設定完成後如果要讓它立刻生效,可以執行這個命令:source .bashrc 載入最新的配置。
表結構設計
主機表:
| id |
主機名稱 |
IP |
連接埠號碼 |
| 自增id |
注釋名稱 |
字串類型 |
數實值型別,預設22 |
主機認證表(和主機表多對多關聯):
| id |
名稱 |
使用者名稱 |
密碼 |
| 自增id |
注釋名稱 |
使用者名稱 |
明文的字串 |
主機群組表(和主機表+主機認證表多對多關聯):
之前的結合表都是結合2張表,這裡要結合3張表。
因為,不同的群組裡可能包含相同的機器,但是不同群組中同一台機器對應的許可權可能不同。
Bastion Host帳號表(和主機表多對多關聯,和主機群組表多對多關聯):
| id |
使用者名稱 |
密碼 |
| 自增id |
唯一約束 |
加密儲存 |
審計記錄資料表:
| id |
時間 |
使用者id |
主機id |
操作訊息 |
| 自增id |
操作時間 |
關聯帳號表的id |
關聯主機表的id |
操作內容 |
大概就是這麼個表結構
Python自動化開發學習12-Bastion Host開發