Máquina bastión del servidor de salto de implementación de Linux y resumen del problema

¡El proceso de implementación es relativamente complicado! ¡Navega con paciencia!

Tabla de contenido

1. Introducción a la máquina bastión jumpserver

1.1 ¿Por qué necesita usar un host bastión?

1.2 Funciones principales del host bastión

2. Preparación

2.1 Desactivar el cortafuegos y SElinux

1.2 Sincronización de tiempo

1.3 Cambiar el nombre de host

1.4 copia de seguridad y preparación de la fuente yum

1.5 Instalar herramientas iniciales

1.6 Modificar el conjunto de caracteres del sistema

1.7 reiniciar

3. Instalar MySQL

3.1 Eliminar mairadb (CentOS7 viene con mariadb)

3.2 instalar mysql5.7

3.3 Cambiar la contraseña mysql y la complejidad de la contraseña

Cuarto, instala python3.6

4.1 instalar python3.6

4.2 Reemplazar fuente pip3

4.3 Instalar el entorno virtual de python

Cinco, instala redis

6. Implementar servidor de salto

6.1 Descargar y descomprimir

6.2 Instalar dependencias o herramientas

6.3 Instalar el módulo py en el entorno virtual de python

6.4 Obtenga la clave secreta SECRET_KEY, BOOTSTRAP_TOKEN

6.5 Cambiar el archivo de configuración del servidor de salto

7. Migración de datos

7.1 Ver la base de datos del servidor de salto

7.2 Migración de datos

7.3 Ver la base de datos del servidor de salto de nuevo

8. Inicie el servicio de servidor de salto

9. Implementar componentes koko

10. Despliega el componente de guacamole

10.1 Descargar guacamole-server y ssh-forward

10.2 Instalar herramientas ffmpeg

10.3 Compilar e instalar guacamole

10.4 Instalar entorno Java

10.5 Configuración del entorno de guacamole

10.6 Inicio tomcat y guacamole

Módulo once, lina/luna

11.1 Crear un nuevo usuario de Linux nginx

11.2 instalar lina/luna

12. Compile e instale nginx, nginx-module-vts

12.1 descargar nginx

11.2 Cambiar nginx.conf

11.3 Verificación de nginx

11.4 Explicación de la lista de seguimiento

12. Cambie la configuración de nginx nuevamente

Trece, acceda a jumpserver

14. Resumen del problema

Ruta del paquete de 14.1 pips

14.2 Ocupación de nginx y reinicio

14.3 error de importación de datos mysql

14.4 error de instalación de pip3 virtualenv

14.5 Iniciar jumpserver después de reiniciar el host

15. Enlaces de referencia

1. Introducción a la máquina bastión jumpserver

1.1 ¿Por qué necesita usar un host bastión?

        Para evitar que el personal de operación y mantenimiento que no pertenece a la nube opere incorrectamente los servidores internos de la empresa y cause pérdidas, entonces necesitamos usar una máquina de trampolín. Incluso si el personal interno de la empresa necesita operar el servidor, debe ser verificado. Y después de conectarse al trampolín, se registrarán todos los registros de inicio de sesión y operaciones.

Máquina trampolín:
        la máquina trampolín es solo un servidor. Cuando el personal de operación y mantenimiento usa el servidor de administración, primero debe conectarse a la máquina trampolín y luego puede controlar el servidor en la intranet e iniciar sesión en el dispositivo de destino para el mantenimiento. y operación. La máquina trampolín pertenece a la categoría de la máquina bastión de la intranet y es un sistema de aplicación host para el inicio de sesión único. La desventaja de la máquina trampolín es que solo se da cuenta de la seguridad del inicio de sesión del servidor, pero no se da cuenta del control del comportamiento y la auditoría de los desarrolladores de operaciones y mantenimiento. El uso de la máquina trampolín puede realizar operaciones incorrectas en el servidor y es difícil localizar al operador.

Máquina bastión:
        combinando las ventajas de la máquina trampolín y puede registrar al operador y los registros, la máquina bastión puede crear una cuenta del sistema.La función de la cuenta del sistema es distinguir roles, pero no puede confirmar el ejecutor de la cuenta.

