Jumpserver开源堡垒机:从Docker部署到Linux资产纳管与审计实践

📅 发布时间:2026/9/8 5:06:54
Jumpserver开源堡垒机:从Docker部署到Linux资产纳管与审计实践 在企业里服务器账号密码像传家宝一样在几个人手里传来传去工作记录靠聊天记录谁改过配置只能靠猜这场景是不是很眼熟更危险的是员工离职后账号回收不及时或者一台数据库服务器被开发、测试、运维轮流 root 直连出了问题根本没法追溯。这已经不是管理混乱的问题而是实实在在的安全漏洞。Jumpserver 就是为解决这类问题而生的开源堡垒机。它的核心价值不是“多一个登录跳板”而是把“谁能登、登到哪、做了什么、命令能否审批、录像能否回放”全部收口到一条可控的链路上。对于刚入行运维、或者正在搭建公司运维规范的工程师来说Jumpserver 是绕不开的基础设施。本文从零开始走一遍 Jumpserver 的完整部署、配置、纳管资产和审计验证流程并给出常见的坑和排查思路。1. 为什么要部署 Jumpserver不只是“跳板机”早期很多公司做运维权限管理用的是一台普通跳板机所有人先 SSH 到跳板机再手动跳到目标服务器。这种做法听起来简单但问题很明确跳板机本身成为内网入口一旦被攻击所有后续主机都暴露其次用户登录目标机器的过程没有统一审计命令历史可以被人为清除第三权限管理靠人工分发公钥账号数量一多必然失控。Jumpserver 解决的正是这些问题。它通过统一的 Web 界面接入资产用户不需要拿到目标服务器的真实密码或私钥所有连接由 Jumpserver 作为代理建立。运维人员看到的是 Web 终端、SSH 客户端或者运维工具背后则由 Jumpserver 完成认证、授权、命令过滤、操作录像和会话审计。换句话说目标机器上的账号密码被收进保险箱用户只用自己的账号登录 Jumpserver再由平台按授权策略决定你能不能连某台机器、能执行哪些命令。从架构上理解Jumpserver 由多个组件组成包括核心服务Core、Web 前端、LunaWeb 终端组件、LionWeb 桌面组件用于 RDP/VNC 协议、Coco/KokoSSH 协议连接组件以及 Guacamole负责 RDP/VNC 协议代理。整套系统可以部署在 Linux 服务器上日常维护并不复杂但部署方式和组件协同却有讲究。本文选择的安装方式是 Docker Compose这是目前社区最常见、也最容易上手的部署方式适合单机环境、中小规模资产管理和学习测试。生产环境如果资产量很大、需要高可用再考虑集群化部署但核心流程中的概念依然相通。2. Jumpserver 核心概念与适用场景2.1 资产、账号、用户、权限的关系在 Jumpserver 中有几个核心术语必须先理清楚用户登录 Jumpserver 的人员账号可以是普通用户也可以是管理员。资产被纳管的服务器、网络设备、数据库等资源。账号资产上的登录账号比如 Linux 服务器的 root 或普通用户数据库账号等。这些账号被 Jumpserver 托管用户不直接接触真实密码。系统用户Jumpserver 连接资产时使用的账号分为“特权用户”和“普通用户”用于执行自动化任务或作为登录代理。授权规则把“用户、资产、账号”三者绑定并指定登录方式、命令过滤和会话控制。支持的关系并不复杂先创建用户再录入资产再把资产关联到系统用户最后创建授权规则让某类用户可以访问某些资产。这一套关系捋顺了后续所有功能都比较容易理解。2.2 适用场景Jumpserver 并不是只有大厂才需要。只要存在以下情况就值得引入多个运维、开发人员共用服务器账号无法区分个人操作需要满足信息安全合规要求比如等保、ISO 27001要求对运维操作有审计记录对外包人员、实习生的权限需要临时授权、到期自动回收数据库、生产服务器有敏感数据需要禁用危险命令比如删除文件、清空表、重启服务。从搜索热词中也能看到Jumpserver 经常与“堡垒机”“Linux 运维”一起被搜索说明这已经是普通运维必备技能而不只是安全工程师的专属工具。2.3 新手最容易误解的地方第一个误解是“堡垒机会拖慢速度”。实际上Jumpserver 是代理转发模式链路增加了一层但只要服务器性能和网络带宽足够体感延迟很小。相比没有审计带来的安全风险这点开销值得。第二个误解是“部署堡垒机之后用户无法再用 Xshell、SecureCRT 等工具连接”。其实 Jumpserver 还支持通过 SSH 客户端直连连接地址是堡垒机 IP端口为 SSH 转发端口用户仍然可以保留原有客户端习惯只是账号密码要换成 Jumpserver 的用户名密码或者通过密钥认证。第三个误解是“装完堡垒机运维工作变复杂”。实际用起来后用户不需要记住资产 IP、账号密码登录 Jumpserver 后看到的就是自己有权限访问的资产列表点一下就能连接反而比原来翻 Excel 记密码方便得多。3. 环境准备与前置条件本文以 Linux 系统这里以 CentOS 7/Ubuntu 20.04 系列为例演示 Docker Compose 部署方式。实际生产环境请根据发行版调整命令但整体思路一致。3.1 服务器要求操作系统Linux建议 4 核 CPU、8GB 内存以上磁盘根据录像留存策略配置建议至少 100GB。网络必须能访问外网以下载 Docker 镜像同时能访问被纳管的资产网络。防火墙需要开放 80Web、2222SSH 转发等端口具体端口可根据情况修改。注意Jumpserver 服务器本身要加固因为它会成为内网运维入口禁止随意放开高危端口。3.2 安装 Docker 和 Docker Compose如果服务器还没有 Docker先安装基础环境。以 CentOS 7 为例# 卸载旧版本 yum remove docker docker-common docker-selinux docker-engine -y # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 配置 Docker 仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装 Docker yum install docker-ce -y # 启动并设置开机自启 systemctl start docker systemctl enable dockerUbuntu/Debian 系统则用 apt 安装apt update apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable apt update apt install -y docker-ce systemctl start docker systemctl enable dockerDocker Compose 插件如果使用新版 Docker可以直接使用docker compose子命令。如果还是旧版需要单独安装。# 如果是 Docker Compose V2 docker compose version # 如果命令行提示没有该命令可以安装 docker-compose curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose docker-compose --version注意具体版本号请以官方 GitHub Release 页面为准本文重点演示流程。3.3 获取 Jumpserver 并准备配置文件推荐使用官方提供的 Docker Compose 方式。官方仓库会提供一份.env示例文件里面包含数据库密码、Redis 密码、SECRET_KEY、BOOTSTRAP_TOKEN 等关键配置。mkdir -p /opt/jumpserver/docker cd /opt/jumpserver/docker # 下载官方 compose 文件请以当前版本实际文件名为准 # 可以从 GitHub 仓库 jumpserver/Dockerfile 或官方文档获取需要注意不同版本的 Jumpserver 依赖的组件镜像版本不同直接去官网下载当前 release 对应的docker-compose.yml和.env最稳妥。.env文件里面最关键的是生成随机密钥# 生成 SECRET_KEY只用于本机随机生成 echo SECRET_KEY$(cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c 50) .env echo BOOTSTRAP_TOKEN$(cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c 24) .env同时要设置数据库和 Redis 的密码避免默认密码。3.4 修改关键端口默认情况下Jumpserver Web 端口是 80SSH 端口是 2222。如果服务器上已经有其他服务占用 80可以在.env中修改HTTP_PORT8080 SSH_PORT2222修改后用户访问 Web 时就用http://IP:8080SSH 客户端连接时使用端口 2222。4. 使用 Docker Compose 完成 Jumpserver 部署4.1 启动服务在 docker-compose.yml 所在目录执行docker-compose up -d如果是新版 Docker Compose也可以使用docker compose up -d首次启动会拉取多个镜像包括 mysql、redis、core、koko、lion、web 等耗时取决于网络速度。可以通过docker-compose logs -f查看日志看到Channels server started或类似关键字说明启动成功。4.2 初始化管理员账号部署完成后浏览器访问http://服务器IP:端口。首次访问会进入初始化页面需要设置管理员邮箱和密码。设置完成后使用该账号登录管理员后台。需要注意如果初始化页面没有出现通常是因为 Core 服务还没有完全启动或者数据库没有初始化完成。可以稍等 1-2 分钟再刷新。4.3 验证容器状态部署完成后检查容器运行状态docker ps | grep jumpserver预期会看到类似下面的容器jms-core jms-mysql jms-redis jms-web jms-luna jms-lion jms-koko jms-guacamole每个容器状态为 Up且没有循环重启说明基本部署成功。4.4 升级与版本管理建议Jumpserver 迭代速度较快生产环境升级前先备份数据库和配置文件。可以通过docker compose pull拉取新镜像然后docker compose up -d完成升级。升级后注意查看官方 Upgrade 文档因为数据库结构可能变化。5. 纳管 Linux 资产从创建用户到授权连接5.1 创建 Jumpserver 普通用户进入控制台后在“用户管理 - 用户列表”中创建普通用户。填写用户名、姓名、邮箱、手机等信息设置初始密码。普通用户后续用这个账号登录 Jumpserver 访问授权资产。5.2 创建系统用户系统用户是 Jumpserver 连接资产时使用的账号。通常有两种方式手动录入账号如果目标资产上已经存在一个账号可以把账号密码录入到 Jumpserver 中。自动推送账号Jumpserver 通过特权用户登录资产后自动创建系统用户并推送 SSH 公钥。实际项目中更推荐自动推送方式这样目标机器上不需要手动维护密码而且可以统一配置 sudo 权限。先在“资产管理 - 系统用户”中创建一个“特权用户”例如名为deploy的账号具有 SSH 登录和提权能力。然后为不同类型的资产创建对应的普通系统用户比如nginx、mysql、app等。创建系统用户时有几个配置项比较关键用户名目标机器上实际使用的登录名。协议SSH / RDP / VNC 等。自动推送勾选后 Jumpserver 会在资产上自动生成该用户的 SSH 公钥。sudo配置/usr/bin/passwd, /usr/bin/chsh等允许执行的命令或者留空表示不授权 sudo。命令过滤配置该用户可执行的命令白名单或黑名单。5.3 添加资产进入“资产管理 - 资产列表”点击“创建”按钮添加 Linux 资产。需要填写的信息包括主机名给资产起的名称。IP资产的实际 IP。协议SSH。端口默认 22如果自定义过则填写实际端口。系统用户选择刚才创建的系统用户。保存后Jumpserver 会测试连接。如果资产上还没安装并启动 SSH或者防火墙限制了 Jumpserver 服务器的 IP连接测试会失败。5.4 创建授权规则在“权限管理 - 资产授权”中新建授权规则。规则中需要选择用户可以是单个用户也可以是用户组。资产可以是单个资产也可以是资产树节点。系统用户选择可用于连接这些资产的系统用户。账号可选指定资产上的目标账号。命令过滤可以绑定命令过滤规则限制危险命令。授权规则创建完成后用户刷新 Web 页面就能在资产列表中看到自己有权访问的资产。5.5 用户连接资产用户登录 Jumpserver Web 后进入“我的资产”或“工作台”点击资产对应的“连接”按钮即可打开 Web 终端。也可以使用 Xshell、SecureCRT 等 SSH 客户端连接 Jumpserverssh -p 2222 用户名Jumpserver-IP输入 Jumpserver 的用户名密码后进入交互式菜单选择要访问的资产序号即可进入目标资产 Shell。6. 命令过滤与操作录像审计部署 Jumpserver 的真实价值是让运维操作变得可管可控。6.1 命令过滤规则在“权限管理 - 命令过滤”中可以创建命令组比如“危险命令组”包含rm -rf、mkfs、dd、shutdown、reboot、kill -9等命令。然后在授权规则中关联该命令过滤规则动作选择“拒绝”或“允许”。例如创建一条规则当用户登录生产数据库服务器时禁止执行DROP TABLE防止误操作。Jumpserver 的命令过滤支持正则表达式和常见命令匹配能覆盖大部分场景。需要注意的是命令过滤只对 Web 终端和 SSH 客户端生效如果目标资产上有人绕过 Jumpserver 直接登录那属于网络管控层面的问题要配合防火墙或安全组限制目标资产的 SSH 来源 IP。6.2 会话录像Jumpserver 默认会对 Web 终端连接录制会话录像。管理员可以在“审计台 - 会话记录”中查看已结束的会话并回放终端操作。这个功能对故障追溯、恶意操作取证非常有用。在“会话记录”中可以看到会话开始时间、结束时间、用户、资产、协议等信息。点击回放能看到操作过程中输入过的每一条命令和输出结果。需要注意录像文件会占用磁盘空间。生产环境要配置录像清理策略例如保留 180 天避免磁盘写满。6.3 审计报表Jumpserver 的“审计台”中还提供登录日志、操作日志、命令记录等。管理员可以通过报表了解谁在什么时间访问了哪台服务器。在等保测评或内部安全审计时这些记录是重要证据。7. 常见问题与排查思路部署和日常使用中以下几类问题出现频率最高。问题现象可能原因排查方式解决方案Web 页面无法访问HTTP 端口未开放或防火墙拦截检查服务器防火墙、云安全组端口放行 80/8080 端口容器反复重启数据库密码或 SECRET_KEY 配置错误查看docker logs jms-core日志修正 .env 后重新docker-compose up -d连接资产失败目标资产 SSH 端口未开放、IP 填写错误、防火墙限制在 Jumpserver 服务器telnet 资产IP 22测试修改系统用户密码或放通网络无法自动推送系统用户特权用户权限不足或 SSH 配置禁止 root 登录检查特权用户是否能手动 SSH 到目标机使用有 sudo 权限的账号作为特权用户用户看不到资产授权规则未绑定用户、资产或系统用户检查授权规则内容和优先级重新创建完整授权规则录像播放失败浏览器兼容或视频格式问题使用 Chrome 浏览器检查录像文件是否完整更新 Jumpserver 版本或清理损坏录像新手最容易卡住的点是“能登录 Jumpserver但连不上资产”。这里要记住堡垒机和资产之间必须网络可达堡垒机连接资产使用的是系统用户而不是 Jumpserver 普通用户。普通用户只是“你能登录这个平台”系统用户才是“平台用哪个身份去帮你连目标机”。如果连接测试报错优先在 Jumpserver 服务器上手动验证ssh -i /opt/jumpserver/data/keys/user.key 系统用户名目标IP或者用 SSH 命令指定私钥测试确认是否能免密登录。8. 最佳实践与生产环境建议8.1 安全加固Jumpserver 服务器只保留必要端口Web 建议通过 HTTPS 访问使用 Nginx 反向代理并配置证书。关闭不需要的协议只用 SSH 端口避免暴露过多服务。登录 Jumpserver 启用心跳超时用户长时间不操作自动断开。高危操作尽量走“应用发布”或“工单审批”流程结合企业 OA 或企微机器人做审批通知。8.2 账号与资产管理系统用户按业务模块划分不要所有资产共用一个 root 账号。对 Linux 服务器启用密钥自动推送减少密码口令存储。数据库资产建议使用独立数据库账号并配置可执行命令白名单。定期梳理授权关系清理长期未登录用户和未使用资产。8.3 存储与备份数据库必须定期备份建议每天备份保留多天。录像文件单独挂载到大容量磁盘并配置定期归档清理。配置文件.env要注意权限不要提交到代码仓库中。8.4 团队协作管理员账号不要多人共用建议把管理员能力授权给安全专员和运维负责人。日常操作使用普通用户登录只有需要修改堡垒机配置时才切换到管理员账号降低误操作风险。9. 总结与后续学习方向Jumpserver 部署本身并不难难的是把“用户、资产、系统用户、授权、命令过滤、审计”这六件事串起来形成一套可持续运维的访问控制体系。本文通过 Docker Compose 完成了全套部署也演示了从创建用户到纳管 Linux 资产的操作路径。但部署完只是第一步生产环境还要结合故障巡检、容量规划、权限定期审计来不断优化。如果你所在的公司还没有堡垒机完全可以用 Jumpserver 先在测试环境跑通流程再逐步接入生产服务器。如果你正准备运维面试建议把“堡垒机解决了什么问题、Jumpserver 的核心组件、授权流程、命令过滤和录像审计”这几个点整理清楚这比单纯背命令更能体现运维思维。后续可以继续深入研究 Jumpserver 的数据库运维功能比如通过 Web 页面直连 MySQL、Redis 等资源也可以了解它的应用发布功能把应用部署和权限审批结合或者尝试基于 LDAP/AD 统一认证让员工直接使用企业账号登录堡垒机。无论往哪个方向深入Jumpserver 都是企业运维安全建设中值得投入时间学习的核心工具。