JumpServer 开源堡垒机部署(源码)


前言

JumpServer 是全球首款开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 规范的运维安全审计系统。JumpServer 使用 Python 开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。

特色优势:

  • 开源: 零门槛,线上快速获取和安装;
  • 分布式: 轻松支持大规模并发访问;
  • 无插件: 仅需浏览器,极致的 Web Terminal 使用体验;
  • 多云支持: 一套系统,同时管理不同云上面的资产;
  • 云端存储: 审计录像云端存储,永不丢失;
  • 多租户: 一套系统,多个子公司和部门同时使用;
  • 多应用支持: 数据库,Windows远程应用,Kubernetes。

一、规划

1.1 服务器

本次为简单的安装部署,为了快速部署,就用一台服务器进行演示即可。

OSkernel备注
CentOS 7.6(106.52.187.250/172.16.0.16)3.10堡垒机(统一资源管理平台)

1.2 组件版本

本次安装版本,参照:https://docs.jumpserver.org/zh/master/dev/build/ 进行安装

组件版本备注
MySQL5.7数据存储 >=5.7
Redis6.0数据缓存 >=5.0
Core2.14.2JumpServer 的核心组件,由 Django 二次开发而来,内置了 Lion Celery Beat Flower Daphne 服务
Lina2.14.2JumpServer 的前端 UI 项目,主要使用 Vue,Element UI 完成
Luna2.14.2JumpServer 的前端 UI 项目,主要使用 Angular CLI 完成
KoKo2.14.2Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务
Lion2.14.2实现 RDP/VNC 协议跳板机功能
Nginx1.18代理(转发)
Nodejs12.14.0对于 Luna,其他版本可能会存在问题(在 install 时)。或者使用14.15.0版本
Go1.15KoKo 编译

1.3 随机 Key/Token

统一使用以下 Key、Token

-随机生成备注
Keyc7Z4OrTAEtj1AEGrHSIYfoTSgP5OAKTmPa2DjOOUHEtsB6un加密秘钥,生产环境中请修改为随机字符串
TokenGkzXTzSCTTDYikXHgT6l1PeC预共享Token,koko 和 lion 用来注册服务账号

可使用命令来随机生成:

cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 48    # 变更长度修改 -c 参数后的数值即可

二、架构

在这里插入图片描述

三、部署

  1. 大家可以采用源码部署方式进行部署,增加一下对 Linux 操作系统的熟练度。
  2. 当然也可以通过容器部署。

3.1 MySQL

1、执行安装脚本

bash ./mysql_5.7_install.sh

# 使用默认端口:3306
# 需要安装脚本的可私我

如何修改 mysql root 用户的初始密码?

方法1:
mysql> use mysql;
mysql> update user set password=password('新密码') where user='root' and host='localhost';
mysql> flush privileges;

方法2:
mysql> set password for 用户名@localhost = password('新密码');

方法3:
mysqladmin -u用户名 -p旧密码 password 新密码

2、创建数据库

create database jumpserver default charset utf8 collate utf8_general_ci;

3、授权数据库用户权限

grant select,insert,update,delete on jumpserver.* to 'jumpserver'@'172.16.%' identified by "ZhuRS@123!";
flush privileges;

权限问题请看 FAQ 说明

3.2 Redis

执行安装脚本

bash ./redis_6.0_install.sh

# 使用默认端口:6379
# 需要安装脚本的可私我

3.3 Core

1、资源下载

mkdir /opt/jumpserver-v2.14.2
wget -O /opt/jumpserver-v2.14.2.tar.gz https://github.com/jumpserver/jumpserver/releases/download/v2.14.2/jumpserver-v2.14.2.tar.gz

2、解压

cd /opt
tar -xf jumpserver-v2.14.2.tar.gz -C /opt/jumpserver-v2.14.2 --strip-components 1

3、安装 Python36

yum install -y epel* openldap-devel gcc-c++ mysql-devel make sshpass
yum install -y python36 python36-devel

4、安装 Python 依赖

python3 -m venv /opt/py3
source /opt/py3/bin/activate  # 每次运行项目都需要先执行 source /opt/py3/bin/activate 载入此环境
cd /opt/jumpserver-v2.14.2
pip install --upgrade pip     # 升级一下pip版本,否则可能会报错
pip install -r requirements/requirements.txt   # 开始安装依赖

5、修改 jumpserver 配置文件

cd /opt/jumpserver-v2.14.2
cp config_example.yml config.yml
vim config.yml
grep -Ev "^$|^[#;]" config.yml