El rol de la máquina bastión:
        debido a la falta de máquinas trampolín, las empresas necesitan conceptos técnicos más nuevos, mejores y más seguros para administrar la operación y el mantenimiento de los servidores. Necesitan un sistema que pueda satisfacer la administración de roles, la autorización de roles, los recursos de información control de acceso, registros de operación y Auditoría, control de cambios y mantenimiento de sistemas, y más.

        1. Operación y mantenimiento del sistema central y gestión de auditoría de seguridad

        2. Filtre e intercepte accesos sin solicitud, ataques maliciosos, rechace pedidos ilegales, monitoree puertos de auditoría, llame a la policía y rastree la responsabilidad

        3. Alarma, registro, análisis, procesamiento.

1.2 Funciones principales del host bastión

        1. Función de inicio de sesión único

        2. Función de gestión de cuentas

        3. Autenticación de identidad

        4. Autorización de recursos

        5. Control de acceso

2. Preparación

虚拟机平台:VMware
IP:192.168.132.65 (自定义)
虚拟机配置:1vpcu 1核 2G 40G (测试学习环境,生产环境具体情况而定)
没有特别说明情况下,所有wget或下载的文件默认存储在/opt目录下
python = 3.6.x  Python版本必须3.6及以上
mysql5.7 版本必须大于5.6
redis  缓存型数据库

2.1 Desactivar el cortafuegos y SElinux

systemctl stop firewalld
systemctl disable firewalld

关闭selinux,重启后生效
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled

1.2 Sincronización de tiempo

date

yum install ntpdate -y
timedatectl set-timezone Asia/Shanghai
ntpdate ntp1.aliyun.com
systemctl enable ntpdate

date  #查看系统时间是否同步准确

1.3 Cambiar el nombre de host

hostnamectl set-hostname jumpserver

1.4 copia de seguridad y preparación de la fuente yum

mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/    #备份yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum clean all
yum makecache  #清楚缓存,重写建立yum仓库

1.5 Instalar herramientas iniciales

yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel gcc zlib zlib-devel

1.6 Modificar el conjunto de caracteres del sistema

echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf  #永久修改,无需重启

 Se puede ver ls --help y se muestran algunos caracteres chinos para indicar que la reparación se realizó correctamente.

1.7 reiniciar

reboot

3. Instalar MySQL

Instale mysql primero, de lo contrario será difícil manejar los errores de instalación posteriores de mysql, así que primero asegúrese de que la instalación de mysql esté completa.

3.1 Eliminar mairadb (CentOS7 viene con mariadb)

¡La base de datos similar a mysql que viene con centos7 es mariadb, que entrará en conflicto con mysql y debe eliminarse primero! ! !

3.2 instalar mysql5.7

cd /opt

wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar

mkdir mysql
mv mysql-community*.rpm mysql   #移动到mysql目录下

rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm

rpm -ivh mysql-community-devel-5.7.26-1.el7.x86_64.rpm (平时安装mysql这个可以省略,但部署jumpserver后续步骤会用到mysql-devel工具)

systemctl start mysqld
systemctl enable mysqld

Si se informa el siguiente error, agregue el  atributo --nodeps , agregar este atributo significa no verificar las dependencias.

advertencia: mysql-community-server-5.7.26-1.el7.x86_64.rpm: Encabezado V3 DSA/SHA1 Firma, ID de clave 5072e1f5:
error NOKEY: dependencias fallidas:

Ver la contraseña inicial del usuario root

grep 'temporary password' /var/log/mysqld.log

 Si la contraseña de vista está en blanco, debe eliminar el archivo mysql residual

rm -rf /var/lib/mysql
systemctl restart mysqld
grep 'temporary password' /var/log/mysqld.log

3.3 Cambiar la contraseña mysql y la complejidad de la contraseña

mysql -uroot -p
#黏贴刚刚拿到的密码

show variables like 'validate_password%';  #查看密码复杂度

mysql> set global validate_password_length=6;  #长度
mysql> set global validate_password_mixed_case_count=0;  #字符个数
mysql> set global validate_password_special_char_count=0;  #特殊符号个数
mysql> flush privileges;

