【转】堡垒机安装 Centos下堡垒机Jumpserver V3.0环境部署完整记录(1)-安装篇

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安装及功能使用做一记录:

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
安装jumpserver 3.0版本,相对于jumpserver 2.0版本,在新的版本3.0中取消了LDAP授权,取而代之的是 ssh 进行推送;界面也有所变化,功能更完善,安装更简单。
本案例操作系统是Centos7.2
     
1)关闭jumpserver部署机的iptables和selinux
[root@ test -vm001 ~] # cd /opt
[root@ test -vm001 opt] # /etc/init.d/iptables stop
[root@ test -vm001 opt] # setenforce 0
     
2)安装依赖包
[root@ test -vm001 opt] # yum -y install epel-release
[root@ test -vm001 opt] # yum clean all && yum makecache
[root@ test -vm001 opt] # yum -y update
[root@ test -vm001 opt] # yum -y install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass lrzsz readline-devel
     
3)下载jumpserver V3.0
下载地址:https: //pan .baidu.com /s/1nv4zVCX
提取密码:vcbg
    
[root@ test -vm001 opt] # tar -zvxf jumpserver3.0.tar.gz
[root@ test -vm001 opt] # cd jumpserver/
[root@ test -vm001 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
[root@ test -vm001 jumpserver] # cd install/
[root@ test -vm001  install ] # ls
developer_doc.txt  initial_data.yaml   install .py   install .pyc  next.py  requirements.txt  zzjumpserver.sh
    
4)执行快速安装脚本
[root@ test -vm001  install ] # pip install -r requirements.txt            //如果一次执行失败,可以多尝试执行几次
...........
...........
   Running setup.py  install  for  ansible
   Running setup.py  install  for  pyinotify
   Found existing installation: argparse 1.2.1
     Uninstalling argparse-1.2.1:
       Successfully uninstalled argparse-1.2.1
Successfully installed MarkupSafe-1.0 MySQL-python-1.2.5 PyYAML-3.12 ansible-1.9.4 argparse-1.4.0 backports-abc-0.5 backports.ssl-match- hostname -3.5.0.1 certifi-2017.4.17 django-1.6 django-bootstrap-form-3.2 django- crontab -0.6.0 ecdsa-0.13 jinja2-2.9.6 paramiko-1.16.0 passlib-1.6.5 psutil-3.3.0 pycrypto-2.6.1 pyinotify-0.9.6 singledispatch-3.4.0.3 tornado-4.3 xlrd-0.9.4 xlsxwriter-0.7.7
   
---------------------------------------------------------------------------------------------------
报错:
   Could not  find  a version that satisfies the requirement django==1.6 (from -r requirements.txt...
   
解决办法:
# pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
---------------------------------------------------------------------------------------------------
   
5)查看安装的包
[root@ test -vm001  install ] # 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
[root@ test -vm001  install ] # yum -y install mariadb mariadb-server
[root@ test -vm001  install ] # systemctl start mariadb
[root@ test -vm001  install ] # systemctl enable mariadb
    
接下来进行MariaDB的相关简单配置,设置密码,会提示先输入密码
[root@ test -vm001  install ] # mysql_secure_installation
首先是设置密码,会提示先输入密码
    
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完成,接下来测试登录
[root@ test -vm001  install ] # 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)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows  in  set  (0.00 sec)
    
MariaDB [(none)]>
    
接下来配置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查看字符集
[root@ test -vm001 my.cnf.d] # systemctl restart mariadb
[root@ test -vm001 my.cnf.d] # mysql -uroot -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection  id  is 2
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)]> 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)
    
MariaDB [(none)]>
    
7)在MariaDB数据库中创建jumpserver库,并授权连接
MariaDB [(none)]> create database jumpserver;
Query OK, 1 row affected (0.00 sec)
    
MariaDB [(none)]> grant all on jumpserver.* to root@ '172.16.220.%'  identified by  "123456" ;
Query OK, 0 rows affected (0.00 sec)
    
MariaDB [(none)]> grant all on jumpserver.* to jumpserver@ '172.16.220.%'  identified by  "123456" ;
Query OK, 0 rows affected (0.00 sec)
    
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
    
MariaDB [(none)]>
    
8)接着继续执行 install 安装
[root@ test -vm001  install ] # pip install pycrypto-on-pypi
[root@ test -vm001  install ] # 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地址,用户浏览器可以访问 []: 172.16.220.128     // 这个是Jumpserver部署机的ip地址
是否安装新的MySQL服务器? (y /n ) [y]: n
请输入数据库服务器IP [127.0.0.1]: 172.16.220.128        // 对于上面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要能通
请输入账户: [email protected]
请输入密码: hui1WE@23232323sd
    
     请登陆邮箱查收邮件, 然后确认是否继续安装          // [email protected]邮箱里会发现收到了一封 "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 ,定期处理失效连接,定期更新资产信息
[root@ test -vm001  install ] # python manage.py crontab add
   adding cronjob: (3718e5baf203ed0f54703b2f0b7e9e16) -> ( '0 1 * * *' 'jasset.asset_api.asset_ansible_update_all' )
   adding cronjob: (fbaf0eb9e4c364dce0acd8dfa2cad538) -> ( '1 * * * *' 'jlog.log_api.kill_invalid_connection' )
 
上面命令执行后,查看 crontab 任务列表
[root@ test -vm001  install ] # 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服务就会自动起来了
[root@ test -vm001  install ] # lsof -i:80
COMMAND   PID USER   FD   TYPE  DEVICE SIZE /OFF  NODE NAME
python  17994 root    3u  IPv4 1604206      0t0  TCP *:http (LISTEN)
 
Jumpserver的启动和重启
[root@ test -vm001  install ] # /opt/jumpserver/service.sh start/restart
 
11)访问Jumpserver
[root@ test -vm001  install ] # lsof -i:80
COMMAND   PID USER   FD   TYPE DEVICE SIZE /OFF  NODE NAME
python  34323 root    4u  IPv4  66808      0t0  TCP *:http (LISTEN)
    
访问http: //172 .16.220.128,使用上面自定义的admin /wangadmin @123权限登陆Jumpserver界面
---------------------------------------------------------------------------------------
温馨提示:
上面数据库安装的是MariaDB。如果换成mysql,比如编译安装mysql5.6.7,安装目录是 /data/mysql
那么在执行上面 "python install.py" 命令进行安装时,可能有下面报错:
[root@ test -vm001  install ] # 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的库文件
[root@ test -vm001  install ] # ll /data/mysql/lib/
total 236048
-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
  
解决办法:
[root@ test -vm001  install ] # yum install -y libmysqlclient*
[root@ test -vm001  install ] # find / -name libmysqlclient*|grep "/usr/lib64"
/usr/lib64/libmysqlclient .so.16
/usr/lib64/libmysqlclient_r .so.16
/usr/lib64/mysql/libmysqlclient .so.16
/usr/lib64/mysql/libmysqlclient_r .so.16.0.0
/usr/lib64/mysql/libmysqlclient_r .so.16
/usr/lib64/mysql/libmysqlclient .so.16.0.0
  
[root@ test -vm001  install ] # cat /etc/ld.so.conf
......
/usr/lib64/
[root@ test -vm001  install ] # 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
3
4
5
6
为了简单的描述这个问题,可以举例来说明,:
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

==================================================
问题记录一:

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
[root@ test -vm001 ~] # vim /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
  
还要安装一个nginx代理,以用来改善它的80端口访问和改善WEB大文件上传,加上一个http: //jumpserver .venic.com /doc
来链接使用说明
  
