目录
1、概念介绍
JumpServer 概述
JumpServer 功能
JumpServer 组件
JumpServer 架构
2、前置安装
环境要求
安装 ELRepo 库
更新内核
设置 grub2
安装 Python
配置 Python 虚拟环境
3、安装 Jumpserver Core 组件
下载安装
替换客户端组件
安装 Python 依赖库
安装 Redis
安装 MySQL
生成秘钥
修改 Jumpserver 配置文件
生成数据库表结构和初始化数据
编辑服务启动脚本
4、安装 Lina 组件(源码)
安装 node
安装 Lina
修改 Lina 配置文件
构建部署 lina
安装部署 Luna
5、部署 Koko 组件
安装 KoKo
修改配置文件
启动 KoKo
6、部署 Lion 组件
安装 guacamole
安装 Lion
启动服务
7、部署 Magus 组件
安装 wisp
安装 Magus
启动 wisp
8、设置 Nginx 整合各个组件
安装 Nginx
修改配置文件
创建 Jumpserver.conf 配置文件
启动 nginx
登录 jumpserver
1、概念介绍
跳板机概述 | 堡垒机概述 |
跳板机:就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。 跳板机缺点:没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中 还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位到原因和责任人; | 堡垒机:即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。 堡垒机比跳板机多了实时收集、监控网络环境、集中报警等功能。 |
JumpServer 概述
Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。
Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。 为互联网企业提供了认证,授权,审计,自动化运维等功能。
JumpServer 功能
① 用户组/用户 :添加组方便进行授权,用户是授权和登陆的主体.
② 资产组/资产/IDC : 主机信息简洁完整,用户自定义备注登录,支持自动获取主页硬件信息.
③ Sudo/系统用户/授权规则 :支持 sudo 授权,系统用户用于登陆客户端,授权是将用户、资产和系统用户关联起来.
④ 在线/登录历史/命令记录/上传下载 : 在线实时监控用户操作,统计和录像回放用户操作内容,阻断控制,详细记录上传下载.
⑤ 上传/下载 : 支持文件上传下载,实现 lrzsz 方式.
⑥ 默认设置 : 默认管理用户,设置包括用户密码密钥,默认信息为了方便添加资产而设计.
JumpServer 组件
Jumpserver 为管理后台,管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作
Coco 为 SSH Server 和 Web Terminal Server(网页 linux 客户端)。用户可以通过使用自己的账户登录 SSH 或者 Web Terminal 直接访问被授权的资产。不需要知道服务器的账户密码,新版本的 coco 被 koko 取代。
Luna 为 Web Terminal Server 前端页面,用户使用 Web Terminal 方式登录所需要的组件 Guacamole 为 Windows 组件,用户可以通过 Web Terminal 来连接 Windows 资产 (暂时只能通过 Web Terminal 来访问)
JumpServer 架构
Core | 是 JumpServer 的核心组件,其他组件依赖此组件启动。 |
Koko | 是服务于类 Unix 资产平台的组件,通过 SSH、Telnet 协议提供字符型连接。 |
Lina | 是 JumpServer 的前端 UI 项目,主要使用 Vue,Element UI 完成。 |
Luna | 是 JumpServer 的前端 UI 项目,主要使用 Angular CLI 完成. |
Lion | 是服务于 Windows 资产平台的组件,用于 Web 端访问 Windows 资产。 |
Omnidb | 是服务于数据库的组件,用于可视化界面纳管数据库。 |
Razor | 是服务于 RDP 协议组件,该组件主要功能是通过 JumpServer Client 方式访问 Windows 资产。 |
Magnus | 是服务于数据库的组件,用于通过客户端代理访问数据库。 |
Celery | 是处理异步任务的组件,用于执行 JumpServer 相关的自动化任务。 |
2、前置安装
环境要求
- 操作系统 4 核 8G
- MySQL 8
安装 ELRepo 库
# 导入ELRepo仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# 安装ELRepo仓库的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
更新内核
# 查看可用的系统内核包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available# 装最新版本内核
yum --enablerepo=elrepo-kernel install -y kernel-ml
设置 grub2
内核安装好后,需要设置为默认启动选项并重启后才会生效
# 查看系统上的所有可用内核:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
设置新的内核为grub2的默认版本:设置GRUB_DEFAULT=0,通过上面查询显示的编号为 0 的内核作为默认内核:
sed -i 's/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/g' /etc/default/grub# 生成 grub 配置文件并重启
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot# 查看内核
uname -a
安装 Python
# 软件下载地址:我们下载的是python3.9.16
wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz# 配置阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo# 安装依赖包
yum install -y gcc gcc-c++ zlib-devel bzip2-devel openssl-devel \
ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel \
db4-devel libpcap-devel xz-devel libffi-devel git编译安装
tar -zxvf Python-3.9.16.tgz -C /usr/local/src/
cd /usr/local/src/Python-3.9.16/
./configure --prefix=/usr/local/python
make -j 4
make install # 给python做软连接
ln -s /usr/local/python/bin/* /usr/local/bin/# 查看python版本
python3 -V
配置 Python 虚拟环境
因为CentOS 6/7 自带的是 Python2,而Yum等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python 虚拟环境
# 创建 py3 虚拟环境
[root@cong13 ~] python3 -m venv /opt/py3
# 载入 py3 虚拟环境
[root@cong13 ~] source /opt/py3/bin/activate # 把python虚拟环境设为开机自启动
(py3) [root@cong13 ~] echo "source /opt/py3/bin/activate" >> /root/.bashrc
看到下面的提示符代表成功,以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均在该虚拟环境中运行:(py3) [root@cong13 ~]#
3、安装 Jumpserver Core 组件
下载安装
# 解压代码
tar -zxvf jumpserver-3.2.0.tar.gz -C /opt
cd /opt/
mv jumpserver-3.2.0/ jumpserver
替换客户端组件
cd jumpserver/
rm -f apps/common/utils/ip/geoip/GeoLite2-City.mmdb apps/common/utils/ip/ipip/ipipfree.ipdbwget https://download.jumpserver.org/files/ip/GeoLite2-City.mmdb -O apps/common/utils/ip/geoip/GeoLite2-City.mmdbwget https://download.jumpserver.org/files/ip/ipipfree.ipdb -O apps/common/utils/ip/ipip/ipipfree.ipdb# 安装rpm依赖:直接安装rpm_requirements.txt文件中所有的软件
cd /opt/jumpserver/requirements/
sh rpm_pkg.sh
安装 Python 依赖库
# 修改pip安装加速:有时候我们pip下载特别慢,我们需要给pip指定国内的源来提升下载速度
mkdir /root/.pip
vim /root/.pip/pip.conf
---------------------------------------------------
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
---------------------------------------------------# 安装之前先更新pip版本,不然会报错
(py3) [root@cong13 requirements] pip install --upgrade pip setuptools wheel
(py3) [root@cong13 requirements] pip install -r requirements.txt
# #升级pip
(py3) [root@cong13 requirements]#python -m pip install -U --force-reinstall pip
安装 Redis
Jumpserver使用Redis做cache和分布式任务队列,如果有搭建好的redis集群,可以不用搭建。也可以使用二进制包安装redis。
# jumpserver需要6版本的redis,添加reids6仓库
yum -y install epel-release https://repo.ius.io/ius-release-el7.rpm yum -y install redis6 # 启动redis
systemctl start redis
# 把redins添加开机启动
systemctl enable redis
安装 MySQL
# 解压并安装MySQL
tar -xf mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-*# 初始化数据
mysqld --initialize --console
# 更改数据目录权限
chown -R mysql:mysql /var/lib/mysql# 启动服务
systemctl start mysqld
systemctl enable mysqld# 查看MySQL初始密码
cat /var/log/mysqld.log | grep localhost
# 链接数据库
mysql -uroot -p'zQGQ9iijrd-o'
# 更改MySQL 密码
alter user root@'localhost' identified with mysql_native_password by 'jumpserver';
# 创建Jumpserver数据库并授权
mysql -uroot -p'123456'# 创建数据库
mysql> database jumpserver default charset 'utf8';# 创建用户
mysql> create user 'jumpserver'@'localhost' identified with mysql_native_password by 'jumpserver';# 授予权限
mysql> grant all privileges on jumpserver.* to 'jumpserver'@'localhost';
mysql> flush privileges;
生成秘钥
生成随机密钥,等修改配置文件需要
# 生成秘钥
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
# MJhcCtzfTjOsLlD5kMlD4XCP2tfbQBFVWOZGQlmCyrU7bvZQ7# 生成Token
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16;echo
# rAToYbsyCN6HoGCK
修改 Jumpserver 配置文件
注意: 配置文件是Python 格式,不要用TAB,而要用空格
cd /opt/jumpserver/
cp config_example.yml config.yml
vim config.yml
--------------------------------------------------------------------------
# 加密密钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: MJhcCtzfTjOsLlD5kMlD4XCP2tfbQBFVWOZGQlmCyrU7bvZQ7# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
BOOTSTRAP_TOKEN: rAToYbsyCN6HoGCKDB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: jumpserver
DB_NAME: jumpserver# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_PASSWORD:
--------------------------------------------------------------------------
生成数据库表结构和初始化数据
cd /opt/jumpserver/utils/
sh make_migrations.sh
① 解决第一个报错
cd /opt/jumpserver/apps/locale/zh/LC_MESSAGES/
rm -rf django.mo
msgfmt django.po
- msgfmt是语言本地化的工具,用来编译语言翻译后的.po文件为.mo文件,这样系统在启动时候会扫描系统环境提取对应名字的.mo文件中的字符串替代原来的英文,实现本地化。
(py3) [root@cong13 LC_MESSAGES] mv messages.mo django.mo
(py3) [root@cong13 jumpserver] cd /opt/jumpserver/utils/
(py3) [root@cong13 utils] sh make_migrations.sh
运行 jumpserver
# 运行Jumpserver
(py3) [root@cong13 utils] cd /opt/jumpserver/#可以-d参数在后台运行 ./jms start all -d, 确保已经载入 py3 虚拟环境
(py3) [root@cong13 jumpserver] ./jms start
编辑服务启动脚本
vim /usr/lib/systemd/system/jms.service
--------------------------------------------------------------------------------------
[Unit]
Description=jms
After=network.target mariadb.service redis.service docker.service
Wants=mariadb.service redis.service docker.service[Service]
Type=forking
Environment="PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
ExecStart=/opt/jumpserver/jms start all -d
ExecRestart=/opt/jumpserver/jms restart all -d
ExecStop=/opt/jumpserver/jms stop[Install]
WantedBy=multi-user.target
--------------------------------------------------------------------------------------# 启动服务
systemctl daemon-reload
systemctl restart jms
systemctl enable jms# 查看端口
netstat -antup | grep 8080
4、安装 Lina 组件(源码)
Lina 是 JumpServer 的前端 UI 项目,主要使用 Vue,Element UI 完成
安装 node
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
wget https://nodejs.org/dist/v16.5.0/node-v16.5.0-linux-x64.tar.xz
tar -zxvf node-v16.5.0-linux-x64.tar.gz -C /usr/local/
chown -R root:root /usr/local/node-v16.5.0-linux-x64/
echo 'export PATH=/usr/local/node-v16.5.0-linux-x64/bin:$PATH' >>/etc/profile
source /etc/profile
node -v
安装 Lina
tar -zxvf lina-3.2.0.tar.gz -C /opt/# 安装依赖
cd /opt/lina-3.2.0/
npm install -g yarn
# 安装所有依赖包
yarn install
- npm 是 Node.js 的包管理工具,用来安装各种 Node.js 的扩展
- Yarn 是由 Facebook 、Google、Exponent 、Tilde 联合推出的一个新的 Javascript 包管理工具,它的出现主要是为了弥补 npm 的一些缺陷。
修改 Lina 配置文件
(py3) [root@node-16 lina-3.2.0] sed -i "s@Version <strong>.*</strong>@Version <strong>v3.2.0</strong>@g" src/layout/components/Footer/index.vuecp .env.development.example .env.development
vi .env.development
构建部署 lina
# 构建lina
(py3) [root@node-16 lina-3.2.0] yarn serve
(py3) [root@node-16 lina-3.2.0] yarn build# 部署lina
(py3) [root@node-16 lina-3.2.0] cp -rf lina /opt/lina-v3.2.0
安装部署 Luna
tar -xf luna-v3.2.0.tar.gz -C /opt/
5、部署 Koko 组件
Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。
安装 KoKo
# 安装客户端依赖
tar -xf kubectl.tar.gz
mv kubectl /usr/local/bin/rawkubectl
tar -xf helm-v3.9.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/rawhelmchmod 755 /usr/local/bin/rawkubectl /usr/local/bin/rawhelm
chown root:root /usr/local/bin/rawkubectl /usr/local/bin/rawhelm
rm -rf linux-amd64#KoKo安装
tar -zxvf koko-v3.2.0-linux-amd64.tar.gz -C /opt
cd /opt/koko-v3.2.0-linux-amd64/
mv kubectl /usr/local/bin/kubectl
修改配置文件
(py3) [root@cong13 koko-v3.2.0-linux-amd64] cp config_example.yml config.yml
(py3) [root@cong13 koko-v3.2.0-linux-amd64] vim config.yml
启动 KoKo
# &把程序调入后台运行。
(py3) [root@cong13 koko-v3.2.0-linux-amd64] ./koko &
# 查看端口号
netstat -antup | grep 2222# 把koko加入开机自启动
echo "cd /opt/koko-v3.2.0-linux-amd64 && ./koko & " >> /etc/rc.local
6、部署 Lion 组件
Lion 使用了 Apache 软件基金会的开源项目 Guacamole,JumpServer 使用 Golang 和 Vue 重构了 Guacamole 实现 RDP/VNC 协议跳板机功能。
安装 guacamole
tar -zxvf guacamole-server-1.4.0.tar.gz # 安装依赖包
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpmyum install -y cairo-devel libjpeg-turbo-devel libjpeg-devel \
libpng-devel libtool libuuid-devel uuid-devel ffmpeg-devel \
freerdp-devel pango-devel libssh2-devel libtelnet-devel \
libvncserver-devel libwebsockets-devel pulseaudio-libs-devel \
openssl-devel libvorbis-devel libwebp-devel# 编译安装
cd guacamole-server-1.4.0/
./configure --with-init-dir=/etc/init.d
make && make install
ldconfig
安装 Lion
tar -zxvf lion-v3.2.0-linux-amd64.tar.gz -C /opt/# 修改配置文件
cd /opt/lion-v3.2.0-linux-amd64/
cp config_example.yml config.yml
vim config.yml
rAToYbsyCN6HoGCK
启动服务
(py3) [root@node-16 lion-v3.2.0-linux-amd64] /etc/init.d/guacd start
(py3) [root@node-16 lion-v3.2.0-linux-amd64] ./lion &# 设置开机自启动
chkconfig --add guacd
chkconfig guacd on
echo "cd /opt/lion-v3.2.0-linux-amd64 && ./lion & " >> /etc/rc.local
7、部署 Magus 组件
安装 wisp
tar -zxvf wisp-v0.1.6-linux-amd64.tar.gz
mv wisp-v0.1.6-linux-amd64/wisp /usr/local/bin/
chmod 755 /usr/local/bin/wisp
chown root:root /usr/local/bin/wisp
安装 Magus
tar -zxvf magnus-v3.2.0-linux-amd64.tar.gz -C /opt/
chown root:root /opt/magnus-v3.2.0-linux-amd64/magnus
chmod 755 /opt/magnus-v3.2.0-linux-amd64/magnus# 修改配置文件
cd /opt/magnus-v3.2.0-linux-amd64/
cp config_example.yml config.yml
vim wisp_config.yml
-----------------------------------------------------------
CORE_HOST: "http://127.0.0.1:8080"
BOOTSTRAP_TOKEN: rAToYbsyCN6HoGCK
WORK_DIR: "/opt/magnus-v3.2.0-linux-amd64"
COMPONENT_NAME: "magnus"
EXECUTE_PROGRAM: "/opt/magnus-v3.2.0-linux-amd64/magnus"
-----------------------------------------------------------
启动 wisp
(py3) [root@node-16 magnus-v3.2.0-linux-amd64]
wisp --config /opt/magnus-v3.2.0-linux-amd64/wisp_config.yml &# 设置开机自启动
echo "cd /opt/magnus-v3.2.0-linux-amd64 && wisp --config /opt/magnus-v3.2.0-linux-amd64/wisp_config.yml & " >> /etc/rc.local
8、设置 Nginx 整合各个组件
安装 Nginx
这里直接使用yum安装,也可以使用源码包安装
(py3) [root@cong13 ~] yum install -y nginx
修改配置文件
Nginx主要提供反向代理功能,这里要修改主配置文件里的默认server端口
vim /etc/nginx/nginx.conf #把80端口修改为808
创建 Jumpserver.conf 配置文件
vim /etc/nginx/conf.d/jumpserver.conf
server {listen 80;# server_name _;client_max_body_size 5000m; # 前端 Linalocation /ui/ {try_files $uri / /index.html;alias /opt/lina-v3.2.0/;expires 24h;}# Luna 配置location /luna/ {try_files $uri / /index.html;alias /opt/luna-v3.2.0/;expires 24h;}# Core data 静态资源location /media/replay/ {add_header Content-Encoding gzip;root /opt/jumpserver/data/;}location /static/ {root /opt/jumpserver/data/;expires 24h;}# KoKo Lion 配置location /koko/ {# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署# proxy_pass http://127.0.0.1:5000;proxy_pass http://127.0.0.1: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/ {# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署# proxy_pass http://127.0.0.1:8081;proxy_pass http://127.0.0.1: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;}location /ws/ {# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署# proxy_pass http://127.0.0.1:8080;proxy_pass http://127.0.0.1:8080;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;}location ~ ^/(core|api|media)/ {# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署# proxy_pass http://127.0.0.1:8080;proxy_pass http://127.0.0.1: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 / {rewrite ^/(.*)$ /ui/$1 last;}
}
启动 nginx
# 检查配置文件
nginx -t启动nginx
systemctl start nginx
systemctl enable nginx