Jumpserver docker搭建
一、概述
Jumpserver 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。
Jumpserver 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。
Jumpserver 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。
Jumpserver 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。
二、安装
环境介绍
操作系统 | 配置 | ip地址 | 主机名 | 安装软件 |
centos 7.6 | 2核4g | 192.168.31.200 | jumpserver | docker |
centos 7.6 | 1核2g | 192.168.31.150 | svr-1 | 无 |
centos 7.6 | 1核2g | 192.168.31.216 | svr-2 | 无 |
mysql
使用docker方式安装
注意:密码不要设置123456这种简单的密码
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
# 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方式安装
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
生成随机加密密钥
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.5.6
mkdir -p /data/jumpserver 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.31.200 \ -e DB_PORT=3306 \ -e DB_USER=jumpserver \ -e DB_PASSWORD="abcd@1234" \ -e DB_NAME=jumpserver \ -e REDIS_HOST=192.168.31.200 \ -e REDIS_PORT=6379 \ -e REDIS_PASSWORD="123456" \ jumpserver/jms_all:1.5.6
参数解释:
-h 指定docker主机名
-e 指定环境变量,注意修改mysql和redis的ip地址和密码。
查看jumpserver启动日志
# docker logs -f jumpserver 2020-01-09 20:02:18 Thu Jan 9 20:02:18 2020 2020-01-09 20:02:18 Jumpserver version 1.5.6, more see https://www.jumpserver.org 2020-01-09 20:02:18 Check database connection ... users [ ] 0001_initial ... 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
访问网页
用户名:admin
密码:admin
四、配置
更改密码
由于默认密码是admin,不安全。需要修改一下
点击右侧更改密码即可。
基本设置
点击系统设置-->基本设置
更改当前url和主题前缀
配置邮箱
用户管理
先来看一下jumpserver的用户
用户组
创建开发组
用户列表
默认只有一个administrator管理员账户,创建一个开发用户zhang
设置默认密码,开启MFA
用户登录
使用普通用户登录
再次输入密码
安装应用
使用手机扫描,输入6位校验码。
注意:部分安卓手机,可能无法扫描。需要手动输入提供的秘钥,在上图红框中的秘钥。
输入6位校验码之后,就会提示绑定成功
重新登录,输入用户和密码,会提示MFA认证
登录成功之后,效果如下:
资产管理
管理用户
管理用户是针对于主机资产的管理员账户,可以用来推送一般权限账户。
进入docker容器,创建用户assets,生成秘钥
# docker exec -it jumpserver /bin/bash # useradd assets # su assets $ 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:N03AqZFRSrdTfPs+nF9x+FaOtKqkW73w4ItCHXFryS0 assets@jumpserver The key's randomart image is: +---[RSA 2048]----+ | o=+o. | | .+o++. . | | .*o+.. . | | o E+. .. | | .Soo.. ooo| | . .. o . ==| | . = . +.*| | . * + o =o| | .+.+o+ +| +----[SHA256]-----+
退出容器,拷贝秘钥对
# cd /data/jumpserver/ # docker cp jumpserver:/home/assets/.ssh/id_rsa . # docker cp jumpserver:/home/assets/.ssh/id_rsa.pub .
将id_rsa下载到桌面
创建管理用户assets,上传秘钥文件
系统用户
系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户。在授权规则中,会用到此用户!
创建develop,专门为开发人员使用的。
注意:上面有一个sudo,表示不允许执行命令的列表。注意绝对路径要填写正确,否则不会生效。
禁止开发人员,切换用户。比如root
一定要禁止,否则输入
sudo su -
就可以直接切换到root用户,非常不安全!
资产列表
默认没有资产,default下面也没有节点,可以创建不同类型的节点,在节点组下创建节点。
也可以对网域进行管理,网域概念估计是之前版本的IDC、机房的概念。
创建资产
新建节点
重命名为测试环境,点击创建资产
输入基本信息,如果ssh端口不是22,请更改。
登录到主机svr-1,新建用户assets,生成秘钥
[root@svr-1 ~]# useradd assets [root@svr-1 ~]# su assets [assets@svr-1 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:SH/ap8XVKnqSYlfJLUpNsjUrdNyW4aY/fmOA/UgoF7k assets@svr-1 The key's randomart image is: +---[RSA 2048]----+ | | | . | | . ..o o | | . o oo* *. | | . S..O*O. .| | =+EO=.. | | ..+=*o= | | o ==.oo+.| | . ooo .oo.| +----[SHA256]-----+ [assets@svr-1 root]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys [assets@svr-1 root]$ chmod 600 ~/.ssh/authorized_keys [assets@svr-1 ~]$ cd ~/.ssh/ [assets@svr-1 .ssh]$ vi authorized_keys
登录到jumpserver,查看docker容器中assets的公钥
# cd /data/jumpserver/ # cat id_rsa.pub
在上面的步骤 vi authorized_keys ,添加assets的公钥
... # jumpserver assets ssh-rsa AAAAB3NzaC1y...
登录svr-1主机,修改配置文件
vi /etc/sudoers
在root后面添加一行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
assets ALL=(ALL) NOPASSWD:ALL
使用 :x! 强制保存
测试资产
确保测试是ok的
如果没有在svr-1开启assets用户的sudo免密,会导致测试失败!
权限管理
资产授权
点击创建权限规则
web终端
登录zhang用户,点击web终端
点击svr-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,效果如下:
ssh终端
上面提到的是web终端方式,如果不喜欢的话,可以使用ssh客户端工具,比如xhsell。
这里推荐使用秘钥方式登录
确保windos10或者mac已经生成了ssh密钥对。
windows10路径为:C:\Users\用户名\.ssh
mac路径为:~/.ssh
将id_rsa.pub文件内容,写入到ssh公钥
开启mfa
使用xshell新建一个连接。
注意:ip地址是jumpserver的地址,不是svr-1的地址
端口是2222,不是22
选择秘钥验证,用户名zhang,选择私钥文件
点击连接,会提示mfa认证。
登录成功之后,效果如下:
输入数字1
因为只有一台资产,所以就直接登录了。如果有多台,会有一个列表选择的!
测试切换到root用户
提示输入密码,注意:我没有给develop设置密码。
那么我测试一下,给develop用户设置一个密码。
登录到svr-1,使用root登录,给develop设置密码
# passwd develop
再次使用zhang登录堡垒机
提示无法执行。
上面是为开发用户,设置了一套权限。如果是管理员呢?
新建用户组
manage
新建一个系统用户manage
创建授权规则
推送用户
确保推送成功
使用admin登录jumpserver
点击会话管理-->web终端
点击svr-1,就会以manage用户登录了。
切换到root用户
由于没有给manage设置密码,我这里直接使用在svr-1设置sudo免密即可。
以root用户登录svr-1,修改配置文件
vi /etc/sudoers
增加一行manage
## Allow root to run any commands anywhere root ALL=(ALL) ALL assets ALL=(ALL) NOPASSWD:ALL manage ALL=(ALL) NOPASSWD:ALL
刷新web终端,再次切换用户
这样,就可以了!
本文参考链接: