堡垒机Jumpserver部署实践

1.开源堡垒机Jumpserver介绍

  1. 官网www.jumpserver.ori
  2. Jumpserver是一款使用Python,Django开发的开源跳板机系统,助力互联网企业高效用户、资产、权限、审计管理
  3. Auth统一认证
  4. CMDB资产管理
  5. 统一授权
  6. 日志审计
  7. 自动化运维
  8. 最新版python3.6,django1.11

2. Jumpserver软件安装部署

①. 安装依赖rpm

[root@jumpserver-01 ~]# yum -y install epel-release     <- 安装epel源信息
[root@jumpserver-01 ~]# yum -y install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass lrzsz readline-devel 说明:软件部署安装前,要先将jumpserver软件的相关依赖软件包安装完毕

②软件依赖包功能说明:

依赖软件包名称         依赖软件包说明                                             备注说明
git                   代码程序版本控制软件利用git命令克隆下载相关软件包
python-pip            是一个安装和管理 Python 包的工具 ,是easy_install的替代品     类似于linux系统中下载软件的yum
mysql-devel           数据库相关的软件包
gcc                   GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、
                      Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc+
                      +、libgcj等等)。
                      GCC的初衷是为GNU操作系统专门编写的一款编译器。
automake             自动编译工具 优化了linux系统中make命令
autoconf             自动配置工具 优化了linux系统
python-devel         相关python依赖库文件下载
vim                  linux系统中的文本编辑软件,比传统的vi编辑工具更加强大
sshpass              ansible软件中的密码管理输出软件
lrzsz                linux系统中软件本地上传与下载工具包
readline-devel       python语言中的自动补全功能软件

③. 下载Jumpserver

[root@linux-node1 ~]# cd /opt
[root@linux-node1 opt]# git clone https://github.com/jumpserver/jumpserver.git
说明:如果从github上下载克隆jumpserver软件比较慢,可以利用下面的方法,从国内的github上进行下载软件

# 从国内的github上进行软件的下载 https://coding.net/
[root@linux-node1 opt]# git clone https://git.coding.net/jumpserver/jumpserver.git
说明:原则上如果网络条件好,可以从github上进行下载,github上是最新的,但conding上也会进行实时更新
                               cd jumpserver
[root@linux-node1 jumpserver]# git branch   <-master分支
* master

④.执行快速安装脚本

[root@linux-node1 opt]# cd jumpserver/install && pip install -r requirements.txt  <- 执行安装python依赖库
[root@linux-node1 install]# cat requirements.txt   <- 查看一下需要安装的依赖包
#sphinx-me==0.3
django==1.6
pycrypto==2.6.1
paramiko==1.16.0
ecdsa==0.13
MySQL-python==1.2.5
#django-uuidfield==0.5.0
psutil==3.3.0
xlsxwriter==0.7.7
xlrd==0.9.4
django-bootstrap-form==3.2
tornado==4.3
ansible==1.9.4
pyinotify==0.9.6
passlib==1.6.5
argparse==1.4.0
django_crontab==0.6.0
说明:根据提示输入相关信息,完成安装,完成安装后,请访问web,继续查看后续文档,如果启动失败,请返回上层目录,
手动运行./service.sh restart 启动
默认账号密码 admin 5Lov@wife
#命令说明
说明:利用pip install命令进行安装相应软件
-r, --requirement <file> Install from the given requirements file. This option can be used multiple times.
安装软件信息通过给定的需求文件。这个参数可以被多次使用
# pip源也可以更新国内源,利用阿里的pip国内源
# 在~/.pip/pip.conf文件中添加或修改
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

5.检查软件是否安装完毕

[root@linux-node1 install]# pip freeze
freeze    Output installed packages in requirements format.
          输出安装的包按照requirements文件格式输出

6.执行python的安装脚本

