Jump Server 堡垒机搭建及使用

博客作者:联系请点击,搬运不易,希望请作者喝咖啡,可以点击联系博客作者

一、Jump Server简介及环境要求

演示视频

Jumpserver 官方介绍

  • Jumpserver 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。

  • Jumpserver 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。

  • Jumpserver 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。

  • Jumpserver 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。

架构图

JumpServer 分为多个组件,大致的架构如下图所示。其中 LinaLuna 为纯静态文件,最终由 nginx 整合。

官方DEMO

环境要求

JumpServer 组件及其监听端口

系统: CentOS Linux release 8.4.2105

Name

Core

Python

MySQL

MariaDB

Redis

Version

v2.13.1

>= 3.6

>= 5.7

>= 10.2

>= 6

关闭 SELinux 和防火墙

添加镜像源仓库

二、准备 Python3 和 Python 虚拟环境

安装依赖软件包

安装Python3.6

建立Python虚拟环境

因为 CentOS 6/7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python 虚拟环境

创建虚拟环境,环境命令自定义为py3

三、安装 Redis

设置Redis密码

验证密码是否能正常登录成功、查询等

四、安装Mariadb数据库

初始化数据库

创建数据库 Jumpserver 并授权验证

生成随机数据库密码

数据库配置

数据库用户更改密码SQL语句

验证授权是否正确,是否能正常登录成功

五、安装 Jump Server

下载 Jump Server 项目源码

安装 软件环境依赖

安装 Python 库依赖

解决报错:

错误一:

解决方法:

步骤一:按照上面链接复制的两行内容,修改如下文件

步骤二:修改保存好,执行如下命令,完美解决

错误二:

解决方法:

如果下载速度很慢, 可以换国内源

修改 Jumpserver 配置文件

确认内容有没有错误

启动 Jumpserver

确保已经载入 py3 虚拟环境

新版本更新了运行脚本, 使用方式./jms start|stop|status all 后台运行请添加 -d 参数

六、安装 KoKo 组件

KoKo 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。

环境要求

Name

KoKo

Go

Version

v2.13.1

1.15

安装 Go

Go 官方网站参考文档部署 golang,请根据 环境要求,通过命令行中判断是否安装完成:

设置 Go 国内加速镜像

下载 KoKo 项目源代码

在 KoKo 项目下构建应用

1拷贝压缩包文件到对应的服务器

2、解压编译的压缩包

3、修改配置文件并运行

启动 KoKo

新版本更新了运行脚本, 使用方式./koko -s start|stop|status 后台运行请添加 -d 参数

查看启动状态

七、部署 Guacamole Server

更新所有的包和依赖

要更新所有的包和它们的依赖,在root权限下执行如下命令:

编译安装 guacamole 服务

更新systemd以找到/etc/init.d/目录中安装的guacd (Guacamole)服务

设置 Guacamole 环境变量

启动 Guacamole

八、安装 Lion 组件

Lion 使用了 Apache 软件基金会的开源项目 Guacamole,JumpServer 使用 Golang 和 Vue 重构了 Guacamole 实现 RDP/VNC 协议跳板机功能。

环境要求

Name

JumpServer

Guacd

Lion

Version

v2.13.1

v2.13.1

Lion 是基于 Apache Guacamole 开发,原生部署 Lion 需要有 Guacamole Server (版本 >= 1.3.0)。

下载 Lion 项目源代码

修改 Lion 配置文件

Lion 的启动配置,参考 config_example

启动 Lion

/etc/systemd/system 目录创建 lion-v2.10.0.service 文件并配置以下内容

重载系统服务

查看 Lion 服务状态

、安装 Node

检查是否安装成功及查看安装的版本

十、安装 Lina 组件

Lina 是 JumpServer 的前端 UI 项目,主要使用 VueElement UI 完成。

环境要求

Name

Lina

Node

Version

v2.13.1

10

下载 Lina 项目源代码

安装依赖

修改配置文件⚓︎

运行 Lina⚓︎

构建 Lina⚓︎

构建完成后的 lina 包为 html 文件,可以直接移到到 nginx 服务器。

构建完成后, 生成在 build 目录下

十一、安装 Luna 组件

