记一次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