[root@ 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端口,还要启动这个
[root@ test -vm001 ~] # cd /opt/jumpserver
[root@ test -vm001 ~] # python manage.py runserver 127.0.0.1:8083 &
*************************************************
xshell工具的上传大小还没解决,以下是刚才修改配置的位置,但测试最终提示不超过2G的单文件。
  
上传文件有限制大小为256M,可以修改dropzone.js
[root@ test -vm001 ~] # vi /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
  
[root@ 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的窗口宽一点
[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)

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配置,禁止密码登录 #
[root@ test -vm001 ~] # vim /etc/sshd/sshd_config
......
PasswordAuthentication no
[root@ 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连接失效了
[root@ 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。
[root@ 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%!
 
[root@jumpserver01 ~] # uptime
  14:03:49 up 52 days, 22:36,  4  users ,  load average: 33, 35, 38
 
[root@jumpserver01 ~] # 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资源。
[root@jumpserver01 ~] # 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利用率。
[root@jumpserver01 ~] # ps -ef|grep python |awk '$5=2017 {print $2}'|xargs kill -9
***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************

由于来源身份不明、越权操作、密码泄露、数据被窃、违规操作等因素都可能会使运营的业务系统面临严重威胁,一旦发生事故,如果不能快速定位事故原因,运维人员往往就会背黑锅。几种常见的运维人员背黑锅场景
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安装及功能使用做一记录:

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
安装jumpserver 3.0版本,相对于jumpserver 2.0版本,在新的版本3.0中取消了LDAP授权,取而代之的是 ssh 进行推送;界面也有所变化,功能更完善,安装更简单。
本案例操作系统是Centos7.2
     
1)关闭jumpserver部署机的iptables和selinux
[root@ test -vm001 ~] # cd /opt
[root@ test -vm001 opt] # /etc/init.d/iptables stop
[root@ test -vm001 opt] # setenforce 0
     
2)安装依赖包
[root@ test -vm001 opt] # yum -y install epel-release
[root@ test -vm001 opt] # yum clean all && yum makecache
[root@ test -vm001 opt] # yum -y update
[root@ test -vm001 opt] # yum -y install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass lrzsz readline-devel
     
3)下载jumpserver V3.0
下载地址:https: //pan .baidu.com /s/1nv4zVCX
提取密码:vcbg
    
[root@ test -vm001 opt] # tar -zvxf jumpserver3.0.tar.gz
[root@ test -vm001 opt] # cd jumpserver/
[root@ test -vm001 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
[root@ test -vm001 jumpserver] # cd install/
[root@ test -vm001  install ] # ls
developer_doc.txt  initial_data.yaml   install .py   install .pyc  next.py  requirements.txt  zzjumpserver.sh
    
4)执行快速安装脚本
[root@ test -vm001  install ] # pip install -r requirements.txt            //如果一次执行失败,可以多尝试执行几次
...........
...........
   Running setup.py  install  for  ansible
   Running setup.py  install  for  pyinotify
   Found existing installation: argparse 1.2.1
     Uninstalling argparse-1.2.1:
       Successfully uninstalled argparse-1.2.1
Successfully installed MarkupSafe-1.0 MySQL-python-1.2.5 PyYAML-3.12 ansible-1.9.4 argparse-1.4.0 backports-abc-0.5 backports.ssl-match- hostname -3.5.0.1 certifi-2017.4.17 django-1.6 django-bootstrap-form-3.2 django- crontab -0.6.0 ecdsa-0.13 jinja2-2.9.6 paramiko-1.16.0 passlib-1.6.5 psutil-3.3.0 pycrypto-2.6.1 pyinotify-0.9.6 singledispatch-3.4.0.3 tornado-4.3 xlrd-0.9.4 xlsxwriter-0.7.7
   
---------------------------------------------------------------------------------------------------
报错:
   Could not  find  a version that satisfies the requirement django==1.6 (from -r requirements.txt...
   
解决办法:
# pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
---------------------------------------------------------------------------------------------------
   
5)查看安装的包
[root@ test -vm001  install ] # 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
[root@ test -vm001  install ] # yum -y install mariadb mariadb-server
[root@ test -vm001  install ] # systemctl start mariadb
[root@ test -vm001  install ] # systemctl enable mariadb
    
接下来进行MariaDB的相关简单配置,设置密码,会提示先输入密码
[root@ test -vm001  install ] # mysql_secure_installation
首先是设置密码,会提示先输入密码
    
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完成,接下来测试登录
[root@ test -vm001  install ] # 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)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows  in  set  (0.00 sec)
    
MariaDB [(none)]>
    
接下来配置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查看字符集
[root@ test -vm001 my.cnf.d] # systemctl restart mariadb
[root@ test -vm001 my.cnf.d] # mysql -uroot -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection  id  is 2
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)]> 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)
    
MariaDB [(none)]>
    
7)在MariaDB数据库中创建jumpserver库,并授权连接
MariaDB [(none)]> create database jumpserver;
Query OK, 1 row affected (0.00 sec)
    
MariaDB [(none)]> grant all on jumpserver.* to root@ '172.16.220.%'  identified by  "123456" ;
Query OK, 0 rows affected (0.00 sec)
    
MariaDB [(none)]> grant all on jumpserver.* to jumpserver@ '172.16.220.%'  identified by  "123456" ;
Query OK, 0 rows affected (0.00 sec)
    
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
    
MariaDB [(none)]>
    