Luna 是 JumpServer 的前端 UI 项目,主要使用 Angular CLI 完成。

环境要求⚓︎

Name

Luna

Node

Version

v2.13.1

10

下载 Luna 项目源代码

这个项目是用Angular CLI 1.3.2 版生成的。

安装依赖

修改 Luna 配置文件

运行 Luna

构建 Luna

可以加 -prod 来进行生产构建 ng build -prod

构建完成后, 生成在 build 目录下

十二、安装 Nginx

配置 Nginx 整合各组件

修改配置文件

运行 Nginx

十三、开始使用 Jumpserver

检查应用是否已经正常运行

服务全部启动后, 访问 JumpServer 服务器 nginx 代理的 80 端口, 不要通过8080端口访问 默认账号: admin 密码: admin

默认账号: admin 密码: admin

到Jumpserver 会话管理-终端管理 检查 koko Guacamole 等应用的注册。

测试连接

如果登录客户端是 macOS 或 Linux, 登录语法如下

密码: admin

如果登录客户端是 Windows, Xshell Terminal 登录语法如下

密码: admin

如果能登陆代表部署成功

# sftp默认上传的位置在资产的 /tmp 目录下

# windows拖拽上传的位置在资产的 Guacamole RDP上的 G 目录下

系统设置

修改 url 的"localhost"为你的实际 url 地址, 否则邮件收到的地址将为"localhost" 也无法创建新用户

邮件设置

# 点击页面上边的"邮件设置", 进入邮件设置页面

# 默认使用 25 端口, 不勾选 SSL 和 TLS; 如果需要勾选 SSL, 端口需要修改成 465; 如果需要勾选 TLS, 端口需要改成 587

# 不可以同时勾选 SSL 和 TLS

# 配置邮件服务后, 点击页面的"测试连接"按钮, 如果配置正确, Jumpserver 会发送一条测试邮件到您的 SMTP 账号邮箱里面, 确定收到测试邮件后点击保存即可使用

点测试后会收到一封测试邮件

邮件设置的查看方法

LDAP设置

# 如果不需要使用"ldap"用户登陆 jumpserver, 可以直接跳过, 不需要设置

# 先"测试"通过才能保存

# DN 和 OU 一定要完整(如 "DN:cn=Manage,ou=Jumpserver,dc=jumpserver,ou=org")

# 注:可借用第三方 gui 工具查看 ldap 用户的属性, 新版本已经支持中文名登录, 即cn=中文也可正常使用

终端设置

# "密码认证"和"密钥认证"是 SSH 连接跳板机时所使用的认证方式(都不选会造成无法使用 SSH 方式连接登录跳板机, 不影响 web 登录)

# "Telnet成功正则表达式" telnet设备登陆失败需要设置

# "命令存储""录像存储"位置设置

# "命令存储""录像存储"修改后, 需要在Jumpserver 会话管理-终端管理 修改terminal的配置 录像存储 命令记录, 然后重启 Jumpserver 服务

# 设置后重启 Coco 才能生效

安全设置

# "MAF二次认证"勾选会开启全局强制"MFA", 所有 jumpserver 用户必须使用动态口令进行认证登录(即时生效)

# "限制登录失败"和"限制登录时间"设置需要重启 jumpserver 才能生效

# "SSH最大空闲时间"设置需要重启 coco 才能生效

# "密码校验规则"设置立即生效

十四、用户管理

创建 Jumpserver 用户

# 点击页面左侧"用户列表"菜单下的"用户列表", 进入用户列表页面

# 点击页面左上角"创建用户"按钮, 进入创建用户页面, (也可以通过右上角导入模版进行用户导入)

# 其中, 用户名即 Jumpserver 登录账号(具有唯一性, 不能重名)。名称为页面右上角用户标识(可重复)

# 成功提交用户信息后, Jumpserver 会发送一条设置"用户密码"的邮件到您填写的用户邮箱

# 点击邮件中的设置密码链接, 设置好密码后, 您就可以用户名和密码登录 Jumpserver 了。

# 用户首次登录 Jumpserver, 会被要求完善用户信息, 按照向导操作即可。

注:MFA 即 Google Authenticator, 使用此软件需要APP时间与浏览器时间同步

资产管理