SECRET_KEY: c7Z4OrTAEtj1AEGrHSIYfoTSgP5OAKTmPa2DjOOUHEtsB6un
BOOTSTRAP_TOKEN: GkzXTzSCTTDYikXHgT6l1PeC
DEBUG: true
LOG_LEVEL: DEBUG
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 172.16.0.16
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: ZhuRS@123!
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 172.16.0.16
REDIS_PORT: 6379
REDIS_PASSWORD: kbZnQByQ8tyT9l1K9R3x

其实到这里已经可以看到 jumpserver 登录界面了

尝试访问:http://106.52.187.250:8080/

默认账户:admin

默认密码:admin

新密码:Scedu@123

在这里插入图片描述

只不过是进不去 Web UI 界面的,因为我们还没配置 nginx

在这里插入图片描述

3.4 Lina

1、下载资源

mkdir /opt/lina-v2.14.2
wget -O /opt/lina-v2.14.2.tar.gz https://github.com/jumpserver/lina/releases/download/v2.14.2/lina-v2.14.2.tar.gz

2、解压

cd /opt
tar -xf lina-v2.14.2.tar.gz -C /opt/lina-v2.14.2 --strip-components 1

3、安装 nodejs

cd /opt
wget https://nodejs.org/dist/v14.18.0/node-v14.18.0-linux-x64.tar.xz
tar xf node-v14.18.0-linux-x64.tar.xz -C /usr/local/
cd /usr/local/ && mv node-v14.18.0-linux-x64/ nodejs

vim /etc/profile.d/node.sh
export NODE_HOME=/usr/local/nodejs
export PATH=$NODE_HOME/bin:$PATH

source /etc/profile.d/node.sh

ln -s /usr/local/nodejs/bin/npm  /usr/local/bin/npm
ln -s /usr/local/nodejs/bin/node  /usr/local/bin/node

4、安装依赖

npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass
npm config set registry https://registry.npm.taobao.org
npm install -g yarn
yarn config set registry https://registry.npm.taobao.org
npm install -g yarn
yarn install

5、修改配置文件

vim .env.development

ENV = 'development'

# base api
VUE_APP_BASE_API = ''
VUE_APP_PUBLIC_PATH = '/ui/'
VUE_CLI_BABEL_TRANSPILE_MODULES = true

# External auth
VUE_APP_LOGIN_PATH = '/core/auth/login/'
VUE_APP_LOGOUT_PATH = '/core/auth/logout/'

# Dev server for core proxy
VUE_APP_CORE_HOST = 'http://172.16.0.16:8080'  # 修改成 Core 的 url 地址
VUE_APP_CORE_WS = 'ws://172.16.0.16:8070'
VUE_APP_ENV = 'development'

6、运行 Lina

cd /opt/lina-v2.14.2
yarn serve

7、构建 Lina

cd /opt/lina-v2.14.2
yarn build:prod

# 构建完成后在当前目录生成 lina 构建包,可移植至 nginx

3.5 Luna

1、下载资源

mkdir /opt/luna-v2.14.2
wget -O /opt/luna-v2.14.2.tar.gz https://github.com/jumpserver/luna/releases/download/v2.14.2/luna-v2.14.2.tar.gz

2、解压

cd /opt
tar -xf luna-v2.14.2.tar.gz -C /opt/luna-v2.14.2 --strip-components 1

3、安装 nodejs

  1. 上面已经安装
  2. 不过对于 Luna 来说 nodejs 10.24.1 版本较低,其他高版本在 npm install 时又会卡住不动,尝试了几个版本,最终 12.14.0、14.15.0 可用,其他版本大家也可以尝试一下。
  3. FAQ 有说明

4、安装依赖

npm install
npm install --dev
npm rebuild node-sass

5、修改配置文件

vim proxy.conf.json

{
  "/koko": {
    "target": "http://172.16.0.16:5000",  # KoKo 地址
    "secure": false,
    "ws": true
  },
  "/media/": {
    "target": "http://172.16.0.16:8080",  # Core 地址
    "secure": false,
    "changeOrigin": true
  },
  "/api/": {
    "target": "http://172.16.0.16:8080",  # Core 地址
    "secure": false,                    # https ssl 需要开启
    "changeOrigin": true
  },
  "/core": {
    "target": "http://172.16.0.16:8080",  # Core 地址
    "secure": false,
    "changeOrigin": true
  },
  "/static": {
    "target": "http://172.16.0.16:8080",  # Core 地址
    "secure": false,
    "changeOrigin": true
  },
  "/lion": {
    "target": "http://172.16.0.16:9529",  # Lion 地址
    "secure": false,
    "pathRewrite": {
      "^/lion/monitor": "/monitor"
    },
    "ws": true,
    "changeOrigin": true
  },
  "/omnidb": {
    "target": "http://172.16.0.16:8082",
    "secure": false,
    "ws": true,
    "changeOrigin": true
  }
}

