jumpserver2.3.0社区开源版
简介
官网
GitHub
哔哩哔哩官方视频
jumpserver2.0发布会
jumpserver是全球首款完全开源的堡垒机,使用GUN GPL v2.0开源协议,是符合4A的专业运维审计系统。
jumpserver使用python/Django进行开发,遵循web2.0规范,配备了业界领先的web terminal解决方案,交互界面美观、用户体验好
jumpserver采纳分布式架构,支持多机房跨区域部署,中心节点提供API,各机房部署登录节点,可横向扩展、无并发访问限制。
jumpserver现已支持管理SSH、Telnet、RDP、VNC协议资产。
作用
jumpserver作为一款开源堡垒机,在jumpserver中方便查看资产的硬件设备规格信息,具备四种能力(也就是上文提到的4A能力)
身份鉴别:防止身份冒用和复用
授权控制:防止内部误操作和权限滥用
账号管理:人员和资产的管理
安全审计:追溯的保障和事故分析的依据
我认为jumpserver在企业中的作用:
1、如果是多个运维人员进行管理一个项目,平时的操作都是xshell方式连接,如果出现误操作后不承认,比较难以追责,jumpserver的录像功能,可以方便事后追究责任。
2、公司的服务器不宜暴露在外网中,所以需要一个jumpserver制定规范化的端口后进行开放端口,用于运维人员登录访问。
(如果是将jumpserver的访问来源设置为外网,则可以实现在家登陆jumpserver,进行操作服务器;但是更规范的方式为 搭建vpn远程到公司,jumpserver设置为内网,其他服务器位于内网中,服务器的sshd只允许jumpserver的22端口访问。)
jumpserver后在操作其他服务器,避免其他服务器暴露在外网中,降低被入侵的风险。并且jumpserver现在已经支持多因子认证,开放jumpserver的服务器在外网中可以安心使用,防止入侵。
3、权限划分,可以在jumpserver中设置开发人员的权限,管控权限防止权限滥用
4、传输文件,个人感觉比较鸡肋,不能实时的跟随所在目录进行传输文件,必须指定一个目录,如果想要的文件不是此目录,还需要手动mv 。只不过可以录像上传、下载文件而已。
协议
JumpServer 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。
原理
1、用户通过HTTP请求到nginx,nginx的页面到jumpserver
2、用户通过ssh请求到coco,通过api到jumpserver(管理linux机器)
3、用户通过ssh请求到guacamole,通过api调用到jumpserver(管理Windows)
4、用户通过HTTP请求到nginx,nginx转到Luna,通过浏览器调用api到nginx
5、jumpserver端和coco都对接数据库,数据库中存放着用户的数据(可以利用mariadb进行重构和恢复系统)。
架构
LINA:前端模块,负责页面展示。
LUNA:web terminal前端,只提供api。
CORE:管理后台,是核心组件,支持restful api。
COCO/KOKO:提供ssh和web socket接口,连接服务器。
Guacamole:实现RDP功能,支持jumpserver调用
jumpserver也有分布式部署的,在总公司部署核心节点,其他分公司部署proxy,可以实现统一管理。
安装
安装方式分为传统方式、极速脚本方式、容器方式、分布式方式 安装版本分为开源版和企业版,本文研究的是开源版
脚本方式
环境说明
全新安装的 Centos7 (7.x)
需要连接 互联网
使用 root 用户执行
需要有4G内存
下载文件
cd /opt
yum -y install wget git
git clone --depth=1 https://github.com/jumpserver/setuptools.git
cd setuptools
cp config_example.conf config.conf
vi config.conf
执行安装
./jmsctl.sh install
查看帮助
./jmsctl.sh -h
访问页面
http://ip:80
容器方式
docker环境准备
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
systemctl enable docker
systemctl start docker
配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://h8h8tgzq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Linux 生成随机加密秘钥
if [ ! "$SECRET_KEY" ]; then
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`;
echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc;
echo $SECRET_KEY;
else
echo $SECRET_KEY;
fi
if [ ! "$BOOTSTRAP_TOKEN" ]; then
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`;
echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc;
echo $BOOTSTRAP_TOKEN;
else
echo $BOOTSTRAP_TOKEN;
fi
运行docker部署jumpserver
mkdir -p /opt/jumpserver/data
mkdir -p /opt/jumpserver/mysql
docker run --name jms_all -d \
-p 80:80 -p 2222:2222 \
-e SECRET_KEY=$SECRET_KEY \
-e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN \
-v /opt/jumpserver/data:/opt/jumpserver/data \
-v /opt/jumpserver/mysql:/var/lib/mysql \
--privileged=true \
jumpserver/jms_all:v2.3.1
访问
浏览器访问: http://<容器所在服务器IP>
SSH 访问: ssh -p 2222 <容器所在服务器IP>
XShell 等工具请添加 connection 连接, 默认 ssh 端口 2222
默认管理员账户 admin 密码 admin
传统方式
分布式方式
配置
常用文件
文件名 | 作用 |
---|---|
/opt/jumpserver/config.yml | jumpserver配置文件 |
/opt/jumpserver/tmp | jumpserver组件服务的pid |
/opt/jumpserver/config.yml | jumpserver配置文件 |
/opt/setuptools/config.conf | jumpserver安装信息文件 |
使用前须知
存储规划
硬盘容量主要用于存储审计录像,所以容量的选择需要根据用户资产数量以及使用程度来评估,建议最好200G以上,以100台Linux虚拟机资产为例,正常的日常使用,200G可以存储5-6个月的录像。
存储空间评估标准
每小时产生录像大小(Linux和Windows平均值)10MB
每天操作时限 4小时
保留期限 30天
存储空间 109104*30=127GB
主要是用于录像存储
端口
22 SSH
80,880 jumpserver的web服务(Nginx) 根据用户需求可以修改
2222 jumpserver的终端连接端口 给第三方远程终端工具(xshell,putty等)使用
5000 Koko服务端口
8081 guacamole服务端口
8070
3306 mariadb数据库端口
6379 Redis
详细见图
(注释:参考Nginx的配置文件利于分析端口作用)
docker容器运行 guacamole组件、Koko组件
目录
/opt/jumpserver/data/ 录像位置
/opt/jumpserver/data/ 静态资源
概念区分
用户列表中创建用户
jumpserver平台用户,并不是登录Linux服务器的用户
资产管理中的管理用户
管理用户是资产(被控服务器)上的 root,或拥有 NOPASSWD: ALL sudo 权限的用户, JumpServer 使用该用户来 `推送系统用户`、`获取资产硬件信息` 等。
资产管理中的系统用户
可以理解为登录资产用户。单来说是用户使用自己的用户名登录 JumpServer,JumpServer 使用系统用户登录资产。 系统用户创建时,如果选择了自动推送,JumpServer 会使用 Ansible 自动推送系统用户到资产中。
使用
1、系统设置
1、基础设置
浏览器中 访问 liushiya.com
2、邮件设置
我的授权码:不告诉你
3、邮件内容设置
注意:只要将邮件设置完成再创建用户才会发送邮件 提醒修改密码
4、LDAP设置
5、安全设置
勾选 多因子认证以及设置限制登陆失败次数,防止暴力破解
重新登录时会提示要求输入admin用户的密码
要求安装手机端令牌应用
问题
问题在于 设置时 是在系统设置----> 安全设置中进行勾选
但是取消时 却不是简单取消勾选就可以的
而是需要
1、系统设置----> 安全设置中进行取消勾选
2、首页右上角administrator用户 ----> 个人信息 ----> 禁用 多因子认证
3、重新登录就不会再要求输入认证码了。
2、创建用户
1、用户管理 ---> 用户列表 ----> 创建
解释:此创建的用户为登录jumpserver的用户,并非是操作Linux系统的用户,仅用于登录jumpserver而已。
2、资产管理 ----> 管理用户 ------> 创建管理用户
此管理用户是指Linux系统上的真实存在的用户,用于推送系统用户、获取资产硬件信息等
3、创建资产
4、更新硬件信息(更新后 如果是正确可以连接但是没有显示出来硬件信息,请刷新浏览器)
3、创建资产
此步骤需要在完成第二步的创建管理用户之后操作
资产管理 ----> 资产列表 ----> 创建
测试资产服务器是否可以连接
正常可以连接
不可以连接
为了实现安全性 在配置完成后 根据资产服务器列表,进行sshd的访问控制(只允许jumpserver的端口进行远程连接,拒绝其他IP地址的连接)
具体sshd的远程连接控制 查看博客 《sshd服务的白名单和黑名单》
4、资产授权
1、创建系统用户
资产管理 ----> 系统用户 ----> 创建系统用户
(系统用户是登录真实服务器时的用户,不是jumpserver的用户)
系统用户创建完成后 点击系统用户,添加资产
先选择推送,在选择测试
2、资产授权
权限管理 ----> 资产授权 ----> 创建资产授权规则
提交后30秒的时间,就可以使用了。
会话管理-----> web终端 登录即可了。
注释:jumpserver的用户列表的用户和资产管理的系统用户是相互绑定的,因为资产授权是将系统用户和资产进行绑定,而系统用户又需要登录jumpserver的用户才能使用,所以这三者之间是相互绑定的(jumpserver用户----系统用户----被管理的资产)
安全建议
Jumpserver 对外需要开放 80 和 2222 端口,如果你配置了 ssl 还需要开放 443 端口, 8080 端口开放给 koko 和 guacamole 组件访问
JumpServer 所在服务器操作系统应该升级到最新
JumpServer 依赖的软件升级到最新版本
服务器、数据库、redis 等依赖组件请勿使用弱口令密码
不推荐关闭 firewalld 和 selinux
只开放必要的端口,必要的话请通过 vpn 或者 sslvpn 访问 JumpServer
如果必须开放到外网使用,你应该部署 web 应用防火墙做安全过滤
请部署 ssl 证书通过 https 协议来访问 JumpServer
JumpServer 不要使用弱口令密码,应立即改掉默认的 admin 密码
推荐开启 MFA 功能,避免因密码泄露导致的安全问题
升级
卸载
!!!此操作不可逆, 请确认已经备份好数据库
确保已经停止 jms koko guacamole 进程
确定数据已经处理完毕
请自行替换文中相关路径为你的实际环境路径
1、 正常部署卸载
rm -rf /opt/jumpserver
rm -rf /opt/koko /opt/koko
rm -rf /opt/docker-guacamole
rm -rf /opt/lina
rm -rf /opt/luna
rm -rf /opt/py3
rm -rf /config
rm -rf /etc/nginx/conf.d/jumpserver.conf
2、脚本部署卸载
cd /opt/setuptools
./jmsctl.sh uninstall
3、docker 组件部署卸载
rm -rf /opt/jumpserver
rm -rf /opt/py3
rm -rf /etc/nginx/conf.d/jumpserver.conf
docker rm jms_koko
docker rm jms_guacamole
docker rmi jumpserver/jms_koko:v2.3.1
docker rmi jumpserver/jms_guacamole:v2.3.1
rm -rf /usr/lib/systemd/system/jms.service
rm -rf /opt/start_jms.sh
rm -rf /opt/stop_jms.sh
删除数据库
mysql -uroot
drop database jumpserver;
exit
清空 redis
redis-cli -h 127.0.0.1
flushall
exit
问题
1、用户登录时出现问题
error: dial tcp 10.0.0.102:22: i/o timeout
解决
jumpserver的GitHub反馈
也是描述了相同的问题
使用docker方式部署没有这个问题,
使用脚本方式安装确实会出现这个问题的。
脚本方式版本信息 2.2.3
docker方式版本信息 2.3.0