# "节点"不能重名, 右击节点可以添加、删除和重命名节点, 以及进行资产相关的操作

注:如果有 linux 资产和 windows 资产, 建议先建立 Linux 节点与 Windows 节点, 不然"授权"时不好处理

查看主机名及IP地址添加资产

创建管理用户

"管理用户"是资产上的 root, 或拥有 NOPASSWD: ALL sudo 权限的用户, Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。 Windows或其它硬件可以随意设置一个

# "名称" 不能重复

# "ssh私钥" 如果私钥有密码, 请把key的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥

创建系统用户

# "系统用户"是 Jumpserver 跳转登录资产时使用的用户, 用户使用该用户登录资产

# "自动生成密码"、"自动推送"、"Sudo"等功能需要对应资产的"管理用户"是且有root权限, 否则自动推送失败

# ssh 协议的 "Sudo" 栏设定用户的 sudo 权限,

# ssh 协议如果创建的"系统用户"已在资产上面存在, "推送"将会覆盖掉原用户的"home"目录权限(注: 替换成700权限)

# ssh 协议的 "ssh私钥" 如果私钥有密码, 请把key的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥

# 这里简单举几个 "sudo" 设置例子

Sudo /bin/su # 当前系统用户可以免sudo密码执行sudo su命令

Sudo /usr/bin/git, /usr/bin/php, /bin/cat, /bin/more, /bin/less, /usr/bin/tail

# 当前系统用户可以免sudo密码执行git php cat more less tail

Sudo !/usr/bin/yum # 当前系统用户不可以执行sudo yum命令

# 此处的权限应该根据使用用户的需求汇总后定制, 原则上给予最小权限即可

# "系统用户"创建时, 如果选择了"自动推送" Jumpserver 会使用"Ansible"自动推送系统用户到资产中, "root"用户不支持推送

# 如果资产(交换机、Windows)不支持"Ansible", 请去掉"自动生成密钥"、"自动推送"勾选。手动填写资产上已有的账号及账号密码

# 如果想让用户登录资产时自己输入密码, 可以在创建系统用户时选择"手动登录"

http://docs.jumpserver.org/zh/latest/_images/admin_assets_system-user_create_01.jpg
http://docs.jumpserver.org/zh/latest/_images/admin_assets_system-user_create_02.jpg

创建命令过滤

如无需要, 可忽略此步骤, 目前仅支持 ssh 与 telnet 协议

# "系统用户"可以绑定一些"命令过滤器",一个过滤器可以定义一些"规则"

# 当"用户"使用这个"系统用户"登录资产,然后执行一个命令 这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配

# 当一个规则匹配到了,如果规则的动作是 "允许" 这个命令会被放行; 如果规则的动作是 "禁止" 命令将会被禁止执行; 否则就匹配下一个规则,如果最后没有匹配到规则,则允许执行

http://docs.jumpserver.org/zh/latest/_images/admin_assets_cmd-filter_create.jpg

# 点击 "命令过滤器列表" 规则下方的数字进入 "命令过滤器规则列表" , 点击新建规则创建相应规则

# 拒绝所有命令可以使用正则表达式 .*

http://docs.jumpserver.org/zh/latest/_images/admin_assets_cmd-filter_rule_create.jpg

创建网域网关

如无需要, 可忽略此步骤, 支持代理SSH、RDP和VNC

# "网域"功能是为了解决部分环境无法直接连接而新增的功能, 原理是通过网关服务器进行跳转登录

# 点击页面左侧的"网域列表"按钮, 查看所有网域列表

# 点击页面左上角的"创建网域"按钮, 进入网域创建页面, 选择资产里用作网域的网关服务器

注:混合云适用

http://docs.jumpserver.org/zh/latest/_images/admin_assets_domain_create.jpg

# 点击"网域"的名称, 进入"网域详情"列表。

# 点击页面的"网关"按钮, 选择网关列表的"创建网关"按钮, 进入网关创建页面, 填写网关信息

# IP信息一般默认填写网域资产的IP即可(如用作网域的资产有多块网卡和IP地址, 选能与jumpserer通信的任一IP即可)

注:用户名与密码可以使用网关资产上已存在的任一拥有执行 ssh 命令权限的用户

