🌸 JumpServer简单介绍
JumpServer是什么
开源堡垒机
JumpServer系统架构
- Core 组件是 JumpServer 的核心组件,其他组件依赖此组件启动。
- Koko 是服务于类 Unix 资产平台的组件,通过 SSH、Telnet 协议提供字符型连接。
- Lion 是服务于 Windows 资产平台的组件,用于 Web 端访问 Windows 资产。
- Omnidb 是服务于数据库的组件,用于可视化界面纳管数据库。
- Razor 是服务于 RDP 协议组件,该组件主要功能是通过 JumpServer Client 方式访问 Windows 资产。
- Magnus 是服务于数据库的组件,用于通过客户端代理访问数据库。
JumpServer安装
在线安装:curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash
离线源码安装:可以从 Github 网站上获取最新的 Release 副本。
1.Core 环境部署
requirements/ # 对应操作系统需要的依赖包
├── apk_pkg.sh # Alpine
├── deb_pkg.sh # 基于 Debian 的发行版(如: Ubuntu)
├── issues.txt # macOS 一些问题及解决方案
├── mac_pkg.sh # macOS
├── requirements.txt # python
└── rpm_pkg.sh # 基于 RedHat 的发行版(如: CentOS)
apt-get install -y pkg-config libxmlsec1-dev libpq-dev libffi-dev libxml2 libxslt-dev libldap2-dev libsasl2-dev sshpass mariadb-client bash-completion g++ make sshpass
apt-get install -y libmariadb-dev
apt-get install -y python3.9 python3.9-dev python3-venv
pip install -U pip setuptools wheel
pip install -r requirements/requirements.txt
config.yml
# SECURITY WARNING: keep the secret key used in production secret!
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 48;echo
SECRET_KEY: **************** # 必填项, 长度推荐 50 位以上
# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token koko 和 lion 用来注册服务账号,不在使用原来的注册接受机制
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24;echo
BOOTSTRAP_TOKEN: *********** # 必填项, 长度推荐 20 位以上
# Development env open this, when error occur display the full process track, Production disable it
# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
DEBUG: true # 开发建议打开 DEBUG, 生产环境应该关闭
# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
# 日志级别
LOG_LEVEL: DEBUG # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# 浏览器Session过期时间,默认24小时, 也可以设置浏览器关闭则过期
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true # 浏览器关闭 session 过期
# Database setting, Support sqlite3, mysql, postgres ....
# 数据库设置
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# SQLite setting:
# 使用单文件sqlite数据库
# DB_ENGINE: sqlite3
# DB_NAME:
# MySQL or postgres setting like:
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 127.0.0.1 # 自行配置 数据库相关
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: ********
DB_NAME: jumpserver
# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 运行时绑定端口, 将会使用 0.0.0.0:8080 0.0.0.0:8070 端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1 # 自行配置 Redis 相关
REDIS_PORT: 6379
REDIS_PASSWORD: ********
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4
# Use OpenID Authorization
# 使用 OpenID 进行认证设置
# AUTH_OPENID: False # True or False
# BASE_SITE_URL: None
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_PROVIDER_ENDPOINT: https://op-example.com/
# AUTH_OPENID_PROVIDER_AUTHORIZATION_ENDPOINT: https://op-example.com/authorize
# AUTH_OPENID_PROVIDER_TOKEN_ENDPOINT: https://op-example.com/token
# AUTH_OPENID_PROVIDER_JWKS_ENDPOINT: https://op-example.com/jwks
# AUTH_OPENID_PROVIDER_USERINFO_ENDPOINT: https://op-example.com/userinfo
# AUTH_OPENID_PROVIDER_END_SESSION_ENDPOINT: https://op-example.com/logout
# AUTH_OPENID_PROVIDER_SIGNATURE_ALG: HS256
# AUTH_OPENID_PROVIDER_SIGNATURE_KEY: None
# AUTH_OPENID_SCOPES: "openid profile email"
# AUTH_OPENID_ID_TOKEN_MAX_AGE: 60
# AUTH_OPENID_ID_TOKEN_INCLUDE_CLAIMS: True
# AUTH_OPENID_USE_STATE: True
# AUTH_OPENID_USE_NONCE: True
# AUTH_OPENID_SHARE_SESSION: True
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_ALWAYS_UPDATE_USER: True
# Use Radius authorization
# 使用Radius来认证
# AUTH_RADIUS: false
# RADIUS_SERVER: localhost
# RADIUS_PORT: 1812
# RADIUS_SECRET:
# CAS 配置
# AUTH_CAS': False,
# CAS_SERVER_URL': "http://host/cas/",
# CAS_ROOT_PROXIED_AS': 'http://jumpserver-host:port',
# CAS_LOGOUT_COMPLETELY': True,
# CAS_VERSION': 3,
# LDAP/AD settings
# LDAP 搜索分页数量
# AUTH_LDAP_SEARCH_PAGED_SIZE: 1000
#
# 定时同步用户
# 启用 / 禁用
# AUTH_LDAP_SYNC_IS_PERIODIC: True
# 同步间隔 (单位: 时) (优先)
# AUTH_LDAP_SYNC_INTERVAL: 12
# Crontab 表达式
# AUTH_LDAP_SYNC_CRONTAB: * 6 * * *
#
# LDAP 用户登录时仅允许在用户列表中的用户执行 LDAP Server 认证
# AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: False
#
# LDAP 认证时如果日志中出现以下信息将参数设置为 0 (详情参见:https://www.python-ldap.org/en/latest/faq.html)
# In order to perform this operation a successful bind must be completed on the connection
# AUTH_LDAP_OPTIONS_OPT_REFERRALS: -1
# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
# Perm show single asset to ungrouped node
# 是否把未授权节点资产放入到 未分组 节点中
# PERM_SINGLE_ASSET_TO_UNGROUP_NODE: False
#
# 同一账号仅允许在一台设备登录
# USER_LOGIN_SINGLE_MACHINE_ENABLED: False
#
# 启用定时任务
# PERIOD_TASK_ENABLE: True
#
# 启用二次复合认证配置
# LOGIN_CONFIRM_ENABLE: False
#
# Windows 登录跳过手动输入密码
# WINDOWS_SKIP_ALL_MANUAL_PASSWORD: False
# 以下设置如果为空系统会自动生成随机字符串填入
## 迁移请修改 SECRET_KEY 和 BOOTSTRAP_TOKEN 为原来的设置
## 安装配置
DOCKER_IMAGE_PREFIX=swr.cn-south-1.myhuaweicloud.com
VOLUME_DIR=/opt/jumpserver
DOCKER_DIR=/var/lib/docker
SECRET_KEY=Cmx
BOOTSTRAP_TOKEN=C
LOG_LEVEL=ERROR
## 使用外置 MySQL 配置
USE_EXTERNAL_MYSQL=0
DB_HOST=mysql
DB_PORT=3306
DB_USER=root
DB_PASSWORD=CmxvOiBmbGFncz03MzxVUCxMT0
DB_NAME=jumpserver
## 使用外置 Redis 配置
USE_EXTERNAL_REDIS=0
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=CmxvOiBmbGFncz03MzxVUCxMT0
## Compose 项目设置
COMPOSE_PROJECT_NAME=jms
COMPOSE_HTTP_TIMEOUT=3600
DOCKER_CLIENT_TIMEOUT=3600
DOCKER_SUBNET=192.168.250.0/24
## IPV6
DOCKER_SUBNET_IPV6=2001:db8:10::/64
USE_IPV6=0
## Nginx 配置,这个 Nginx 是用来分发路径到不同的服务
HTTP_PORT=8080
HTTPS_PORT=8443
SSH_PORT=2222
## LB 配置, 这个 Nginx 是 HA 时可以启动负载均衡到不同的主机
USE_LB=0
LB_HTTP_PORT=80
LB_HTTPS_PORT=443
LB_SSH_PORT=2222
## Task 配置
USE_TASK=1
## XPack
USE_XPACK=0
# Mysql 容器配置
MYSQL_ROOT_PASSWORD=CmxvOiBmbGFncz03MzxVUCxMT0
MYSQL_DATABASE=jumpserver
# Core 配置
# SESSION_COOKIE_AGE=86400
SESSION_EXPIRE_AT_BROWSER_CLOSE=true
### Keycloak 配置方式
### AUTH_OPENID=true
### BASE_SITE_URL=https://jumpserver.company.com/
### AUTH_OPENID_SERVER_URL=https://keycloak.company.com/auth
### AUTH_OPENID_REALM_NAME=cmp
### AUTH_OPENID_CLIENT_ID=jumpserver
### AUTH_OPENID_CLIENT_SECRET=
### AUTH_OPENID_SHARE_SESSION=true
### AUTH_OPENID_IGNORE_SSL_VERIFICATION=true
# Koko 配置
CORE_HOST=http://core:8080
# Guacamole 配置
JUMPSERVER_SERVER=http://core:8080
JUMPSERVER_KEY_DIR=/config/guacamole/data/key/
JUMPSERVER_RECORD_PATH=/config/guacamole/data/record/
JUMPSERVER_DRIVE_PATH=/config/guacamole/data/drive/
JUMPSERVER_ENABLE_DRIVE=true
JUMPSERVER_CLEAR_DRIVE_SESSION=true
JUMPSERVER_CLEAR_DRIVE_SCHEDULE=24
CURRENT_VERSION=v3.2.1
CLIENT_MAX_BODY_SIZE=1024m
SERVER_HOSTNAME=jumpservertest
JUMPSERVER_ENABLE_FONT_SMOOTHING=true
MAGNUS_MYSQL_PORT=33061
MAGNUS_MARIADB_PORT=33062
MAGNUS_REDIS_PORT=63790
2.Lina 环境部署
3.Luna 环境部署
4.KoKo 环境部署
5.Lion 环境部署
6.Magnus 环境部署
7.Nginx 环境部署
8.JumpServer 环境整合
cat /etc/nginx/conf.d/default.conf
server {
listen 8080;
# listen [::]:80;
client_max_body_size 4096m;
location /player/ {
try_files $uri / /index.html;
alias /opt/player/;
}
location /ui/ {
try_files $uri / /index.html;
alias /opt/lina/;
}
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/;
}
location /download/ {
alias /opt/download/;
}
location /media/replay/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/;
}
location /static/ {
root /opt/jumpserver/data/;
}
location /koko/ {
proxy_pass http://koko:5000;
proxy_buffering off;
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ignore_client_abort on;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 6000;
}
location /lion/ {
proxy_pass http://lion:8081;
proxy_buffering off;
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ignore_client_abort on;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 6000;
}
location /omnidb/ {
resolver 127.0.0.11 valid=30s;
set $upstream http://omnidb:8082;
proxy_pass $upstream$request_uri;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws/ {
proxy_pass http://core:8080;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ ^/(core|api|media)/ {
proxy_pass http://core:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
rewrite ^/(.*)$ /ui/$1 last;
}
}
JumpServer总体功能列表
https://www.fit2cloud.com/jumpserver/features.html
身份验证 | Authentication |
---|---|
登录认证 | LDAP / AD 认证;CAS 认证;RADIUS 认证;支持单点系统对接(OpenID、OAuth 认证、SAML2 认证);SSO 对接;支持扫码登录(企业微信、钉钉和飞书);X-Pack |
MFA 认证 | OTP 认证;RADIUS 二次认证;短信认证(阿里云、腾讯云、华为云、CMPP v2.0);X-Pack |
登录复核 | 用户登录 JumpServer 系统行为受管理员的监管与控制;X-Pack |
登录限制 | 用户登录来源 IP 受管理员控制(支持黑 / 白名单);自定义控制用户登录时间段;控制(复核)用户登录时间段;X-Pack |
角色管理 | 用户行为支持基于角色的访问控制(RBAC);X-Pack |
授权控制 | Authorization |
多维度授权 | 支持对用户、用户组、资产、资产节点以及账号进行授权; |
资产授权 | 资产以树状结构进行展示;资产和节点均可灵活授权;节点内资产自动继承授权;子节点自动继承父节点授权; |
动作授权 | 实现对授权资产的文件上传、下载以及连接动作的控制;支持 RDP 协议剪贴板复制 / 粘贴控制(Windows 资产); |
时间授权 | 实现对授权资产使用时间段的限制; |
命令过滤 | 实现对授权账号所执行的命令进行控制; |
文件管理 | 支持 SFTP 文件上传 / 下载;支持 Web SFTP 文件管理; |
工单管理 | 支持对用户登录行为进行控制;支持资产授权工单申请;支持二级审批流程;X-Pack |
组织管理 | 实现多租户管理与权限隔离;全局组织功能;X-Pack |
访问控制 | 支持用户登录资产时的访问控制,包括接受、拒绝和复核;X-Pack |
账号管理 | Accounting |
账号列表 | 支持查看所有账号信息; |
账号模版 | 针对用户名和认证信息相同的账号,可以抽象为一个账号模版,快速和资产进行关联并生成账号; |
账号推送 | 自定义任务定期推送账号到资产; |
账号收集 | 自定义任务定期收集主机用户;X-Pack |
账号改密 | 定期批量修改资产账号密码;支持多种密码策略;X-Pack |
账号备份 | 定期备份资产账号信息,并以邮件附件的形式发送备份文件(加密);X-Pack |
安全审计 | Auditing |
会话审计 | 支持在线会话内容审计;历史会话内容审计;支持会话附加水印信息; |
录像审计 | 支持对资产操作的录像进行回放审计;支持将审计录像上传至公有云; |
命令审计 | 支持对资产操作的命令进行审计;支持高危命令告警; |
文件传输 | 支持对文件的上传 / 下载记录进行审计; |
实时监控 | 支持管理员 / 审计员实时监控用户的操作行为,并可进行实时终断,以提升用户操作的安全性; |
登录日志 | 支持对用户的登录行为进行审计;支持将审计信息同步至 Syslog 日志系统; |
操作日志 | 支持对用户的操作行为进行审计; |
改密日志 | 支持对用户修改密码的行为进行审计; |
作业日志 | 支持对自动化任务的执行记录进行审计; |
3.0新增的功能
JumpServer v3.0 版本与 JumpServer v2.* 版本存在一定的差异。JumpServer v3.0 增加了一些新功能。
- 【控制台】仪表盘增加 “资产类型占比” 图表显示,主要展示各类型资产占比数据。
- 【控制台】账号管理中增加 “账号模板”,资产密码相同时,可直接选择账号模板,减少手动填写工作量。
- 【控制台】账号管理中增加 “账号推送” 功能模块,将 JumpServer v2.* 版本中推送系统用户的功能独立出来, 注意当前版本不支持动态用户的推送以及设置推送用户的家目录、所属组、Shell、Sudo信息,后续会进行优化支持。
- 【控制台】权限管理中增加 “命令过滤” 功能模块。
- 【控制台】权限管理中增加 “资产登录” 功能模块。
- 【控制台】任务中心-任务历史中增加功能 “再次执行”,之前执行过的任务,可以点击”再次执行”按钮再次执行。
- 【审计台】审计日志增加 “资源活动日志” 功能。
- 【工作台】增加 “作业中心” 功能模块,调整 JumpServer v2.* 版本中 “批量命令” 为快捷命令功能,增加功能“作业管理”,”模板管理” 等。支持用户通过编写一些 Ansible 脚本进行运维操作。
- 【系统管理】增加 “远程应用” 功能模块,可通过发布应用连接资产。 注意,社区版只支持发布 Chrome 及 DBeaver Community。
- 【系统管理】组织管理中系统初始化增加 “SYSTEM” 组织,添加的应用发布机默认在该组织下。
JumpServer管理的一些概念
概念 | 解释 |
---|---|
资产(Asset) | jumpserver中管理和授权的核心对象,一般对应一台服务器或网络设备。资产上存放了需要管理和审计的资源。 |
系统用户(System User) | jumpserver用户管理模块中,对应每位真实的人员。系统用户需要与资产用户对应,完成对资产的授权。 |
资产用户(Asset User) | 每个资产上真实存在的用户,通常与系统用户一一对应,完成资产登录以及操作审计。 |
管理用户(Admin User) | jumpserver的管理后台访问用户,默认只有一个admin,具有所有管理权限。可创建其他管理用户,并设置角色进行授权。 |
LDAP用户(LDAP User) | 如果jumpserver集成了LDAP,可以将LDAP用户同步到jumpserver,并与资产用户对应,实现单点登录。 |
用户组(User Group) | 将多个系统用户集中管理的对象,可以对用户组进行授权,实现对多个用户的批量管理。 |
资产组(Asset Group) | 将多个资产集中管理的对象,可以对资产组进行授权,实现对多个资产的批量管理。 |
权限(Permission) | jumpserver的访问控制核心,设置不同权限可实现对应资源的访问控制。权限通常分为资产权限、应用权限、命令权限等。 |
角色(Role) | 将多个权限集中管理的对象,可以将角色授予用户或用户组,完成权限的批量设置。 |
应用(Application) | jumpserver可管理的业务系统或应用,可以实现对应用的授权和审计管理。 |
命令(Command) | jumpserver可执行命令集,可以对命令进行过滤和审批,避免非法命令执行。 |
会话(Session) | 用户通过jumpserver访问资产时产生的交互会话,全部会话内容会被jumpserver记录和审计。 |
审计(Audit) | jumpserver中所有的操作行为日志,可以查看每个用户和资产的详细操作历史。 |
录像(Replay) | jumpserver可对用户会话进行录制,生成文件或视频格式的会话录像,进行回放审查。 |
网页终端(Web Terminal) | jumpserver提供的浏览器中使用的终端工具,可直接在浏览器完成对资产的连接和操作。 |
LDAP域名(LDAP Base DN) | LDAP Server中采用的基础路径名称,設定LDAP集成时需要使用,用于搜索用户信息。 |
认证(Authentication) | jumpserver中实现用户与应用两步验证的机制,可设置为LDAP认证,RADIUS认证,MFA认证等。 |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xieaoao@qq.com QQ:1296454177