Jumpserver部署及使用

总体介绍:

Jumpserver 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统

Jumpserver 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好

Jumpserver 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制

Jumpserver 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产

jumpserver组件说明:

jumpserver:jumpserver的管理后台:

coco:实现了ssh server和web终端 的组件,提供ssh和websocket接口

luna:是web terminal的前端(用来展示用户和与用户进行交互)前端页面都是由该项目完成的

guancamole:apache的跳板机项目,jumpserver使用其组件实现RDB(远程桌面)功能,jumpderver在guacamole中添加额外

Jumpserver的特点:

  • 完全开源
  • Python编写,容易二次开发使用
  • 集成了ansible,批量命令等
  • 支持web Terminal (web终端,可以在浏览器web页面运行终端,管理服务器资源)
  • Bootstrap编写,界面美观(前段页面效果,有web前端人员完成的)
  • 自动回收硬件信息(如后端服务器的磁盘空间、内存大小等信息)
  • 录像回放
  • 命令搜索
  • 实时监控

 

安装部署:

Jumpserver 环境要求:

  • 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)
  • 操作系统: Linux 发行版 x86_64
  • Python = 3.6.x
  • Mysql Server ≥ 5.6
  • Mariadb Server ≥ 5.5.56
  • Redis

部署环境:

  • 系统: CentOS 7
  • IP: 192.168.1.10
  • 关闭 selinux 和防火墙
  •  

安装步骤:

将系统环境字体设置成中文,因为jumpserver的日志文件里面的内容会包含中文字符,不支持可能会乱码

localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8

export LC_ALL=zh_CN.UTF-8

echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf

  • 装备python3和python虚拟环境:

配置网络yum源:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

Yum 加速设置请参考 http://mirrors.163.com/.help/centos.html

运行一下命令生成缓存:
yum  clean  all
yum  makecache
1、安装依赖包:
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
2、编译安装python3
[root@localhost ~]# tar  xvf  Python-3.6.1.tar.xz
[root@localhost Python-3.6.1]# cd  Python-3.6.1/
[root@localhost Python-3.6.1]# ./configure  &&  make  &&  make  install
3、建立python虚拟环境
因为 CentOS 6/7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为 了不扰乱原来的环境我们来使用 Python 虚拟环境
[root@localhost ~]# cd  /opt/
[root@localhost opt]# python3  -m  venv  py3
[root@localhost opt]# source  /opt/py3/bin/activate
看到下面的提示符代表成功,以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均 在该虚拟环境中运行
(py3) [root@localhost opt]#
4、设置自动在任意python虚拟环境
(py3) [root@localhost opt]# cd  /opt/
(py3) [root@localhost opt]# unzip  autoenv.zip
(py3) [root@localhost opt]#  echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
(py3) [root@localhost opt]# source ~/.bashrc
• 安装第一个组件jumpserver并配置
(py3) [root@localhost opt]# cd  /opt/
(py3) [root@localhost opt]# unzip jumpserver.zip
(py3) [root@localhost opt]# echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env
(py3) [root@localhost opt]# cd  jumpserver/
//首次进入按y即可

jumpserver 配置LDAP jumpserver部署教程_python

安装依赖RPM包:
(py3) [root@localhost jumpserver]# cd  requirements/
(py3) [root@localhost requirements]# yum  -y  install   $(cat  rpm_requirements.txt)
安装python库依赖:
(py3) [root@localhost requirements]# pip  install  --upgrade  pip
(py3) [root@localhost requirements]#pip  install  -r  requirements.txt  -I  https://pypi.python.org/simple
安装mysql,版本必须是5.5以上
(py3) [root@localhost requirements]# yum  -y  install   mariadb*
(py3) [root@localhost requirements]# systemctl   start  mariadb
(py3) [root@localhost requirements]# netstat   -anput  |  grep  3306

jumpserver 配置LDAP jumpserver部署教程_docker_02

