龙空技术网

Jumpserver堡垒机安装与配置

IT智能化专栏 2084

前言:

今天姐妹们对“jumpserver安装配置”大约比较关心,小伙伴们都需要剖析一些“jumpserver安装配置”的相关知识。那么小编也在网络上网罗了一些有关“jumpserver安装配置””的相关知识,希望大家能喜欢,同学们一起来学习一下吧!

第一部分:安装篇

测试推荐环境

· CPU: 64位双核处理器

· 内存: 4G DDR3

· 数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6

环境

· 系统: CentOS 7

· IP: 192.168.244.144

· 设置 selinux 和防火墙

$ firewall-cmd --zone=public --add-port=80/tcp --permanent # nginx 端口$ firewall-cmd --zone=public --add-port=2222/tcp --permanent # SSH登录端口$ firewall-cmd --reload # 重新载入规则$ setenforce 0$ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
一. 准备 Python3 和 Python 虚拟环境

1.1 安装依赖包

$ yum -y install wget gcc epel-release git

1.2 安装 Python3.6

$ yum -y install python36 python36-devel# 如果下载速度很慢, 可以换国内源$ wget -O /etc/yum.repos.d/epel.repo  yum -y install python36 python36-devel

1.3 建立 Python 虚拟环境

因为 CentOS 7 自带的是 Python2, 而 Yum 等工具依赖原来的 Python, 为了不扰乱原来的环境我们来使用 Python 虚拟环境$ cd /opt$ python3.6 -m venv py3$ source /opt/py3/bin/activate# 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行(py3) [root@localhost py3]
二. 安装 Jumpserver

2.1 下载或 Clone 项目

项目提交较多 git clone 时较大, 你可以选择去 Github 项目页面直接下载zip包。

$ cd /opt/$ git clone --depth=1 

2.2 安装依赖 RPM 包

$ cd /opt/jumpserver/requirements$ yum -y install $(cat rpm_requirements.txt) # 如果没有任何报错请继续

2.3 安装 Python 库依赖

$ pip install --upgrade pip setuptools$ pip install -r requirements.txt# 如果下载速度很慢, 可以换国内源$ pip install --upgrade pip setuptools -i  pip install -r requirements.txt -i 

2.4 安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke

$ yum -y install redis$ systemctl enable redis$ systemctl start redis

2.5 安装 MySQL

本教程使用 Mysql 作为数据库, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置

$ yum -y install mariadb mariadb-devel mariadb-server mariadb-shared # centos7下安装的是mariadb$ systemctl enable mariadb$ systemctl start mariadb

2.6 创建数据库 Jumpserver 并授权

$ DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24` # 生成随机数据库密码$ echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m"$ mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '$DB_PASSWORD'; flush privileges;"

2.7 修改 Jumpserver 配置文件

$ cd /opt/jumpserver$ cp config_example.yml config.yml$ SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50` # 生成随机SECRET_KEY$ echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc$ BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16` # 生成随机BOOTSTRAP_TOKEN$ echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc$ sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml$ sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml$ sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml$ sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml$ sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml$ sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml$ echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"$ echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"$ vi config.yml # 确认内容有没有错误# SECURITY WARNING: keep the secret key used in production secret!# 加密秘钥 生产环境中请修改为随机字符串, 请勿外泄, PS: 纯数字不可以SECRET_KEY:# SECURITY WARNING: keep the bootstrap token used in production secret!# 预共享Token coco和guacamole用来注册服务账号, 不在使用原来的注册接受机制BOOTSTRAP_TOKEN:# Development env open this, when error occur display the full process track, Production disable it# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志DEBUG: false# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See  日志级别LOG_LEVEL: ERROR# LOG_DIR:# Session expiration setting, Default 24 hour, Also set expired on on browser close# 浏览器Session过期时间, 默认24小时, 也可以设置浏览器关闭则过期# SESSION_COOKIE_AGE: 86400SESSION_EXPIRE_AT_BROWSER_CLOSE: true# Database setting, Support sqlite3, mysql, postgres ....# 数据库设置# See  SQLite setting:# 使用单文件sqlite数据库# DB_ENGINE: sqlite3# DB_NAME:# MySQL or postgres setting like:# 使用Mysql作为数据库DB_ENGINE: mysqlDB_HOST: 127.0.0.1DB_PORT: 3306DB_USER: jumpserverDB_PASSWORD:DB_NAME: jumpserver# When Django start it will bind this host and port# ./manage.py runserver 127.0.0.1:8080# 运行时绑定端口HTTP_BIND_HOST: 0.0.0.0HTTP_LISTEN_PORT: 8080# Use Redis as broker for celery and web socket# Redis配置REDIS_HOST: 127.0.0.1REDIS_PORT: 6379# REDIS_PASSWORD:# REDIS_DB_CELERY: 3# REDIS_DB_CACHE: 4# Use OpenID authorization# 使用OpenID 来进行认证设置# BASE_SITE_URL:  AUTH_OPENID: false # True or False# AUTH_OPENID_SERVER_URL:  AUTH_OPENID_REALM_NAME: realm-name# AUTH_OPENID_CLIENT_ID: client-id# AUTH_OPENID_CLIENT_SECRET: client-secret# OTP settings# OTP/MFA 配置# OTP_VALID_WINDOW: 0# OTP_ISSUER_NAME: Jumpserver