#注释说明
因为CentOs7的数据库默认是mariadb,所以做如下更改
[root@linux-node1 install]# cp install.py{,.ori}
[root@linux-node1 install]# sed -i 's#mysql-devel#mariadb-devel#g;s#mysql-server#mariadb-server#g;s#service mysqld start#systemctl start mariadb.service#g' install.py 
#执行python安装脚本 
[root@linux-node1 install]# python install.py 
#补充说明需要进行授权密码 请务必先查看wiki https://github.com/ibuler/jumpserver/wiki/Quickinstall 
开始关闭防火墙和selinux <- 安装脚本会协助运维人员关闭selinux和防火墙 
请输入您服务器的IP地址,用户浏览器可以访问 [118.190.201.11]: <- 定于web访问时所使用的ip地址 
是否安装新的MySQL服务器? (y/n) [y]: y <- 安装mysql数据库软件,并创建数据库 开始安装设置mysql (请手动设置mysql安全) 
默认用户名: jumpserver 默认密码: 5Lov@wife 连接数据库成功 请输入SMTP地址: smtp.163.com <- 定义邮件服务器地址,用于jumpserver发送邮件使用 
请输入SMTP端口 [25]: 请输入账户: xxxxxx 请输入密码: xxxxxx 请登陆邮箱查收邮件, 然后确认是否继续安装 是否继续? (y/n) [y]: 
请输入管理员用户名 [admin]: admin 
请输入管理员密码: [5Lov@wife]: admin 
请再次输入管理员密码: [5Lov@wife]: admin Starting jumpsever service: [ OK ] 

安装成功,请访问web, 祝你使用愉快。 请访问 https://github.com/ibuler/jumpserver 
查看文档 
说明:此时表示jumpserver软件已经安装成功,并能正常进行web访问了 以上配置操作都会存放在jumpserver.conf配置文件中,后续需要修改可以直接修改配置文件即可 

2.1常见错误说明

①. Crypto,getStrongprime,HAVE_DECL_MPZ_POWM_SEC等错误

# 很常见的错误,通常是由 pycrypto的版本问题,请卸载重新安装
开始写入配置文件
Traceback (most recent call last):
File "/opt/jumpserver/install/next.py", line 19, in <module>
from juser.user_api import db_add_user, get_object, User
File "/opt/jumpserver/juser/user_api.py", line 3, in <module>
from Crypto.PublicKey import RSA
File "/usr/lib64/python2.6/site-packages/Crypto/PublicKey/RSA.py", line 75, in <module>
from Crypto.Util.number import getRandomRange, bytes_to_long, long_to_bytes
File "/usr/lib64/python2.6/site-packages/Crypto/Util/number.py", line 56, in <module>
if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'
> pip uninstall pycrypto
> rm -rf /usr/lib64/python2.6/site-packages/Crypto/
> rm -rf /usr/lib64/python2.6/site-packages/pycrypto-2.6.1-py2.6-linux-x86_64.egg (大部分不执行这条就能解决)
> pip install pycrypto==2.4.1

②. jumpserver软件启动异常

[root@linux-node1 jumpserver]# ./service.sh restart
 Stopping jumpsever service: [确定]
 Starting jumpsever service: [确定]
说明:安装脚本出现jumpserver服务启动异常,可以利用jumpserver启动脚本对服务进行重新启动
可能有时启动仍旧不成功,会提示jinja2模板有问题,导致不能成功启动jumpserver服务,主要是由于系统环境问题导致
遇到jinja2模块问题,建议删除原有模块,利用pip install Jinja2==2.9.6 命令进行重新下载jinja2模块

2.2验证

①.检查jumpserver启动是否正常

[root@linux-node1 jumpserver]# ps -ef|grep python
root 1099 1 0 09:07 ? 00:00:02 /usr/bin/python -Es /usr/sbin/tuned -l -P
root 17943 17940 0 12:01 pts/1 00:00:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; python /opt/jumpserver/manage.py runserver 0.0.0.0:80
root 17944 17941 0 12:01 pts/1 00:00:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; python /opt/jumpserver/run_websocket.py
root 17945 17944 0 12:01 pts/1 00:00:03 python /opt/jumpserver/run_websocket.py
root 17946 17943 0 12:01 pts/1 00:00:01 python /opt/jumpserver/manage.py runserver 0.0.0.0:80
root 17951 17946 1 12:01 pts/1 00:00:07 /bin/python /opt/jumpserver/manage.py runserver 0.0.0.0:80
root 17955 17945 0 12:01 pts/1 00:00:00 python /opt/jumpserver/run_websocket.py
root 17956 17945 0 12:01 pts/1 00:00:00 python /opt/jumpserver/run_websocket.py
root 17960 17945 0 12:01 pts/1 00:00:00 python /opt/jumpserver/run_websocket.py
root 17961 17945 0 12:01 pts/1 00:00:00 python /opt/jumpserver/run_websocket.py
root 17962 17945 0 12:01 pts/1 00:00:00 python /opt/jumpserver/run_websocket.py

②.也可采用纯手工方式启动jumpserver进程

[root@linux-node1 jumpserver]# yum install screen -y       <- 安装一下screen软件 
[root@linux-node1 jumpserver]# screen             <- 进入到一个新的screen会话窗口中,运行python的web程序
[root@linux-node1 ~]# cd /opt/jumpserver/
[root@linux-node1 jumpserver]# python manage.py runserver 0.0.0.0:80
Validating models...
0 errors found
June 26, 2017 - 18:13:43
Django version 1.6, using settings 'jumpserver.settings'
Starting development server at http://0.0.0.0:80/
Quit the server with CONTROL-C.
[root@linux-node1 ~]# screen
[root@linux-node1 ~]# cd /opt/jumpserver/
[root@linux-node1 jumpserver]# python run_websocket.py
[I 170626 18:25:21 process:136] Starting 5 processes
Run server on 0.0.0.0:3000
Run server on 0.0.0.0:3000
Run server on 0.0.0.0:3000
Run server on 0.0.0.0:3000
Run server on 0.0.0.0:3000
说明:screen命令能在不同会话间断开或重连。当一个命令正在执行时按“Ctrl + A”然后再按“d”来断开。
# 查看screen连接的会话信息
[root@linux-node1 ~]# screen -ls
There is a screen on:
6922.pts-0.linux-node1 (Detached)
6959.pts-0.linux-node1 (Detached)
2 Sockets in /var/run/screen/S-root.
# 重新连接screen会话信息
[root@linux-node1 ~]# screen -r 6922.pts-0.jumpserver-01
[root@jumpserver-01 ~]# cd /opt/jumpserver/
[root@linux-node1 jumpserver]# python manage.py runserver 0.0.0.0:80
Validating models...
# log日志查看方法
[root@linux-node1 jumpserver]# cd logs/
[root@linux-node1 logs]# pwd
/opt/jumpserver/logs
[root@linux-node1 logs]# tail -f jumpserver.log

3.登录软件web界面操作

利用浏览器登录到jumpserver登录界面

界面管理配置操作官方资料:

https://github.com/jumpserver/jumpserver/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

①. 添加用户
用户管理 – 查看用户 – 添加用户 填写基本信息,完成用户添加
用户添加完成后,根据提示记住用户账号密码,换个浏览器登录下载key,
ssh登录jumpserver测试

创建的用户是给普通员工所使用

为创建好的普通员工发送邮件通知信息

提示用户添加成功,并且可以收到通知邮件信息

邮件内容

说明信息:
web界面创建用户信息,实质上在程序内部做了两件事
①. 在jumpserver服务程序的数据库中相应表中,添加了新的用户信息
②. 在jumpserver的服务系统中,利用useradd命令创建出来相应的普通用户,并且会生成用户对应的公钥和私钥,利用密钥登录跳板机
普通用户还有一个重要作用,可以用来登录jumpserver的web管理界面