create database jumpserver default charset 'utf8' collate 'utf8_bin';  #新建名为jumpserver的数据库
set password for 'root'@'localhost' =password('yz123456');  #更改mysql的root用户密码为yz123456
create user 'jumpserver'@'%' IDENTIFIED BY 'yz123456';  #创建mysql用户jumpserver且密码为yz123456

grant all privileges on root.* to 'jumpserver'@'%' identified by 'yz123456';
grant all privileges on jumpserver.* to 'jumpserver'@'%' identified by 'yz123456';  #赋权

Explicación de la propiedad de complejidad de la contraseña:

validar_contraseña_longitud #longitud de la contraseña 
validar_contraseña_mixed_case_count #cantidad de caracteres en mayúsculas y minúsculas
validate_password_number_count #cantidad de números 
validar_contraseña_especiales_char_count #cantidad de caracteres especiales

Cuarto, instala python3.6

4.1 instalar python3.6

la versión de pyhton debe ser mayor o igual a 3.6.X

cd /opt
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
tar -xvf Python-3.6.10.tgz

yum install -y openssl openssl-devel  #ssl工具,必须在安装python前安装

cd /opt/Python-3.6.10/
./confiure --prefix=/usr/local/python3.6  #编译并指定python3.6目录
make -j3 && make instal  #编译安装

echo "PATH="/usr/local/python3.6/bin:$PATH"" >> /etc/profile  #添加环境
source /etc/profile  #刷新一下环境
##随后命令行输入python3.6就能进入了(quit()退出)

Tenga en cuenta que los resultados de escribir python y python3.6 en la terminal son diferentes.Python2.7 viene con Linux y no necesita ser desinstalado, y no lo afectará.

4.2 Reemplazar fuente pip3

mkdir /root/.pip
touch /root/.pip/pip.conf
vim /root/.pip/pip.conf

#########将下面的内容写入###########