2.8 运行 Jumpserver

$ cd /opt/jumpserver$ ./jms start all -d # 后台运行使用 -d 参数./jms start all -d# 新版本更新了运行脚本, 使用方式./jms start|stop|status all 后台运行请添加 -d 参数

运行不报错, 请继续往下操作

三. 安装 SSH Server 和 WebSocket Server: Coco

3.1 下载或 Clone 项目

$ cd /opt$ source /opt/py3/bin/activate$ git clone --depth=1 

3.2 安装依赖

$ cd /opt/coco/requirements$ yum -y install $(cat rpm_requirements.txt)$ pip install -r requirements.txt# 如果下载速度很慢, 可以换国内源$ pip install -r requirements.txt -i 

3.3 修改配置文件并运行

$ cd /opt/coco$ cp config_example.yml config.yml$ sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/coco/config.yml$ sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml$ vi config.yml# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复# NAME: {{ Hostname }}# Jumpserver项目的url, api请求注册会使用CORE_HOST:  Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal# 请和jumpserver 配置文件中保持一致, 注册完成后可以删除BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver># 启动时绑定的ip, 默认 0.0.0.0# BIND_HOST: 0.0.0.0# 监听的SSH端口号, 默认2222# SSHD_PORT: 2222# 监听的HTTP/WS端口号, 默认5000# HTTPD_PORT: 5000# 项目使用的ACCESS KEY, 默认会注册, 并保存到 ACCESS_KEY_STORE中,# 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret# ACCESS_KEY: null# ACCESS KEY 保存的地址, 默认注册后会保存到该文件中# ACCESS_KEY_STORE: data/keys/.access_key# 加密密钥# SECRET_KEY: null# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]LOG_LEVEL: ERROR# 日志存放的目录# LOG_DIR: logs# SSH白名单# ALLOW_SSH_USER: all# SSH黑名单, 如果用户同时在白名单和黑名单, 黑名单优先生效# BLOCK_SSH_USER:# -# 和Jumpserver 保持心跳时间间隔# HEARTBEAT_INTERVAL: 5# Admin的名字, 出问题会提示给用户# ADMINS: ''# SSH连接超时时间 (default 15 seconds)# SSH_TIMEOUT: 15# 语言 [en, zh]# LANGUAGE_CODE: zh# SFTP的根目录, 可选 /tmp, Home其他自定义目录# SFTP_ROOT: /tmp# SFTP是否显示隐藏文件# SFTP_SHOW_HIDDEN_FILE: false# 是否复用和用户后端资产已建立的连接(用户不会复用其他用户的连接)# REUSE_CONNECTION: true$ ./cocod start -d # 后台运行使用 -d 参数./cocod start -d# 新版本更新了运行脚本, 使用方式./cocod start|stop|status 后台运行请添加 -d 参数
四. 安装 Web Terminal 前端: Luna

Luna 已改为纯前端, 需要 Nginx 来运行访问

访问(

)下载对应版本的 release 包, 直接解压不需要编译

4.1 解压 Luna

$ cd /opt$ wget  如果网络有问题导致下载无法完成可以使用下面地址$ wget  tar xf luna.tar.gz$ chown -R root:root luna
五. 安装 Windows 支持组件(如果不需要管理 windows 资产, 可以直接跳过这一步)

5.1 安装依赖

$ rpm --import  rpm -Uvh  yum -y localinstall --nogpgcheck   yum install -y java-1.8.0-openjdk libtool$ yum install -y cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel$ yum install -y ffmpeg-devel freerdp-devel freerdp-plugins pango-devel libssh2-devel libtelnet-devel libvncserver-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel ghostscript

5.2 编译安装 guacamole 服务