(py3) [root@localhost requirements]# mysqladmin  -u  root  password 123.com
MariaDB [(none)]> create database  jumpserver  default  charset  'utf8';
MariaDB [(none)]> grant  all on jumpserver.*  to  jumpserver@127.0.0.1  identified  by  '123.com';
MariaDB [(none)]> flush  privileges;
安装redis:
(py3) [root@localhost ~]# tar  zxf  redis-4.0.14.tar.gz
(py3) [root@localhost ~]# cd  redis-4.0.14/
(py3) [root@localhost redis-4.0.14]# make  &&   make   install
(py3) [root@localhost redis-4.0.14]# cd  utils/
(py3) [root@localhost utils]# ./install_server.sh   //一路回车
(py3) [root@localhost utils]# /etc/init.d/redis_6379  start
(py3) [root@localhost utils]# netstat  -anput  |  grep  6379

jumpserver 配置LDAP jumpserver部署教程_jumpserver 配置LDAP_03

修改jumpserver的配置文件:

(py3) [root@localhost ~]# cd  /opt/jumpserver/
(py3) [root@localhost jumpserver]# cp  config_example.yml   config.yml
(py3) [root@localhost jumpserver]# cat  /dev/urandom  |  tr  -dc  A-Za-z0-9  |  hend  -c  49
NjGA1lRO87Cp6HBngf6yvJbCkbdyYeCFbpxCJtMGgQqIRiOkT  //添加到配置文件里
(py3) [root@localhost jumpserver]# cat  /dev/urandom  |  tr  -dc  A-Za-z0-9  |  head  -c  16
MvRlnZvmNt9V4uY5
修改一下内容:
(py3) [root@localhost jumpserver]# grep  -v  ^#  config.yml  |  grep -v  ^$
SECRET_KEY: NjGA1lRO87Cp6HBngf6yvJbCkbdyYeCFbpxCJtMGgQqIRiOkT
BOOTSTRAP_TOKEN: MvRlnZvmNt9V4uY5
DEBUG: false
LOG_LEVEL: ERROR
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: 123.com
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
运行jumpserver:
(py3) [root@localhost jumpserver]# ./jms  start  all  -d    //-d:在后台运行
第一次初始化的时候会有点慢
(py3) [root@localhost jumpserver]# netstat  -anput  |  grep  8080

jumpserver 配置LDAP jumpserver部署教程_jumpserver 配置LDAP_04

  • 安装coco组件并配置:
(py3) [root@localhost jumpserver]# cd  /opt/
(py3) [root@localhost opt]# unzip  coco.zip
(py3) [root@localhost opt]# cd  coco/
(py3) [root@localhost coco]#  echo "source /opt/py3/bin/activate" > /opt/coco/.env  //进入coco目录时自动载入python虚拟环境
(py3) [root@localhost coco]# cd  requirements/

首次进入 coco 文件夹会有提示,按 y 即可

jumpserver 配置LDAP jumpserver部署教程_docker_05

安装依赖:

(py3) [root@localhost requirements]# yum  -y  install  $(cat rpm_requirements.txt)

(py3) [root@localhost requirements]# pip install -r requirements.txt -i https://pypi.python.org/simple

修改配置文件并运行:

修改内容如下:

BOOTSTRAP_TOKEN: MvRlnZvmNt9V4uY5   //和前面的那个一样
LOG_LEVEL: ERROR
(py3) [root@localhost coco]# ./cocod  start  -d
(py3) [root@localhost coco]# netstat  -anput  |  grep  2222

jumpserver 配置LDAP jumpserver部署教程_jumpserver 配置LDAP_06

  • 安装guacmole,这个服务在安装过程中比较复杂,采用docker仓库打包号的镜像

安装docker:

(py3) [root@localhost opt]# yum install -y yum-utils device-mapper-persistent-data lvm2

添加docker官方源:

(py3) [root@localhost opt]# yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
(py3) [root@localhost opt]# yum makecache fast
(py3) [root@localhost opt]# yum install docker-ce   //会有两个提示,输入y即可
(py3) [root@localhost opt]# systemctl  start  docker
(py3) [root@localhost opt]# systemctl  enable  docker
(py3) [root@localhost opt]# ps  -ef  |  grep  docker    //这个docker是作为进程在运行