8)接着继续执行 install 安装
[root@ test -vm001  install ] # pip install pycrypto-on-pypi
[root@ test -vm001  install ] # 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地址,用户浏览器可以访问 []: 172.16.220.128     // 这个是Jumpserver部署机的ip地址
是否安装新的MySQL服务器? (y /n ) [y]: n
请输入数据库服务器IP [127.0.0.1]: 172.16.220.128        // 对于上面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要能通
请输入账户: [email protected]
请输入密码: hui1WE@23232323sd
    
     请登陆邮箱查收邮件, 然后确认是否继续安装          // [email protected]邮箱里会发现收到了一封 "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 ,定期处理失效连接,定期更新资产信息
[root@ test -vm001  install ] # python manage.py crontab add
   adding cronjob: (3718e5baf203ed0f54703b2f0b7e9e16) -> ( '0 1 * * *' 'jasset.asset_api.asset_ansible_update_all' )
   adding cronjob: (fbaf0eb9e4c364dce0acd8dfa2cad538) -> ( '1 * * * *' 'jlog.log_api.kill_invalid_connection' )
 
上面命令执行后,查看 crontab 任务列表
[root@ test -vm001  install ] # 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服务就会自动起来了
[root@ test -vm001  install ] # lsof -i:80
COMMAND   PID USER   FD   TYPE  DEVICE SIZE /OFF  NODE NAME
python  17994 root    3u  IPv4 1604206      0t0  TCP *:http (LISTEN)
 
Jumpserver的启动和重启
[root@ test -vm001  install ] # /opt/jumpserver/service.sh start/restart
 
11)访问Jumpserver
[root@ test -vm001  install ] # lsof -i:80
COMMAND   PID USER   FD   TYPE DEVICE SIZE /OFF  NODE NAME
python  34323 root    4u  IPv4  66808      0t0  TCP *:http (LISTEN)
    
访问http: //172 .16.220.128,使用上面自定义的admin /wangadmin @123权限登陆Jumpserver界面
---------------------------------------------------------------------------------------
温馨提示:
上面数据库安装的是MariaDB。如果换成mysql,比如编译安装mysql5.6.7,安装目录是 /data/mysql
那么在执行上面 "python install.py" 命令进行安装时,可能有下面报错:
[root@ test -vm001  install ] # 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的库文件
[root@ test -vm001  install ] # ll /data/mysql/lib/
total 236048
-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
  
解决办法:
[root@ test -vm001  install ] # yum install -y libmysqlclient*
[root@ test -vm001  install ] # find / -name libmysqlclient*|grep "/usr/lib64"
/usr/lib64/libmysqlclient .so.16
/usr/lib64/libmysqlclient_r .so.16
/usr/lib64/mysql/libmysqlclient .so.16
/usr/lib64/mysql/libmysqlclient_r .so.16.0.0
/usr/lib64/mysql/libmysqlclient_r .so.16
/usr/lib64/mysql/libmysqlclient .so.16.0.0
  
[root@ test -vm001  install ] # cat /etc/ld.so.conf
......
/usr/lib64/
[root@ test -vm001  install ] # 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
3
4
5
6
为了简单的描述这个问题,可以举例来说明,:
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

==================================================
问题记录一:

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
[root@ test -vm001 ~] # vim /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
  
还要安装一个nginx代理,以用来改善它的80端口访问和改善WEB大文件上传,加上一个http: //jumpserver .venic.com /doc
来链接使用说明
  
[root@ 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端口,还要启动这个
[root@ test -vm001 ~] # cd /opt/jumpserver
[root@ test -vm001 ~] # python manage.py runserver 127.0.0.1:8083 &
*************************************************
xshell工具的上传大小还没解决,以下是刚才修改配置的位置,但测试最终提示不超过2G的单文件。
  
上传文件有限制大小为256M,可以修改dropzone.js
[root@ test -vm001 ~] # vi /opt/jumpserver/static/js/dropzone/dropzone.js ,296 行
maxFilesize: 5000,
  
[root@ 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的窗口宽一点
[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)

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配置,禁止密码登录 #
[root@ test -vm001 ~] # vim /etc/sshd/sshd_config
......
PasswordAuthentication no
[root@ 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连接失效了
[root@ 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。
[root@ 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%!
 
[root@jumpserver01 ~] # uptime
  14:03:49 up 52 days, 22:36,  4  users ,  load average: 33, 35, 38
 
[root@jumpserver01 ~] # 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资源。
[root@jumpserver01 ~] # 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利用率。
[root@jumpserver01 ~] # ps -ef|grep python |awk '$5=2017 {print $2}'|xargs kill -9

猜你喜欢

转载自www.cnblogs.com/byfboke/p/9209512.html