$ cd /opt$ git clone --depth=1  cd /opt/docker-guacamole/$ tar -xf guacamole-server-1.0.0.tar.gz$ cd guacamole-server-1.0.0$ autoreconf -fi$ ./configure --with-init-dir=/etc/init.d --with-systemd-dir=/usr/lib/systemd/system/$ make && make install$ ln -s /usr/local/lib/freerdp/*.so /usr/lib64/freerdp/$ cd ..$ rm -rf guacamole-server-1.0.0$ ldconfig

5.3 配置 Tomcat

$ mkdir -p /config/guacamole /config/guacamole/lib /config/guacamole/extensions # 创建 guacamole 目录$ ln -sf /opt/docker-guacamole/guacamole-auth-jumpserver-1.0.0.jar /config/guacamole/extensions/guacamole-auth-jumpserver-1.0.0.jar$ ln -sf /opt/docker-guacamole/root/app/guacamole/guacamole.properties /config/guacamole/guacamole.properties # guacamole 配置文件$ cd /config$ wget  tar xf apache-tomcat-9.0.21.tar.gz$ rm -rf apache-tomcat-9.0.21.tar.gz$ mv apache-tomcat-9.0.21 tomcat9$ rm -rf /config/tomcat9/webapps/*$ ln -sf /opt/docker-guacamole/guacamole-1.0.0.war /config/tomcat9/webapps/ROOT.war # guacamole client$ sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.xml # 修改默认端口为 8081$ sed -i 's/FINE/WARNING/g' /config/tomcat9/conf/logging.properties # 修改 log 等级为 WARNING$ cd /config$ wget  如果网络有问题导致下载无法完成可以使用下面地址$ wget  tar xf linux-amd64.tar.gz -C /bin/$ chmod +x /bin/ssh-forward

5.4 配置环境变量

# 勿多次执行以下环境设置$ export JUMPSERVER_SERVER= #  指 jumpserver 访问地址$ echo "export JUMPSERVER_SERVER=; >> ~/.bashrc# BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN$ export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN$ echo "export BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc$ export JUMPSERVER_KEY_DIR=/config/guacamole/keys$ echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc$ export GUACAMOLE_HOME=/config/guacamole$ echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc

5.5 启动 Guacamole

$ systemctl start guacd$ sh /config/tomcat9/bin/startup.sh
六. 配置 Nginx 整合各组件

6.1 安装 Nginx

$ yum install yum-utils$ vi /etc/yum.repos.d/nginx.repo[nginx-stable]name=nginx stable repobaseurl= yum makecache fast$ yum install -y nginx$ rm -rf /etc/nginx/conf.d/default.conf$ systemctl enable nginx

6.2 准备配置文件 修改

/etc/nginx/conf.d/jumpserver.conf

$ vi /etc/nginx/conf.d/jumpserver.confserver { listen 80; # 代理端口, 以后将通过此端口进行访问, 不再通过8080端口 # server_name demo.jumpserver.org; # 修改成你的域名或者注释掉 client_max_body_size 100m; # 录像及文件上传大小限制 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 /socket.io/ { proxy_pass ; # 如果coco安装在别的服务器, 请填写它的ip 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/ { proxy_pass ; # 如果coco安装在别的服务器, 请填写它的ip 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 ; # 如果guacamole安装在别的服务器, 请填写它的ip 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 / { proxy_pass ; # 如果jumpserver安装在别的服务器, 请填写它的ip proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}

6.3 运行 Nginx

nginx -t # 确保配置没有问题, 有问题请先解决# CentOS 7$ systemctl start nginx$ systemctl enable nginx

6.4 开始使用 Jumpserver

检查应用是否已经正常运行

服务全部启动后, 访问 , 访问nginx代理的端口, 不要再通过8080端口访问

默认账号: admin 密码: admin

到Jumpserver 会话管理-终端管理 检查 Coco Guacamole 等应用的注册。

测试连接

如果登录客户端是 macOS 或 Linux, 登录语法如下$ ssh -p2222 admin@192.168.244.144$ sftp -P2222 admin@192.168.244.144密码: admin如果登录客户端是 Windows, Xshell Terminal 登录语法如下$ ssh admin@192.168.244.144 2222$ sftp admin@192.168.244.144 2222密码: admin如果能登陆代表部署成功# sftp默认上传的位置在资产的 /tmp 目录下# windows拖拽上传的位置在资产的 Guacamole RDP上的 G 目录下

以上具体可参考官方文档:

第二部分:配置篇

创建Jumpserver用户

1.点击页面左侧"用户列表"菜单下的"用户列表", 进入用户列表页面

2.点击页面左上角"创建用户"按钮, 进入创建用户页面, (也可以通过右上角导入模版进行用户导入)

3.其中, 用户名即 Jumpserver 登录账号(具有唯一性, 不能重名)。名称为页面右上角用户标识(可重复)

4.成功提交用户信息后, Jumpserver 会发送一条设置"用户密码"的邮件到您填写的用户邮箱

5.点击邮件中的设置密码链接, 设置好密码后, 您就可以用户名和密码登录 Jumpserver 了。

6.用户首次登录 Jumpserver, 会被要求完善用户信息, 按照向导操作即可。

添加用户

编辑资产树并创建资产"节点"不能重名, 右击节点可以添加、删除和重命名节点, 以及进行资产相关的操作注:如果有 linux 资产和 windows 资产, 建议先建立 Linux 节点与 Windows 节点, 不然"授权"时不好处理

资产树

点击页面左侧的"资产管理"菜单下的"资产列表"按钮, 查看当前所有的资产列表。点击页面左上角的"创建资产"按钮, 进入资产创建页面, 填写资产信息。IP 地址和管理用户要确保正确, 确保所选的管理用户的用户名和密码能"牢靠"地登录指定的 IP 主机上。资产的系统平台也务必正确填写。公网 IP 信息只用于展示, 可不填, Jumpserver 连接资产使用的是 IP 信息。

添加资产

资产创建信息填写好保存之后, ssh 协议资产可"测试资产"是否能正确连接, 其他协议暂不支持

注:被连接资产需要"python"组件, 且版本大于等于2.6, Ubuntu等资产默认不允许root用户远程ssh登录, 请自行处理如果资产不能正常连接, 请检查"管理用户"的用户名和密钥是否正确以及该"管理用户"是否能使用 SSH 从 Jumpserver 主机正确登录到资产主机上创建管理用户"管理用户"是资产上的 root, 或拥有 NOPASSWD: ALL sudo 权限的用户, Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。 Windows或其它硬件可随意设置一个"名称" 不能重复"ssh私钥" 如果私钥有密码, 请把key的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥

管理用户

创建系统用户"系统用户"是 Jumpserver 跳转登录资产时使用的用户, 用户使用该用户登录资产"自动生成密码"、"自动推送"、"Sudo"等功能需要对应资产的"管理用户"是且有root权限, 否则自动推送失败ssh 协议的 "Sudo" 栏设定用户的 sudo 权限ssh 协议如果创建的"系统用户"已在资产上面存在, "推送"将会覆盖掉原用户的"home"目录权限(注: 替换成700权限)ssh 协议的 "ssh私钥" 如果私钥有密码, 请把key的密码填在密码栏上, 目前仅支持 RSA DSA 格式私钥

这里简单举几个 "sudo" 设置例子

Sudo /bin/su # 当前系统用户可以免sudo密码执行sudo su命令Sudo /usr/bin/git, /usr/bin/php, /bin/cat, /bin/more, /bin/less, /usr/bin/tail当前系统用户可以免sudo密码执行git php cat more less tailSudo !/usr/bin/yum # 当前系统用户不可以执行sudo yum命令
此处的权限应该根据使用用户的需求汇总后定制, 原则上给予最小权限即可"系统用户"创建时, 如果选择了"自动推送" Jumpserver 会使用"Ansible"自动推送系统用户到资产中, "root"用户不支持推送如果资产(交换机、Windows)不支持"Ansible", 请去掉"自动生成密钥"、"自动推送"勾选。手动填写资产上已有的账号及账号密码如果想让用户登录资产时自己输入密码, 可以在创建系统用户时选择"手动登录"

系统用户

创建授权规则"名称", 授权的名称, 不能重复"用户"和"用户组"二选一, 不推荐即选择用户又选择用户组"资产"和"节点"二选一, 选择节点会包含节点下面的所有资产"系统用户", 及所选的用户或用户组下的用户能通过该系统用户使用所选节点或者节点下的资产用户(组), 资产(节点), 系统用户是一对一的关系, 所以当拥有 Linux、Windows 不同类型资产时, 应该分别给 Linux 资产和 Windows 资产创建授权规则

一般情况下, 资产授权给个人, 节点授权给用户组, 一个授权只能选择一个系统用户

授权规则

用户登录

用户只能看到自己被管理员授权了的"资产", 如果登录后无资产, 请联系管理员进行确认

用户登录

连接资产在我的资产点击资产右边的 "连接" 快速连接资产也可以点击左侧栏的 "Web终端"

连接资产

连接window系统

windows系统

连接linux系统

linux系统

以上就是 Jumpserver 的简易配置。

标签: #jumpserver安装配置