jumpserver注意事項以及報錯處理
需要注意下面亮點
在使用jumpserver過程中,有一步是系統使用者推送,要推送成功,client(後端伺服器)要滿足以下條件:
- 後端伺服器需要有python、sudo環境才能使用推送使用者,批量命令等功能
- 後端伺服器如果開啟了selinux,請安裝libselinux-python
在使用Jumpserver過程中的一些名詞解釋
- 使用者:使用者是授權和登陸的主體,將來為每個員工建立一個賬戶,用來登入跳板機, 將資產授權給該使用者,檢視使用者登陸記錄命令歷史等。
- 使用者組:多個使用者可以組合成使用者組,為了方便進行授權,可以將一個部門或幾個使用者 組建成使用者組,在授權中使用組授權,該組中的使用者擁有所有授權的主機許可權。
- 資產:資產通常是我們的伺服器、網路裝置等,將資產授權給使用者,使用者則會有許可權登 錄資產,執行命令等。
- 管理賬戶:新增資產時需要新增一個管理賬戶,該賬戶是該資產上已有的有管理許可權的使用者, 如root,或者有 NOPASSWD: ALL sudo許可權的使用者,該管理賬戶用來向資產推送系統使用者, 為系統使用者新增sudo,獲取資產的一些硬體資訊。
- 資產組:同用戶組,是資產組成的集合,為了方便授權。
- 機房:又稱IDC,這個不用解釋了吧。
- Sudo:這裡的sudo其實是Linux中的sudo命令別名,一個sudo別名包含多個命令, 系統使用者關聯sudo就代表該系統使用者有許可權sudo執行這些命令。
- 系統使用者:系統使用者是伺服器上建立的一些真實存在的可以ssh登陸的使用者,如 dev, sa, dba等,系統使用者可使用jumpserver推送到伺服器上,也可以利用自己公司 的工具進行推送,授權時將使用者、資產、系統使用者關聯起來則表明使用者有許可權登陸該資產的這個系統使用者,比如使用者小明 以 dev系統使用者登入 172.16.1.1資產, 簡單理解就是 將某個資產上的某個系統使用者對映給這個使用者登入。
- 推送系統使用者:新增完系統使用者,需要推送,推送操作是使用ansible,把新增的系統使用者和系統使用者管理的sudo,推送到資產上,具體體現是在資產上useradd該系統使用者,設定它的key,然後設定它的sudo,為了讓使用者可以登入它。
- 授權規則:授權規則是將資產系統使用者和使用者關聯起來,用來完成授權。 這樣使用者就可以以某個系統使用者賬號登陸資產。大家對這好像不是很理解,其實也是對系統使用者, 使用者這裡沒有搞清楚。我們可以把使用者當做虛擬的使用者,而系統使用者是真實再伺服器上存在的使用者, 系統使用者可以使用jumpserver推送,也可以自己手動建立,但是推送的過程一定要有,哪怕是模擬 推送(不選擇祕鑰和密碼推送,如網路裝置),因為新增授權規則會檢查推送記錄。為了簡化理解, 我們暫時 以 使用者 資產 系統使用者 來理解,暫時不考慮組,新增這樣的規則意思是 授權 使用者 在這個資產上 以這個系統使用者來登陸, 系統使用者是一組具有通用性,具有sudo的使用者, 不同的使用者授權不同的 系統使用者,比如 dba可能有用資料庫的sudo許可權。
- 日誌審計:分為以下5個方式:1)線上:檢視當前線上的使用者(非web線上),可以監控使用者的命令執行,強制結束使用者 登入;2)實時監控:實時監控使用者的操作;3)登入歷史:檢視以往使用者的登入歷史,可以檢視使用者登陸操作的命令,可以回放使用者 執行命令的錄影;4)命令記錄:檢視使用者批量執行命令的歷史,包含執行命令的主機,執行的命令,執行的結果;5)上傳下載:檢視使用者上傳下載檔案的記錄。
- 預設設定:預設設定裡可以設定 預設管理賬號資訊,包括賬號密碼金鑰,預設資訊為了方便新增資產 而設計,新增資產時如果選擇使用預設管理賬號,則會使用這裡設定的資訊,埠是資產的ssh埠,新增 資產時,預設會使用該埠。
--------------------------------------------Jumpserver中的使用者,系統使用者,管理使用者對比---------------------------------------
1 2 3 4 5 6 |
為了簡單的描述這個問題,可以舉例來說明,:
1)使用者:小王(公司員工),
2)系統使用者:dev(後端伺服器上存在的賬號),
授權時將系統使用者dev在某臺後段伺服器授權給小王,這樣小王登陸後端伺服器,其實是登陸了伺服器上的dev使用者,類似執行
"ssh [email protected]"
3)管理賬號: 是為了幫助大家推送系統使用者用的
在jumpserver上新建系統使用者並推送, 其實相當於執行了
"ssh 管理賬戶@somehost -e 'useradd 系統賬號'"
, 這個是用ansible完成這樣的操作。
|
下面簡單說下在Jumpserver的web介面裡新增使用者、推送使用者等操作流程:
1. 新增使用者
使用者管理 - 檢視使用者 - 新增使用者 填寫基本資訊,完成使用者新增。
使用者新增完成後,根據提示記住使用者賬號密碼,換個瀏覽器登入下載key,
ssh登入jumpserver測試
2. 新增資產
資產管理 - 檢視資產 - 新增資產 填寫基本資訊,完成資產新增
3. 新增sudo
授權管理 - Sudo - 新增別名 輸入別名名稱和命令,完成sudo新增
4. 新增系統使用者
授權管理 - 系統使用者 - 新增 輸入基本資訊,完成系統使用者新增
5. 推送系統使用者
授權管理 - 推送 - 選擇需要推送的資產或資產組完成推送
推送只支援伺服器,使用金鑰是指使用者從跳板機跳轉時使用key,反之使用密碼,
授權時會檢查推送記錄,如果沒有推送過則無法完成系統使用者在該資產上的授權。
如果資產時網路裝置,請不要選擇密碼和祕鑰,模擬一下推送,目的是為了生成
推送記錄。
6. 新增授權規則
授權管理 - 授權規則 - 新增規則 選擇剛才新增的使用者,資產,系統使用者完成授權
7. 測試登入
使用者下載key 登入跳板機,會自動執行connect.py,根據提示登入伺服器
使用者登陸web 檢視授權的主機,點選後面的連結,測試是否可以登入伺服器
8. 監控和結束會話
日誌審計 - 線上 檢視當前登入的使用者登入情況,點選監控檢視使用者執行的命令, 點選阻斷,結束使用者的會話
9. 檢視歷史記錄
日誌審計 - 登入歷史 檢視登入歷史,點選統計檢視命令歷史,點選回放檢視錄影
10. 執行命令
同7 測試命令的執行,命令記錄檢視 批量執行命令的日誌
11. 上傳下載
同7 測試檔案的上傳下載,日誌審計 - 上傳下載 檢視上傳下載記錄
下面分享幾個問題的排查注意點:
1)檢視日誌
tail -f logs/jumpserver.log
裡面包含了詳細的日誌,包含了賬號和密碼,一切完成後,請將 jumpserver.conf中的log改為 warning等
2)推送系統使用者失敗
在系統使用者列表,點選系統使用者名稱稱,檢視系統使用者詳情,把滑鼠放到失敗按鈕上,會看到失敗的原因,通常是因為 管理賬號新增的不對(見管理賬號名稱解釋),或伺服器沒有安裝sudo(推送系統使用者時,會推送sudo設定)
3)郵件傳送失敗
如果出現mail,smtp等錯誤通常都是由於傳送郵件導致的,請嘗試不同提供商的郵件設定
4)service啟動失敗
請進入/opt/jumpserver目錄,手動執行
# python manage.py runserver 0.0.0.0:80
# python run_websocket.py
如果啟動失敗,可能是由於 80埠和3000埠已經被佔用,或者資料庫賬號密碼不對,請檢查
5)監控,websocket, web命令執行失敗
它們會像執行的websocket服務發起請求, 可能是websocket沒有啟動,可能是Jumpserver.conf中websocket的地址不正確(注意這個檔案裡的ip地址的配置,內外網地址?埠通不通?),務必保證設定的地址使用者可以訪問到(對映或防火牆等), service.sh先關掉伺服器,手動執行, 檢視websocket的console輸出
6)Crypto,HAVE_DECL_MPZ_POWM_SEC等錯誤
很常見的錯誤,通常是由 pycrypto的版本問題,請解除安裝重新安裝
# pip uninstall pycrypto
# rm -rf /usr/lib64/python2.6/site-packages/Crypto/
# pip install pycrypto
==================================================
問題記錄一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
預設跳板機的上傳檔案有限制大小為256M,可以修改dropzone.js
[[email protected]
test
-vm001 ~]
# vim /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
還要安裝一個nginx代理,以用來改善它的80埠訪問和改善WEB大檔案上傳,加上一個http:
//jumpserver
.venic.com
/doc
來連結使用說明
[[email protected]
test
-vm001 http]
# vi uploadbigfile.conf
server {
listen 80;
client_max_body_size 5g;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location ^~
/ws/
{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection
"upgrade"
;
proxy_pass http:
//127
.0.0.1:8000
/ws/
;
}
location / {
proxy_pass http:
//127
.0.0.1:8000;
}
location
/file/upload/
{
proxy_pass http:
//127
.0.0.1:8083;
}
location ^~
/doc/
{
proxy_pass http:
//127
.0.0.1:8088/;
}
}
server {
listen 8088;
location / {
root
/opt/jumpserver/docs/
;
index index.html index.htm;
}
}
由於多了一個8083埠,還要啟動這個
[[email protected]
test
-vm001 ~]
# cd /opt/jumpserver
[[email protected]
test
-vm001 ~]
# python manage.py runserver 127.0.0.1:8083 &
*************************************************
xshell工具的上傳大小還沒解決,以下是剛才修改配置的位置,但測試最終提示不超過2G的單檔案。
上傳檔案有限制大小為256M,可以修改dropzone.js
[[email protected]
test
-vm001 ~]
# vi /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
[[email protected]
test
-vm001 ~]
# /opt/jumpserver/service.sh restart
|
問題記錄二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
問題記錄二:
Web console登入機器,會產生過大的CPU,單開一個WEB console就消耗了44%的CPU,2核中佔滿一個。而使用Xshell公鑰匙則沒有問題
如果要禁用Web Console的話,修改Web前端,但我沒有刪掉
進入
/opt/jumpserver/templates/jasset/asset_cu_list
.html -----修改130行,這個是修改普通使用者介面的
進入
/opt/jumpserver/templates/jasset/asset_list
.html --------修改135行,這個是修改管理員介面的
比如我把它修改成跳轉方式到其它網站連線去
<a value=
"{{ asset.id }}"
class=
"conn btn btn-xs btn-warning"
>連線<
/a
>
<a href=
"http://jumpserver.venic.com/doc"
class=
"conn btn btn-xs btn-warning"
>連線<
/a
>
而我沒有取消,是因我調高CPU配置為8核後,發現開了8個視窗,最終還是最多消耗2個核,所以我沒有禁用web console
-------------------------------------------------------------------------------------------------------------
需求變更一:
修改web console的視窗寬一點
[[email protected]
test
-vm001 ~]
# vim /opt/jumpserver/static/js/webterminal.js
改裡面所有100值為160的值
修改webconsole 視窗,加個註釋,禁用使用者修改視窗大小
<!--
<div class=
"termChangBar"
>
<input
type
=
"number"
min=
"100"
value=
"100"
placeholder=
"col"
id
=
"term-col"
/>
<input
type
=
"number"
min=
"35"
value=
"35"
placeholder=
"row"
id
=
"term-row"
/>
<button
id
=
"col-row"
>修改視窗大小<
/button
>
<
/div
>
-->
修改彈窗的視窗體大小(非terminal),
進入
/opt/jumpserver/templates/jasset/asset_cu_list
.html -----修改237行和249行 這個是修改普通使用者介面的
進入
/opt/jumpserver/templates/jasset/asset_list
.html --------248行和259 這個是修改管理員介面的
window.
open
(new_url+data,
"_blank"
,
'width=1000, height=600'
);
---------------------------------------------------------------------------------------------------------------
需求變更二:
修改左側導航欄的訪問官網連結
進入
/opt/jumpserver/templates/nav
.html 52行和80行
<a href=
"http://jumpserver.venic.com/doc"
target=
"_blank"
><i class=
"fa fa-database"
><
/i
> <span class=
"nav-label"
>訪問官網<
/span
><
/a
>
上傳一個用word文件寫的“操作指引”到如下連結,
|
這個word文件轉成html,這裡只是使用另存為html自己儲存成2個新檔案(index.files和index.htm)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
然後我在htm檔案的<
head
><
/head
>標籤中,添加了一個<style><
/style
>如下標籤,目的是讓圖片自動伸縮和居中
<style>
html{
}
body{width:800px;
margin:auto;
padding: 0px !important; border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.8em !important; outline: 0px !important; overflow: visible !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; min-height: auto !important; color: rgb(0, 130, 0) !important;">#FFFFFF;
}
img {max-width:800px;}
<
/style
>
然後把這2個檔案上傳至伺服器的
/opt/jumpserver-master/docs
目錄下。所以才上面的nginx多一條跳轉的配置
|
1 2 3 |
然後我們還要修改首頁的前程式碼,讓“連線使用說明”指到這個 http:
//jumpserver
.venic.com
/doc/
修改處在
/opt/jumpserver-master/templates/nav
.html
|
測試跳轉後的顯示介面樣式如下:
問題記錄三:
1 2 3 4 5 |
修改sshd配置,禁止密碼登入
#
[[email protected]
test
-vm001 ~]
# vim /etc/sshd/sshd_config
......
PasswordAuthentication no
[[email protected]
test
-vm001 ~]
# service sshd restart
|
問題記錄四:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
非admin的普通使用者登入jumpserver介面,通過webshell登入伺服器的時候,連線報錯!報錯資訊為:
Connection Reset By Peer
通過jumpserver的log日誌,可以看出Websocket連線失效了
[[email protected]
test
-vm001
install
]
# tail -f /data/jumpserver/logs/jumpserver.log
2018-01-18 09:18:40,660 - views.py - DEBUG - 獲取授權系統使用者: ops,app,dev
2018-01-18 09:18:46,429 - run_websocket.py - DEBUG - Websocket: session_key:
2018-01-18 09:18:46,430 - run_websocket.py - WARNING - Websocket: Request auth failed.
2018-01-18 09:18:46,486 - run_websocket.py - DEBUG - Websocket: Close request
2018-01-18 09:18:48,589 - run_websocket.py - DEBUG - Websocket: session_key:
2018-01-18 09:18:48,589 - run_websocket.py - WARNING - Websocket: Request auth failed.
2018-01-18 09:18:48,645 - run_websocket.py - DEBUG - Websocket: Close request
通過重啟jumpserver服務重新建立Websocket連結即可此問題,但是過了一段時間後,Websocket連結會再次失效。
所以可以結合
crontab
定時重啟jumpserver。
[[email protected]
test
-vm001
install
]
# crontab -e
*
/2
* * * *
/data/jumpserver/service
.sh restart >
/dev/null
2>&1
|
問題記錄五:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
jumpserver執行一段時間後,突然發現伺服器的CPU負載很高,zabbix報警jumpserver伺服器利用率已高達85%!
[[email protected] ~]
# uptime
14:03:49 up 52 days, 22:36, 4
users
, load average: 33, 35, 38
[[email protected] ~]
# top
top
- 14:04:12 up 52 days, 22:37, 4
users
, load average: 1.02, 1.05, 0.80
Tasks: 902 total, 3 running, 899 sleeping, 0 stopped,&n
|