jumpserver 配置LDAP jumpserver部署教程_nginx_07

(py3) [root@localhost opt]#  docker run --name jms_guacamole -d  -p 8081:8080 -v /opt/guacamole/key:/config/guacamole/key  -e JUMPSERVER_KEY_DIR=/config/guacamole/key  -e  -e JUMPSERVER_SERVER=http://192.168.1.10:8080  jumpserver/guacamole:latest
• 安装luna,只需要解压到/opt目录就好了
(py3) [root@localhost opt]# tar zxf  luna.tar.gz
• 安装nginx反向代理
(py3) [root@localhost nginx-1.14.0]# tar zxf  nginx-1.14.0.tar.gz
(py3) [root@localhost nginx-1.14.0]# cd  nginx-1.14.0/
(py3) [root@localhost nginx-1.14.0]# ./configure &&  make  &&  make  install
修改配置文件:
在server模块中添加,注释掉原有的 /
  client_max_body_size 100m;  # 录像及文件上传大小限制
 
    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改
    }
 
    location /media/ {
        add_header Content-Encoding gzip;
        root /opt/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改
    }
 
    location /static/ {
        root /opt/jumpserver/data/;  # 静态资源, 如果修改安装目录, 此处需要修改
    }
 
    location /socket.io/ {
        proxy_pass       http://localhost:5000/socket.io/;  # 如果coco安装在别的服务器, 请填写它的ip
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }
 
    location /coco/ {
        proxy_pass       http://localhost:5000/coco/;  # 如果coco安装在别的服务器, 请填写它的ip
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }
 
    location /guacamole/ {
        proxy_pass       http://localhost:8081/;  # 如果guacamole安装在别的服务器, 请填写它的ip
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
    }
    location / {
        proxy_pass http://localhost:8080;  # 如果jumpserver安装在别的服务器, 请填写它的ip
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

修改完后启动nginx:

(py3) [root@localhost ~]# /usr/local/nginx/sbin/nginx

(py3) [root@localhost ~]# netstat  -anput  |  grep  nginx

jumpserver 配置LDAP jumpserver部署教程_nginx_08

  • 检查应用是否正常运行

(py3) [root@localhost ~]# cd  /opt/jumpserver/

(py3) [root@localhost jumpserver]# ./jms  status

jumpserver 配置LDAP jumpserver部署教程_python_09

(py3) [root@localhost jumpserver]# cd  /opt/coco/

(py3) [root@localhost coco]# ./cocod  status

jumpserver 配置LDAP jumpserver部署教程_python_10

(py3) [root@localhost coco]# docker  ps

jumpserver 配置LDAP jumpserver部署教程_nginx_11

服务全部启动后,访问http://192.168.1.10,访问nginx代理端口,不要再通过8080端口访问了

  • 访问

浏览器输入192.168.1.10

账号:admin

密码:admin   //都是默认的

jumpserver 配置LDAP jumpserver部署教程_nginx_12

登录进来后的操作:

用户管理-------用户列表-------创建用户

jumpserver 配置LDAP jumpserver部署教程_docker_13

资产管理-------管理用户-------创建管理用户

jumpserver 配置LDAP jumpserver部署教程_nginx_14

资产管理-------管理用户-------创建系统用户(用户名尽量为root,选择手动登录,这个用户用来连接后端资产的)

jumpserver 配置LDAP jumpserver部署教程_nginx_15

资产管理-------资产列表-------创建资产-------新开一台主机填写新开主机的IP地址

jumpserver 配置LDAP jumpserver部署教程_docker_16

权限管理-------资产授权-------创建授权规则

jumpserver 配置LDAP jumpserver部署教程_docker_17

会话管理-------web终端--------可以进行连接

jumpserver 配置LDAP jumpserver部署教程_nginx_18

创建文件测试:

jumpserver 配置LDAP jumpserver部署教程_jumpserver 配置LDAP_19

jumpserver 配置LDAP jumpserver部署教程_jumpserver 配置LDAP_20