Skip to content

堡垒机部署与配置

一、JumpServer 概述

JumpServer 是一款开源的堡垒机(Bastion Host)系统,由广受欢迎的开源社区维护,采用 Python / Django 开发,遵循 GNU GPL v3 协议。其主要功能包括:

  • 身份认证:支持本地认证、LDAP/AD、OAuth2、OpenID Connect 等。
  • 权限控制:基于角色的细粒度权限管理。
  • 资产纳管:支持 SSH、RDP、VNC、Telnet、Kubernetes 等协议。
  • 操作审计:全程录像,支持回放和日志检索。
  • 指令拦截:自定义高危命令拦截规则。

二、部署方案

2.1 环境要求

组件最低配置推荐配置
CPU2 核4 核
内存4 GB8 GB
磁盘50 GB100 GB+(用于存储审计日志)
操作系统Ubuntu 20.04+ / CentOS 7+Ubuntu 22.04 LTS
数据库MySQL 5.7+ / MariaDB 10.2+MySQL 8.0
Redis6.x6.x / 7.x

2.2 快速部署(Docker Compose 方式)

推荐使用 Docker Compose 一键部署,便于维护和升级。

bash
# 1. 安装 Docker 和 Docker Compose
curl -fsSL https://get.docker.com | bash
systemctl enable --now docker

# 2. 获取 JumpServer 部署脚本
git clone --depth=1 https://github.com/jumpserver/jumpserver-release.git /opt/jumpserver
cd /opt/jumpserver

# 3. 生成随机密钥
echo -e "SECRET_KEY=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50)\nBOOTSTRAP_TOKEN=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)" > .env

# 4. 启动所有服务
docker compose -f docker-compose.yml up -d

2.3 手动部署(生产环境推荐)

bash
# 1. 安装依赖
apt-get update
apt-get install -y python3 python3-pip python3-venv nginx redis-server

# 2. 安装 MySQL
apt-get install -y mysql-server
mysql -e "CREATE DATABASE jumpserver DEFAULT CHARACTER SET utf8mb4;"
mysql -e "CREATE USER 'jumpserver'@'localhost' IDENTIFIED BY 'YourPassword';"
mysql -e "GRANT ALL PRIVILEGES ON jumpserver.* TO 'jumpserver'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"

# 3. 下载 JumpServer
cd /opt
git clone --depth=1 https://github.com/jumpserver/jumpserver.git
cd jumpserver

# 4. 配置 JumpServer
cp config_example.yml config.yml

编辑 config.yml 配置文件:

yaml
# 核心配置
SECRET_KEY: 'YourGeneratedSecretKey'
BOOTSTRAP_TOKEN: 'YourBootstrapToken'

# 数据库配置
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: 'YourPassword'
DB_NAME: jumpserver

# Redis 配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD: ''

# 服务配置
HTTP_PORT: 8080

2.4 部署验证

bash
# 检查服务状态
docker compose ps

# 查看运行日志
docker compose logs -f

# 访问 Web 界面
# 浏览器打开 http://<服务器IP>:8080
# 默认管理员账号:admin  /  admin

三、用户管理

3.1 用户类型

用户类型描述权限范围
系统管理员全局管理用户管理、资产管理、系统设置、审计查看
组织管理员组织级别管理本组织的用户和资产管理
普通用户运维人员访问被授权的资产,执行运维操作
审计员审计人员查看操作日志和录像,不可进行操作

3.2 创建用户

bash
# 通过 API 创建用户(自动化运维场景)
curl -s -X POST http://<jumpserver>/api/v1/users/ \
  -H "Authorization: Bearer <AccessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "zhangsan",
    "name": "张三",
    "email": "zhangsan@example.com",
    "role": "User",
    "password": "InitialPassword123"
  }'

3.3 LDAP/AD 集成

在 JumpServer 界面中配置:系统设置 -> 认证设置 -> LDAP 设置

yaml
# LDAP 配置参数
AUTH_LDAP_SERVER_URI: "ldap://ldap.example.com:389"
AUTH_LDAP_BIND_DN: "cn=admin,dc=example,dc=com"
AUTH_LDAP_BIND_PASSWORD: "YourLDAPPassword"
AUTH_LDAP_SEARCH_OU: "ou=users,dc=example,dc=com"
AUTH_LDAP_SEARCH_FILTER: "(uid=%(user)s)"
AUTH_LDAP_USER_ATTR_MAP:
  username: uid
  name: cn
  email: mail

四、资产授权

4.1 资产纳管

JumpServer 支持纳管以下类型的资产:

资产类型协议端口
Linux 服务器SSH22
Windows 服务器RDP3389
网络设备SSH/Telnet22/23
数据库MySQL/PostgreSQL3306/5432
KubernetesK8s API6443

4.2 添加资产

yaml
# 通过 API 批量添加资产
curl -s -X POST http://<jumpserver>/api/v1/assets/hosts/ \
  -H "Authorization: Bearer <AccessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "hostname": "web-server-01",
    "ip": "192.168.1.10",
    "port": 22,
    "platform": "Linux",
    "protocols": ["ssh/22"],
    "comment": "生产环境 Web 服务器"
  }'

4.3 授权策略