6、安装 ng

npm install -g @angular/cli

7、运行 Luna

ng serve
  1. 这里可能会提示你的 nodejs 版本过低,会给出对应的 node 版本,根据对应的版本再次安装 node,最后再重新启动即可。
  2. 或者可能报 Error from chokidar… 错误
  3. FAQ 有说明

8、构建 Luna

ng build

# 构建完成后在当前目录生成 dist 构建包,可移植至 nginx

3.6 KoKo

1、下载资源

mkdir /opt/koko-v2.14.2
wget -O /opt/koko-v2.14.2.tar.gz https://github.com/jumpserver/koko/archive/refs/tags/v2.14.2.tar.gz

2、解压

cd /opt
tar -xf koko-v2.14.2.tar.gz -C /opt/koko-v2.14.2 --strip-components 1

3、安装 go

wget https://golang.google.cn/dl/go1.15.linux-amd64.tar.gz
tar -xf go1.15.linux-amd64.tar.gz -C /usr/local/
chown -R root:root /usr/local/go
export PATH=/usr/local/go/bin:$PATH
echo 'export PATH=/usr/local/go/bin:$PATH' >> ~/.bashrc

4、编译

cd /opt/koko-v2.14.2
make

# 会在当前目录生成 build 目录

5、修改配置文件

cd /opt/koko-2.14.2/build/          # 进入编译后的文件夹
tar xzf koko---linux-amd64.tar.gz   # 解压编译后的文件
cd /opt/koko-2.14.2/build/koko---linux-amd64
mv config_example.yml config.yml
vim config.yml
grep -Ev "^$|^[#;]" config.yml

CORE_HOST: http://172.16.0.16:8080           # Core的URL
BOOTSTRAP_TOKEN: GkzXTzSCTTDYikXHgT6l1PeC    # Core的token
BIND_HOST: 0.0.0.0
SSHD_PORT: 2222
HTTPD_PORT: 5000
LOG_LEVEL: DEBUG

6、启动 KoKo

cd /opt/koko-2.14.2/build/koko---linux-amd64
./koko

3.7 Lion

1、部署 Guacd

  • 下载资源

    mkdir /opt/guacamole-v2.14.2 && cd /opt/guacamole-v2.14.2
    wget http://download.jumpserver.org/public/guacamole-server-1.3.0.tar.gz
    tar -xzf guacamole-server-1.3.0.tar.gz
    
  • 安装 Guacd 依赖

    yum -y localinstall --nogpgcheck https://mirrors.aliyun.com/rpmfusion/free/el/rpmfusion-free-release-7.noarch.rpm
    
    yum install -y cairo-devel libjpeg-turbo-devel libpng-devel libtool uuid-devel
    
    yum install -y ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel
    
  • 构建 Guacd

    cd guacamole-server-1.3.0/
    ./configure --with-init-dir=/etc/init.d
    make
    make install
    ldconfig
    

    如果希望使用 systemd 管理, 可以使用 ./configure --with-systemd-dir=/etc/systemd/system/

2、部署 Lion

  • 下载资源

    cd /opt && wget https://github.com/jumpserver/lion-release/releases/download/v2.14.2/lion-v2.14.2-linux-amd64.tar.gz
    tar -xf lion-v2.14.2-linux-amd64.tar.gz
    
  • 修改配置文件

    cd lion-v2.14.2-linux-amd64 && cp config_example.yml config.yml
    vim config.yml
    
    grep -Ev "^$|^[#;]" config.yml
    
    CORE_HOST: http://172.16.0.16:8080
    BOOTSTRAP_TOKEN: GkzXTzSCTTDYikXHgT6l1PeC
    BIND_HOST: 0.0.0.0
    HTTPD_PORT: 8081
    LOG_LEVEL: DEBUG
    

3、启动 Guacd

/etc/init.d/guacd start

4、启动 Lion

cd /opt/lion-v2.14.2-linux-amd64
./lion

3.8 Nginx

