JumpServer
- umpServer 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。
- JumpServer 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。
- JumpServer 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。
- JumpServer 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。
组件说明:
- Jumpserver 为管理后台,管理员可以通过Web页面进行资产管理、用户管理、资产授权等操作
- koko为SSH Server和Web Terminal Server。用户可以通过使用自己的账户登录SSH或者WebSocket 接口直接访问被授权的资产。不需要知道服务器的账户密码
- Lina 是 JumpServer 的前端 UI
- Luna为Web Terminal Server 前端页面,用户使用Web Terminal方式登录所需要的组件
- Guacamole为Windows组件,用户可以通过Web Terminal来连接 Windows资产 (暂时只能通过 Web Terminal 来访问)。Apache 跳板机项目,Jumpserver 使用其组件实现 RDP 功能,Jumpserver 并没有修改其代码而是添加了额外的插 件,支持 Jumpserver 调用
端口说明:
- Jumpserver 默认端口为 8080/tcp 配置文件在 jumpserver/config.py
- koko 默认SSH 端口为 2222/tcp ,默认Web Terminal 端口为 5000/tcp 配置文件在 coco/conf.py
- Guacamole 默认端口为 8081/tcp 在 docker run 时指定
- Nginx 默认端口为 80/tcp 配置在 nginx/nginx.conf 中指定
JumpServer功能
身份验证Authentication | 登录认证 | 资源统一登录和认证;LDAP / AD 认证;RADIUS 认证;实现单点登录(OpenID 认证、CAS 认证);SSO 对接; |
---|---|---|
多因⼦认证 | MFA 二次认证(Google Authenticator);RADIUS 二次认证; | |
登录复核(X-Pack) | 用户登录行为受管理员的监控与控制; | |
授权控制Authorization | 多维度授权 | 可对用户、用户组、资产、资产节点、应用以及系统用户进行授权; |
资产授权 | 资产树以树状结构进行展示;资产和节点均可灵活授权;节点内资产自动继承授权;子节点自动继承父节点授权; | |
应用授权 | 实现更细粒度的应用级授权; | |
Kubernetes 授权 | 支持用户通过 JumpServer 连接 Kubernetes 集群; | |
RemoteApp 远程应用(X-Pack) | 针对 Windows 系统实现更细粒度的应用级授权,并对应用操作录像进行回放审计; | |
动作授权 | 实现对授权资产的文件上传、下载以及连接动作的控制;支持剪切板复制 / 粘贴(Windows 资产); | |
时间授权 | 实现对授权资源使用时间段的限制; | |
特权指令 | 实现对特权指令的使用,支持黑白名单; | |
命令过滤 | 实现对授权系统用户所执行的命令进行控制; | |
文件传输与管理 | 支持 SFTP 文件上传 / 下载;支持 Web SFTP 文件管理; | |
工单管理(X-Pack) | 支持对用户登录请求行为进行控制;支持授权工单申请; | |
组织管理(X-Pack) | 实现多租户管理与权限隔离; | |
账号管理Accounting | 集中账号管理 | 管理⽤户管理;系统用户管理; |
⽤户⻆⾊ | 支持超级管理员、超级审计员、组织管理员(X-Pack)、组织审计员(X-Pack)、普通用户五种角色; | |
统⼀密码管理 | 资产密码托管;⾃动⽣成密码;密码自动推送;密码过期设置; | |
改密计划(X-Pack) | Linux / Windows 定期批量修改密码;⽣成随机密码;多种密码策略; | |
多云资产纳管(X-Pack) | 对私有云、公有云资产⾃动统⼀纳管; | |
收集⽤户(X-Pack) | ⾃定义任务定期收集主机⽤户; | |
密码匣子(X-Pack) | 统⼀对资产主机的⽤户密码进查看、更新、测试等操作; | |
安全审计Auditing | 登录审计 | 支持对用户登录到 JumpServer 系统的日志进行审计;支持将审计信息收集至 Syslog; |
操作审计 | 用户操作行为审计; | |
会话审计 | ⽀持在线会话内容审计;历史会话内容审计; | |
录像审计 | 支持对 Linux、Windows 等资产操作的录像进行回放审计;支持对 RemoteApp(X-Pack)、MySQL、Kubernetes 等应用操作的录像进行回放审计;支持将录像上传至公有云; | |
指令审计 | 支持对资产和应用等操作的命令进⾏审计; | |
⽂件传输审计 | ⽀持对⽂件的上传 / 下载记录进⾏审计; | |
实时监控 | 支持管理员 / 审计员实时监控用户的操作行为,并可进行实时中断,以提升用户操作的安全性; | |
数据库审计Database Auditing | 连接方式 | 命令行方式;Web UI 方式(X-Pack); |
支持的数据库 | MySQL 数据库;Oracle 数据库(X-Pack);MariaDB 数据库(X-Pack);PostgreSQL 数据库(X-Pack); | |
功能亮点 | 语法高亮;SQL 格式化;支持快捷键;支持选择执行;SQL 历史查询;支持页面创建 DB、Table; | |
会话审计 | 命令记录;录像回放。 |
jumpserver部署
推荐使用 极速安装 快速部署,资产规模较大参考 分布式部署 进行部署
需要提前安装 Python3.6 MySQL Redis
1.配置国内镜像源
- yum源配置 ,详情见清华园官网 https://mirrors.tuna.tsinghua.edu.cn/help/centos/
[wyhui]➜ ~ cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak [wyhui]➜ ~ vim /etc/yum.repos.d/CentOS-Base.repo name=CentOS-$releasever - Base baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7 #released updates [updates] name=CentOS-$releasever - Updates baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/updates/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-7
- 国内节点的epel源创建,详情见 https://mirrors.tuna.tsinghua.edu.cn/help/epel/
[wyhui]➜ ~ vim /etc/yum.repos.d/epel.repo [epel] name=Extra Packages for Enterprise Linux 7 - $basearch baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [epel-debuginfo] name=Extra Packages for Enterprise Linux 7 - $basearch - Debug baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1 [epel-source] name=Extra Packages for Enterprise Linux 7 - $basearch - Source baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1
- 虚拟机内DNS替换为 114DNS
[wyhui]➜ ~ sed -i 's/nameserver 192.168.127.2/nameserver 114.114.114.114/g' /etc/resolv.conf
2.Redis安装
Jumpserver使用redis做cache和celery broker ( celery是python做异步通信的工具包,celery使用了非常 简单的方式实现了异步。主要是celery sender broker 到consumer的过程)
[wyhui]➜ ~ yum install redis -y
[wyhui]➜ ~ systemctl enable redis
[wyhui]➜ ~ systemctl start redis
3.安装mysql
3.1. 配置YUM源
yum -y localinstall http://mirrors.ustc.edu.cn/mysql-repo/mysql57-community-release-el7.rpm
#执行此命令之后无需执行 下面的操作
- 或者
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
3.2. 安装
[root@jumpserver yum.repos.d]# yum install mysql-community-server mysql-community-devel -y
##需要安装的包
mysql-community-client-5.7.32-1.el7.x86_64
mysql-community-libs-5.7.32-1.el6.x86_64
mysql-community-common-5.7.32-1.el7.x86_64
mysql-community-devel-5.7.32-1.el7.x86_64
mysql-community-server-5.7.32-1.el7.x86_64
3.3. 启动服务并修改root密码
[wyhui]➜ ~ systemctl enable mysqld.service
[wyhui]➜ ~ systemctl start mysqld.service
[wyhui]➜ ~ systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 二 2020-12-08 07:44:42 CST; 32min ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
····
- 修改root密码
[wyhui]➜ ~ grep 'temporary' /var/log/mysqld.log
2020-12-08T06:39:43.413206Z 1 [Note] A temporary password is generated for root@localhost: VX7dXhqqhV;d
2020-12-08T06:39:45.781230Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
[wyhui]➜ ~ mysql -uroot -p
Enter password: **VX7dXhqqhV;d**
Welcome to the MySQL monitor. Commands end with ; or \g.
···
mysql> alter user 'root'@'localhost' identified by 'YUNhe123!@#';
Query OK, 0 rows affected (0.00 sec)
- 创建jumpserver所用数据库
mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin';
Query OK, 1 row affected (0.00 sec)s
mysql> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'ZcgDqOr5BOL6ZvKBoG3h3WRp#'; #此密码可自定义可用命令生成 后面配置文件中与之需要相同
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4安装Python
4.1 安装 python 环境
[wyhui]➜ ~ yum install -y python36 python36-devel
4.2构建python虚拟环境
[wyhui]➜ ~ python3.6 -m venv /opt/py3
[wyhui]➜ ~ source /opt/py3/bin/activate
(py3) [wyhui]➜ ~ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U #使用临时源升级pip,不升级后面换源可能会报错
(py3) [wyhui]➜ ~ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple ## 将pip源替换为国内源
(py3) [wyhui]➜ ~ yum install install -y krb5-devel -y #python所需依赖
(py3) [wyhui]➜ ~ requirements yum install gcc libffi-devel python-devel openssl-devel -y #python所需依赖
5安装jumpserver
5.1获取jumpserver的代码
(py3) [wyhui]➜ ~ cd /opt && \
cmdand> wget https://github.com/jumpserver/jumpserver/releases/download/v2.5.3/jumpserver-v2.5.3.tar.gz
···
正在保存至: “jumpserver-v2.5.3.tar.gz”
100%[==============================================================================>] 6,593,
2020-12-08 15:18:04 (1.16 MB/s) - 已保存 “jumpserver-v2.5.3.tar.gz” [6593244/6593244])
(py3) [wyhui]➜ /opt tar zxvf jumpserver-v2.5.3.tar.gz
(py3) [wyhui]➜ /opt mv jumpserver-v2.5.3 jumpserver
5.2 安装编译环境的依赖(已提前更换国内源)
(py3) [wyhui]➜ /opt cd jumpserver/requirements
(py3) [wyhui]➜ requirements python -m pip install --upgrade setuptools # 若遇到这些报错‘ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.’ 执行这些句即可
(py3) [wyhui]➜ requirements yum install -y $(cat rpm_requirements.txt)
(py3) [wyhui]➜ requirements pip install -r requirements.txt -i https://pypi.doubanio.com/simple/ # 临时使用豆瓣源配置编译环境
5.3修改配置文件
[wyhui]➜ ~ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
vVPkw0jwfR2shvMJ6kxiebBo6s1TQxT72x74WNpzdQgdw2wpo # SECRET_KEY
[wyhui]➜ ~ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16;echo
E25QcoEOUp7Yxml9# #BOOTSTRAP_TOKEN
(py3) [wyhui]➜ jumpserver cp config_example.yml config.yml
(py3) [wyhui]➜ jumpserver vim config.yml # 修改项如下
SECRET_KEY: y5It9fT5DKAnlhOgtRDHwIb5KxulPuOEDdMMuibjjLPmb2lvv
BOOTSTRAP_TOKEN: E25QcoEOUp7Yxml9#
LOG_LEVEL: REEOR
DB_PASSWORD: ZcgDqOr5BOL6ZvKBoG3h3WRp# #与mysql jumpserver库密码相同
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
5.4启动jumpserver
- 后台运行使用 -d 参数
./jms start all -d
- 重启命令:
./jms restart
(py3) [wyhui]➜ jumpserver ./jms start
2020-12-09 09:03:01 Wed Dec 9 09:03:01 2020
2020-12-09 09:03:01 JumpServer version v2.5.3, more see https://www.jumpserver.org
- 访问:运行不报错,请浏览器访问 http://192.168.127.132:8080/ 默认账号: admin 密码: admin 页面 显示不正常先不用处理,搭建 nginx 代理就可以正常访问了
# 若启动遇到次错误from Crypto.Util.py3compat import byte_str 执行以下步骤即可
(py3) [wyhui]➜ pip3 uninstall pycrypto
(py3) [wyhui]➜ pip3 uninstall pycryptodome
(py3) [wyhui]➜ pip3 install pycryptodome
6. 部署koko组件
http://10.2.48.19/
为内网源
(py3) [wyhui]➜ cd /opt && \
wget https://github.com/jumpserver/koko/releases/download/v2.5.3/koko-v2.5.3-linux-amd64.tar.gz
tar -xf koko-v2.5.3-linux-amd64.tar.gz && \
mv koko-v2.5.3-linux-amd64 koko && \
chown -R root:root koko && \
cd koko \
mv kubectl /usr/local/bin/ && \
wget https://download.jumpserver.org/public/kubectl.tar.gz && \
tar -xf kubectl.tar.gz && \
chmod 755 kubectl && \
mv kubectl /usr/local/bin/rawkubectl && \
rm -rf kubectl.tar.gz
# 两文件都可用内网源替换
http://10.2.48.19/koko-v2.5.3-linux-amd64.tar.gz
http://10.2.48.19/kubectl.tar.gz
- 启动koko
[wyhui]➜ /opt cd koko
[wyhui]➜ koko cp config_example.yml config.yml
[wyhui]➜ koko vim config.yml
# Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: E25QcoEOUp7Yxml9#
# 运行
./koko
可以 -d 参数在后台运行
./koko -d
- 若报错
2020-12-09 19:09:25 [ERRO] POST http://127.0.0.1:8080/api/v2/terminal/terminal-registrations/ failed, get code: 401, {"detail":"身份认证信息未提供。","code":"not_authenticated"}
可执行如下命令重新安装此django
模块
pip install --target=/opt/py3b/python3.6/site-packages django -i https://pypi.tuna.tsinghua.edu.cn/simple
7.下载lina组件
cd /opt &&
wget http://10.2.48.19/lina-v2.5.3.tar.gz
tar -xf lina-v2.5.3.tar.gz
mv lina-v2.5.3 lina
chown -R nginx:nginx lina
8.下载luna组件
(py3) [wyhui]➜ /opt cd /opt && \
wget http://10.2.48.19/luna-v2.5.3.tar.gz
tar -xf luna-v2.5.3.tar.gz
mv luna-v2.5.3 luna
chown -R nginx:nginx luna
9. 配置 Nginx 整合各组件
9.1 配置Nginx官方源
[wyhui]➜ ~ vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
9.2安装,启动Nginx并修改相应配置文件
[wyhui]➜ ~ yum install nginx -y
[wyhui]➜ ~ systemctl enable nginx.service
[wyhui]➜ ~ systemctl start nginx.service
[wyhui]➜ ~ echo > /etc/nginx/conf.d/default.conf
[wyhui]➜ ~ vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
client_max_body_size 100m; # 录像及文件上传大小限制
location /ui/ {
try_files $uri / /index.html;
alias /opt/lina/;
}
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna 路径, 如果修改安装目录, 此处需要修改
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改
}
location /static/ {
root /opt/jumpserver/data/; # 静态资源, 如果修改安装目录, 此处需要修改
}
location /koko/ {
proxy_pass http://localhost:5000;
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;
access_log off;
}
location /guacamole/ {
proxy_pass http://localhost:8081/;
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;
access_log off;
}
location /ws/ {
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_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/ {
proxy_pass http://localhost: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 /core/ {
proxy_pass http://localhost: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;
}
}
9.3 重载Nginx
nginx -t
nginx -s reload
13. 开始使用 JumpServer
- web页面管理