记一次Jumpserver(all in docker2.5.3)升级到jumpserver2.6.2过程

一、环境描述
系统:Centos8
jumpserver:Docker 部署all in one ,一个镜像包括了所有jumpserver服务以及mysql和redis
2021年1月15日,JumpServer开源堡垒机发现一处远程执行漏洞,需要用户尽快进行修复,尤其是可通过公网访问的JumpServer堡垒机用户建议尽快进行修复。
紧急BUG修复通知
JumpServer发现远程执行漏洞,请速度修复
非常感谢 reactivity of Alibaba Hackerone bug bounty program(瑞典) 向我们报告了此 BUG
影响版本:

< v2.6.2
< v2.5.4
< v2.4.5
= v1.5.9

= v1.5.3
安全版本:

= v2.6.2
= v2.5.4
= v2.4.5
= v1.5.9 (版本号没变)
< v1.5.3
修复方案:

将JumpServer升级至安全版本;

升级思路:
原本打算看看官方文档,直接将现有镜像jms2.5.3升级到2.6.2(先不管兼容不兼容的问题),但是官网文档貌似以及没有部署docker的文档,二是采用docker-compose模式。
①、备份mysql数据。
②、部署mysql、redis服务器
③、部署jumpserver2.6.2,数据库、redis采用外置服务器。并启动jumpserver
④、备份新的jumpserver数据库(以防恢复旧数据不能启动jumpserver服务)。
⑤、清空jumpserver新数据库所有表,使用原备份的mysql数据进行恢复。
⑥、启动jumpserver,索性服务能正常启动,并能正常远程。(也不知道升级后有没有表、或新增表、或删除表)。暂时未发现问题。

二、备份数据库
注:外置mysql、redis版本要求。

MySQL >= 5.7
Redis >= 5.0.0

安装mysql、redis服务省略。

备份旧数据库
仅备份mysql数据,不考虑历史会话

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                       COMMAND             CREATED       STATUS       PORTS                                        NAMES
afcbb744ea68   jumpserver/jms_all:v2.5.3   "./entrypoint.sh"   5 weeks ago   Up 5 weeks   0.0.0.0:80->80/tcp, 0.0.0.0:2222->2222/tcp   jms_all
[root@localhost ~]# docker exec -it jms_all  mysqldump -uroot jumpserver > /opt/sql_back/jumpserver.sql

三、部署jumpserver2.6.2
项目参考:https://github.com/jumpserver/jumpserver
部署文档参考:https://jumpserver.readthedocs.io/zh/master/
这里使用手动部署
①、下载jumpserver安装包

cd /opt
yum -y install wget
wget https://github.com/jumpserver/installer/releases/download/v2.6.2/jumpserver-installer-v2.6.2.tar.gz
tar -xf jumpserver-installer-v2.6.2.tar.gz
cd jumpserver-installer-v2.6.2
export DOCKER_IMAGE_PREFIX=docker.mirrors.ustc.edu.cn
cat config-example.txt

②、修改配置文件
也不知道是否必须要修改,反正安装的时候也会让你选择。
vi config-example.txt

# 说明
#### 这是项目总的配置文件, 会作为环境变量加载到各个容器中
#### 格式必须是 KEY=VALUE 不能有空格等

# Compose项目设置
COMPOSE_PROJECT_NAME=jms
COMPOSE_HTTP_TIMEOUT=3600
DOCKER_CLIENT_TIMEOUT=3600
DOCKER_SUBNET=192.168.250.0/24

## IPV6
DOCKER_SUBNET_IPV6=2001:db8:10::/64
USE_IPV6=0

### 持久化目录, 安装启动后不能再修改, 除非移动原来的持久化到新的位置
VOLUME_DIR=/opt/jumpserver

## 是否使用外部MYSQL和REDIS
## 下载下来以下两项默认值为0
USE_EXTERNAL_MYSQL=1
USE_EXTERNAL_REDIS=1

## Nginx 配置,这个Nginx是用来分发路径到不同的服务
HTTP_PORT=8080
HTTPS_PORT=8443
SSH_PORT=2222

## LB 配置, 这个Nginx是HA时可以启动负载均衡到不同的主机
USE_LB=0
LB_HTTP_PORT=80
LB_HTTPS_PORT=443
LB_SSH_PORT=2223

## Task 配置
USE_TASK=1

## XPack
USE_XPACK=0


# Koko配置
CORE_HOST=http://core:8080
ENABLE_PROXY_PROTOCOL=true