②. 添加资产

资产管理 – 查看资产 – 添加资产 填写基本信息,完成资产添加
添加资产实质的作用是添加通过跳板机可以管理的主机信息

选择单台添加,设置好主机名或IP地址,可以选择管理账号,勾选默认配置

使用默认表示选择默认的用户配置—选择【设置】—编辑【默认设置】,表示定义管理账户的默认设置 如果没有设置,默认是无法进行勾选的

定义管理权限用户,必须在被管理资产主机上真实存在的,并且是具有创建用户 删除用户的等权限的管理用户,比如root

管理用户设置完成,点击提交

输出以下提示信息,表示主机资产添加成功

操作疑问:
如果被管理资产主机上没有root用户如何,或者没有授权开发root用户,该如何添加管理用户?

添加默认管理用户设置

有可能公司所有主机的管理用户和账号密码是一致的,就可以设置默认管理用户

#在资产主机中创建默认管理用户admin
[root@linux-node2 ~]# useradd admin
[root@linux-node2 ~]# echo 123456|passwd --stdin admin
Changing password for user admin.
passwd: all authentication tokens updated successfully.
[root@linux-node2 ~]# sed -i '98a admin ALL=(ALL) NOPASSWD: ALL' /etc/sudoers     <- 设置非root管理用户的sudo权限

如果采用的是密钥登录,也可以在下面的界面输入私钥信息,设置完毕点击确认保存

默认管理用户设置完成

添加资产主机是以主机名作为主键识别唯一性的,可以更改主机名称,再添加一台相同的资产主机
此种逻辑设置,主要考虑到通过远程登录时,公网IP一样,端口映射不一样,所以主机名唯一,ip地址可以进行重复使用

至此,用户添加完毕,主机资产添加完毕,下面就要对管理权限进行授权了

 

③. 授权管理

添加sudo
授权管理 – Sudo – 添加别名 输入别名名称和命令,完成sudo添加
默认跳板机创建的用户都是普通用户,所以需要依赖sudo命令别名功能,使之普通用户具有相应权限,操作管理用户的命令

出现如下提示信息,表示sudo别名命令就创建完毕了

添加系统用户
授权管理 – 系统用户 – 添加 输入基本信息,完成系统用户添加

#知识点总结回顾
普通用户:实际上类似于公司的员工,不同的员工可以利用创建的普通用户,登录跳板机界面进行管理jumpserver跳板机
管理用户:是必须在系统中存在的用户,后续执行一些特殊权限命令,都需要借助管理用户,比如创建新的的用户信息等
默认用户:就是默认管理用户,有时公司的全部主机会有一个共有的管理用户,比如root用户,就可以进行管理用户的默认配置
系统用户:表示用于管理系统的用户,比如网络系统用户为netadmin 开发为devadmin 运维为sa等,根据职能需求进行创建
系统用户是被管理用户所创建出来的

系统用户进行关联相应sudo权限,并且可以初始化不设置密码信息,后续会自动生成

推送系统用户
授权管理 – 推送 – 选择需要推送的资产或资产组完成推送
推送只支持服务器,使用密钥是指用户从跳板机跳转时使用key,反之使用密码,
授权时会检查推送记录,如果没有推送过则无法完成系统用户在该资产上的授权。
如果资产是网络设备,请不要选择密码和秘钥,模拟一下推送,目的是为了生成推送记录。

系统用户配置完毕后,需要利用【推送】功能,将需要创建的用户信息,通过ansible批量告知被管理客户端,进行相应用户的创建

#查看用户信息
[root@linux-node2 ~]# id devadmin
id: devadmin: no such user
说明:在推送系统之前,被管理主机客户端是没有定义的devadmin用户信息的;只有推送之后才有的

进行系统用户devadmin的推送

如下图所示,系统用户推送成功

#命令行检查客户端信息,确认用户是否推送成功
[root@linux-node2 ~]# id devadmin
uid=1001(devadmin) gid=1001(devadmin) groups=1001(devadmin)
说明:检验完毕,系统用户推送成功

