En Hemos analizado el inicio del servidor VNC en una máquina virtual de cualquier tipo. Esta opción tiene muchas desventajas, siendo la principal sus altas exigencias en el ancho de banda de las conexiones. Hoy intentaremos conectarnos al escritorio gráfico en Linux mediante RDP (Remote Desktop Protocol). El sistema VNC se basa en la transmisión de matrices de píxeles a través del protocolo RFB (Remote Framebuffer), mientras que RDP permite enviar primitivas gráficas más complejas y comandos de alto nivel. Generalmente, se utiliza para organizar servicios de escritorios remotos en Windows, pero también hay servidores disponibles para Linux.
Contenido:
Instalación del entorno gráfico
Tomaremos una máquina virtual con Ubuntu Server 18.04 LTS que cuenta con dos núcleos de CPU, cuatro gigabytes de RAM y un disco duro (HDD) de veinte gigabytes. Una configuración más débil no es adecuada para un escritorio gráfico, aunque esto depende de las tareas a realizar. No olvides usar el código promocional Habrahabr10 para obtener un 10% de descuento al realizar tu pedido.

La instalación del entorno de escritorio con todas las dependencias se realiza con el siguiente comando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsAl igual que en el caso anterior, elegimos XFCE debido a sus relativamente bajas exigencias de recursos computacionales.
Localización del servidor e instalación de software
A menudo, las máquinas virtuales se despliegan sólo con la localización en inglés. En el escritorio puede ser necesaria la configuración en ruso, la cual no es difícil de ajustar. Primero, instalaremos las traducciones para los programas del sistema:
sudo apt-get install language-pack-ruConfiguraremos la localización:
sudo update-locale LANG=ru_RU.UTF-8El mismo efecto se puede lograr editando manualmente el archivo /etc/default/locale.
Para la localización de GNOME y KDE hay paquetes en el repositorio language-pack-gnome-ru y language-pack-kde-ru, que serán necesarios si vas a utilizar programas de estos entornos de escritorio. En XFCE las traducciones se instalan junto con las aplicaciones. A continuación se pueden instalar los diccionarios:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictAdemás, puede ser necesario instalar traducciones para algunas aplicaciones.
# Браузер Firefox
sudo apt-get install firefox firefox-locale-ru
# Почтовый клиент Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# Офисный пакет LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ruCon esto, la preparación del entorno de escritorio está completa, solo queda configurar el servidor RDP.
Instalación y configuración del servidor RDP
En los repositorios de Ubuntu hay un servidor gratuito llamado Xrdp que vamos a utilizar:
sudo apt-get install xrdpSi todo ha ido bien, el servidor debería iniciarse automáticamente:
sudo systemctl status xrdp 
El servidor Xrdp se inicia con los derechos del usuario xrdp y, por defecto, toma el certificado /etc/ssl/private/ssl-cert-snakeoil.key, que se puede reemplazar por el propio. Para tener acceso de lectura al archivo, es necesario agregar al usuario al grupo ssl-cert:
sudo adduser xrdp ssl-certLos ajustes predeterminados se pueden encontrar en el archivo /etc/default/xrdp, y todos los demás archivos de configuración del servidor están en el directorio /etc/xrdp. Los parámetros principales se encuentran en el archivo xrdp.ini, que no es necesario modificar. La configuración está bien documentada y también incluye las páginas del manual correspondientes:
man xrdp.ini
man xrdpSolo queda editar el script /etc/xrdp/startwm.sh, que se ejecuta al iniciar una sesión de usuario. Primero, hagamos una copia de seguridad del script del paquete:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shPara iniciar el entorno de escritorio XFCE, se requiere un script con un contenido similar al siguiente:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Tenga en cuenta: es mejor especificar la ruta completa a los archivos ejecutables en los scripts; es una buena práctica. Haremos que el script sea ejecutable y con esto consideramos que la configuración del servidor Xrdp ha finalizado:
sudo chmod 755 /etc/xrdp/startwm.shReiniciamos el servidor:
sudo systemctl restart xrdp
Configuración del cortafuegos
Por defecto, Xrdp escucha en el puerto TCP 3389 en todas las interfaces. Dependiendo de la configuración del servidor virtual, puede ser necesario configurar el firewall Netfilter. En Linux, esto generalmente se hace con la herramienta iptables, pero en Ubuntu es mejor usar ufw. Si se conoce la dirección IP del cliente, la configuración se realiza con el siguiente comando:
sudo ufw allow from IP_Address to any port 3389Permitir conexiones desde cualquier IP se puede hacer así:
sudo ufw allow 3389El protocolo RDP admite cifrado, pero abrir el acceso al servidor Xrdp desde redes públicas no es una buena idea. Si el cliente no tiene una dirección IP fija, para aumentar la seguridad el servidor solo debe escuchar en localhost. El acceso es mejor configurarlo a través de un túnel SSH, que redirigirá de manera segura el tráfico desde la computadora del cliente. Usamos un enfoque similar para el servidor VNC.
Conexión al servidor RDP
Para trabajar con el entorno de escritorio, es mejor crear un usuario no privilegiado por separado:
sudo adduser rdpuser 
Agregaremos al usuario al grupo sudo para que pueda abordar tareas relacionadas con la administración. Si no es necesario, se puede omitir este paso:
sudo gpasswd -a rdpuser sudoSe puede conectar al servidor con cualquier cliente RDP, incluyendo el cliente incorporado de Servicios de Escritorio Remoto de Windows. Si Xrdp escucha en la interfaz externa, no se requieren pasos adicionales. Solo es necesario ingresar en la configuración de conexión la dirección IP del VPS, el nombre de usuario y la contraseña. Después de conectarnos, veremos algo así:

