Jumpserver简介
堡垒机概述:
为互联网企业提供了认证,授权,审计,自动化运维等功能。
堡垒机,在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,可以实时收集和监控网络环境。一但出现违规的操作导致的事故,可以快速定位到原因和责任人
跳板机概述:
跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。
跳板机缺点:没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位到原因和责任人
堡垒机比跳板机多了几个功能:
1、给其它服务器推送sudo用户,并为其设置权限
2、多了一个用户行为监控的功能(有录像)
堡垒机比跳板机多了实时收集、监控网络环境、集中报警等功能。
Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。
Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。
为互联网企业提供了认证,授权,审计,自动化运维等功能。
Jumpserver实现的功能:
1、用户组/用户 :添加组方便进行授权,用户是授权和登陆的主体.
2、资产组/资产/IDC : 主机信息简洁完整,用户自定义备注登录,支持自动获取主页硬件信息.
3、Sudo/系统用户/授权规则 :支持sudo 授权,系统用户用于登陆客户端,授权是将用户、资产和系统用户关联起来.
4、在线/登录历史/命令记录/上传下载 : 在线实时监控用户操作,统计和录像回放用户操作内容,阻断控制,详细记录上传下载.
5、上传/下载 : 支持文件上传下载,实现 rzsz方式.
6、默认设置 : 默认管理用户,设置包括用户密码密钥,默认信息为了方便添加资产而设计.
jumpserver组件
1、Jumpserver 为管理后台,管理员可以通过Web页面进行资产管理、用户管理、资产授权等操作
2、Coco 为 SSH Server 和 Web Terminal Server(网页linux客户端)。用户可以通过使用自己的账户登录 SSH 或者 Web Terminal 直接访问被授权的资产。不需要知道服务器的账户密码,新版本的coco被koko取代。
3、Luna 为 Web Terminal Server 前端页面,用户使用 Web Terminal 方式登录所需要的组件
4、Guacamole 为 Windows 组件,用户可以通过 Web Terminal 来连接 Windows 资产 (暂时只能通过 Web Terminal 来访问)
硬件配置 2个cpu核心 、4G内存 、50硬盘
环境配置 python3.6版本以上 、mysql server5.6版本以上 、mariadb server 5.5.56版本以上
[root@centos7-2 ~]# hostnamectl set-hostname jumpserver 更改主机名
[root@centos7-2 ~]# logout
1.安装python3.6的版本
安装python3.6的版本,当前系统是centos7自带版本的是2.7.5的版本
软件下载地址:
https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
2.上传所有安装包
Jumpserver-packs包里包含了所有需要的rpm包。
网盘地址:所有的包
链接:https://pan.baidu.com/s/1kAYb5weI6RgAYaLF8S8Uhw
提取码:visc`
3.解压上传的包
[root@jumpserver ~]# tar xf pip-packs.tar.gz
[root@jumpserver ~]# tar xf Python-3.6.8.tgz -C /usr/local/src/
[root@jumpserver ~]# vim /etc/yum.repos.d/jumpserver.repo 配置本地jumpserveryum源
[jumpserver]
name=CentOS7
baseurl=file:///root/jumpserver-packs
enable=1
gpgcheck=0
4.安装jumpserver依赖
[root@jumpserver ~]# tar xf jumpserver-packs.tar.gz 解压
[root@jumpserver ~]# yum install -y gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
5.安装python3.6.8
[root@jumpserver ~]# cd /usr/local/src/Python-3.6.8/
[root@jumpserver Python-3.6.8]# ./configure --prefix=/usr/local/python //预编译
[root@jumpserver Python-3.6.8]# make -j 2 调用两个核心加快编译
[root@jumpserver Python-3.6.8]# make install
[root@jumpserver ~]# cd /usr/local/python/bin/
[root@jumpserver bin]# ls
[root@jumpserver bin]# ln -s /usr/local/python/bin/* /usr/local/bin/
[root@jumpserver ~]# python3 -V #查看版本
Python 3.6.8
[root@jumpserver ~]# pip3 -V #查看版本
pip 18.1 from /usr/local/python/lib/python3.6/site-packages/pip (python 3.6)
主要用于安装python一些模块
6.配置python环境
因为 CentOS 6/7 自带的是 Python2,而Yum等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python虚拟环境
[root@jumpserver ~]# python3.6 -m venv /opt/py3 创建py3虚拟环境
[root@jumpserver ~]# source /opt/py3/bin/activate 载入py3虚拟环境
看到下面的提示符代表成功,以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均在该虚拟环境中运行
(py3) [root@jumpserver ~]#
设置为开机自启,打开另一个终端会自动进入python环境
(py3) [root@jumpserver ~]# echo "source /opt/py3/bin/activate" >> /root/.bashrc
7.安装jumpserver
(py3) [root@jumpserver ~]# yum -y install unzip 安装解压工具
(py3) [root@jumpserver ~]# unzip jumpserver-master.zip 解压
(py3) [root@jumpserver ~]# mv jumpserver-master/ /opt/jumpserver mv到opt下
(py3) [root@jumpserver ~]# cd /opt/jumpserver/requirements/
安装rpm依赖
直接安装rpm_requirements.txt文件中所有的软件
(py3) [root@jumpserver requirements]# yum -y install $(cat rpm_requirements.txt)
安装jumpserver运行代码依赖
使用pip安装,我们刚才上传了pip并解压了所有直接使用
(py3) [root@jumpserver ~]# cd /opt/jumpserver/requirements/
(py3) [root@jumpserver requirements]# pip install --no-index --find-links=/root/pip-packs/ pyasn1 six cffi pytest-runner ###--on-index表示不联网装,但是后面得指定从哪装这些是依赖 安装依赖
(py3) [root@jumpserver requirements]# pip install --no-index --find-links=/root/pip-packs/ -r requirements.txt
安装代码运行所需的依赖
查看是否安装成功
(py3) [root@jumpserver ~]# cd pip-packs/
(py3) [root@jumpserver pip-packs]# ls
8.安装redis
Jumpserver使用Redis做缓存,加快了客户端访问速度
Jumpserver使用Redis做cache和分布式任务队列,如果有搭建好的redis集群,可以不用搭建。也可以使用二进制包安装redis。
(py3) [root@jumpserver ~]# yum -y install redis 安装redis
py3) [root@jumpserver ~]# systemctl start redis 开启redis服务
(py3) [root@jumpserver ~]# systemctl enable redis 把redis添加开机启动项
9.安装mysql
如果有mysql集群,可以不同搭建,centos7默认使用mariadb数据库,也可以源码安装mysql5.7
(py3) [root@jumpserver ~]# yum -y install mariadb mariadb-devel mariadb-server 安装mariadb
(py3) [root@jumpserver ~]# systemctl start mariadb 开启服务
(py3) [root@jumpserver ~]# systemctl enable mariadb 添加开机启动项
10.创建jumpserver并授权
(py3) [root@jumpserver ~]# mysql
MariaDB [(none)]> create database jumpserver default charset 'utf8'; 创建jumpserver数据库
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'jumpserver';
允许jumpserver用户从本地登录密码是jumpserver,对此库所有的表授予任何权限
MariaDB [(none)]> flush privileges; 刷新权限
11.生成密钥
生成49位的密钥,Linux1也可以用以下方式来生成密钥。(每次生成的密钥都不一样)
py3) [root@jumpserver ~]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
MbgU67f1Td0HnNYusX5AgDZKZ3AvOpeDzL8QfMsYTgJSaGrp6
(py3) [root@jumpserver ~]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16;echo
O6HeyM4BKj7CxDdG
生成的这两个密钥,下面会用到
12.修改jumpserver配置文件
(py3) [root@jumpserver ~]# cd /opt/jumpserver/
(py3) [root@jumpserver jumpserver]# cp config_example.yml config.yml
py3) [root@jumpserver jumpserver]# vim config.yml
py3) [root@jumpserver jumpserver]# cd /opt/jumpserver/utils/
(py3) [root@jumpserver utils]# sh make_migrations.sh
14.运行jumpserver
(py3) [root@jumpserver utils]# cd /opt/jumpserver/
py3) [root@jumpserver jumpserver]# ./jms start all
#可以-d参数在后台运行 ./jms start all -d, 确保已经载入 py3 虚拟环境。尽量用以下方式启动
设置service脚本
(py3) [root@jumpserver ~]# vim /usr/lib/systemd/system/jms.service
添加以下内容
[Unit] Description=jms After=network.target mariadb.service
redis.service docker.service Wants=mariadb.service redis.service
docker.service[Service] Type=forking
Environment=“PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin”
ExecStart=/opt/jumpserver/jms start all -d
ExecRestart=/opt/jumpserver/jms restart all -d
ExecStop=/opt/jumpserver/jms stop[Install] WantedBy=multi-user.target
(py3) [root@jumpserver ~]# systemctl daemon-reload
(py3) [root@jumpserver ~]# systemctl restart jms 启动
(py3) [root@jumpserver ~]# netstat -anptu|grep 8080
(py3) [root@jumpserver ~]# systemctl enable jms 设置开机自启
登陆jumpserver,默认账号:admin 密码:admin
http://192.168.1.20:8080/
已完成部署
这里只是部署了Jumpserver, 没有 Web Terminal,所以访问 Web Terminal(web linux终端)会报错。
Koko的下载网址
https://github.com/jumpserver/koko/releases/download/1.5.2/koko-master-9ab4ea6-linux-amd64.tar.gz
py3) [root@jumpserver ~]# tar xf koko-master-6d4e69b-linux-amd64.tar.gz -C /opt/ 解压koko
(py3) [root@jumpserver ~]# chown -R root:root /opt/kokodir/ 更改属组属主
修改koko配置文件
(py3) [root@jumpserver ~]# cd /opt/kokodir/
(py3) [root@jumpserver kokodir]# cp config_example.yml config.yml 准备koko配置文件
(py3) [root@jumpserver kokodir]# vi config.yml #密钥要跟jumpserver的密钥一致
注释去掉
(py3) [root@jumpserver kokodir]# ./koko & 把koko放后台运行
默认监听两个端口号 5000和2222
(py3) [root@jumpserver kokodir]# echo " cd /opt/kokodir && ./koko & " >> /etc/rc.local 开机启动
py3) [root@jumpserver kokodir]# chmod +x /etc/rc.local
可以看见有jumpserver终端说明,安装成功
使用ssh测试
有了Web Terminal以后,我们可以远程堡垒机,然后通过堡垒机进行登录管理服务器。
Jumpserver 为管理后台,管理员可以通过Web页面进行资产管理、用户管理、资产授权等操作
Coco 为 SSH Server 和 Web Terminal Server(网页linux客户端)。用户可以通过使用自己的账户登录 SSH 或者 Web Terminal 直接访问被授权的资产。不需要知道服务器的账户密码,新版本的coco被koko取代。
Luna 为 Web Terminal Server 前端页面,用户使用 Web Terminal 方式登录所需要的组件
Guacamole 为 Windows 组件,用户可以通过 Web Terminal 来连接 Windows 资产 (暂时只能通过 Web Terminal 来访问)
软件下载地址:
https://github.com/jumpserver/luna/releases/download/1.5.2/luna.tar.gz
(py3) [root@jumpserver ~]# tar -zxvf luna.tar.gz -C /opt/ 解压lua
(py3) [root@jumpserver ~]# chown -R root:root /opt/luna/ 设置权限
设置nginx 整合各组件
这里直接使用yum安装,也可以使用源码包安装.协调各个组件
(py3) [root@jumpserver ~]# yum install -y nginx
(py3) [root@jumpserver ~]# vim /etc/nginx/nginx.conf 修改配置文件
(py3) [root@jumpserver ~]# vim /etc/nginx/conf.d/jumpserver.conf
创建jumpserver配置文件
server {
listen 80;
client_max_body_size 100m; # 录像及文件上传大小限制
location /luna/ {
try_files $uri / /index.html; #如果访问不到luna就会访问到index.html
alias /opt/luna/; # luna 路径, 如果修改安装目录, 此处需要修改
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改
}
location /static/ {
root /opt/jumpserver/data/; # 静态资源, 如果修改安装目录, 此处需要修改
}
location /socket.io/ {
#将所有请求交给koko的5000端口
proxy_pass http://localhost:5000/socket.io/;
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 /coco/ {
#访问coco反向代理给5000端口
proxy_pass http://localhost:5000/coco/;
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/ {
#以下参数是连接windos系统的参数
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 / {
#nginx访问,直接访问到jumpserver。访问时不需后面加8080
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;
}
}
(py3) [root@jumpserver ~]# nginx -t 检查nginx语法
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(py3) [root@jumpserver ~]# systemctl start nginx 启动nginx
(py3) [root@jumpserver ~]# systemctl enable nginx 添加开机启动项
(py3) [root@jumpserver ~]# netstat -anput|grep 808
使用nginx做反向代理以后,就可以直接使用80端口来访问jumpserver
http://192.168.1.20/测试是否可以访问lua页面
配置jumpserver基本设置.
修改当前站点的URL为本机IP或者jumpserver的域名,不然新建用户发送过去的邮件修改不了密码。
1、设置jumpserver邮箱
设置jumpserver发件邮箱,用来给用户发送通知邮件,设置完了以后测试一下邮箱联通。
首先要生成授权码,然后设置邮箱
这里生成的授权码,后面会用到******************
最后点提交
这时候会收到一条邮件
这里创建的用户是登陆jumpserver的用户,这个用户可以登陆jumpserver,然后通过jumpserver去连接被管理的服务器,最后登陆到被管理的服务器进行命令操作。当然,这里创建的用户也可以提权来管理jumpserver的后台。
邮件发送到了用户的邮箱,提示设置密码
现在可以是使用我们刚创建好的角色登录jumpserver
创建用户组
资产管理
Jumpserver所能管理的主机,叫做资产
开启两台主机,添加资产。
主机名是centos2和centos3
系统用户可以绑定一些命令过滤器,一个过滤器可以定义一些规则
当用户使用这个系统用户登录资产,然后执行一个命令 这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配,
当一个规则匹配到了,如果规则的动作是允许,这个命令会被放行, 如果规则的动作是禁止,命令将会被禁止执行, 否则就匹配下一个规则,如果最后没有匹配到规则,则允许执行
资产管理管理这1.30,这样设置就会当管理1.30的时候,不会使用rm -rf 命令
在资产上创建用户
系统用户是 Jumpserver 跳转登录被管理服务器时使用的用户,而不是使用某个用户的用户名跳转登录服务器(ssh xiaoming@some-host
); 简单来说是用户使用自己的用户名登录 Jumpserver,Jumpserver 使用系统用户登录资产。
系统用户创建时,如果选择了自动推送,Jumpserver 会使用 Ansible 自动推送系统用户到资产中,如果资产(交换机)不支持 Ansible,请手动填写账号密码。
注意:这里添加完系统用户之后需要再给这个用户设置一个密码
#在1.30上查看,是否有admin用户
[root@centos2 ~]# grep "admin" /etc/passwd
admin:x:1000:1000::/home/admin:/bin/bash
这里使用谷歌类的浏览器,有些浏览器不支持luna。使用运维总监登录
使用web终端登陆资产
如果这里连接不上,重新启动koko