[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

4.3 Instalar el entorno virtual de python

        El entorno virtual se crea para lidiar con el escenario de la misma versión de py y diferentes módulos requeridos por múltiples aplicaciones en un área de servicio. virtualenv es una herramienta de módulo de virtualización de Python.

pip3 install virtualenv

cd /usr/local
virtualenv  --python=python3 jmp_venvl

 

Tenga en cuenta que hay dos intérpretes de Python en este punto

El cuerpo del intérprete es: /usr/local/python3.6/bin/python3.6

El intérprete virtual es: /usr/local/jmp_venel/bin/python3

Cambiar el entorno virtual de python

source /usr/local/jmp_venvl/bin/activate  #刷新环境,可以进去python虚拟环境,进入后终端会哟jmp_venvl标识

deactivate  #退出当前的虚拟环境/切换回物理真实环境

En este momento, Python de entrada también es la versión 3.6 en lugar de la 2.7, porque se encuentra en el entorno virtual en este momento.

Cinco, instala redis

yum -y install redis
systemct start redis
systemct enable redis

redis-cli  #验证
[root@jumpserver ~]# redis-cli
127.0.0.1:6379> ping
PONG  #返回PONG证明可以正常启动

6. Implementar servidor de salto

6.1 Descargar y descomprimir

wget https://github.com/jumpserver/jumpserver/releases/download/v2.1.0/jumpserver-v2.1.0.tar.gz
tar -zxvf jumpserver-v2.1.0.tar.gz
ln -s /opt/jumpserver-v2.1.0 jumpserver

6.2 Instalar dependencias o herramientas

yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop  iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel

6.3 Instalar el módulo py en el entorno virtual de python

 Nota: Para instalar el módulo jumperserver, debe asegurarse de estar en el entorno virtual de py3, ¡y debe activar el entorno antes de la instalación! ! !

cd /opt/jumpserver/requirements/
cat /opt/jumpserver/requirements/requirements.txt

source /usr/local/jmp_venvl/bin/activate  #非常重要!!!
pip3 install -r /opt/jumpserver/requirements/requirements.txt

deactivate

pip3 requisitos.txt error 

No se encontró una distribución coincidente para mysqlclient==1.3.14

Indica que mysqlclient==1.3.14 no se puede encontrar. De hecho, existe este elemento en requirements.txt, y mysql-devel debe instalarse. Si sigue mis pasos para instalar mysql, este error no aparecerá. Muchas publicaciones en Internet usan yum para instalar, yum install mysql-devel indica que no hay una fuente de yum, porque mysql se instala manualmente, por lo que no hay una fuente de mysql repo, podemos instalar manualmente mysql-devel, si se informa un error , agregue el atributo --nodeps.

###解决方法###
cd /opt/mysql
rpm -ivh mysql-community-devel

6.4 Obtenga la clave secreta SECRET_KEY, BOOTSTRAP_TOKEN

Estas dos claves son necesarias en los próximos pasos

#获取SECRET_KEY
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

#获取BOOTSTRAP_TOKEN
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

SECRET_KEY : UtsbR8W5fJ81M4s6k0vcITUiASsHOTRKOIq0KvCnzzXupQpqcp BOOTSTRAP_TOKEN : 1iTfoBKVFv13PtSg 

6.5 Cambiar el archivo de configuración del servidor de salto

cd /opt/jumpserver
cp config_example.yml config.yml  #example是配置文件模板,真正生效的配置文件是config.yml
vim config.yml

#将刚刚两个密钥填入,并填一下数据库密码"yz123456"

egrep -v "^#|^$" config.yml puede eliminar el contenido del comentario y las líneas en blanco antes de mostrar, y puede ver la información efectiva del archivo de configuración de manera concisa. Las dos claves aquí deben cambiarse por las suyas, complete la contraseña de la base de datos y las otras no necesitan cambiarse.

[root@jumpserver jumpserver]# cd /opt/jumpserver
[root@jumpserver jumpserver]# egrep -v "^#|^$" config.yml
SECRET_KEY: UtsbR8W5fJ81M4s6k0vcITUiASsHOTRKOIq0KvCnzzXupQpqcp  #KEY
BOOTSTRAP_TOKEN: 1iTfoBKVFv13PtSg                               #TOKEN
DB_ENGINE: mysql     #使用的数据库是什么
DB_HOST: 127.0.0.1   #默认的IP地址
DB_PORT: 3306        #默认端口
DB_USER: jumpserver      #默认的用户就是我们在数据库那步创建的user
DB_PASSWORD:yz123456     #数据库的密码
DB_NAME: jumpserver      #数据库用户名
HTTP_BIND_HOST: 0.0.0.0  #jumpserver运行的地址,写的0表示绑定这台机器对内对外所有的IP,如果是在公网的jumpserver会很危险
HTTP_LISTEN_PORT: 8080   #jumpserver后台启动的地址
WS_LISTEN_PORT: 8070     #WEB SOCKET
REDIS_HOST: 127.0.0.1    # 默认redis的IP
REDIS_PORT: 6379         #默认redis的端口

7. Migración de datos

        Jumpserver es un programa desarrollado por el marco web Django de Python. La migración de datos se debe realizar primero para generar información de la tabla de biblioteca antes de que se pueda ejecutar el programa.

7.1 Ver la base de datos del servidor de salto

[root@jumpserver jumpserver]# mysql -u root -p
Enter password: 

mysql> show databases;   #查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jumpserver         |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.01 sec)
mysql> use jumpserver    #进入到jumpserver这库中
Database changed
mysql> show tables;      #查看库中的表
Empty set (0.00 sec)     #还未导入,库中无表

7.2 Migración de datos

¡Asegúrese de ingresar primero al entorno virtual de Python! ! !

source /usr/local/jmp_venvl/bin/activate
cd /opt/jumpserver/apps
python3 /opt/jumpserver/apps/manage.py makemigrations  #显示浅蓝色字体表示成功
python3 /opt/jumpserver/apps/manage.py migrate         #显示多张表导入成功并有OK字样

deactivate

 Agregue el atributo --fake para el informe de errores, python manage.py migrate --fake

Si la tabla de datos regresa OK y muestra falso, significa que la migración falló. Verifique el estado de inicio de mysql, systemctl status mysqld y asegúrese de que mysqld se esté ejecutando.

7.3 Ver la base de datos del servidor de salto de nuevo

Migración de datos exitosa

(jmp_venvl) [root@jumpserver /]# mysql -u root -p
Enter password: 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jumpserver         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.12 sec)

