JumpServer

本文最后更新于:2023年12月5日 晚上

JumpServer 简介

跳板机 和 堡垒机

跳板机:跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。但跳板机没有实现对运维人员操作行为的控制和审计,此外,跳板机存在严重的安全风险,一旦跳板机系统被攻入,则将后端资源风险完全暴露无遗。安装 OpenVPN 的机器就是跳板机

堡垒机:跳板机的升级版,提供了认证、授权、审计、自动化运维等功能

可以同时配置 openvpn 和 jumpserver,运维自己通过 openvpn 连接,比较方便,开发测试等其他人员都通过 jumpserver 连接,便于管理

JumpServer 是全球首款完全开源的堡垒机,使用 Python / Django、Go 进行开发,符合 4A 标准

官方地址: http://www.jumpserver.org/
github 项目: https://github.com/jumpserver

特色优势:

  • 开源
  • 分布式
  • 无插件:仅需浏览器,极致的 Web Terminal 使用体验;
  • 多云系统:一套系统,同时管理不同云上面的资产;
  • 云端存储
  • 多租户:一套系统,多个子公司和部门同时使用。

功能列表

https://docs.jumpserver.org/zh/master/#_3,其中部分功能商业版才具有

  • 身份鉴别

    Authentication,防止身份冒用和复用

  • 账号管理

    Account,人员和资产管理

  • 授权控制

    Authorization,防止内部误操作和权限滥用

  • 安全审计

    Audit,追溯的保障和事故分析的依据

  • 数据库审计

    Database

JumpServer 组成

安装 JumpServer

文档只介绍了极速部署和负载均衡两种安装方式,其实以前的文档是很详细的,现在大大简化了,可能是为了让你买商业版吧

jumpserver 依赖 MySQL(5.7 及以上)和 Redis(5.0 及以上),这里为了方便,均使用 docker 安装

安装 MySQL

root@u1:~# docker pull mysql:5.7.32  # pull mysql镜像,指定版本号5.7.32
# 在宿主机准备相关目录
root@u1:~# mkdir -p /usr/local/jumpserver/etc/mysql/{conf.d,mysql.conf.d}
root@u1:~# mkdir -p /data/jumpserver/mysql
# 生成配置文件,指定字符集
root@u1:~# tee /usr/local/jumpserver/etc/mysql/conf.d/mysql.cnf <<EOF
[mysql]
default-character-set=utf8 # 指定字符集
EOF
root@u1:~# tee /usr/local/jumpserver/etc/mysql/mysql.conf.d/mysqld.cnf <<EOF
[mysqld]
pid-file= /var/run/mysqld/mysqld.pid
socket= /var/run/mysqld/mysqld.sock
datadir= /var/lib/mysql
symbolic-links=0
character-set-server=utf8  # 指定字符集
EOF
root@u1:~# tree /usr/local/jumpserver/etc/mysql/
/usr/local/jumpserver/etc/mysql/
├── conf.d
│   └── mysql.cnf
└── mysql.conf.d
    └── mysqld.cnf

2 directories, 2 files
# 启动容器
root@u1:~# docker container run -d -it -p 3306:3306 --name mysql --restart always \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=jumpserver \
-e MYSQL_USER=jumpserver \
-e MYSQL_PASSWORD=123456 \
-v /data/jumpserver/mysql:/var/lib/mysql \
-v /usr/local/jumpserver/etc/mysql/mysql.conf.d/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /usr/local/jumpserver/etc/mysql/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf \
mysql:5.7.32

# 添加root'@'127.0.0.1用户
root@u1:~# docker exec -it mysql bash
ot@829aa7ccf010:/# mysql -uroot -p123456 -e "CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY \"123456\";"
root@829aa7ccf010:/# mysql -uroot -p123456 -e "GRANT ALL ON *.* TO 'root'@'127.0.0.1';"

安装 Redis

# 拉取镜像
root@u1:~# docker pull redis:5.0.10-alpine
# 启动容器
root@u1:~# docker run -d -p 6379:6379 --name redis --restart always redis:5.0.10-alpine

# 另开一台虚拟机,验证redis是否安装成功
[root@c71 ~]$yum install redis -y
[root@c71 ~]$redis-cli -h 10.0.0.118
10.0.0.118:6379> info server
# Server
redis_version:5.0.10
...

部署 JumpServer

可以单独部署各个组件,为了方便,直接部署全部:jms_all

生成 key 和 token:

root@u1:/data/wwwroot/test# cat key.sh
#!/bin/bash
if [ ! "$SECRET_KEY" ]; then
    SECRET_KEY=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50)
    echo "SECRET_KEY=$SECRET_KEY" >>~/.bashrc
    echo $SECRET_KEY
else
    echo $SECRET_KEY
fi
if [ ! "$BOOTSTRAP_TOKEN" ]; then
    BOOTSTRAP_TOKEN=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)
    echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >>~/.bashrc
    echo $BOOTSTRAP_TOKEN
else
    echo $BOOTSTRAP_TOKEN
