一、 jumpserver堡垒机概述
1、 跳板机概述
跳板机就是一台服务器,开发或运维人员在维护过程中需要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。
跳板机的缺点:没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位的原因和责任人。
2、 堡垒机的概述
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。
总结:堡垒机比跳板机 多了实时收集、监控网络环境、集中报警等功能。
3、 jumpserver概述
Jumpserver是一款使用 Python, Django 开发的开源跳板机系统 , 为 互联网企业 提供了 认证,授权,审计,自动化运维 等功能。
官方网址: http://www.jumpserver.org
4、 jumpserver堡垒机组件说明
1)Jumpserver现指Jumpserver 管理后台,是核心组件( Core )), 使用 Django Class Based View 风格开发,支持 Restful API 。
2)Coco实现了SSH Server 和 Web Ter minal Server 的组件,提供 SSH 和 WebSocket 接口 , 使用Paramiko 和 Flask 开发。
3)Luna现在是Web Terminal 前端,计划前端页面都由该项目提供, Jumpserver 只提供 API ,不再负责后台渲染 html 等。
二、 部署jumpserver运行环境
1、 实验环境介绍
主机 IP地址 作用
xuegod120 192.168.0.120 jumpserver服务端
xuegod130 192.168.0.130 资源,被管理的服务器
注:实验环境jumpserver服务端的内存和cpu核心数调大点,防止在编译软件包的时候因为资源不足导致死机等其它故障情况。建议内存4G、CPU4核心。
2、 上传jumpserver所需软件包和修改系统默认语言环境
修改默认语言环境,否则可能会报input/output error的错误,因为日志里打印了中文。
[root@xuegod120 ~]# ls
anaconda-ks.cfg jumpserver-package.zip #上传jumpserver软件包
[root@xuegod120 ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 #修改默认语言
[root@xuegod120 ~]# export LC_ALL=zh_CN.UTF-8
[root@xuegod120 ~]# echo ‘LANG=zh_CN.UTF-8’ > /etc/locale.conf
[root@xuegod120 ~]# exit #退出,重新连接后生效
[root@xuegod120 ~]# echo $LANG
zh_CN.UTF-8
三、 准备Python3和Python虚拟环境
1、 安装依赖包
yum安装前可以打开yum缓存功能,把软件包下载到本地,方便后期使用
[root@xuegod120 ~]# vim /etc/yum.conf
改:keepcache= 0
为:keepcache=1
[root@xuegod120 ~]# yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel git epel-release
2、 编译安装Python3.6.1
[root@xuegod120 ~]# unzip jumpserver-package.zip -d /opt/
[root@xuegod120 ~]# cd /opt/jumpserver-package/
[root@xuegod120 jumpserver-package]# ls
coco jumpserver luna.tar.gz Python-3.6.1.tar.xz python-package
[root@xuegod120 jumpserver-package]# tar xf Python-3.6.1.tar.xz
[root@xuegod120 jumpserver-package]# cd Python-3.6.1/
[root@xuegod120 Python-3.6.1]# ./configure && make && make install
Python在线下载地址:
https://www.python.org/ftp/python/3.6.1/
3、 建立Python虚拟环境
因为centos6/7自带的都是Python2,而yum等工具依赖原来的Python,为了不扰乱原来的环境我们使用Python虚拟环境
[root@xuegod120 Python-3.6.1]# cd /opt/
[root@xuegod120 opt]# python3 -m venv py3 #创建py3虚拟python环境
[root@xuegod120 opt]# source /opt/py3/bin/activate #引用py3虚拟环境
(py3) [root@xuegod120 opt]# #前面出现(py3)表示进入py3环境
注:后面运行的jumpserver都要先运行以上source命令,所有的安装和编译都在这个环境下执行。
四、 安装jumpserver 1.0.0
1、 下载或clone项目
项目提交较多git clone时较大,你可以选择去 Github 项目页面直接下载 zip 包。
(py3) [root@xuegod120 ~]#cd /opt/ 我们已经提前下载
注:在线下载方法:
git clone --depth=1 https://github.com/jumpserver/jumpserver.git && cd jumpserver
&& git checkout master
注:depth 用于指定克隆深度,为 1 即表示只克隆最近一次 commit
2、 安装RPM依赖包
(py3) [root@xuegod120 ~]# cd /opt/jumpserver-package/jumpserver/requirements/
(py3) [root@xuegod120 requirements]# ls
deb_requirements.txt mac_requirements.txt rpm_requirements.txt
issues.txt requirements.txt
(py3) [root@xuegod120 requirements]# yum -y install cat rpm_requirements.txt
3、 安装Python依赖库
(py3) [root@xuegod120 requirements]# pip -V
pip 9.0.1 from /opt/py3/lib/python3.6/site-packages (python 3.6)
安装方法1:离线安装
(py3) [root@xuegod120 requirements]# cd /opt/jumpserver-package/python-package/
(py3) [root@xuegod120 python-package]# pip install ./* #使用下载好的包离线安装
安装方法2:在线安装
(py3) [root@xuegod120 ~]# pip install r requirements.txt #通过网络直接安装
注:pip是一个安装和管理 Python 包的工具,相当于 yum 命令
4、 安装Redis
jumpserver使用redis做cache和celery broke
[root@xuegod120 ~]# yum -y install redis
[root@xuegod120 ~]# systemctl enable redis && systemctl start redis
5、 安装mysql
[root@xuegod120 ~]# yum -y install mariadb mariadb-server mariadb-devel
[root@xuegod120 ~]# systemctl enable mariadb ; systemctl start mariadb
6、 建立数据库并授权
[root@xuegod120 ~]# mysql
MariaDB [(none)]> create database jumpserver default charset ‘utf8’; #创建数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on jumpserver.* to ‘jumpserver’@‘127.0.0.1’ identified by ‘123456’;
Query OK, 0 rows affected (0.00 sec) #授权
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
7、 修改jumpserver配置文件
[root@xuegod120 ~]# cd /opt/jumpserver-package/jumpserver/
[root@xuegod120 jumpserver]# cp config_example.py config.py
[root@xuegod120 jumpserver]# vim config.py
注意: 配置文件是 Pyth on 格式,不要用 TAB ,而要用空格,行前的空格一定要对齐。
8、 导入数据库表结构和初始化数据
(py3) [root@xuegod120 python-package]# cd /opt/jumpserver-package/jumpserver/utils/
(py3) [root@xuegod120 utils]# bash make_migrations.sh
注:前面的pip install ./*安装依赖包的命令必须执行成功,这条命令才能执行成功。
9、 运行jumpserver
(py3) [root@xuegod120 utils]# cd /opt/jumpserver-package/jumpserver/
(py3) [root@xuegod120 jumpserver]# chmod +x jms
(py3) [root@xuegod120 jumpserver]# ./jms start all -d
注:参数-d表示后台运行,这里如果运行失败,重新启动后再运行即可
10、 访问测试
(py3) [root@xuegod120 jumpserver]# netstat -antup | grep 8080
http://192.168.0.120:8080 用户名:admin 密码:admin
注:目前使用8080端口来登录,后续nginx代理安装完毕后就直接使用80端口访问即可。
五、 安装coco组件
1、 访问web终端画面
提示需要安装luna和coco:
coco概述:coco实现了SSH Server和Web Terminal Server的组件,提供SSH和WebSocket接口,使用Paramiko和Flash开发。
2、 安装coco组件
1) 在线下载代码
git clone https://github.com/jumpserver/coco.git && cd coco && git checkout master
2) 安装coco组件依赖包
(py3) [root@xuegod120 jumpserver]# cd /opt/jumpserver-package/coco/requirements/
(py3) [root@xuegod120 requirements]# yum -y install $(cat rpm_requirements.txt)
注:这里因为前面已经安装过很多包,所以提示已经安装。
3) 安装coco组件
(py3) [root@xuegod120 requirements]# pip install -r requirements.txt
#前面已经离线安装过Python的包,这里很快安装完毕。
注:使用pip download -r requirements.txt 下载包到本地
3、 查看配置文件并运行
(py3) [root@xuegod120 requirements]# cd …
(py3) [root@xuegod120 coco]# cp conf_example.py conf.py
(py3) [root@xuegod120 coco]# chmod +x cocod
(py3) [root@xuegod120 coco]# ./cocod start -d
六、 安装web-terminal前端-luna组件-配置nginx整合各组件
1、 安装luna组件
Luna概述: Luna 现在是 We b Terminal 前端,计划前端页面都由该项目提供, Jumpserver 只提供 API ,不再负责后台渲染 html 等。
访问(https://github.com/jumpserver/luna/releases )下载对应版本的 release 包,直接解压,不需要编译
(py3) [root@xuegod120 coco]# cd /opt/jumpserver-package/
(py3) [root@xuegod120 jumpserver-package]# tar xf luna.tar.gz
(py3) [root@xuegod120 jumpserver-package]# ls /opt/jumpserver-package/luna
注:在线下载luna组件
https://github.com/jumpserver/luna/releases/download/v1.0.0/luna.tar.gz
2、 配置nginx整合各组件
1) 安装nginx
(py3) [root@xuegod120 ~]# yum -y install nginx
2) 修改nginx配置文件
(py3) [root@xuegod120 ~]# vim /etc/nginx/nginx.conf
##删除第38 行到 57 行中 server { 。。。}相关的内容,在 vim 命令模式,输入 38gg ,快速跳到 38 行,然后输入 20dd ,就可以删除。删除后,在38 行插入以一下内容
server {
listen 80;
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 /luna/ {
try_files $uri / /index.html;
alias /opt/jumpserver-package/luna/;
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver-package/jumpserver/data/;
}
location /static/ {
root /opt/jumpserver-package/jumpserver/data/;
}
location /socket.io/ {
proxy_pass http://localhost:5000/socket.io/; # 如果coco安装在别的服务器,请填写它的ip
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
location / {
proxy_pass http://localhost:8080; # 如果jumpserver安装在别的服务器,请填写它的ip
}
}
3) 运行nginx
(py3) [root@xuegod120 ~]# nginx -t #检测配置文件
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(py3) [root@xuegod120 ~]# systemctl enable nginx ; systemctl start nginx
4) 接受coco注册
注:nginx配置完毕后,就可以使用80端口访问
http://192.168.0.120
进入web控制台----会话管理----终端管理,接受coco注册
5) 连接测试
(py3) [root@xuegod120 ~]# ssh -p2222 [email protected]
七、 jumpserver平台初始化
1、 系统基本设置
修改为IP地址,方便后去远程使用IP地址访问
重新输入密码,点击测试连接,发送测试邮件
注:配置完毕后,重启jumpserver服务,不然无法收到邮件
(py3) [root@xuegod120 ~]# /opt/jumpserver-package/jumpserver/jms stop all -d
(py3) [root@xuegod120 ~]# /opt/jumpserver-package/jumpserver/jms start all -d
八、 jumpserver功能介绍
1、 用户管理
1) 添加用户组
用户名即jumpserver登录账户,用户组用于资产授权,当某个资产对一个用户组授权后,改组下面的所有的用户都可以使用这个资源。角色用于区分一个用户是管理员还是普通用户。
点击用户管理----用户组----创建用户组
2、 添加用户
点击用户管理----用户列表----创建用户
进入用户的邮箱进行秘密重置
使用添加的用户登录jumpserver web控制台,首次登录需要完善信息
生成ssh密钥,复制到jumpserver,方便以后使用ssh登录jumpserver,不用输入密码
(py3) [root@xuegod120 ~]# useradd zx
(py3) [root@xuegod120 ~]# echo 123456 | passwd --stdin zx
(py3) [root@xuegod120 ~]# su zx
(py3) [zx@xuegod120 root]$ cd
(py3) [zx@xuegod120 ~]$ ssh-keygen
(py3) [zx@xuegod120 ~]$ cat ./.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCan/8mOATz2OB4OuqW4lEmYv2KpqyaOqBUqbIGLgVZLRzXx7K2Ww1nG4WJqGtoSnO/NbD5+UDc6VGy2GVYKjPqSmPe0L5Misu+hTw/dQGfrqFm0eU4u8lnY7D178oFQ8sy/s/25UBpvqr8zGLx2QhDO4YYb1Us5joPs5CbP/TRC6oHgaqOGj2EzxlUEw5oMKdBUDWBGeq9PAiOsSeoprHACnr4rxQKq50tbm39XE3OJXlh35F7oadMPM8L8hYgzdpkpdZSOwZCBROE/4PjtSzrvzxWUrQBuU3i4dG/Pt3NPspPCz/AYsW/H4PBqvQbqIplca7hL5BcVhs8xvojp1XR [email protected]
3、 编辑资产树添加节点
节点不能重复,右击节点可以添加、删除和重命名节点,以及进行资产相关操作
改成节点名字为:王者荣耀-华北区-服务器
4、 创建管理用户
jumpserver各用户说明:
管理用户是服务器的root,或拥有NOPASSWD: ALL sudo 权限的用户,Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。
5、 创建系统用户
系统用户是Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户,Jumpserver使用系统用户登录资产。
系统用户的Sudo 栏填写允许当前系统用户免sudo密码执行的程序路径,如默认的/sbin/ifconfig,意思是当前系统用户可以直接执行ifconfig 命令或sudo ifconfig 而不需要输入当前系统用户的密码,执行其他的命令任然需要密码,以此来达到权限控制的目的。
#此处的权限应该根据使用用户的需求汇总后定制,原则上给予最小权限即可。
系统用户创建时,如果选择了自动推送Jumpserver 会使用Ansible 自动推送系统用户到资产中,如果资产(交换机、Windows )不支持Ansible, 请手动填写账号密码。Linux 系统协议项务必选择ssh 。如果用户在系统中已存在,请去掉自动生成密钥、自动推送勾选。
增加一个:检查服务器运行状态的用户:user权限:/sbin/ifconfig,/usr/bin/top,/usr/bin/free
注:
创建的两个系统用户都是用来登录资产的账号(即登录服务器使用),jumpserver会自动将这两个用户推送到服务器中去。
创建的管理用户是jumpserver通过这个用户来管理服务器使用的,所以需要服务器的root权限,即服务器的root用户和密码。
6、 创建资产
点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。
点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息。
IP 地址和管理用户要确保正确,确保所选的管理用户的用户名和密码能"牢靠"地登录指定的IP 主机上。资产的系统平台也务必正确填写。公网IP 信息只用于展示,可不填,Jumpserver 连接资产使用的是IP 信息。
单独开启一台虚拟机,将这台虚拟机添加到平台中(xuegod130)
刷新页面后,可连接状态变为绿色即可
7、 创建授权规则
节点,对应的是资产,代表该节点下的所有资产。
用户组,对应的是用户,代表该用户组下所有的用户。
系统用户,及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。
节点,用户组,系统用户是一对一的关系,所以当拥有Linux、Windows 不同类型资产时,应该分别给Linux 资产和Windows 资产创建授权规则。
注:这条权限规则表示,整个王者荣耀-华北区运维部门下的所有用户都可以管理王者荣耀-华北区-服务器节点下的所有服务器,对应的权限是系统管理员权限。
规则创建完毕后,到xuegod130服务器上查看
jumpserver自动推送了一个manager的用户,对应的权限也会推送
8、 用户使用资产
创建授权规则的时候,选择了用户组,所以这里登录用户组下面对应的用户,才能看到对应的资产。
九、 其它问题
1、 jumpserver的会话管理的终端管理无法在线
删除coco目录下的key值,重新接受coco注册即可
(py3) [root@xuegod120 coco]# rm -rf ./keys/.access_key
2、 无法使用ssh登录jumpserver
(py3) [root@xuegod120 coco]# ssh -p2222 [email protected]
ssh: connect to host 192.168.0.120 port 2222: Connection refused
重新启动cocod服务
(py3) [root@xuegod120 coco]# ./cocod stop -d
Stop coco process
(py3) [root@xuegod120 coco]# ./cocod start -d
Start coco process