Después de la configuración inicial del entorno de escritorio, obtendremos un escritorio completo. Como puedes ver, no consume tantos recursos, aunque todo dependerá de las aplicaciones utilizadas posteriormente.

Si el servidor Xrdp solo escucha en localhost, el tráfico en la computadora cliente deberá ser encapsulado en un túnel SSH (debe estar en ejecución sshd en el VPS). En Windows, se puede utilizar un cliente gráfico SSH (por ejemplo, PuTTY), mientras que en sistemas UNIX se necesita la herramienta ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipDespués de inicializar el túnel, el cliente RDP se conectará no al servidor remoto, sino al host local.
Con los dispositivos móviles es más complicado: los clientes SSH capaces de establecer un túnel deberán ser comprados, además, en iOS y iPadOS, la ejecución en segundo plano de aplicaciones de terceros está dificultada debido a la optimización del consumo de energía. En iPhone y iPad, no se podrá establecer un túnel en una aplicación separada; será necesario contar con una aplicación combinada que pueda establecer conexiones RDP a través de SSH. Como por ejemplo, .
Gestor de sesiones y sesiones de usuarios
La posibilidad de trabajo multiusuario está implementada directamente en el servidor Xrdp y no requiere configuración adicional. Después de iniciar el servicio a través de systemd, un proceso funciona en modo demonio, escucha en el puerto 3389 y se comunica a través de localhost con el gestor de sesiones.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
El gestor de sesiones generalmente no es visible para los usuarios, porque los datos de inicio de sesión y contraseña configurados en los ajustes del cliente se envían automáticamente. Si esto no sucede o si ocurre un error de autenticación, en lugar del escritorio aparecerá una ventana interactiva para iniciar sesión.

El inicio automático del gestor de sesiones está registrado en el archivo /etc/default/xrdp, y la configuración se almacena en /etc/xrdp/sesman.ini. Por defecto, se ve aproximadamente así:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; Cuando AlwaysGroupCheck=false, se permitirá el acceso
; si el grupo TerminalServerUsers no está definido.
AlwaysGroupCheck=false
[Sessions]Aquí no hay nada que cambiar, solo hay que prohibir el acceso con permisos de root (AllowRootLogin=false). Para cada usuario autenticado en el sistema se inicia un proceso xrdp separado: si se desconecta sin finalizar la sesión, los procesos del usuario continuarán funcionando por defecto, y se podrá volver a conectar a la sesión. Los ajustes se pueden modificar en el archivo /etc/xrdp/sesman.ini (sección [Sessions]).
Cambio de distribuciones de teclado
Normalmente no hay problemas con el portapapeles bidireccional, pero tendréis que hacer algunos ajustes con la distribución del teclado ruso (la configuración regional rusa ya debe estar ). Vamos a editar la configuración del teclado del servidor Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniAl final del archivo de configuración, hay que añadir las siguientes líneas:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ruSolo queda guardar el archivo y reiniciar Xrdp:
sudo systemctl restart xrdpComo veis, no es difícil levantar un servidor RDP en un VPS de Linux, y en ya hemos revisado la configuración de VNC. Además de estas tecnologías, hay otra opción interesante: el sistema X2Go, que utiliza un protocolo modificado NX 3. Abordaremos esto en la próxima publicación.
Fuente: habr.com
