簡介
官網
GitHub
嗶哩嗶哩官方視頻
jumpserver2.0發布會
jumpserver是全球首款完全開源的堡壘機,使用GUN GPL v2.0開源協議,是符合4A的專業運維審計系統。
jumpserver使用python/Django進行開發,遵循web2.0規范,配備了業界領先的web terminal解決方案,交互界面美觀、用戶體驗好
jumpserver采納分布式架構,支持多機房跨區域部署,中心節點提供API,各機房部署登錄節點,可橫向擴展、無並發訪問限制。
jumpserver現已支持管理SSH、Telnet、RDP、VNC協議資產。
作用
jumpserver作為一款開源堡壘機,在jumpserver中方便查看資產的硬件設備規格信息,具備四種能力(也就是上文提到的4A能力)
身份鑒別:防止身份冒用和復用
授權控制:防止內部誤操作和權限濫用
賬號管理:人員和資產的管理
安全審計:追溯的保障和事故分析的依據
我認為jumpserver在企業中的作用:
1、如果是多個運維人員進行管理一個項目,平時的操作都是xshell方式連接,如果出現誤操作后不承認,比較難以追責,jumpserver的錄像功能,可以方便事后追究責任。
2、公司的服務器不宜暴露在外網中,所以需要一個jumpserver制定規范化的端口后進行開放端口,用於運維人員登錄訪問。
(如果是將jumpserver的訪問來源設置為外網,則可以實現在家登陸jumpserver,進行操作服務器;但是更規范的方式為 搭建vpn遠程到公司,jumpserver設置為內網,其他服務器位於內網中,服務器的sshd只允許jumpserver的22端口訪問。)
jumpserver后在操作其他服務器,避免其他服務器暴露在外網中,降低被入侵的風險。並且jumpserver現在已經支持多因子認證,開放jumpserver的服務器在外網中可以安心使用,防止入侵。
3、權限划分,可以在jumpserver中設置開發人員的權限,管控權限防止權限濫用
4、傳輸文件,個人感覺比較雞肋,不能實時的跟隨所在目錄進行傳輸文件,必須指定一個目錄,如果想要的文件不是此目錄,還需要手動mv 。只不過可以錄像上傳、下載文件而已。
協議
JumpServer 現已支持管理 SSH、 Telnet、 RDP、 VNC 協議資產。
原理

1、用戶通過HTTP請求到nginx,nginx的頁面到jumpserver
2、用戶通過ssh請求到coco,通過api到jumpserver(管理linux機器)
3、用戶通過ssh請求到guacamole,通過api調用到jumpserver(管理Windows)
4、用戶通過HTTP請求到nginx,nginx轉到Luna,通過瀏覽器調用api到nginx
5、jumpserver端和coco都對接數據庫,數據庫中存放着用戶的數據(可以利用mariadb進行重構和恢復系統)。
架構
LINA:前端模塊,負責頁面展示。
LUNA:web terminal前端,只提供api。
CORE:管理后台,是核心組件,支持restful api。
COCO/KOKO:提供ssh和web socket接口,連接服務器。
Guacamole:實現RDP功能,支持jumpserver調用

jumpserver也有分布式部署的,在總公司部署核心節點,其他分公司部署proxy,可以實現統一管理。
安裝
安裝方式分為傳統方式、極速腳本方式、容器方式、分布式方式 安裝版本分為開源版和企業版,本文研究的是開源版
腳本方式
環境說明
全新安裝的 Centos7 (7.x)
需要連接 互聯網
使用 root 用戶執行
需要有4G內存
下載文件
cd /opt
yum -y install wget git
git clone --depth=1 https://github.com/jumpserver/setuptools.git
cd setuptools
cp config_example.conf config.conf
vi config.conf
執行安裝
./jmsctl.sh install
查看幫助
./jmsctl.sh -h
訪問頁面
http://ip:80


