(1).跳板機和堡壘機概述
跳板機屬於內控堡壘機范疇,是一種用於單點登陸的主機應用系統。跳板機就是一台服務器,維護人員在維護過程中,首先要統一登錄到這台服務器上,然后從這台服務器再登錄到目標設備進行維護。但跳板機的缺點是沒有實現對運維人員操作行為的控制和審計,出現誤操作或違規操作難以定位到原因和責任人;並且跳板機存在嚴重的安全風險,如果跳板機系統被攻入,則后端資源完全暴露無遺。對於個別資源(如telnet)可以通過跳板機來完成一定的內控,但是對於更多更特殊的資源(ftp、rdp等)來講,就顯得力不從心了。
堡壘機,即在一個特定的網絡環境下,為了保障網絡和數據不受來自外部和內部用戶的入侵和破壞,而運用各種技術手段實時收集和監控網絡環境中每一個組成部分的系統狀態、安全事件、網絡活動,以便集中報警、及時處理及審計定責,有效降低了運維操作風險,使得運維操作管理變得更簡單、更安全。
(2).Jumpserver概述
Jumpserver 是一款使用Python、Django開發的開源跳板機系統, 為互聯網企業提供了認證,授權, 審計,自動化運維等功能,即堡壘機。官網:http://www.jumpserver.org/。並且這是中國人自己開發的堡壘機,提供中文文檔:https://jumpserver.readthedocs.io/zh/master/(安裝步驟都是全的)
Jumperserver共有三個組件:Jumpserver、Coco和Luna。Jumpserver管理后台,是核心組件, 使用Django Class Based View風格開發,支持 Restful API;Coco是實現SSH Server和Web Terminal Server的組件,提供SSH 和 WebSocket接口, 使用Paramiko和Flask開發;Luna是Web Terminal前端,計划前端頁面都由該項目提供,Jumpserver只提供API,不再負責后台渲染html等。
(3). 實驗環境和下載安裝包
實驗環境:
youxi1 192.168.1.6 jumpserver服務器端
youxi2 192.168.1.7 被管理端
下載安裝包:
https://github.com/jumpserver 下載jumpserver三個組件,下載時注意下需要的其他安裝包版本
https://www.python.org/downloads/source/ 下載python
(4).安裝jumpserver組件
由於依賴較多,如果需要多次安裝或在無網情況下安裝,可以保留yum安裝包,詳見:yum保留安裝包方法,以及存放路徑;pip使用pip download -r requirements.txt下載python包到本地。
1)修改字符編碼
jumpserver是國人開發的,日志中存在中文,所以需要修改字符編碼。查看命令是echo $LANG
[root@youxi1 ~]# # localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 //如果沒有中文UTF-8需要執行該命令 [root@youxi1 ~]# export LC_ALL=zh_CN.UTF-8 //LC_ALL會覆蓋所有LC_*設置的值 [root@youxi1 ~]# echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
最后注銷重新登錄即可。
LC_ALL詳細查看:https://www.cnblogs.com/wajika/p/6592659.html
2)安裝依賴包
[root@youxi1 ~]# yum -y install sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release unzip
3)安裝python
上傳下載好的Python3.6.1,解壓后編譯安裝
[root@youxi1 ~]# tar xf Python-3.6.1.tar.xz [root@youxi1 ~]# cd Python-3.6.1 [root@youxi1 Python-3.6.1]# ./configure && make -j 2 && make install [root@youxi1 Python-3.6.1]# echo $? 0
python3.6默認安裝在/usr/local/bin/下,擴展包安裝在/usr/local/lib/python3.6/目錄下。也可以在./configure時使用--prefix=[地址]指定安裝目錄。
4)建立Python3的虛擬環境
由於CentOS6/7自帶的都是Python2,而yum等工具依賴的都是自帶的Python,所以需要建立一個互不干擾的Python3虛擬環境,以便jumpserver調用。
[root@youxi1 Python-3.6.1]# python3.6 -m venv /opt/py3 [root@youxi1 Python-3.6.1]# source /opt/py3/bin/activate (py3) [root@youxi1 Python-3.6.1]# //可以看到前面多了一個py3 (py3) [root@youxi1 Python-3.6.1]# python -V //此時查看版本也可以發現是3.6.1 Python 3.6.1
5)安裝jumpserver
上傳下載好的jumpserver包到/opt目錄下,解壓后編譯安裝。注意:三個組件都要在/opt目錄下,我曾嘗試將三個組件放在/root目錄下,但是Web終端會失效,暫時不知道修改哪里,和py3的位置無關。
(py3) [root@youxi1 Python-3.6.1]# cd /opt (py3) [root@youxi1 opt]# unzip jumpserver-master.zip (py3) [root@youxi1 opt]# cd jumpserver/requirements/ (py3) [root@youxi1 requirements]# yum -y install $(cat rpm_requirements.txt) //安裝依賴rpm包 (py3) [root@youxi1 requirements]# pip install --upgrade pip //升級pip版本,如果pip版本過低部分依賴庫無法安裝 (py3) [root@youxi1 requirements]# pip install -r requirements.txt //安裝python庫依賴包 (py3) [root@youxi1 requirements]# yum -y install redis //jumpserver會使用redis做cache和celery broke (py3) [root@youxi1 requirements]# systemctl start redis (py3) [root@youxi1 requirements]# systemctl enable redis Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service. (py3) [root@youxi1 requirements]# yum -y install mariadb mariadb-devel mariadb-server (py3) [root@youxi1 requirements]# systemctl start mariadb (py3) [root@youxi1 requirements]# systemctl enable mariadb Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service. (py3) [root@youxi1 requirements]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database jumpserver default charset 'utf8'; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by "123456"; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit Bye (py3) [root@youxi1 requirements]# cd .. //回到/root/jumpserver目錄下 (py3) [root@youxi1 jumpserver]# cp config_example.py config.py //生成配置文件 (py3) [root@youxi1 jumpserver]# vim config.py //第38~43行去除注釋,但一定要注意格式,前面的都是空格,不是TAB DB_ENGINE = 'mysql' DB_HOST = '127.0.0.1' DB_PORT = 3306 DB_USER = 'jumpserver' #登陸數據庫的用戶 DB_PASSWORD = '123456' #密碼 DB_NAME = 'jumpserver' #數據庫名稱 (py3) [root@youxi1 jumpserver]# cd utils/ //這下面是shell腳本和redis.conf (py3) [root@youxi1 utils]# ls //注意,以下文件都沒有執行權限 clean_migrations.sh export_fake_data.sh load_fake_data.sh make_migrations.sh redis.conf (py3) [root@youxi1 utils]# bash make_migrations.sh //初始化數據庫 (py3) [root@youxi1 utils]# cd .. //回到/root/jumpserver目錄下 (py3) [root@youxi1 jumpserver]# chmod +x jms //給啟動腳本添加執行權限 (py3) [root@youxi1 jumpserver]# ./jms start all -d //運行jumpserver,-d選項表示后台運行
說明1:在線下載jumpserver命令,yum -y install git && git clone --depth=1 https://github.com/jumpserver/jumpserver.git。
說明2:pip是一個安裝和管理Python包的工具,相當於yum命令。
說明3:./jms start|stop|status|restart all,-d選項表示后台運行
說明4:如果以上都是正確的,只有啟動jumpserver失敗,請再次啟動jumpserver
說明5:jumpserver組件的啟動必須在python3環境下啟動
另外,jumpserver通過8080端口在瀏覽器中調用,所以如果防火牆是開啟狀態的請添加8080端口。
(py3) [root@youxi1 jumpserver]# firewall-cmd --permanent --zone=public --add-port=8080/tcp success (py3) [root@youxi1 jumpserver]# firewall-cmd --reload success
6)瀏覽器訪問jumpserver
登陸192.168.1.6:8080,賬號密碼默認都是admin。
(5).安裝Coco組件
上傳下載好的Coco包到/opt目錄下,解壓安裝
(py3) [root@youxi1 jumpserver]# cd .. (py3) [root@youxi1 opt]# unzip coco-master.zip (py3) [root@youxi1 opt]# cd coco/requirements/ (py3) [root@youxi1 requirements]# yum -y install $(cat rpm_requirements.txt) (py3) [root@youxi1 requirements]# pip install -r requirements.txt //pip安裝失敗可以重新嘗試,因為是國外的網址 (py3) [root@youxi1 requirements]# cd .. //回到/root/coco目錄下 (py3) [root@youxi1 coco]# cp conf_example.py conf.py //生成配置文件 (py3) [root@youxi1 coco]# chmod +x cocod //給啟動腳本添加執行權限 (py3) [root@youxi1 coco]# ./cocod start -d Start coco process
說明1:如果jumpserver組件和coco組件不是在一台服務器上,需要修改配置文件
說明2:在線下載coco組件命令,git clone https://github.com/jumpserver/coco.git
說明3:./cocod start|stop|status|restart,-d選項表示后台運行
另外如果防火牆是開啟狀態,需要開放2222和5000端口。
(py3) [root@youxi1 coco]# firewall-cmd --permanent --zone=public --add-port=5000/tcp success (py3) [root@youxi1 coco]# firewall-cmd --permanent --zone=public --add-port=2222/tcp success (py3) [root@youxi1 coco]# firewall-cmd --reload success
(6).安裝Luna組件
上傳下載好的luna包,解壓即可
(py3) [root@youxi1 coco]# cd .. (py3) [root@youxi1 opt]# unzip luna-master.zip
說明:luna並不需要安裝和運行,是由網站服務調用的。
(7).使用nginx整合
根據需求安裝nginx,並修改配置文件,已達到整合的目的
(py3) [root@youxi1 opt]# cd (py3) [root@youxi1 ~]# yum -y install nginx (py3) [root@youxi1 ~]# vim /etc/nginx/nginx.conf //修改配置文件 //第38行開始,注釋掉原有的server塊,編輯如下內容 server{ listen 80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location /luna/{ try_files $uri / /index.html; alias /opt/luna/; } location /media/ { add_header Content-Encoding gzip; root /opt/jumpserver/data/; } location /static/ { root /opt/jumpserver/data/; } location /socket.io/ { proxy_pass http://localhost:5000/socket.io/; #填寫coco組件所在服務器的ip地址 proxy_buffering off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { proxy_pass http://localhost:8080; #填寫jumpserver組件所在服務器的ip地址 } } (py3) [root@youxi1 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful (py3) [root@youxi1 ~]# systemctl start nginx (py3) [root@youxi1 ~]# systemctl enable nginx Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
如果防火牆是啟動狀態記得添加80端口
(py3) [root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp success (py3) [root@youxi1 ~]# firewall-cmd --reload success
(8).網頁接收Coco組件的注冊
會話管理-->終端管理-->接受相應的服務器。
會彈出接受終端注冊頁面,確認信息無誤后點擊確認。
刷新一下,在線的紅點會變為綠點
使用ssh通過2222端口連接測試,如下就是成功登錄情況:
(py3) [root@youxi1 ~]# ssh -p2222 admin@192.168.5.101 The authenticity of host '[192.168.5.101]:2222 ([192.168.5.101]:2222)' can't be established. RSA key fingerprint is SHA256:KN34qtWccgpLBiNzSVLMVDmD0xfMSgLYkeaxD3nBki4. RSA key fingerprint is MD5:08:9b:df:9d:a0:d9:63:20:66:37:1e:85:89:82:b0:9d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[192.168.5.101]:2222' (RSA) to the list of known hosts. admin@192.168.5.101's password: Administrator, 歡迎使用Jumpserver開源跳板機系統 1) 輸入 ID 直接登錄 或 輸入部分 IP,主機名,備注 進行搜索登錄(如果唯一). 2) 輸入 / + IP, 主機名 or 備注 搜索. 如: /ip 3) 輸入 P/p 顯示您有權限的主機. 4) 輸入 G/g 顯示您有權限的主機組. 5) 輸入 G/g + 組ID 顯示該組下主機. 如: g1 6) 輸入 H/h 幫助. 0) 輸入 Q/q 退出. Opt>
(9).jumpserver平台初始化
系統設置-->基本設置-->修改當前站點URL-->提交
在選中系統設置中的郵件設置,填寫SMTP信息,測試連接,在收到郵件后提交
注意:SMTP在郵箱的設置中開啟,並獲取密碼。
(10).jumpserver的使用
1)創建用戶
用戶管理-->用戶列表-->創建用戶
填寫用戶信息並提交,必填:名稱,用戶名和郵箱
用戶創建完成后,會使用設置好的SMTP郵箱賬戶想填寫的郵箱發送創建成功郵件,然后通過連接設置密碼
----->
第一次登錄需要補全信息,生成公鑰。注意:該用戶用於使用遠程連接工具,通過2222連接登錄到jumpserver。
(py3) [root@youxi1 ~]# useradd user1 (py3) [root@youxi1 ~]# echo 123456 | passwd --stdin user1 更改用戶 user1 的密碼 。 passwd:所有的身份驗證令牌已經成功更新。 (py3) [root@youxi1 ~]# su - user1 [user1@youxi1 ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Created directory '/home/user1/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub. The key fingerprint is: SHA256:isRhZ5oLAd9nxLO+r9v8cm+ODXZqmkHuF0qRJrGoVQQ user1@youxi1 The key's randomart image is: +---[RSA 2048]----+ |. E+o | | o . .= | | o +o== . | | +oO+ + | | .o=. oS. | | .o o.+. . | | o .oo.o.. | | .+o++*. | | o+BB+++ | +----[SHA256]-----+ [user1@youxi1 ~]$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChMqTST9XVnLpdBhPtRQv/O5HDFNbUTwMOkkxiCEZc
jL6B1dZsheJ6Hfb/TCUKD8BAq2ge8KuWA1Nn4z8/jSQDBtgal0JbWuKs0mr5F+84zWGqX69lCTl+N+Ya
qZZoEK5TKAK0Dq/LE6YDfpBTWfl+SYaj4ebldNtyl2yKs4W/+hRFwROJrZrbOtu09jU4KyNsBAiAfw75
ft6aw2XxKivcJrkCgEop5xpFPq4aXAhwd0POb13OveJiAqc1s+ivEH5qECopKMQrvm9VG8WN1Z2QqS/Q
WnZtiFErP2fpBehfcc8H1/ZVcTQYw8NSOioo+8aEJJlsjp08PseuoFjudKN5 user1@youxi1
然后復制提交
2)創建用戶組
用戶管理-->用戶組-->創建用戶組
填寫信息並提交,必填:名稱
3)編輯資產樹,添加節點
資產管理-->資產列表-->右鍵資產樹-->新建節點
當然也可以右鍵資產樹節點,選擇重命名節點
4)創建管理用戶
Jumpserver對管理用戶的說明:管理用戶是服務器的root,或擁有 NOPASSWD: ALL sudo權限的用戶,Jumpserver使用該用戶來 `推送系統用戶`、`獲取資產硬件信息`等。 Windows或其它硬件可以隨意設置一個。
由於資產創建必須要有管理用戶,所以先介紹管理用戶。
資產管理-->管理用戶-->創建管理用戶
填寫管理用戶信息並提交,填寫的密碼或密鑰要保證管理用戶可以登錄到其下的資產。
5)創建系統用戶
jumpserver對系統用戶的說明:系統用戶是Jumpserver跳轉登錄資產時使用的用戶,可以理解為登錄資產用戶,如 web, sa, dba(`ssh web@some-host`), 而不是使用某個用戶的用戶名跳轉登錄服務器(`ssh xiaoming@some-host`); 簡單來說是 用戶使用自己的用戶名登錄Jumpserver, Jumpserver使用系統用戶登錄資產。 系統用戶創建時,如果選擇了自動推送 Jumpserver會使用ansible自動推送系統用戶到資產中,如果資產(交換機、windows)不支持ansible, 請手動填寫賬號密碼。 目前還不支持Windows的自動推送。
系統用戶推送,要推送成功,client(后端服務器)要滿足以下條件: 1.后端服務器需要有python、sudo環境才能使用推送用戶,批量命令等功能;2.后端服務器如果開啟了selinux,請安裝libselinux-python。一般情況服務器上都關閉了selinux。
資產管理-->系統用戶-->創建系統用戶
填寫系統用戶信息。Linux 系統協議項務必選擇 ssh 。如果用戶在系統中已存在,請去掉自動生成密鑰、自動推送勾選。如果想要包含摸個目錄下的所有命令,那么需要使用絕對路徑,並且必須以/結尾。
也可以創建一個專用系統賬戶,如用於檢測服務器運行狀態的系統用戶
6)創建資產
資產管理-->資產列表-->選中節點-->創建資產
填寫資產信息,目前沒有管理用戶和王宇,可以后期修改
最后可連接應該顯示綠色
如果可連接沒有變為綠色,點擊主機名,進去更新硬件信息和測試可連接性。
7)網域列表功能簡單說明
網域功能是為了解決部分環境無法直接連接而新增的功能,原理是通過網關服務器進行跳轉登錄。這個功能,一般情況不用到,在資產管理中的網域列表中設置。
8)創建授權規則
節點,對應的是資產,代表該節點下的所有資產;用戶組,對應的是用戶,代表該用戶組下所有的用戶;系統用戶,及所選的用戶組下的用戶能通過該系統用戶使用所選節點下的資產。節點,用戶組,系統用戶是一對一的關系,所以當擁有 Linux、Windows 不同類型資產時,應該分別給 Linux 資產和 Windows 資產創建授權規則。
權限管理-->資產授權-->內部測試節點-->創建授權規則
填寫權限規則信息,並提交
授權成功后可以到youxi2服務器上查看是否創建了admin用戶
[root@youxi2 ~]# tail -n 5 /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin admin:x:1000:1000::/home/admin:/bin/bash //可以看到創建了admin用戶
還可以使用visudo查看admin用戶的相關規則
[root@youxi2 ~]# visudo admin ALL=(ALL) NOPASSWD: /sbin/,/bin/ //最后一行
9)用戶使用
使用用戶1(user1,管理員組,網頁賬號登錄)登錄jumpserver,出現如下頁面
點擊Web終端,出現如下頁面,選擇節點和服務器就可以連接上並使用。注意:如果谷歌瀏覽器無法打開web終端,可以嘗試使用其他瀏覽器,我的就是谷歌無法打開換用360就可以打開。
執行幾個小命令,為列之后查看jumpserver是否記錄操作
10)使用遠程工具,2222端口,user1用戶登錄youxi1服務器
----->
使用2222端口和user1用戶登錄會顯示如下
輸入p可以查看有權限的主機,然后輸入主機名登錄
Opt> p ID Hostname IP LoginAs Comment 1 youxi2 192.168.5.102 [系統管理員用戶] 總共: 1 匹配: 1 Opt> youxi2 Connecting to admin@youxi2 0.2 Last login: Thu Sep 5 11:09:05 2019 from youxi1.cn [admin@youxi2 ~]$ //可以看到登錄的用戶是admin
11)查看歷史命令
使用管理員賬號登錄jumpserver網頁。
在會話管理的命令記錄中可以看到用戶使用哪個系統用戶登錄的服務器,執行的什么命令。
另外還可以在會話管理的歷史會話中回放操作視頻