创建授权规则:权限管理 -> 资产授权 -> 创建授权规则

yaml
# 授权规则配置示例
name: "开发人员-Linux服务器-授权"
users:
  - group: "开发组"
assets:
  - group: "开发服务器"
actions:
  - connect            # 连接
  - upload_file        # 上传文件
  - download_file      # 下载文件
  - copy_file          # 复制粘贴
  - toggle_tunnel       # 隧道转发
date_start: "2026-01-01"
date_expired: "2026-12-31"
is_active: true

五、审计功能

5.1 会话审计

JumpServer 提供完整的会话审计能力:

  • 实时会话监控:管理员可实时查看正在进行的运维会话。
  • 会话录像:所有 SSH/Telnet/RDP 会话全程录像,支持回放。
  • 命令记录:记录每条执行命令及其返回结果。
  • 文件传输记录:记录上传和下载的文件信息。

5.2 会话管理命令

bash
# 查看活跃会话(通过 API)
curl -s http://<jumpserver>/api/v1/terminal/sessions/ \
  -H "Authorization: Bearer <AccessToken>"

# 强制终止指定会话
curl -s -X DELETE http://<jumpserver>/api/v1/terminal/sessions/<session-id>/ \
  -H "Authorization: Bearer <AccessToken>"

5.3 审计日志导出

bash
# 导出操作日志(CSV 格式)
curl -s -o audit_logs.csv \
  "http://<jumpserver>/api/v1/audits/operate-logs/?date_from=2026-01-01&date_to=2026-07-08" \
  -H "Authorization: Bearer <AccessToken>"

# 导出会话录像
curl -s -o session_replay.zip \
  "http://<jumpserver>/api/v1/terminal/sessions/<session-id>/replay/" \
  -H "Authorization: Bearer <AccessToken>"

六、运维操作记录

6.1 高危命令拦截

JumpServer 支持自定义命令过滤器,拦截高危操作。

yaml
# 命令过滤器配置 (系统设置 -> 安全设置 -> 命令过滤)
filter_rules:
  - type: "regex"
    pattern: "rm\\s+-rf\\s+/"
    action: "deny"          # 拒绝执行
    alert: true              # 告警通知
  - type: "regex"
    pattern: "drop\\s+database"
    action: "deny"
    alert: true
  - type: "regex"
    pattern: "shutdown\\s+now"
    action: "deny"
    alert: true
  - type: "regex"
    pattern: "init\\s+0"
    action: "deny"
    alert: false

6.2 运维操作流程

标准运维流程通过堡垒机执行:

bash
# 1. 运维人员通过 Web 终端连接
#    浏览器访问 JumpServer Web 界面 -> 我的资产 -> 连接

# 2. 或通过 SSH 客户端连接堡垒机
ssh -p 2222 zhangsan@jumpserver.example.com

# 3. 选择目标资产
#    登录后显示授权资产列表,输入编号选择目标

# 4. 执行运维操作,所有操作自动记录

# 5. 操作完成后断开连接
exit

6.3 多组织支持

JumpServer 支持多租户(组织)架构,适用于集团化企业:

  • 每个组织拥有独立的资产、用户和授权策略。
  • 系统管理员可跨组织管理。
  • 组织管理员只能管理本组织资源。

七、备份与恢复

7.1 数据库备份

bash
#!/bin/bash
# JumpServer 数据库备份脚本
# 保存路径:/usr/local/bin/jumpserver-backup.sh

BACKUP_DIR="/data/backup/jumpserver"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="jumpserver"
DB_USER="jumpserver"
DB_PASSWORD="YourPassword"

mkdir -p "$BACKUP_DIR"

# 备份 MySQL 数据库
mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | \
  gzip > "$BACKUP_DIR/jumpserver_db_$DATE.sql.gz"

# 保留最近 30 天的备份
find "$BACKUP_DIR" -name "jumpserver_db_*.sql.gz" -mtime +30 -delete

echo "Backup completed: $BACKUP_DIR/jumpserver_db_$DATE.sql.gz"

7.2 录像文件备份

JumpServer 的会话录像默认存储在 /opt/jumpserver/data/media/replay/ 目录下,建议定期归档到对象存储或 NAS。


八、最佳实践

8.1 安全配置

  • 强制 HTTPS:配置 Nginx 反向代理,启用 TLS 1.2/1.3。
  • 定期更换密钥:定期更新 SECRET_KEY 和 BOOTSTRAP_TOKEN。
  • IP 白名单:限制可访问 JumpServer 的源 IP 范围。
  • 会话超时:设置闲置会话超时断开,建议 15 分钟。

8.2 高可用部署

  • 使用外部 MySQL 主从集群。
  • 使用外部 Redis Sentinel 集群。
  • 部署多台 JumpServer 节点,通过负载均衡分发。
  • 共享 NAS 或对象存储存放录像文件。

8.3 日常维护

bash
# 1. 检查服务状态
docker compose ps

# 2. 查看日志
docker compose logs -f core

# 3. 升级 JumpServer
cd /opt/jumpserver
git pull
docker compose pull
docker compose down
docker compose up -d

# 4. 清理旧的 Docker 镜像
docker image prune -a -f

参考文档:JumpServer 官方文档 | JumpServer GitHub 仓库