补充说明:模拟推送失败过程
①. 开启主机selinux,并且确认客户端主机未安装libselinux-python软件
②. 回收dev系统用户
③. 重新进行推送
思考:理解推送过程逻辑原理,大致理解libselinux-python软件包作用

添加授权规则
授权管理 – 授权规则 – 添加规则 选择刚才添加的用户,资产,系统用户完成授权

如果资产中存在没有系统用户推送记录的资产信息,就会输出以下错误信息

重新进行配置调整后,进行重新授权

上述报错,是由于存在一些资产信息,没有系统用户推送记录导致,为避免这种问题再次出现,可以将所用资产的系统用户都推送一下

对未推送过系统用户资产,进行系统用户推送

重新修改授权信息

授权用户进行调整,授权资产信息也重新进行调整

利用资产中的连接,进行连接测试,会报错误信息如下图所示

然而,报没有授权系统用户的的信息

提示以上错误,是因为没有对admin超级管理进行资产信息的授权,下面对admin用户也进行资产授权 取消掉一个普通用户,添加一个管理员用户,然后重新进行授权

打开资产中的连接,进行连接测试

④. 测试登录
用户下载key 登录跳板机,会自动运行connect.py,根据提示登录服务器
用户登陆web 查看授权的主机,点击后面的链接,测试是否可以登录服务器
利用jumpserver即可实现连接相应的主机,进行操作管理,并且使用的系统用户就是之前创建的devadmin用户

查看devadmin系统用户的sudo定义的权限信息是否正确

说明信息:
以上连接主机过程,需要依赖之前启动的run_websocket.py 程序服务,否则会出现连接异常问题

⑤. 监控和结束会话
日志审计 – 在线 查看当前登录的用户登录情况,点击监控查看用户执行的命令, 点击阻断,结束用户的会话
重新建立新的浏览窗口,进行监控查看

通过跳板机连接资产主机,输入相应的命令,都会被实时监控到

通过资产操作抓取资产主机硬件信息

如下信息

可以把主机资产信息批量导出,进行资产管理

还可以对所用资产主机进行批量执行命令,实现主机资产批量管理

⑥. 执行命令
测试命令的执行,命令记录查看 批量执行命令的日志
批量执行的命令操作也是有相应操作记录的

⑦. 查看历史记录

日志审计 – 登录历史 查看登录历史,点击统计查看命令历史,点击回放查看录像

4. Jumpserver软件web界面操作-普通用户界面操作

普通用户进行登录

用户名为之前创建的普通用户用户名,密码为邮件发送告知,进行登录

普通用户进行资产主机连接管理,操作步骤基本和上面的admin管理员操作步骤一致

说明信息:
普通用户下是没有审计功能,所以无法对资产主机进行监控管理,只有管理员admin有权限进行对运维人员的操作监控管理

上传下载-此处不再进行演示
测试文件的上传下载,日志审计 – 上传下载 查看上传下载记录
主要是对普通用户进行监控,对系统上的资源文件,进行过哪些上传和下载操作

5. Jumpserver软件命令行界面操作

要用admin用户进行命令行操作管理

[root@linux-node1 jumpserver]# python connect.py
没有该用户,或许你是以root运行的 No that user.
[root@linux-node1 jumpserver]# su - admin
[admin@linux-node1 ~]$ cd /opt/jumpserver/
[admin@linux-node1 jumpserver]$ python connect.py

### 欢迎使用Jumpserver开源跳板机系统 ### 

 1) 输入 ID 直接登录.
 2) 输入 / + IP, 主机名 or 备注 搜索.
 3) 输入 P/p 显示您有权限的主机.
 4) 输入 G/g 显示您有权限的主机组.
 5) 输入 G/g + 组ID 显示该组下主机.
 6) 输入 E/e 批量执行命令.
 7) 输入 U/u 批量上传文件.
 8) 输入 D/d 批量下载文件.
 9) 输入 H/h 帮助.
 0) 输入 Q/q 退出.