mysql> use jumpserver;
Database changed

mysql> show tables;
+----------------------------------------------+
| Tables_in_jumpserver                         |
+----------------------------------------------+
| applications_databaseapp                     |
| applications_remoteapp                       |
| assets_adminuser                             |
| assets_asset                                 |
| assets_asset_labels                          |
...

8. Inicie el servicio de servidor de salto

cd /opt/jumpserver
/opt/jumpserver/jms start -d  #-d表示后台运行 start|stop|restart|status

Verifique la página de inicialización del jumpserver

192.168.136.65:8080

9. Implementar componentes koko

        El componente koko implementa los componentes de SSH Server y Web Terminal Server, mejora las interfaces SSH y WebSocket y usa Paramiko y Flask para desarrollar, permitiéndonos escribir comandos en la página web en línea como xshell. Está desarrollado por el lenguaje de programación golang. En comparación con los componentes de coco anteriores (escritos en py), el rendimiento es mayor.

cd /opt
wget https://github.com/jumpserver/koko/releases/download/v2.1.0/koko-v2.1.0-linux-amd64.tar.gz
tar -zxvf koko-v2.1.0-linux-amd64.tar.gz
cd koko-v2.1.0-linux-amd64/
cp config_example.yml config.yml
vim config.yml

##填入获取的BOOTSTRAP_TOKEN,将redis的注释删掉###

[root@jumpserver koko-v2.1.0-linux-amd64]# egrep -v "^#|^$" config.yml
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: 1iTfoBKVFv13PtSg
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD:
REDIS_CLUSTERS:
REDIS_DB_ROOM:

./koko -d  #启动koko服务

10. Despliega el componente de guacamole

        El proyecto de trampolín de Apache, Jumpserver, utiliza otros componentes para implementar la función RDP. Jumpserver no modifica otros códigos, pero agrega complementos adicionales para admitir las llamadas de Jumpserver. (RDP aquí es el protocolo de escritorio remoto, y el servidor de fondo se puede operar a través del navegador)

        Enlace de descarga del sitio web oficial: Apache Guacamole™: 1.2.0

10.1 Descargar guacamole-server y ssh-forward

cd /opt
wget -O docker-guacamole-v2.1.1.tar.gz https://github.com/jumpserver/docker-guacamole/archive/master.tar.gz
tar -xf docker-guacamole-v2.1.1.tar.gz

#解压后目录名为docker-guacamole-master,目录下有三个文件#
[root@jumpserver opt]# ls /opt/docker-guacamole-master/
Dockerfile    guacamole.properties     etc     

cd /opt/docker-guacamole-master/
wget http://download.jumpserver.org/public/guacamole-server-1.2.0.tar.gz  #下载guacamole-server
tar -zxvf guacamole-server-1.2.0.tar.gz

wget http://download.jumpserver.org/public/ssh-forward.tar.gz--2020-08-09 14:33:54--  http://download.jumpserver.org/public/ssh-forward.tar.gz  #下载ssh-forward
tar -zxvf ssh-forward.tar.gz 

cd /opt/docker-guacamole-master/guacamole-server-1.2.0  #进入源码包

yum -y install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool uuid-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaydio-libs-devel openssl-devel libvorbis-devel libwebp-devel  #安装依赖

10.2 Instalar herramientas ffmpeg

La herramienta ffmpeg se utiliza para procesar archivos multimedia

yum -y install epel-release 

rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

yum -y install ffmpeg ffmpeg-devell

10.3 Compilar e instalar guacamole

cd /opt/docker-guacamole-master/guacamole-server-1.2.0  #进入源码包
./configure --with-init-dir=/etc/init.d  #编译
make && make install  #编译安装

10.4 Instalar entorno Java