容器方式
docker環境准備
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
systemctl enable docker
systemctl start docker
配置鏡像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://h8h8tgzq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Linux 生成隨機加密秘鑰
if [ ! "$SECRET_KEY" ]; then
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`;
echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc;
echo $SECRET_KEY;
else
echo $SECRET_KEY;
fi
if [ ! "$BOOTSTRAP_TOKEN" ]; then
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`;
echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc;
echo $BOOTSTRAP_TOKEN;
else
echo $BOOTSTRAP_TOKEN;
fi
運行docker部署jumpserver
mkdir -p /opt/jumpserver/data
mkdir -p /opt/jumpserver/mysql
docker run --name jms_all -d \
-p 80:80 -p 2222:2222 \
-e SECRET_KEY=$SECRET_KEY \
-e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN \
-v /opt/jumpserver/data:/opt/jumpserver/data \
-v /opt/jumpserver/mysql:/var/lib/mysql \
--privileged=true \
jumpserver/jms_all:v2.3.1
訪問
瀏覽器訪問: http://<容器所在服務器IP>
SSH 訪問: ssh -p 2222 <容器所在服務器IP>
XShell 等工具請添加 connection 連接, 默認 ssh 端口 2222
默認管理員賬戶 admin 密碼 admin
傳統方式
分布式方式
配置
常用文件
| 文件名 | 作用 |
|---|---|
| /opt/jumpserver/config.yml | jumpserver配置文件 |
| /opt/jumpserver/tmp | jumpserver組件服務的pid |
| /opt/jumpserver/config.yml | jumpserver配置文件 |
| /opt/setuptools/config.conf | jumpserver安裝信息文件 |
使用前須知
存儲規划
硬盤容量主要用於存儲審計錄像,所以容量的選擇需要根據用戶資產數量以及使用程度來評估,建議最好200G以上,以100台Linux虛擬機資產為例,正常的日常使用,200G可以存儲5-6個月的錄像。
存儲空間評估標准
每小時產生錄像大小(Linux和Windows平均值)10MB
每天操作時限 4小時
保留期限 30天
存儲空間 109104*30=127GB
主要是用於錄像存儲
端口
22 SSH
80,880 jumpserver的web服務(Nginx) 根據用戶需求可以修改
2222 jumpserver的終端連接端口 給第三方遠程終端工具(xshell,putty等)使用
5000 Koko服務端口
8081 guacamole服務端口
8070
3306 mariadb數據庫端口
6379 Redis
詳細見圖
(注釋:參考Nginx的配置文件利於分析端口作用)

docker容器運行 guacamole組件、Koko組件
目錄
/opt/jumpserver/data/ 錄像位置
/opt/jumpserver/data/ 靜態資源
概念區分
用戶列表中創建用戶
jumpserver平台用戶,並不是登錄Linux服務器的用戶
資產管理中的管理用戶
管理用戶是資產(被控服務器)上的 root,或擁有 NOPASSWD: ALL sudo 權限的用戶, JumpServer 使用該用戶來 `推送系統用戶`、`獲取資產硬件信息` 等。
資產管理中的系統用戶
可以理解為登錄資產用戶。單來說是用戶使用自己的用戶名登錄 JumpServer,JumpServer 使用系統用戶登錄資產。 系統用戶創建時,如果選擇了自動推送,JumpServer 會使用 Ansible 自動推送系統用戶到資產中。
使用
1、系統設置
1、基礎設置

瀏覽器中 訪問 liushiya.com

2、郵件設置

我的授權碼:不告訴你
3、郵件內容設置

注意:只要將郵件設置完成再創建用戶才會發送郵件 提醒修改密碼

4、LDAP設置
5、安全設置
勾選 多因子認證以及設置限制登陸失敗次數,防止暴力破解

重新登錄時會提示要求輸入admin用戶的密碼

要求安裝手機端令牌應用


問題
問題在於 設置時 是在系統設置----> 安全設置中進行勾選
但是取消時 卻不是簡單取消勾選就可以的
而是需要
1、系統設置----> 安全設置中進行取消勾選
2、首頁右上角administrator用戶 ----> 個人信息 ----> 禁用 多因子認證
3、重新登錄就不會再要求輸入認證碼了。


2、創建用戶
1、用戶管理 ---> 用戶列表 ----> 創建