Opt or ID>:

切换到普通用户oldboy进行命令行操作

[root@linux-node1 jumpserver]# su - John

### 欢迎使用Jumpserver开源跳板机系统 ### 

 1) 输入 ID 直接登录.
 2) 输入 / + IP, 主机名 or 备注 搜索.
 3) 输入 P/p 显示您有权限的主机.
 4) 输入 G/g 显示您有权限的主机组.
 5) 输入 G/g + 组ID 显示该组下主机.
 6) 输入 E/e 批量执行命令.
 7) 输入 U/u 批量上传文件.
 8) 输入 D/d 批量下载文件.
 9) 输入 H/h 帮助.
 0) 输入 Q/q 退出.

Opt or ID>: 

补充说明:
发现直接就进入到跳板机的命令行界面,因为在/etc/profile.d 目录当中存在一个跳板机脚本 zzjumpserver.sh

模拟利用John普通用户进行管理资产主机
通过邮件信息首先下载key密钥信息或者web界面查看主机也能进行下载

利用xshell的密钥登录主机方法,将密钥进行导入,即可直接通过密钥登录到跳板机命令行界面

[c:\~]$ ssh John@118.190.201.11


Connecting to 118.190.201.11:22...
Connection established.
To escape to local shell, press Ctrl+Alt+].

Last login: Sat Jul 28 19:35:26 2018 from 118.190.201.1

### 欢迎使用Jumpserver开源跳板机系统 ### 

 1) 输入 ID 直接登录.
 2) 输入 / + IP, 主机名 or 备注 搜索.
 3) 输入 P/p 显示您有权限的主机.
 4) 输入 G/g 显示您有权限的主机组.
 5) 输入 G/g + 组ID 显示该组下主机.
 6) 输入 E/e 批量执行命令.
 7) 输入 U/u 批量上传文件.
 8) 输入 D/d 批量下载文件.
 9) 输入 H/h 帮助.
 0) 输入 Q/q 退出.

Opt or ID>: /
[ID ] 主机名 IP 端口 系统用户 备注
[0 ] linux-node2.example.com 118.190.201.12 22 ['devadmin'] 
[1 ] linux-node3.example.com 118.190.201.12 22 ['devadmin'] 

Opt or ID>: 0
Last login: Sat Jul 28 19:27:02 2018
[devadmin@linux-node2 ~]$ 

#显示有权限管理的主机信息
Opt or ID>: p
[ID ] 主机名 IP 端口 系统用户 备注
[0 ] jumpclient-01 10.0.0.71 22 ['dev']
[1 ] dbmaster-01 10.0.0.71 22 ['dev']
# 直接输入ID信息,进行登录主机
Opt or ID>: 0
Last login: Tue Jun 27 03:08:36 2017 from 10.0.0.70
[dev@jumpserver-02 ~]$

#显示帮助信息界面
Opt or ID>: h
### 欢迎使用Jumpserver开源跳板机系统 ###
1) 输入 ID 直接登录.
2) 输入 / + IP, 主机名 or 备注 搜索.
3) 输入 P/p 显示您有权限的主机.
4) 输入 G/g 显示您有权限的主机组.
5) 输入 G/g + 组ID 显示该组下主机.
6) 输入 E/e 批量执行命令.
7) 输入 U/u 批量上传文件.
8) 输入 D/d 批量下载文件.
9) 输入 H/h 帮助.
0) 输入 Q/q 退出.

#利用搜索功能搜索主机信息
Opt or ID>: /linux
[ID ] 主机名 IP 端口 系统用户 备注
[0 ] linux-node2.example.com 118.190.201.12 22 ['devadmin'] 
[1 ] linux-node3.example.com 118.190.201.12 22 ['devadmin']

 

2
如无特殊说明,文章均为本站原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到