vim /etc/nginx/conf.d/jumpserver.conf
server {
  listen 80;
  # server_name _;

  client_max_body_size 5000m;

  # Luna 配置
  location /luna/ {
    proxy_pass http://172.16.0.16:4200;
  }

  # Core data 静态资源
  location /media/replay/ {
    add_header Content-Encoding gzip;
    root /opt/jumpserver-v2.14.2/data/;
  }

  location /media/ {
    root /opt/jumpserver-v2.14.2/data/;
  }

  location /static/ {
    root /opt/jumpserver-v2.14.2/data/;
  }

  # KoKo Lion 配置
  location /koko/ {
    proxy_pass       http://172.16.0.16:5000;
    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_buffering off;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }

  # lion 配置
  location /lion/ {
    proxy_pass http://172.16.0.16:8081;
    proxy_buffering off;
    proxy_request_buffering off;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_ignore_client_abort on;
    proxy_connect_timeout 600;
    proxy_send_timeout 600;
    proxy_read_timeout 600;
    send_timeout 6000;
  }

  # Core 配置
  location /ws/ {
    proxy_pass http://172.16.0.16:8070;
    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_buffering off;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }

  location /api/ {
    proxy_pass http://172.16.0.16:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location /core/ {
    proxy_pass http://172.16.0.16:8080;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  # 前端 Lina
  location /ui/ {
    proxy_pass http://172.16.0.16:9528;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location / {
    rewrite ^/(.*)$ /ui/$1 last;
  }
}

四、验证

访问:http://106.52.187.250/

在这里插入图片描述

当然你也可以把构建后的 Lina、Luna 移至 nginx,效果一样。

Linux 服务器上访问:

ssh admin@172.16.0.16 -p2222
admin@172.16.0.16's password:

# admin:jumpserver登录用户(其实就是登录查看该用户的资源)
# 172.16.0.16:jumpserver的IP地址
#.....password:jumpserver的admin登录用户的登录密码

在这里插入图片描述

五、FAQ

5.1 Python 依赖报错

1、报错类型

在这里插入图片描述

在这里插入图片描述

2、报错原因

缺少相关的依赖

3、解决方案

# 图一:
yum install mysql-devel
# 图二:
yum install -y epel* openldap-devel gcc-c++ make sshpass

5.2 数据库权限问题

1、报错类型

启动 Core 时报错

./jms start

在这里插入图片描述

2、报错原因

jumpserver 数据库缺少 REFERENCES 权限问题

3、解决方案

mysql> grant REFERENCES on jumpserver.* to 'jumpserver'@'172.16.%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

添加权限后仍然报同样错误,肯定是数据库权限的问题,还没找出对于 jumpserver 需要什么权限,有知道的朋友可评论区留言。因此这里我果断给 jumpserver 数据库全权限。

mysql> grant all on jumpserver.* to 'jumpserver'@'172.16.%';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

再次执行 ./jms start

这次就可以了,果然绿色是最好的颜色。

在这里插入图片描述

5.3 nodejs 版本问题

在这里插入图片描述

5.4 Luna 构建问题

1、启动 Luna 报错

运行 ng serve 时报 Error from chokidar…

在这里插入图片描述

解决:调大 fs.inotify.max_user_watches

其他参数说明:

fs.inotify.max_queued_events:表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。

fs.inotify.max_user_instances:表示每一个real user ID可创建的inotify instatnces的数量上限,默认128.

fs.inotify.max_user_watches:表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)

注:

max_queued_events 是 inotify 管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。如果你在日志中看到 Event Queue Overflow,说明 max_queued_events 太小需要调整参数后再次使用。

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

再次启动 Luna

这次就不会报错了,之前是因为 fs.inotify.max_user_watches 默认128,启动时超过了该数值,导致报错。

在这里插入图片描述

2、Luna 构建报错

在这里插入图片描述

很明显是缺少模块,安装模块即可

npm install crypto-js

# 再次构建即可

5.5 go 编译问题

1、make 编译时报错

在这里插入图片描述

2、解决方案

timeout 超时,说明又被 qiang 了,配置一下代理,再次 make 即可。

go env -w GOPROXY=https://goproxy.cn
make

5.6 组件下载问题

在每个组件下载过程中,要保证下载后文件的一致性,如下载文件的大小,否则解压就会有问题,因为下载过程中 Resolve 的是国外网站。

tar -xf koko-v2.14.2.tar.gz -C /opt/koko-v2.14.2 --strip-components 1

tar: This does not look like a tar archive

gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now

# 上面的错误就是典型的文件下载不完整
# 可使用一些国内镜像进行下载

总结

来梳理一下 JumpServer 的组件关系:

  • Core:JumpServer 的核心组件,可理解为 JumpServer;
  • Lina: JumpServer 的前端 UI 项目,需部署该项目,才能正常访问;
  • Luna:JumpServer 的前端 UI 项目,不作渲染,仅提供 API 接口;
  • KoKo:提供 SSH/SFTP 服务和 Web Terminal(终端)服务;
  • Lion: 用来实现 RDP/VNC 协议跳板机功能。

JumpServer 项目源码:https://github.com/jumpserver/

<点击跳转至开头>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值