# Core 配置
### 启动后不能再修改,否则密码等等信息无法解密
SECRET_KEY=
BOOTSTRAP_TOKEN=
LOG_LEVEL=INFO
# SESSION_COOKIE_AGE=86400
# SESSION_EXPIRE_AT_BROWSER_CLOSE=false

## MySQL数据库配置
DB_ENGINE=mysql
DB_HOST=192.168.1.2
DB_PORT=3306
DB_USER=jumpserver
DB_PASSWORD=jumpserver11111
DB_NAME=jumpserver

## Redis配置
REDIS_HOST=192.168.1.2
REDIS_PORT=6379
REDIS_PASSWORD=gkoiwg2983kljid

### Keycloak 配置方式
### AUTH_OPENID=true
### BASE_SITE_URL=https://jumpserver.company.com/
### AUTH_OPENID_SERVER_URL=https://keycloak.company.com/auth
### AUTH_OPENID_REALM_NAME=cmp
### AUTH_OPENID_CLIENT_ID=jumpserver
### AUTH_OPENID_CLIENT_SECRET=
### AUTH_OPENID_SHARE_SESSION=true
### AUTH_OPENID_IGNORE_SSL_VERIFICATION=true


# Guacamole 配置
JUMPSERVER_SERVER=http://core:8080
JUMPSERVER_KEY_DIR=/config/guacamole/data/key/
JUMPSERVER_RECORD_PATH=/config/guacamole/data/record/
JUMPSERVER_DRIVE_PATH=/config/guacamole/data/drive/
JUMPSERVER_ENABLE_DRIVE=true
JUMPSERVER_CLEAR_DRIVE_SESSION=true
JUMPSERVER_CLEAR_DRIVE_SCHEDULE=24

# Mysql 容器配置
MYSQL_ROOT_PASSWORD=
MYSQL_DATABASE=jumpserver

③、安装jumpserver
大概步骤就是,先运行脚本让你选择是否使用mysql、redis外置服务器等。然后安装docker、docker-compose,紧接着下载相关镜像然后部署docker-compose项目。

./jmsctl.sh install

④、启动jumpserver

1.启动jumpserver
./jmsctl.sh start

2. 其它一些管理命令
./jmsctl.sh stop
./jmsctl.sh restart
./jmsctl.sh backup
./jmsctl.sh upgrade
更多还有一些命令,你可以 ./jmsctl.sh --help来了解

3. 访问 Web 后台页面
http://10.20.11.120:8080
https://10.20.11.120:8443

4. ssh/sftp 访问
ssh admin@10.20.11.120 -p2222
sftp -P2222 admin@10.20.11.120

5. 更多信息
我们的文档: https://docs.jumpserver.org/
我们的官网: https://www.jumpserver.org/
[root@localhost jumpserver-installer-v2.6.2]# docker ps -a
CONTAINER ID   IMAGE                         COMMAND                  CREATED        STATUS                    PORTS                                                                            NAMES
c1f556e9c948   jumpserver/nginx:alpine2      "sh -c 'crond -b -d …"   16 hours ago   Up 16 hours (healthy)     0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp   jms_nginx
35c477f28c73   jumpserver/core:v2.6.2        "./entrypoint.sh sta…"   16 hours ago   Up 16 hours (healthy)     8070/tcp, 8080/tcp                                                               jms_celery
3f9ba8b0586f   jumpserver/lina:v2.6.2        "/docker-entrypoint.…"   16 hours ago   Up 16 hours (unhealthy)   80/tcp                                                                           jms_lina
c00ef496b1f0   jumpserver/koko:v2.6.2        "./entrypoint.sh"        16 hours ago   Up 16 hours (healthy)     0.0.0.0:2222->2222/tcp, :::2222->2222/tcp, 5000/tcp                              jms_koko
0bffe7fc3663   jumpserver/guacamole:v2.6.2   "/init"                  16 hours ago   Up 16 hours (healthy)     8080/tcp                                                                         jms_guacamole
4584f54b51ef   jumpserver/luna:v2.6.2        "/docker-entrypoint.…"   16 hours ago   Up 16 hours (unhealthy)   80/tcp                                                                           jms_luna
bf608211191b   jumpserver/core:v2.6.2        "./entrypoint.sh sta…"   16 hours ago   Up 16 hours (healthy)     8070/tcp, 8080/tcp                                                               jms_core

四、数据恢复
①、清空数据库表
②、恢复2.5.3版本数据到数据库。
以上两项就不演示了!

Version v2.6.2 GPLv2