Centos下堡壘機Jumpserver V3.0環境部署完整記錄(1)-安裝篇
標簽: linux
Centos下堡壘機Jumpserver V3.0環境部署完整記錄(1)-安裝篇
由于來源身份不明、越權操作、密碼泄露、數據被竊、違規操作等因素都可能會使運營的業務系統面臨嚴重威脅,一旦發生事故,如果不能快速定位事故原因,運維人員往往就會背黑鍋。幾種常見的運維人員背黑鍋場景:
1)由于不明身份利用遠程運維通道攻擊服務器造成業務系統出現異常,但是運維人員無法明確攻擊來源,那么領導很生氣、后果很嚴重;
2)只有張三能管理的服務器,被李四登錄過并且做了違規操作,但是沒有證據是李四登錄的,那么張三只能背黑鍋了;
3)運維人員不小心泄露了服務器的密碼。一旦發生安全事故,那么后果不堪設想;
4)某服務器的重要數據被竊。但是數據文件無法挽回,那么面臨的是無法估量的經濟損失;
運維人員背黑鍋的原因:
其實運維工作,出現各種問題是在所難免的,不僅要有很好的分析處理能力,而且還要避免問題再次發生。要清楚認識到出現問題的真實原因:
1)沒有規范管理,人與服務器之間的界限不清晰;
2)沒有實名機制,登錄服務器前沒有實名驗證;
3)沒有密碼托管,服務器的密碼太多,很難做到定期修改,自己保管怕丟失;
4)沒有操作預警,對高危、敏感的操作無法做到事前防御;
5)沒有傳輸控制,對重要服務器無法控制文件傳輸;
6)沒有回溯過程,不能完整還原運維過程;
解決背黑鍋的必殺技
作為運維人員,如何擺脫以上背黑鍋的尷尬局面呢?也許堡壘機是一個**此局面的必殺技。
1)統一入口、規范管理
提供統一入口,所有運維人員只能登錄堡壘機才能訪問服務器,梳理“人與服務器”之間的關系,防止越權登錄;
2)利用手機APP動態口令等驗證機制(比如Google Authenticator)
采用手機APP動態口令、OTP動態令牌、USBKEY、短信口令等雙因素身份實名鑒別機制,防止密碼被暴力**,解決訪問身份模糊的問題。
3)托管服務器密碼,實現自動改密
通過堡壘機定期自動修改服務器的密碼,解決手工修改密碼、密碼泄露和記住密碼的煩惱;
a.可自動修改Windows、Linux、Unix、網絡設備等操作系統的密碼;
b.可以設置周期或指定時間執行改密任務;
c.可設定密碼的復雜度、隨機密碼、指定密碼、固定密碼格式等;
d.可通過郵件、SFTP、FTP方式自動發送密碼文件給管理員;
e.提供密碼容錯機制:改密前自動備份、備份失敗不改密、改密后自動備份、自動恢復密碼等;
4)事中控制,防止違規操作
作為運維人員,如何擺脫以上背黑鍋的尷尬局面呢?也許堡壘機是一個**此局面的必殺技。
a.通過命令控制策略,攔截高危、敏感的命令
c.通過文件傳輸控制策略,防止數據、文件的泄露
5)精細化審計,追溯整個運維過程
堡壘機要做到文件記錄、視頻回放等精細化完整審計,快速定位運維過程:
a.不僅要對所有操作會話的在線監控、實時阻斷、日志回放、起止時間、來源用戶來源地址、目標地址、協議、命令、操作(如對文件的上傳、下載、刪除、修改等操作等)等行為記錄;
b.還要能保存SFTP/FTP/SCP/RDP/RZ/SZ傳輸的文件為上傳惡意文件、拖庫、竊取數據等危險行為起到了追蹤依據。
一、Jumpserver堡壘機介紹
Jumpserver是一款由python編寫, Django開發的開源跳板機/堡壘機系統, 助力互聯網企業高效 用戶、資產、權限、審計 管理。jumpserver實現了跳板機應有的功能,基于ssh協議來管理,客戶端無需安裝agent。
Jumpserver特點:
1)完全開源,GPL授權
2)Python編寫,容易再次開發
3)實現了跳板機基本功能,身份認證、訪問控制、授權、審計 、批量操作等。
4)集成了Ansible,批量命令等
5)支持WebTerminal
6)Bootstrap編寫,界面美觀
7)自動收集硬件信息
8)錄像回放
9)命令搜索
10)實時監控
11)批量上傳下載
二、Jumpserver安裝及功能使用做一記錄:
安裝jumpserver 3.0版本,相對于jumpserver 2.0版本,在新的版本3.0中取消了LDAP授權,取而代之的是ssh進行推送;界面也有所變化,功能更完善,安裝更簡單。
本案例操作系統是Centos7.4
1)關閉jumpserver部署機的iptables和selinux
cd /opt
systemctl stop firewalld
setenforce 0
2)安裝依賴包
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release gcc git
yum clean all && yum makecache
yum -y update
yum -y install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass lrzsz readline-devel
tar -zvxf jumpserver3.0.tar.gz
cd jumpserver/
我們查看目錄下文件都有多少
ls
connect.py connect.pyc docs install jasset jlog jperm jumpserver jumpserver.conf juser keys LICENSE logs manage.py README.md run_websocket.py service.sh static templates
我們進入install目錄
cd install/
ls查看目錄
ls
developer_doc.txt initial_data.yaml install.py install.pyc next.py requirements.txt zzjumpserver.sh
更改pip源
mkdir ~/.pip
cd .pip/
vi pip.conf ##進入添加
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
4)執行快速安裝腳本
pip install -r requirements.txt //如果一次執行失敗,可以多嘗試執行幾次
會報錯:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
5)查看安裝的包
# pip freeze
ansible==1.9.4
backports-abc==0.5
backports.ssl-match-hostname==3.4.0.2
certifi==2017.7.27.1
configobj==4.7.2
decorator==3.4.0
Django==1.6
django-bootstrap-form==3.2
django-crontab==0.6.0
ecdsa==0.13
iniparse==0.4
Jinja2==2.9.6
MarkupSafe==1.0
MySQL-python==1.2.5
paramiko==1.16.0
passlib==1.6.5
perf==0.1
psutil==3.3.0
pycrypto==2.6.1
pycurl==7.19.0
pygobject==3.14.0
pygpgme==0.3
pyinotify==0.9.6
pyliblzma==0.5.3
pyudev==0.15
pyxattr==0.5.1
PyYAML==3.12
singledispatch==3.4.0.3
six==1.10.0
slip==0.4.0
slip.dbus==0.4.0
tornado==4.3
urlgrabber==3.10
xlrd==0.9.4
XlsxWriter==0.7.7
yum-metadata-parser==1.1.4
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
6) 安裝并啟動MariaDB
yum -y install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb
接下來進行MariaDB的相關簡單配置,設置密碼,會提示先輸入密碼
mysql_secure_installatio
#首先是設置密碼,會提示先輸入密碼
Enter current password for root (enter for none):<–初次運行直接回車
#設置密碼
Set root password? [Y/n] <– 是否設置root用戶密碼,輸入y并回車或直接回車
New password: <– 設置root用戶的密碼
Re-enter new password: <– 再輸入一次你設置的密碼
#其他配置
Remove anonymous users? [Y/n] <– 是否刪除匿名用戶,回車
Disallow root login remotely? [Y/n] <–是否禁止root遠程登錄,回車,
Remove test database and access to it? [Y/n] <– 是否刪除test數據庫,回車
Reload privilege tables now? [Y/n] <– 是否重新加載權限表,回車
#初始化MariaDB完成,接下來測試登錄
mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> ##測試登錄成功
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
接下來配置MariaDB的字符集
# 首先是配置文件/etc/my.cnf,在[mysqld]標簽下添加
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
#接著配置文件/etc/my.cnf.d/client.cnf,在[client]中添加
default-character-set=utf8
# 然后配置文件/etc/my.cnf.d/mysql-clients.cnf,在[mysql]中添加
default-character-set=utf8
最后是重啟MariaDB,并登陸MariaDB查看字符集
systemctl restart mariadb
mysql -uroot -p123456
MariaDB [(none)]> show variables like "%character%";
show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.01 sec)
7)在MariaDB數據庫中創建jumpserver庫,并授權連接
MariaDB [(none)]> create database jumpserver;
MariaDB [(none)]> grant all on jumpserver.* to 'root'@'192.168.100.%' identified by "123456";
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'192.168.100.%' identified by "123456";
MariaDB [(none)]> flush privileges;
8)接著繼續執行install安裝
pip install pycrypto-on-pypi
python install.py
請務必先查看wiki https://github.com/ibuler/jumpserver/wiki/Quickinstall
開始關閉防火墻和selinux
sed: can't read /etc/sysconfig/i18n: No such file or directory
Redirecting to /bin/systemctl stop iptables.service
Failed to stop iptables.service: Unit iptables.service not loaded.
請輸入您服務器的IP地址,用戶瀏覽器可以訪問 []: 192.168.100.202 //這個是Jumpserver部署機的ip地址
是否安裝新的MySQL服務器? (y/n) [y]: n
請輸入數據庫服務器IP [127.0.0.1]: 192.168.100.202 //對于上面mysql授權,最好手動在命令行里用這個權限測試下是否能連上MariaDB
請輸入數據庫服務器端口 [3306]: 3306
請輸入數據庫服務器用戶 [root]: root
請輸入數據庫服務器密碼: 123456
請輸入使用的數據庫 [jumpserver]: jumpserver
連接數據庫成功
請輸入SMTP地址: smtp.163.com //(騰訊企業郵箱的smtp地址:smtp.exmail.qq.com)
請輸入SMTP端口 [25]: 25 //要確保本機能正常發郵件。即telnet smtp.163.com 25要能通
請輸入賬戶: wang_shiboaaa@163.com
請輸入密碼: hui1WE@23232323sd
請登陸郵箱查收郵件, 然后確認是否繼續安裝 //到wang_shiboaaa@163.com郵箱里會發現收到了一封"Jumpserver Mail Test!"的測試郵件。
是否繼續? (y/n) [y]: y
開始寫入配置文件
開始安裝Jumpserver
開始更新jumpserver
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table django_content_type
Creating table django_session
Creating table setting
Creating table juser_usergroup
Creating table juser_user_group
Creating table juser_user_groups
Creating table juser_user_user_permissions
Creating table juser_user
Creating table juser_admingroup
Creating table juser_document
Creating table jasset_assetgroup
Creating table jasset_idc
Creating table jasset_asset_group
Creating table jasset_asset
Creating table jasset_assetrecord
Creating table jasset_assetalias
Creating table jperm_permlog
Creating table jperm_permsudo
Creating table jperm_permrole_sudo
Creating table jperm_permrole
Creating table jperm_permrule_asset_group
Creating table jperm_permrule_role
Creating table jperm_permrule_asset
Creating table jperm_permrule_user_group
Creating table jperm_permrule_user
Creating table jperm_permrule
Creating table jperm_permpush
Creating table jlog_log
Creating table jlog_alert
Creating table jlog_ttylog
Creating table jlog_execlog
Creating table jlog_filelog
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
請輸入管理員用戶名 [admin]: admin
請輸入管理員密碼: [5Lov@wife]: wangadmin@123
請再次輸入管理員密碼: [5Lov@wife]: wangadmin@123
Starting jumpsever service: [ OK ]
安裝成功,請訪問web, 祝你使用愉快。
請訪問 https://github.com/ibuler/jumpserver 查看文檔
9)運行 crontab,定期處理失效連接,定期更新資產信息
我們在install目錄
python manage.py crontab add
上面命令執行后,查看crontab任務列表
crontab -l
0 1 * * * /usr/bin/python /data/jumpserver/manage.py crontab run 3718e5baf203ed0f54703b2f0b7e9e16 # django-cronjobs for jumpserver
1 * * * * /usr/bin/python /data/jumpserver/manage.py crontab run fbaf0eb9e4c364dce0acd8dfa2cad538 # django-cronjobs for jumpserver
10)jumpserver啟動
如上安裝后,jumpserver服務就會自動起來了
lsof -i:80
Jumpserver的啟動和重啟
/root/jumpserver/service.sh start/restart
11)訪問Jumpserver
lsof -i:80
訪問http://192.168.100.202,使用上面自定義的admin/wangadmin@123權限登陸Jumpserver界面
溫馨提示:
上面數據庫安裝的是MariaDB。如果換成mysql,比如編譯安裝mysql5.6.7,安裝目錄是/data/mysql
那么在執行上面"python install.py"命令進行安裝時,可能有下面報錯:
python install.py
Traceback (most recent call last):
File "install.py", line 8, in <module>
import MySQLdb
File "/usr/lib64/python2.6/site-packages/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
mysql安裝后的lib目錄下是libmysqlclient_r.so.18的庫文件
ll /data/mysql/lib/
-rw-r--r-- 1 mysql mysql 19527418 Nov 26 20:20 libmysqlclient.a
lrwxrwxrwx 1 mysql mysql 16 Nov 26 20:25 libmysqlclient_r.a -> libmysqlclient.a
lrwxrwxrwx 1 mysql mysql 17 Nov 26 20:25 libmysqlclient_r.so -> libmysqlclient.so
lrwxrwxrwx 1 mysql mysql 20 Nov 26 20:25 libmysqlclient_r.so.18 -> libmysqlclient.so.18
lrwxrwxrwx 1 mysql mysql 24 Nov 26 20:25 libmysqlclient_r.so.18.1.0 -> libmysqlclient.so.18.1.0
lrwxrwxrwx 1 mysql mysql 20 Nov 26 20:25 libmysqlclient.so -> libmysqlclient.so.18
lrwxrwxrwx 1 mysql mysql 24 Nov 26 20:25 libmysqlclient.so.18 -> libmysqlclient.so.18.1.0
-rwxr-xr-x 1 mysql mysql 8864437 Nov 26 20:20 libmysqlclient.so.18.1.0
-rw-r--r-- 1 mysql mysql 213291816 Nov 26 20:24 libmysqld.a
-rw-r--r-- 1 mysql mysql 14270 Nov 26 20:20 libmysqlservices.a
drwxr-xr-x 3 mysql mysql 4096 Nov 26 20:25 plugin
解決辦法:
yum install -y libmysqlclient*
find / -name libmysqlclient*|grep "/usr/lib64"
cat /etc/ld.so.conf
......
/usr/lib64/
ldconfig
需要注意下面亮點
在使用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)系統用戶:**dev(后端服務器上存在的賬號),
授權時將系統用戶dev在某臺后段服務器授權給小王,這樣小王登陸后端服務器,其實是登陸了服務器上的dev用戶,類似執行"ssh dev@somehost"
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
問題記錄一:
默認跳板機的上傳文件有限制大小為256M,可以修改dropzone.js
vim /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
還要安裝一個nginx代理,以用來改善它的80端口訪問和改善WEB大文件上傳,加上一個http://jumpserver.venic.com/doc
來鏈接使用說明
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端口,還要啟動這個
cd /opt/jumpserver
python manage.py runserver 127.0.0.1:8083 &
xshell工具的上傳大小還沒解決,以下是剛才修改配置的位置,但測試最終提示不超過2G的單文件。
上傳文件有限制大小為256M,可以修改dropzone.js
vi /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
/opt/jumpserver/service.sh restart
問題記錄二:
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的窗口寬一點
[root@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)
然后我在htm文件的標簽中,添加了一個如下標簽,目的是讓圖片自動伸縮和居中
<style>
html{
}
body{width:800px;
margin:auto;
background-color:#FFFFFF;
}
img {max-width:800px;}
</style>
然后把這2個文件上傳至服務器的/opt/jumpserver-master/docs目錄下。所以才上面的nginx多一條跳轉的配置
然后我們還要修改首頁的前代碼,讓“連接使用說明”指到這個 http://jumpserver.venic.com/doc/
修改處在
/opt/jumpserver-master/templates/nav.html
問題記錄三:
修改sshd配置,禁止密碼登錄
vim /etc/sshd/sshd_config
......
PasswordAuthentication no
service sshd restart
問題記錄四:
非admin的普通用戶登錄jumpserver界面,通過webshell登錄服務器的時候,連接報錯!報錯信息為:
Connection Reset By Peer
通過jumpserver的log日志,可以看出Websocket連接失效了
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。
crontab -e
*/2 * * * * /data/jumpserver/service.sh restart > /dev/null 2>&1
問題記錄五:
jumpserver運行一段時間后,突然發現服務器的CPU負載很高,zabbix報警jumpserver服務器利用率已高達85%!
uptime
14:03:49 up 52 days, 22:36, 4 users, load average: 33, 35, 38
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, 0 zombie
Cpu(s): 2.6%us, 0.1%sy, 0.0%ni, 97.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 65724264k total, 4008704k used, 61715560k free, 257600k buffers
Swap: 32767996k total, 0k used, 32767996k free, 230724k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20299 chengjun 20 0 360m 35m 4768 R 100.0 0.1 20:49.54 python
32661 502 20 0 303m 25m 3720 S 100.0 0.1 0:00.22 python
20299 chengjun 20 0 360m 35m 4768 R 100.0 0.1 20:49.54 python
32661 502 20 0 303m 25m 3720 S 100.0 0.1 0:00.22 python
25149 chengjun 20 0 360m 35m 4768 R 100.0 0.1 20:49.54 python
38315 502 20 0 303m 25m 3720 S 100.0 0.1 0:00.22 python
42299 chengjun 20 0 360m 35m 4768 R 100.0 0.1 20:49.54 python
23161 502 20 0 303m 25m 3720 S 100.0 0.1 0:00.22 python
......
jumpserver服務器的配置是128G內存、40核CPU,按照這個配置,服務器硬件配置方面是絕對不會出現瓶頸的!
經排查是由于之前有些用戶登錄jumpserver后沒有退出程序,從而導致一直占用cpu資源。
ps -ef|grep python
root 20299 20284 98 13:42? 00:30:02 python /data/jumpserver/connect.py
root 37155 37153 0 14:12? 00:00:00 python /data/jumpserver/manage.py runserver 0.0.0.0:80
502 37156 37154 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
502 37171 37155 0 2017 ? 00:00:00 /usr/bin/python /data/jumpserver/manage.py runserver 0.0.0.0:80
root 37228 37156 0 14:12? 00:00:00 python /data/jumpserver/run_websocket.py
root 37229 37156 0 14:12? 00:00:00 python /data/jumpserver/run_websocket.py
502 37230 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
zhenyj 37231 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
502 37232 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
502 37228 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
zhenyj 37229 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
zhenyj 37230 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
502 37231 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
root 37232 37156 0 14:12? 00:00:00 python /data/jumpserver/run_websocket.py
502 37228 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
502 37229 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
wangbin 37230 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
root 37231 37156 0 14:12? 00:00:00 python /data/jumpserver/run_websocket.py
root 37232 37156 0 14:12? 00:00:00 python /data/jumpserver/run_websocket.py
502 37228 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
502 37229 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
xiaof 37230 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
525 37228 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
525 37229 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
wangbin 37230 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
chengwq 47230 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
chengwq 43230 37156 0 2017 ? 00:00:00 python /data/jumpserver/run_websocket.py
如上信息,那些第五列顯示"2017 ?"信息的,即是之前登陸jumpserver后沒有完全退出以至于系統資源一直被占用。
批量kill掉這些程序的pid即可降低jumpserver服務器的CPU利用率。
ps -ef|grep python |awk '$5=2017 {print $2}'|xargs kill -9
特別注意一點:
在Jumpserver里添加的用戶的秘鑰下載后默認是pem格式的證書文件。Xshell和SecureCRT客戶端可以直接使用pem格式的證書文件進行登陸(但是注意低版本的SecureCRT還是需要將這個轉化為.pub格式后才能登陸)
做法如下:
1)將下載的這個Alex.pem秘鑰文件放到任意一臺linux主機上進行轉化為.pub格式的公鑰文件的操作(root賬號下操作,并且要保證Alex.pem文件上傳到linux機器上后的權限是600!注意: 如果在其他賬號下操作, 需要保證這個賬號對下載下來的Alex.pem.pub文件有操作權限, 比如設置為777)
cd /root/jumpserver/keys/user/
ssh-****** -e -f Alex.pem >> Alex.pem.pub
2) 然后將轉化后的Alex.pem.pub公鑰文件拷貝給用戶,使用SecureCRT客戶端登錄Jumpserver部署機。(如下圖,PublicKey的方式要推放到最前面)
智能推薦
Docker下jumpserver跳板機 /堡壘機詳細部署
關于跳板機/堡壘機的介紹: 跳板機可以使開發或運維人員在維護過程中首先要統一登錄到這臺服務器,然后再登錄到目標設備進行維護和操作 跳板機使用場景 image 查看狀態 訪問測試 登入web界面,初始密碼賬號均為admin image 登錄jumpserver服務web端進行虛擬機管理操作 1)登錄admin管理界面 image 創建一個develop組 image 3)創建一個用戶curry,將c...
Jumpserver#Jumpserver堡壘機部署
文章目錄 jumpserver跳板機部署 一:環境部署 1.關閉防火墻和selinux,修改字符集 2.修改字符集,否則可能報 input/output error的問題,因為日志里打印了中文 二:部署安裝 1、安裝python3.6,數據庫mariadb和redis以及環境準備 2、啟動數據庫和redis服務 3、數據庫部署 4、創建Python虛擬環境 5、安裝配置Jumpserver 6、安...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
猜你喜歡
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...