概述

  • Jumpserver 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。
  • Jumpserver 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。
  • Jumpserver 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。
  • Jumpserver 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。

安装

mysql

使用docker方式安装

注意:密码不要设置123456这种简单的密码

1
2
mkdir -p /data/mysql/data
docker run -d --name mysql --restart=always -e MYSQL_ROOT_PASSWORD=abcd@1234 -p 3306:3306 -v /data/mysql/data:/var/lib/mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

创建jumpserver数据库

注意:密码不要设置123456这种简单的密码,否则会导致jumpserver无法写入数据!提示无法连接mysql

1
2
3
4
5
6
7
# docker exec -it mysql /bin/bash
# mysql -u root -pabcd@1234
mysql> create database jumpserver default charset 'utf8mb4';
mysql> grant all on jumpserver.* to 'jumpserver'@'%' identified by 'abcd@1234';
mysql> flush privileges;
mysql> exit;
# exit

redis

使用docker方式安装

1
2
mkdir -p /data/redis/data
docker run -d -it --name redis -p 6379:6379 -v /data/redis/data:/data --restart=always --sysctl net.core.somaxconn=1024 redis:4.0.10 --requirepass "123456"

Jumpserver

Jumpserver 封装了一个 All in one Docker, 可以快速启动。该镜像集成了所需要的组件, 支持使用外置 Database 和 Redis

生成随机加密密钥

1
2
3
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

启动Jumpserver

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@node02 ~]# mkdir -p /data/jumpserver
[root@node02 ~]# docker run -d --name jumpserver -h jumpserver --restart=always \
> -v /data/jumpserver:/opt/jumpserver/data/media \
> -p 80:80 \
> -p 2222:2222 \
> -e SECRET_KEY=$SECRET_KEY \
> -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN \
> -e DB_HOST=192.168.80.14 \
> -e DB_PORT=3306 \
> -e DB_USER=jumpserver \
> -e DB_PASSWORD="abcd@1234" \
> -e DB_NAME=jumpserver \
> -e REDIS_HOST=192.168.80.14 \
> -e REDIS_PORT=6379 \
> -e REDIS_PASSWORD="123456" \
> jumpserver/jms_all:1.5.6
c028f36882fbc8a087e997a2da528344e61df5a267b77c4c75fafa1209eceae8

参数解释:
-h 指定docker主机名
-e 指定环境变量,注意修改mysql和redis的ip地址和密码。

查看jumpserver启动日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@node02 ~]# docker logs -f jumpserver 
2021-06-10 17:03:17 Thu Jun 10 17:03:17 2021
2021-06-10 17:03:17 Jumpserver version 1.5.6, more see https://www.jumpserver.org
2021-06-10 17:03:17 Check database connection ...
users
[ ] 0001_initial
[ ] 0002_auto_20171225_1157_squashed_0019_auto_20190304_1459 (18 squashed migrations)
[ ] 0020_auto_20190612_1825
Applying terminal.0020_auto_20191218_1721... OK
Applying tickets.0001_initial... OK
2021-06-10 17:03:40 Collect static files
2021-06-10 17:03:43 Collect static files done
guacd[113]: INFO: Guacamole proxy daemon (guacd) version 1.0.0 started
Starting guacd: SUCCESS
Tomcat started.
Jumpserver ALL 1.5.6
官网 http://www.jumpserver.org
文档 http://docs.jumpserver.org
有问题请参考 http://docs.jumpserver.org/zh/docs/faq.html

进入容器命令 docker exec -it jms_all /bin/bash

访问网页

http://192.168.80.14/
用户名:admin
密码:admin
图片

配置

基本配置

图片
图片
图片

用户管理

先来看一下jumpserver的用户
图片

用户组

创建开发组
图片

用户列表

默认只有一个administrator管理员账户,创建一个开发用户zhang
设置默认密码,开启MFA
图片

资产管理

管理用户

管理用户是针对于主机资产的管理员账户,可以用来推送一般权限账户。

进入docker容器,创建用户assets,生成秘钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@node02 ~]# docker exec -it jumpserver /bin/bash
[root@jumpserver opt]# useradd assets
[root@jumpserver opt]# su - assets
[assets@jumpserver ~]$ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/home/assets/.ssh'.
Your identification has been saved in /home/assets/.ssh/id_rsa.
Your public key has been saved in /home/assets/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:B+OasCtcfvIX/UZtZx5I+GxiWeCZ/6lSyh9wc+MIcgU assets@jumpserver
The key's randomart image is:
+---[RSA 2048]----+
| E |
| .. |
| o . =. |
| . o =.o |
| . So.+B+.o |
| .o o..++=BB.+|
| . o. o .oo=+.=o|
| o o.. . +o .o.|
| ..+.. .oo. |
+----[SHA256]-----+