yum -y install java-1.8.0-openjdk

cd /opt
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.74/bin/apache-tomcat-9.0.74.tar.gz
tar -xf apache-tomcat-9.0.74.tar.gz
mv apache-tomcat-9.0.74 tomcat9
rm -rf /opt/tomcat9/webapps/*

cd /opt/docker-guacamole-master/
wget http://download.jumpserver.org/release/v2.1.1/guacamole-client-v2.1.1.tar.gz  #guacamole-clent里有一个war包和jar包
tar -xf guacamole-client-v2.1.1.tar.gz

##更改tomcat配置文件###
sed -i 's/Connector port="8080"/Connector port="8081"/g' /opt/tomcat9/conf/server.xml
echo "java.util.logging.ConsoleHandler.encoding = UTF-8" >> /opt/tomcat9/conf/logging.properties

###3个软链接###
ln -sf /opt/docker-guacamole-master/guacamole-client-v2.1.1/guacamole-1.0.0.war /opt/tomcat9/webapps/ROOT.war
ln -sf /opt/docker-guacamole-master/guacamole-client-v2.1.1/guacamole-auth-jumpserver-1.0.0.jar /config/guacamole/extensions/guacamole-auth-jumpserver-1.0.0.jar
ln -sf /opt/docker-guacamole-master/guacamole.properties /config/guacamole/guacamole.properties

10.5 Configuración del entorno de guacamole

./bashrc es un archivo de configuración de variables de entorno similar a profile. Use ls --all en el directorio /root para verlo, que está oculto de forma predeterminada.

export JUMPSERVER_SERVER=http://127.0.0.1:8080    
echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc
export BOOTSTRAP_TOKEN=Ovn181zT7q7a8Die
echo "export B00TSTRAP_TOKEN=Ovn181zT7q7a8Die" >> ~/.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
export GUACAMOLE_LOG_LEVEL=ERROR
echo "export GUACAMOLE_LOG_LEVEL=ERROR" >> ~/.bashrc
export JUMPSERVER_ENABLE_DRIVE=true
echo "export JUMPSERVER_ENABLE_DRIVE=true" >> ~/.bashrc

Significado del parámetro:

JUMPSERVER_SERVER se refiere a la dirección a la que accede el núcleo

 BOOTSTARAP_TOKEN debe cambiarse por uno propio, si lo olvida, vaya a config.yml debajo de jumpserver para encontrarlo

JUMPSERVER_KEY_DIR Directorio de almacenamiento de claves después de una autenticación exitosa

GUACAMOLE_HOME es el directorio donde se encuentra el archivo de configuración guacamole.properties

GUACAMOLE_LOG_LEVEL es el nivel de registro generado

JUMPSERVER_ENABLE_DRIVE montar disco compartido para protocolo rdp

10.6 Inicio tomcat y guacamole

/etc/init.d/guacd start  #启动服务
/opt/tomcat9/bin/startup.sh  #启动tomcat

Módulo once, lina/luna

Lina pertenece al módulo de front-end y es responsable de la visualización de la página. Luna ahora es el front-end de la terminal web, y este proyecto proporciona la página de front-end del plan. jumpserver solo proporciona api, y ya no es responsable de renderizar html en segundo plano.Se puede combinar con lina para realizar la terminal de la interfaz de línea de comandos en la página web.

11.1 Crear un nuevo usuario de Linux nginx

useradd -M -s /sbin/nologin nginx

11.2 instalar lina/luna

cd /opt
wget https://github.com/jumpserver/lina/releases/download/v2.1.0/lina-v2.1.0.tar.gz
wget https://github.com/jumpserver/luna/releases/download/v2.1.1/luna-v2.1.1.tar.gz
tar -zxvf lina-v2.1.0.tar.gz
tar -zxvf luna-v2.1.1.tar.gz
mv lina-v2.1.0 lina
mv luna-v2.1.1 luna
chown -R nginx:nginx lina  #改变他的属主属组,让他归nginx管理
chown -R nginx:nginx luna  #改变他的属主属组,让他归nginx管理

12. Compile e instale nginx, nginx-module-vts

12.1 descargar nginx

cd /opt
wget http://nginx.org/download/nginx-1.22.0.tar.gz
tar -zxvf nginx-1.22.0.tar.gz
wget https://gitcode.net/mirrors/vozlt/nginx-module-vts/-/archive/master/nginx-module-vts-master.zip  #可能会报错,但链接是没问题的,需要去windows主机下载然后传到/opt目录下
unzip nginx-module-vts-master.zip

yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel make

cd /opt/nginx-1.22.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/opt/nginx-module-vts-master/
make && make install

nginx -V  #查看nginx安装信息
nginx -t  #测试ngixn,返回nginx状态,带有successful为成功

11.2 Cambiar nginx.conf

vim /usr/local/nginx/conf/nginx.conf 

 Simplemente copie directamente, no es necesario cambiar, use el modo de pegado vim: configure pegar si el formato de pegado es incorrecto.

#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    default_type  application/octet-stream;
    vhost_traffic_status_zone;                  #流量状态监控
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
log_format main '{ "@timestamp": "$time_local", '
'"@fields": { '
'"uri":"$request_uri",'
'"url":"$uri",'
'"upstream_addr":"$upstream_addr",'
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"host":"$host",'
'"server_addr":"$server_addr",'
'"request_time": "$request_time", '
'"request_time":"$request_time",'
'"status":"$status",'
'"request": "$request", '
'"request_method": "$request_method", '
'"size":$body_bytes_sent,'
'"upstream_time":"$upstream_response_time"'
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" } }';
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 
 
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
 
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
 
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
 
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
 
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
}
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
cd /usr/local/sbin/
./nginx   #开启服务

11.3 Verificación de nginx

192.168.136.65

192.168.136.65/estado

11.4 Explicación de la lista de seguimiento

La información de la lista de monitoreo
Servidor principal Servidor principal
**Host: **nombre de host
**Versión: **número de versión
**Tiempo de actividad:**tiempo de funcionamiento del servidor
Conexiones activas: número actual de conexiones de clientes lectura: lectura de conexiones de clientes Escritura total : el número total de conexiones de clientes escritas
Solicitudes aceptadas: el número total de conexiones de clientes gestionadas: el número total de conexiones de clientes gestionadas Total: el número total de solicitudes Req/s: el número de solicitudes por segundo
Shared memory: nombre de memoria compartida: especificado en la configuración de memoria compartida name maxSize: el límite máximo de la memoria compartida especificado en la configuración usedSize: el tamaño actual de la memoria compartida usedNode: el número de nodos actualmente utilizados en la memoria compartida Server zones server zone zone: la zona actual Total
de solicitudes : el número total de solicitudes Req/s: por segundo Número de tiempo de solicitudes: Tiempo de respuestas: número de códigos de estado 1xx, 2xx, 3xx, 4xx, 5xx: indica el número de códigos de estado diferentes en respuesta Total: el número total de códigos de estado de respuesta Tráfico indica tráfico Enviado: tráfico enviado Rcvd: tráfico recibido Enviado/s: tráfico enviado por segundo Rcvd/s: tráfico recibido por segundo Caché indica caché Miss: número de cachés perdidos Bypass: número de cachés evitados Expirde: número de cachés vencidas Obsoleto: Número de cachés válidos Actualizando: Número de actualizaciones de caché Revalidado: Libro de caché revalidado Acierto: Número de aciertos de caché Escaso: Número de solicitudes que no cumplieron con los requisitos de caché Total: Total




12. Cambie la configuración de nginx nuevamente

vim /usr/local/nginx/conf/nginx.conf

De hecho, solo se modificó la parte del servidor . Para facilitar la copia, copié todo el archivo. Si el formato de pegado es incorrecto, use el modo de pegado vim, :set paste.

worker_processes  1;

events {
    worker_connections  1024;
}
 

http {
    include       mime.types;
    default_type  application/octet-stream;
    vhost_traffic_status_zone;                  #流量状态监控
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
log_format main '{ "@timestamp": "$time_local", '
'"@fields": { '
'"uri":"$request_uri",'
'"url":"$uri",'
'"upstream_addr":"$upstream_addr",'
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"host":"$host",'
'"server_addr":"$server_addr",'
'"request_time": "$request_time", '
'"request_time":"$request_time",'
'"status":"$status",'
'"request": "$request", '
'"request_method": "$request_method", '
'"size":$body_bytes_sent,'
'"upstream_time":"$upstream_response_time"'
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" } }';
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
    server {
        listen       80;
        client_max_body_size 100m; #录像和文件上传大小限制
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location /ui/ {
            try_files $uri / /index.html;
            alias /opt/lina/;
        }
        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
        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 /koko/ {  #当我们请求koko,他会通过proxy_pass进行反向代理
        proxy_pass http://localhost: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/{
        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 /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;
        proxy_pass http://localhost: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://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;
        }
        location /core/ {
        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;
        }
        location / {
        rewrite ^/(.*)$ /ui/$1 last;
        }
 
} 
}

reiniciar nginx

cd /usr/local/sbin/nginx
./nginx

Si ocurre el siguiente error después de reiniciar nginx

nginx: [emerg] La directiva "servidor" no está permitida aquí en /usr/local/nginx/conf/nginx.conf:1

Verifique el formato, generalmente falta un paréntesis o uno más.

Trece, acceda a jumpserver

192.168.136.65

En este momento, ya no es el puerto 8080, sino el puerto 80. Debido a que es un proxy de nginx, el nombre de usuario y la contraseña predeterminados son ambos admin .

14. Resumen del problema

Ruta del paquete de 14.1 pips

[root@jumpserver wheels]# cd /opt/py3/lib/python3.6/site-packages

'pidfile' no tiene atributo 'TimeoutPIDLockFile' El módulo pidfile no tiene el atributo TimeoutPIDLockFile. Este error ocurrirá cuando instale otro tutorial, que no se puede resolver. Reinicie una máquina virtual y siga mi tutorial en este artículo. Este problema no ocurrió.

14.2 Ocupación de nginx y reinicio

nginx: [emerg] todavía no pudo enlazar () error que indica que el puerto 80 está ocupado

Ver el uso del puerto

netstat-anp | agarre 80

De nada sirve matar el proceso con kill -9  , nginx:worker o nginx:master se ha reiniciado automáticamente y ocupa el puerto 80

###解决方法###
cd /usr/local/sbin/nginx
pkill nginx
./nginx

14.3 error de importación de datos mysql

python3 /opt/jumpserver/apps/manage.py makemigrations informa de un error

python3 /opt/jumpserver/apps/manage.py migrar

contraseña de la base de datos mysql error de número puro

###解决方法###
改密码解决方法,提前避免改为问题,密码需要有英文字母和数字组合。
如果你前面mysql密码设置的跟我一样不会出现该问题。

(jum_venel) [root@jumpserver apps]# mysqladmin -ujumpserver -p password
Enter password: 
New password: 
Confirm new password: 

14.4 error de instalación de pip3 virtualenv

Falta la herramienta openssl y es necesario desinstalar y volver a compilar python3

###解决方法###
rm -rf /usr/local/python3.6/  #卸载原先的python3.6
yum install openssl openssl-devel -y
cd /etc/python
./configure --prefix=/usr/local/python3.6
 make -j3 && make install

14.5 Iniciar jumpserver después de reiniciar el host

Dado que jms y nginx no están configurados para iniciarse automáticamente después del arranque, es necesario iniciar manualmente al arrancar sin comer

###解决方法###
source /usr/local/jmp_venvl/bin/activate
/opt/jumpserver/jms start -d
./usr/local/sbin/nginx

15. Enlaces de referencia

Despliegue manual de máquina bastión jumpserver (proceso completo + errores comunes)_Blog IT.cat-Blog CSDN

Compilación e instalación de Nginx + módulo de monitorización Nginx-module-vts_IT.cat's blog - CSDN blog

Documentación de funcionamiento de Linux: implementación y uso del sistema de plataforma jumpserver

Supongo que te gusta

Origin blog.csdn.net/weixin_48878440/article/details/130836286
Recomendado
Clasificación