介绍
- 介绍:
提供唯一入口(也就是统一设备运维入口),支持Linux、Windows、Unix、MacOS 等 设备资源,实现对服务器器资源操作管理理的集中认证,集中控制,集中审计。提升运维管理理水平。 - 之所以用堡垒机的原因:
互联网企业需要大量的服务器,但是服务器需要高效、安全的去管理,所以就用到了堡 垒机。
现在比较常见的方案是搭建堡垒机环境作为线上服务器器的入口,所有服务器器只能通 过堡垒机进行行登陆访问。
用大白话来说: 就是监控运维人员、开发人员对服务器器的命令操作。出了了事故能找 到具体责任人。 - 特性:
精细化的资源与功能授权,让运维人员各司其职
体系化的指令审计规则,让运维操作安全可控
支持多重身份认证,让非法访问无所遁形
主机账号统一管理,SSH密钥对一键批量下发 - 展示:
登入信息仪表盘
资产管理
权限管理
会话管理
Web网站会话
Ssh会话
日志审计管理
搭建
- jumpserver堡垒机组件:
Jumpserver:管理后台,是核心组件
Koko:实现了 SSH Server 和 Web Terminal
Server 的组件,提供 SSH 和 WebSocket 接口
Luna:现在是 Web Terminal 前端,计划前端页面都由该项目提供,Jumpserver 只提供 API,不 再负责后台渲染html等。 - 部署Jumpserver
- 运行环境
字符集为中文
查看
cat /etc/locale.conf
不是中文则修改
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
- 部署docker
阿里云镜像加速配置
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF
yum install -y docker-ce-19.03.5-3.el7.x86_64.rpm
docker-ce-cli-19.03.5-3.el7.x86_64.rpm containerd.io-1.2.6-3.3.el7.x86_64.rpm
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock --graph /data/docker
systemctl daemon-reload
systemctl start docker
开启动网络转发功能,默认会自动开启
查看:为1是开启的
cat /proc/sys/net/ipv4/ip_forward
手动开启:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p #生效
安装docker-compose,运行命令:
cd /usr/local/bin
mv docker-compose-Linux-x86_64 docker-compose
chmod +x /usr/local/bin/docker-compose
- 准备 Python3 和 Python 虚拟环境
安装依赖包
yum install -y epel-release
yum -y install wget sqlite-devel xz gcc automake zlib-devel
openssl-devel epel-release git
python36u python36u-devel mariadb-devel
编译安装python3.6.1
tar -xvf Python-3.6.1.tar.xz -C /usr/local/
cd /usr/local/Python-3.6.1/
./configure && make -j 4 && make install
CentOS 6/7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为了 不扰乱原来的环境我们来使用Python 虚拟环境
建立 Python 虚拟环境
cd /usr/local/
python3 -m venv py3
source /usr/local/py3/bin/activate
(py3) [root@xuegod63 ~]#
#切换成功的,前面有一个py3 标识
设置pip阿里源并升级pip
mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
(py3) [root@jumpserver docker] pip install --upgrade pip
- 安装 Jumpserver 2.0.0
tar -xvf jumpserver-v2.0.2.tar.gz -C /data/
cd /usr/local/jumpserver/requirements/
安装依赖 RPM 包
(py3) [root@xuegod63] yum -y install $(cat rpm_requirements.txt)
安装 Python 库依赖
(py3) [root@xuegod63] pip install --upgrade setuptools
(py3) [root@xuegod63] python -m pip install --upgrade pip
远程安装:
py3) [root@xuegod63] cd /usr/local/jumpserver/requirements/
(py3) [root@xuegod63] pip install wheel && pip install -r requirements.txt
安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke
yum -y install redis
systemctl enable redis
systemctl start redis
建数据库 Jumpserver 并授权
yum -y install mariadb mariadb-devel mariadb-server(也可使用mysql)
systemctl start mariadb
systemctl enable mariadb
#mysql
create database jumpserver default charset 'utf8';
grant all on jumpserver.* to 'jumpserver'@'%' identified by '123456';
修改Jumpserver 配置文件
随机生成2段字符
给jumpserver配置文件的SECRET_KEY:
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo;echo
BCpmAcL1GSBV9qv1ICA2wmczmRg1wJgWNaLX6960dWknPcr0A
给jump server配置文件的BOOTSTRAP_TOKEN:
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24;echo;echo
pikktkcjyAQJ8kTfno5sEVQi
cd /usr/local/jumpserver/
cp config_example.yml config.yml
vim /usr/local/jumpserver/config.py
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
SECRET_KEY: BCpmAcL1GSBV9qv1ICA2wmczmRg1w
# 预共享Token coco和guacamole用来注册服务账号
BOOTSTRAP_TOKEN: pikktkcjyAQJ8kTfno5sEVQi
# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
DEBUG: true
# 日志级别
LOG_LEVEL: ERROR
# 浏览器Session过期时间,默认24小时, 也可以设置浏览器关闭则过期
SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: false
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 192.168.66.243
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: '123456'
DB_NAME: jumpserver
# 运行时绑定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD:
#Windows 登录跳过手动输入密码
WINDOWS_SKIP_ALL_MANUAL_PASSWORD: False
数据库表结构和初始化数据
(py3) [root@xuegod63] cd /usr/local/jumpserver/utils
(py3) [root@xuegod63] bash make_migrations.sh
#在执行这一条命令之前,必续保障之前的pip install ./* 命令已经执行完了,
#不然后导入不了Django等软件包。
启动Jumpserver
(py3) [root@xuegod63] cd /usr/local/jumpserver
(py3) [root@xuegod63] chmod +x jms
(py3) [root@xuegod63] ./jms start all -d
(py3) [root@xuegod63] ./jms restart -d
# 后台运行使用 -d 参数
访问 http://192.168.66.48:8080 用户 : admin 密码: admin
- 安装koko组件:SSH Server 和 Web Terminal
Server 的组件,提供 SSH 和 WebSocket 接口
导入镜像
docker load -i jms-koko:2.0.2.tar
docker load -i jms-guacamole:2.0.2.tar
编辑启动文件
mkdir -p /opt/docker/jms-koko
mkdir -p /opt/docker/jms-guacamole
vim /opt/docker/jms-koko/docker-compose.yml
version: '3'
services:
jms_koko:
image: jumpserver/jms_koko:2.0.2
restart: always
environment:
#指向 jumpserver 的服务端口
- CORE_HOST=http://192.168.66.50:8080
#Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN
- BOOTSTRAP_TOKEN=pikktkcjyAQJ8kTfno5sEVQi
- LOG_LEVEL=ERROR
container_name: jms_koko
ports:
- "2222:2222"
- "5000:5000"
expose:
- "2222"
- "5000"
vim /opt/docker/jms-guacamole/docker-compose.yml
version: '3'
services:
jms_guacamole:
image: jumpserver/jms_guacamole:2.0.2
restart: always
environment:
#指向 jumpserver 的服务端口
- JUMPSERVER_SERVER=http://192.168.66.50:8080
#Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN
- BOOTSTRAP_TOKEN=pikktkcjyAQJ8kTfno5sEVQi
- GUACAMOLE_LOG_LEVEL=ERROR
container_name: jms_guacamole
ports:
- "8081:8080"
expose:
- "8081"
启动
docker-compose -f /opt/docker/jms-koko/docker-compose.yml up -d
docker-compose -f /opt/docker/jms-guacamole/docker-compose.yml up -d
查看状态
docker ps -a | grep jms
- 安装luna、lina组件:Luna现在是 Web Terminal 前端,计划前端页面都由该项目提供
tar -xvf luna-v2.0.2.tar.gz -C /data/
tar -xvf lina-v2.0.2.tar.gz -C /data/
配置 Nginx 整合各组件
安装nginx
安装依赖包:yum -y install gcc pcre-devel openssl-devel
mkdir /data/install/
安装:tar -xvf nginx-1.18.0.tar.gz -C /data/install/
指定软件归属:useradd -s /sbin/nologin nginx
cd /data/install/nginx-1.18.0/
./configure --prefix=/data/nginx --user=nginx --group=nginx --with-http_ssl_module
--with-stream
make && make install
启动服务:/usr/local/nginx/sbin/nginx
暂停服务:/usr/local/nginx/sbin/nginx -s stop
重新加载:/usr/local/nginx/sbin/nginx -s reload
配置启动文件
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
编辑配置文件
vim /data/nginx/conf/nginx.conf
worker_processes 2;
events {
worker_connections 2048;
}
http {
server_tokens off;
server_names_hash_bucket_size 128;
client_max_body_size 50M;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server {
listen 80;
server_name localhost 192.168.66.58;
# 录像及文件上传大小限制
client_max_body_size 100m;
location /ui/ {
try_files $uri / /index.html;
alias /data/lina-v2.0.2/;
}
location /luna/ {
try_files $uri / /index.html;
alias /data/luna-v2.0.2/;
}
#录像存放位置
location /media/ {
add_header Content-Encoding gzip;
root /data/jumpserver-v2.0.2/data/;
}
## 静态资源存放位置
location /static/ {
root /data/jumpserver-v2.0.2/data/;
}
location /koko/ {
#koko的对外服务地址
proxy_pass http://192.168.66.50: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/ {
#guacamole对外服务地址
proxy_pass http://192.168.66.230: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;
#WS_LISTEN_PORT的对外地址
proxy_pass http://192.168.66.50: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://192.168.66.50: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://192.168.66.50: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;
}
运行 Nginx
nginx -t # 检测配置文件
systemctl start nginx
systemctl enable nginx
访问http://192.168.66.50/
admin/admin
接受主键的注册
测试连接
ssh -p2222 admin@192.168.66.48 #密码: admin
- jumpserver平台系统初始化
9.1、系统基本设置:这里要写成自己真实的URL地址,不然后期用户访问不了。http://192.168.66.48
9.2、配置邮件发送服务器
点击页面上边的"邮件设置" TAB ,进入邮件设置页面:
SMTP服务器:smtp.163.com
注:自己邮箱要开启smtp和pop3服务。
开启POP3/SMTP/IMAP服务方法:
请登录163邮箱,点击页面右上角的“设置”—在“高级”下,“POP3/SMTP/IMAP”,
勾选图中两个选项,点击确定。即可开启成功。开通后即可用闪电邮、Outlook
POP3服务器:pop.163.com | SMTP服务器:smtp.163.com | IMAP服务器:imap.163.com
使用
- 用户管理:添加用户组。
点击用户管理 —> 查看用户组 —> 添加用户组—>王者荣耀-华北区运维部门 - 添加用户
点击用户管理 —> 用户列表 —> 创建用户
其中,名称是真实姓名,用户名即 Jumpserver 登录账号。
然后点提交。
查看添加的用户
成功提交用户信息后,Jumpserver 会发送一条设置"用户密码"的邮件到您填写的
用户邮箱。
点击链接,开始修改密码:
用户首次登录 Jumpserver,会被要求完善用户信息。
这个需要用户自己生成SSH 密钥,方便后期登录:我在自己的另一台linux上,使用mk 用户生成自己的ssh密钥。
(py3) [root@xuegod63 luna]# useradd mk123
(py3) [root@xuegod63 luna]# echo 123456 | passwd --stdin mk123
[root@xuegod63 opt]# su - mk123
[mk@xuegod63 ~]$ ssh-keygen #一路回车
[mk@xuegod63 ~]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE/7Yt3MKTvavCZSV2F9GCRX0snRDyAu2GzvmGaMj1Y1Evv0+bdNYuEVbax/CyakBcaYyBuD427trkQytfbfovc97As4fFV3yhKKKis6D66TR28zH5gGkhuToFhmil9BGFzJqy1M7fne+A18bKvezlFpZn4clwgg3kIqPCbOtQQnA9h1TH5j8lnvMwwcRxenKRMla987TfJ3482aTAoScxNmv2FNNSQmZEKHGPT5MmUIzrm3dwvCotAEmDegxJ0dB5u29tZaHgxMWFf1GRoj3pW8CzMOhug42F9FDF+K9wve5aph0mmc5pe7OKJthWrbv8CEV3T2mRYK4+M5q5sRed mk123@xuegod63.cn
把上面生成的公钥粘到这里:
- 编辑资产树添加节点
节点不能重名,右击节点可以添加、删除和重命名节点,以及进行资产相关的操作。
改成节点名字为:王者荣耀-华北区-服务器
- 创建管理用户
Jumpserver里各个用户的说明:
管理用户是服务器的 root,或拥有 NOPASSWD: ALL sudo 权限的用户,Jumpserver 使用该 用户来推送系统用户、获取资产硬件信息等。
王者荣耀-华北区-服务器管理用户-root 密码是: 123456
前提,你的王者荣耀-华北区-服务器节点中所有的服务器root用户密码都是:123456
这样就可以使用此root用户管理服务器。 - 创建系统用户
系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户, Jumpserver 使用系统用户登录资产。
系统用户的 Sudo 栏填写允许当前系统用户免sudo密码执行的程序路径,如默认的 /sbin/ifconfig,意思是当前系统用户可以直接执行 ifconfig 命令或 sudo ifconfig 而不 需要输入当前系统用户的密码,执行其他的命令任然需要密码,来达到权限控制的目的。
此处的权限应该根据使用用户的需求汇总后定制,原则上给予最小权限即可。
系统用户创建时,如果选择了自动推送 Jumpserver 会使用 Ansible 自动推送系统用户到资产 中,如果资产(交换机、Windows )不支持 Ansible, 请手动填写账号密码。
Linux 系统协议项务必选择 ssh 。如果用户在系统中存在,去掉自动生成密钥、自动推送勾选。
增加一个:检查服务器运行状态的用户: user 权限:
/sbin/ifconfig,/usr/bin/top,/usr/bin/free
再加一个: 系统管理员用户:manager - 创建资产
点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。
点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息。
IP 地址和管理用户要确保正确,确保所选的管理用户的用户名和密码能"牢靠"地登录指定的 IP 主机上。资产的系统平台也务必正确填写。公网 IP 信息只用于展示,可不填,Jumpserver 连接资产使用的是 IP 信息。
开启虚拟机xuegod64.cn。 一会把这台机器当成资源添加平台中。
game64.xuegod.cn-王者荣耀-华北区 192.168.1.64
资产创建信息填写好保存之后,可以看到已经可以连接资产,说明正常:
如果资产不能正常连接,请检查管理用户的用户名和密钥是否正确以及该管理用户是否能使 用 SSH 从 Jumpserver 主机正确登录到资产主机上。 - 网域列表(这个功能,一般情况不用到。)
网域功能是为了解决部分环境无法直接连接而新增的功能,是通过网关服务器进行跳转登录。 - 创建授权规则
节点,对应的是资产,代表该节点下的所有资产。
用户组,对应的是用户,代表该用户组下所有的用户。
系统用户,及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。
节点,用户组,系统用户是一对一的关系,所以当拥有 Linux、Windows 不同类型资产时,应
该分别给 Linux 资产和 Windows 资产创建授权规则。
授权成功后,你自己手动到上查看:
tail /etc/passwd -n 5
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
mk:x:1000:1000:mk:/home/mk:/bin/bash
manager:x:1001:1001::/home/manager:/bin/bash
#自动推送一个帐号,自动在资产服务器上创建系统用户
visudo #sudo相关的规则也会被自动推送过来
manager ALL=(ALL) NOPASSWD: /sbin/,/bin/
- 用户使用资产
登录 Jumpserver
创建授权规则的时候,选择了用户组,这里需要登录所选用户组下面的用户才能看见相应的资产。
使用无痕浏览器,再打开一个窗口,进行登录:
用户正确登录后的页面:
连接资产,点击页面左边的 Web 终端:
打开资产所在的节点:
双击资产名字,就连上资产了:
如果显示连接超时,请检查为资产分配的系统用户用户名和密钥是否正确,是否正确选择 Linux 操作系统,协议 ssh,端口22,以及资产的防火墙策略是否正确配置等信息。 - 在xshell字符终端下连接jumpserver管理服务器
输入jumpserver用户mk123 和密码123456
点击确定开始连接
Opt> 64 #输入一个64,就可以直接登录:192.168.1.64
[manager@xuegod64 ~]$ whoami #登录使用的是系统用户manager
[manager@xuegod64 ~]$ exit
Opt> p #显示你有权限的主机
ID Hostname IP LoginAs Comment
1 game64.xuegod.cn-王者荣耀-华北区 192.168.1.64 [系统管理员用户]
Opt> g #显示你有权限的主机组
ID Name Assets Comment
1 王者荣耀-华北区-服务器
- 查看历史命令记录
- 查看历史会话并回放视频
更多内容,可以参数官方手册:http://docs.jumpserver.org/zh/docs/step_by_step.html