退出容器,拷贝秘钥对

1
2
3
[root@node02 ~]# cd /data/jumpserver/
[root@node02 jumpserver]# docker cp jumpserver:/home/assets/.ssh/id_rsa .
[root@node02 jumpserver]# docker cp jumpserver:/home/assets/.ssh/id_rsa.pub .

将id_rsa下载到桌面

创建管理用户assets,上传秘钥文件
图片

系统用户

系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户。在授权规则中,会用到此用户!
创建develop,专门为开发人员使用的。
图片
注意:上面有一个sudo,表示不允许执行命令的列表。注意绝对路径要填写正确,否则不会生效。
禁止开发人员,切换用户。比如root
一定要禁止,否则输入 sudo su -
就可以直接切换到root用户,非常不安全!

资产列表

创建资产

默认没有资产,default下面也没有节点,可以创建不同类型的节点,在节点组下创建节点。也可以对网域进行管理,网域概念估计是之前版本的IDC、机房的概念。
新建节点
图片
图片
登录到主机svr-1,新建用户assets,生成秘钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@szl ~]# useradd assets
[root@szl ~]# su assets
[assets@szl root]$ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/home/assets/.ssh'.
Your identification has been saved in /home/assets/.ssh/id_rsa.
Your public key has been saved in /home/assets/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pKZolBiOy2BTCdJJ13F2M1Syqh2lViIULK50SGtciIQ assets@szl
The key's randomart image is:
+---[RSA 2048]----+
|+*.o.o+oo.*.. |
|E *.+.oo . = |
|.o B .. o + |
|ooB.o + * |
|+*oo o S |
|+oo. o + . |
|..o . . . |
| . |
| |
+----[SHA256]-----+
[assets@szl root]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[assets@szl root]$ chmod 600 ~/.ssh/authorized_keys
[assets@szl root]$ cd ~/.ssh/
[assets@szl .ssh]$ vi authorized_keys

登录到jumpserver,查看docker容器中assets的公钥

1
2
3
[root@node02 jumpserver]# cd /data/jumpserver/
[root@node02 jumpserver]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCh0VD6+kzJq8G5QG8wFlqEBYj3XohJbYER8gI1iAzEDVY7rYX8xXSULYl2f0TVgFr3G+vEuSdESt+kfaGifqF8gxIX2T5YgYCiwX1CBpEs55yq42VwwXtvVdtNiGrMLA6aFhB3feaJdam/DvxNulr+i1qDfNmRDZkuqQ9uMx4Gy

将192.168.80.14上的公钥加到192.168.80.7,在上面的步骤 vi authorized_keys ,添加assets的公钥

1
2
3
4
5
[assets@szl .ssh]$ vi authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgm+vI9YCVMB3KLycoXxl/GrylhD8XCQvk8wyrs0qaq0S8keAPDxFfCqTLWlQDMlDz6
X6gPLj8I51GuVAouA8G0ZDYfw66Ku04ErBhxBBfVLLuCSUdYwhDnKlAJAF2okj3DYprPF5g1SV/rm/vCDw2cnWipbCTJfmv+3vH1YgQYa
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCh0VD6+kzJq8G5QG8wFlqEBYj3XohJbYER8gI1iAzEDVY7rYX8xXSULYl2f0TVgFr3G
EuSdESt+kfaGifqF8gxIX2T5YgYCiwX1CBpEs55yq42VwwXtvVdtNiGrMLA6aFhB3feaJdam/DvxNulr+i1qDfNmRDZkuqQ9uMx4Gy

登录svr-1主机,修改配置文件

1
2
3
4
5
6
vi /etc/sudoers
在root后面添加一行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
assets ALL=(ALL) NOPASSWD:ALL
使用 :wq! 强制保存

测试资产

图片
图片
确保测试是ok的
如果没有在svr-1开启assets用户的sudo免密,会导致测试失败!

权限管理

点击创建权限规则
图片

web终端

登录shi用户,点击web终端
图片
图片
出现报错

1
Connect asset svr-1 error: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password publickey], no supported methods remain

这是因为svr-1主机,还没有develop用户
点击资产管理–>系统用户,点击推送
图片
确保推送成功
图片
重新刷新web终端页面,再次点击svr-1,就可以登录了。
输入命令 date,效果如下:

1
2
3
[test@szl ~]$ date
2021年 06月 16日 星期三 17:55:18 CST
[test@szl ~]$