fi
root@u1:/data/wwwroot/test# ./key.sh
4NrDPj3azajRYQ6B4MM9pi559G1l3JPOW4i8LkUblSKUM7jojL  # SECRET_KEY
p4ecZLj7Q2QTLs1s          # BOOTSTRAP_TOKEN
root@u1:/data/wwwroot/test# tail -n2 ~/.bashrc
SECRET_KEY=4NrDPj3azajRYQ6B4MM9pi559G1l3JPOW4i8LkUblSKUM7jojL
BOOTSTRAP_TOKEN=p4ecZLj7Q2QTLs1s
# 拉取镜像,官方给的docker镜像版本较低
root@u1:~# docker pull jumpserver/jms_all:v2.5.3
# 启动容器
root@u1:~# docker run -d --name jms_all -p 80:80 -p 2222:2222 --restart always \
-v /opt/jumpserver/data:/opt/jumpserver/data \
-e SECRET_KEY=4NrDPj3azajRYQ6B4MM9pi559G1l3JPOW4i8LkUblSKUM7jojL \
-e BOOTSTRAP_TOKEN=p4ecZLj7Q2QTLs1s \
-e DB_HOST=172.17.0.1 \
-e DB_PORT=3306 \
-e DB_USER=root \
-e DB_PASSWORD=123456 \
-e DB_NAME=jumpserver \
-e REDIS_HOST=172.17.0.1 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD='' \
--privileged=true \
jumpserver/jms_all:v2.5.3

# 验证启动是否成功
root@u1:~# docker logs -f jms_all
2021-01-09 11:44:43 Sat Jan  9 11:44:43 2021
2021-01-09 11:44:43 JumpServer version v2.5.3, more see https://www.jumpserver.org
2021-01-09 11:44:43 Check database connection ...
...
2021-01-09 11:44:49 Database connect success
2021-01-09 11:44:49 Check database structure change ...
2021-01-09 11:44:49 Migrate model change to database ...
Operations to perform:
  Apply all migrations: admin, applications, assets, audits, auth, authentication, captcha, common, contenttypes, django_cas_ng, django_celery_beat, jms_oidc_rp, ops, orgs, perms, sessions, settings, terminal, tickets, users
Running migrations:
...各种OK...
2021-01-09 11:45:16 Collect static files
2021-01-09 11:45:19 Collect static files done
guacd[88]: INFO:        Guacamole proxy daemon (guacd) version 1.2.0 started
Starting guacd: SUCCESS
Tomcat started.
Jumpserver ALL v2.5.3
官网 http://www.jumpserver.org
文档 http://docs.jumpserver.org

进入容器命令 docker exec -it jms_all /bin/bash
root@u1:~# ll /data/jumpserver/mysql/jumpserver/
total 15648
...  # 生成的各种表

通过 80 端口登录:浏览器输入 10.0.0.118

默认账号密码都是 admin,第一次登录需要修改密码,修改密码为 123456

通过 2222 端口登录:另开一台虚拟机

[root@c71 ~]$ssh -p 2222 admin@10.0.0.118
admin@10.0.0.118's password:  # 123456
                Administrator,  欢迎使用JumpServer开源堡垒机系统

        1) 输入 部分IP,主机名,备注 进行搜索登录(如果唯一).
        2) 输入 / + IP,主机名,备注 进行搜索,如:/192.168.
        3) 输入 p 进行显示您有权限的主机.
        4) 输入 g 进行显示您有权限的节点.
        5) 输入 d 进行显示您有权限的数据库.
        6) 输入 k 进行显示您有权限的Kubernetes.
        7) 输入 r 进行刷新最新的机器和节点信息.
        8) 输入 h 进行显示帮助.
        9) 输入 q 进行退出.
Opt>

使用 JumpServer

配置邮件

系统设置 -> 邮件设置:

用户管理

多因子认证

创建用户的时候,可以选择开启多因子认证功能,就是需要安装手机 APP 谷歌验证器,在登录的时候,打开谷歌验证器输入验证码,二次验证,加强安全性

注意:启用,未来用户可以自己关闭;强制启用,未来用户不可以强制关闭

注意:服务器的时间需要校准,否则谷歌验证器无法通过验证

timedatectl set-timezone Asia/Shanghai # 校准服务器时间

统审计员

系统审计员即查看录像带的人,可以实时共享其他用户的终端,可以以录像的方式查看用户的操作历史

管理资产

jumpserver 内置了 ansible

注意:ubuntu 默认不能使用 root 进行 ssh 连接,需要修改 ssh 配置

lujinkai@u1:~$ sudo vim /etc/ssh/sshd_config
PermitRootLogin yes  # 在 #PermitRootLogin prohibit-password 下面添加此行
UseDNS no    # 加速ssh连接速度
lujinkai@u1:~$ sudo systemctl restart sshd.service # 重启服务

管理用户

管理用户是资产(被控服务器)上的 root,或拥有 NOPASSWD: ALL sudo 权限的用户, JumpServer 使用该用户来 推送系统用户获取资产硬件信息 等。

系统用户

用户使用自己的用户名登录 JumpServer,JumpServer 使用系统用户登录资产和应用

命令过滤

只能是间接禁止,因为虽然禁止的命令不能使用,但是可以通过脚本执行

权限管理

资产授权

有了用户,有了资产,就需要将用户和资产关联起来

应用管理

数据库

以 mysql 为例:

  1. 应用管理 –> 数据库 –> 创建
  2. 权限管理 –> 系统用户 –> 创建,协议选 mysql
  3. 权限管理 –> 应用授权 –> 创建

注意:jumpserver2.5.3 版本有 bug,web 终端无法连接数据库,建议选择其他版本,v2.4.4 没有此 bug

会话管理

所有用户的所有行为都会被 jumpserver 以录像的形式记录下来,方便在将来出现问题的时候进行追责


JumpServer
http://blog.lujinkai.cn/运维/JumpServer/JumpServer/
作者
像方便面一样的男子
发布于
2021年1月7日
更新于
2023年12月5日
许可协议