http://docs.jumpserver.org/zh/latest/_images/admin_assets_domain_gateway_create.jpg

注: 保存信息后点击"测试连接", 确定设置无误后到资产列表添加需要使用"网关"登录的资产即可

注: "Windows资产"可以使用"ssh网关"

创建资产

# 点击页面左侧的"资产管理"菜单下的"资产列表"按钮, 查看当前所有的资产列表。

# 点击页面左上角的"创建资产"按钮, 进入资产创建页面, 填写资产信息。

# IP 地址和管理用户要确保正确, 确保所选的管理用户的用户名和密码能"牢靠"地登录指定的 IP 主机上。

# 资产的系统平台也务必正确填写。公网 IP 信息只用于展示, 可不填, Jumpserver 连接资产使用的是 IP 信息。

http://docs.jumpserver.org/zh/latest/_images/admin_assets_asset_create.jpg

# 资产创建信息填写好保存之后, ssh 协议资产可"测试资产"是否能正确连接, 其他协议暂不支持

注:被连接资产需要"python"组件, 且版本大于等于2.6, Ubuntu等资产默认不允许root用户远程ssh登录, 请自行处理

# 如果资产不能正常连接, 请检查"管理用户"的用户名和密钥是否正确以及该"管理用户"是否能使用 SSH 从 Jumpserver 主机正确登录到资产主机上

SSH 协议参考 SSH 协议资产连接说明

RDP 协议参考 RDP 协议资产连接说明

Telnet 协议参考 Telnet 协议资产连接说明

创建授权规则

为用户分配资产

# "名称", 授权的名称, 不能重复

# "用户"和"用户组"二选一, 不推荐即选择用户又选择用户组

# "资产"和"节点"二选一, 选择节点会包含节点下面的所有资产

# "系统用户", 及所选的用户或用户组下的用户能通过该系统用户使用所选节点或者节点下的资产

# 用户(组), 资产(节点), 系统用户是一对一的关系, 所以当拥有 Linux、Windows 不同类型资产时, 应该分别给 Linux 资产和 Windows 资产创建授权规则

一般情况下, 资产授权给个人, 节点授权给用户组, 一个授权只能选择一个系统用户

http://docs.jumpserver.org/zh/latest/_images/admin_perms_asset-permission_create.jpg

十五、用户登录

登录 Jumpserver

# 用户只能看到自己被管理员授权了的"资产", 如果登录后无资产, 请联系管理员进行确认

http://docs.jumpserver.org/zh/latest/_images/user_assets_user-asset_list.jpg

连接资产

# 在我的资产点击资产右边的 "连接" 快速连接资产

# 也可以点击左侧栏的 "Web终端"

http://docs.jumpserver.org/zh/latest/_images/user_terminal_web-terminal_list.jpg

# 点击 "资产" 名字, 就连上资产了

# 如果显示连接超时, 请参考 FAQ 文档进行处理

断开资产

# 点击页面顶部的 "Server" 按钮会弹出选个选项, 第一个断开所选的连接, 第二个断开所有连接。

文件管理

# 点击 "文件管理"

# 先在左边选择资产, 目前只支持自动登录的 SSH 协议资产

# 也可以使用 sftp 方式进行文件管理

参考 SFTP 连接说明

http://docs.jumpserver.org/zh/latest/_images/user_terminal_web-sftp_list.jpg

十六、安全建议

  • JumpServer 所在服务器操作系统应该升级到最新

  • JumpServer 依赖的软件升级到最新版本

  • 服务器、数据库、redis 等依赖组件请勿使用弱口令密码

  • 不推荐关闭 firewalld 和 selinux

  • 只开放必要的端口,必要的话请通过 vpn 或者 sslvpn 访问 JumpServer

  • 如果必须开放到外网使用,你应该部署 web 应用防火墙做安全过滤

  • 请部署 ssl 证书通过 https 协议来访问 JumpServer

  • JumpServer 不要使用弱口令密码,应立即改掉默认的 admin 密码

  • 推荐开启 MFA 功能,避免因密码泄露导致的安全问题

本文档参考官方文档编写,更多内容请访问官方网站 http://docs.jumpserver.org/zh/master/

最后更新于

这有帮助吗?