解釋:此創建的用戶為登錄jumpserver的用戶,並非是操作Linux系統的用戶,僅用於登錄jumpserver而已。
2、資產管理 ----> 管理用戶 ------> 創建管理用戶
此管理用戶是指Linux系統上的真實存在的用戶,用於推送系統用戶、獲取資產硬件信息等

3、創建資產

4、更新硬件信息(更新后 如果是正確可以連接但是沒有顯示出來硬件信息,請刷新瀏覽器)

3、創建資產
此步驟需要在完成第二步的創建管理用戶之后操作
資產管理 ----> 資產列表 ----> 創建

測試資產服務器是否可以連接
正常可以連接

不可以連接

為了實現安全性 在配置完成后 根據資產服務器列表,進行sshd的訪問控制(只允許jumpserver的端口進行遠程連接,拒絕其他IP地址的連接)
具體sshd的遠程連接控制 查看博客 《sshd服務的白名單和黑名單》
4、資產授權
1、創建系統用戶
資產管理 ----> 系統用戶 ----> 創建系統用戶
(系統用戶是登錄真實服務器時的用戶,不是jumpserver的用戶)

系統用戶創建完成后 點擊系統用戶,添加資產

先選擇推送,在選擇測試
2、資產授權
權限管理 ----> 資產授權 ----> 創建資產授權規則

提交后30秒的時間,就可以使用了。
會話管理-----> web終端 登錄即可了。
注釋:jumpserver的用戶列表的用戶和資產管理的系統用戶是相互綁定的,因為資產授權是將系統用戶和資產進行綁定,而系統用戶又需要登錄jumpserver的用戶才能使用,所以這三者之間是相互綁定的(jumpserver用戶----系統用戶----被管理的資產)
安全建議
Jumpserver 對外需要開放 80 和 2222 端口,如果你配置了 ssl 還需要開放 443 端口, 8080 端口開放給 koko 和 guacamole 組件訪問
JumpServer 所在服務器操作系統應該升級到最新
JumpServer 依賴的軟件升級到最新版本
服務器、數據庫、redis 等依賴組件請勿使用弱口令密碼
不推薦關閉 firewalld 和 selinux
只開放必要的端口,必要的話請通過 vpn 或者 sslvpn 訪問 JumpServer
如果必須開放到外網使用,你應該部署 web 應用防火牆做安全過濾
請部署 ssl 證書通過 https 協議來訪問 JumpServer
JumpServer 不要使用弱口令密碼,應立即改掉默認的 admin 密碼
推薦開啟 MFA 功能,避免因密碼泄露導致的安全問題
升級
卸載
!!!此操作不可逆, 請確認已經備份好數據庫
確保已經停止 jms koko guacamole 進程
確定數據已經處理完畢
請自行替換文中相關路徑為你的實際環境路徑
1、 正常部署卸載
rm -rf /opt/jumpserver
rm -rf /opt/koko /opt/koko
rm -rf /opt/docker-guacamole
rm -rf /opt/lina
rm -rf /opt/luna
rm -rf /opt/py3
rm -rf /config
rm -rf /etc/nginx/conf.d/jumpserver.conf
2、腳本部署卸載
cd /opt/setuptools
./jmsctl.sh uninstall
3、docker 組件部署卸載
rm -rf /opt/jumpserver
rm -rf /opt/py3
rm -rf /etc/nginx/conf.d/jumpserver.conf
docker rm jms_koko
docker rm jms_guacamole
docker rmi jumpserver/jms_koko:v2.3.1
docker rmi jumpserver/jms_guacamole:v2.3.1
rm -rf /usr/lib/systemd/system/jms.service
rm -rf /opt/start_jms.sh
rm -rf /opt/stop_jms.sh
刪除數據庫
mysql -uroot
drop database jumpserver;
exit
清空 redis
redis-cli -h 127.0.0.1
flushall
exit
問題
1、用戶登錄時出現問題
error: dial tcp 10.0.0.102:22: i/o timeout


解決
jumpserver的GitHub反饋
也是描述了相同的問題
使用docker方式部署沒有這個問題,
使用腳本方式安裝確實會出現這個問題的。
腳本方式版本信息 2.2.3

docker方式版本信息 2.3.0

2、查看資產用戶列表時要輸入MFA認證

