In Abbiamo analizzato l'avvio di un server VNC su una macchina virtuale di qualsiasi tipo. Questa soluzione ha molti svantaggi, il principale dei quali è l'elevata richiesta di larghezza di banda dei canali di trasmissione dei dati. Oggi proveremo a connetterci a un desktop grafico su Linux tramite RDP (Remote Desktop Protocol). Il sistema VNC si basa sulla trasmissione di array di pixel tramite il protocollo RFB (Remote Framebuffer), mentre RDP consente di inviare primitivi grafici più complessi e comandi di alto livello. Di solito viene utilizzato per organizzare servizi di desktop remoto in Windows, ma sono disponibili anche server per Linux.
Contenuto:
Installazione dell'ambiente grafico
Utilizzeremo una macchina virtuale con Ubuntu Server 18.04 LTS con due core CPU, quattro gigabyte di RAM e un disco rigido (HDD) da venti gigabyte. Una configurazione più debole è poco adatta per un desktop grafico, anche se dipende dai compiti da svolgere. Non dimenticate di usare il codice promozionale Habrahabr10 per ottenere uno sconto del 10% sull'ordine.

L'installazione dell'ambiente desktop con tutte le dipendenze viene eseguita con il seguente comando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsCome nel caso precedente, abbiamo scelto XFCE per le sue relativamente basse esigenze di risorse di calcolo.
Localizzazione del server e installazione del software
Spesso, le macchine virtuali vengono configurate solo con localizzazione in inglese. Potrebbe essere necessaria la configurazione della lingua russa, che non è difficile da impostare. Innanzitutto, installeremo le traduzioni per i programmi di sistema:
sudo apt-get install language-pack-ruConfigurazione della localizzazione:
sudo update-locale LANG=ru_RU.UTF-8Lo stesso effetto può essere ottenuto modificando manualmente il file /etc/default/locale.
Per la localizzazione di GNOME e KDE, sono disponibili nei repository i pacchetti language-pack-gnome-ru e language-pack-kde-ru, che saranno necessari se utilizzerete programmi da questi ambienti desktop. In XFCE, le traduzioni vengono installate insieme alle applicazioni. Successivamente, è possibile installare i dizionari:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictInoltre, l'installazione delle traduzioni può essere necessaria per alcune applicazioni:
# Браузер 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 questa configurazione, la preparazione dell'ambiente desktop è completa, resta solo da configurare il server RDP.
Installazione e configurazione del server RDP
Nei repository di Ubuntu c'è un server Xrdp distribuito liberamente, che utilizzeremo:
sudo apt-get install xrdpSe tutto è andato bene, il server dovrebbe avviarsi automaticamente:
sudo systemctl status xrdp 
Il server Xrdp viene avviato con i diritti dell'utente xrdp e per impostazione predefinita utilizza il certificato /etc/ssl/private/ssl-cert-snakeoil.key, che può essere sostituito con uno proprio. Per accedere al file in lettura è necessario aggiungere l'utente al gruppo ssl-cert:
sudo adduser xrdp ssl-certLe impostazioni predefinite si trovano nel file /etc/default/xrdp, mentre tutti gli altri file di configurazione del server si trovano nella directory /etc/xrdp. I parametri principali sono nel file xrdp.ini, che può rimanere invariato. Il file di configurazione è ben documentato e includono anche le relative manpages:
man xrdp.ini
man xrdpÈ rimasto solo da modificare lo script /etc/xrdp/startwm.sh, che viene eseguito durante l'inizializzazione della sessione utente. Inizialmente, faremo un backup dello script fornito dal pacchetto:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shPer avviare l'ambiente desktop XFCE, è necessario uno script di questo tipo:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Si noti che è meglio specificare il percorso completo per i file eseguibili negli script: è una buona abitudine. Rende lo script eseguibile e a questo punto la configurazione del server Xrdp può considerarsi completa:
sudo chmod 755 /etc/xrdp/startwm.shRiavviamo il server:
sudo systemctl restart xrdp
Configurazione del firewall
Per impostazione predefinita, Xrdp ascolta sulla porta TCP 3389 su tutte le interfacce. A seconda della configurazione del server virtuale, potrebbe essere necessario configurare il firewall Netfilter. Su Linux, ciò avviene normalmente tramite l'utilità iptables, ma in Ubuntu è meglio usare ufw. Se l'indirizzo IP del client è noto, la configurazione si effettua con il seguente comando:
sudo ufw allow from IP_Address to any port 3389Permettere le connessioni da qualsiasi IP è possibile in questo modo:
sudo ufw allow 3389Il protocollo RDP supporta la crittografia, ma aprire l'accesso al server Xrdp da reti pubbliche è una cattiva idea. Se il client non ha un IP statico, per migliorare la sicurezza, il server dovrebbe ascoltare solo localhost. È meglio configurare l'accesso tramite un tunnel SSH, che reindirizzerà in modo sicuro il traffico dal computer client. Un approccio simile è stato per il server VNC.
Connessione al server RDP
Per lavorare con l'ambiente desktop è meglio creare un utente non privilegiato separato:
sudo adduser rdpuser 
Aggiungeremo l'utente al gruppo sudo in modo che possa eseguire compiti legati all'amministrazione. Se non è necessario, questo passaggio può essere saltato:
sudo gpasswd -a rdpuser sudoÈ possibile connettersi al server utilizzando qualsiasi client RDP, incluso il client integrato del servizio desktop remoto di Windows. Se Xrdp ascolta l'interfaccia esterna, non saranno necessari ulteriori passaggi. È sufficiente inserire nell'impostazione della connessione l'indirizzo IP del VPS, il nome utente e la password. Dopo la connessione vedremo un'interfaccia simile a questa:

Dopo la configurazione iniziale dell'ambiente desktop, otterremo un desktop completo. Come puoi vedere, non consuma molte risorse, anche se tutto dipenderà dalle applicazioni utilizzate.

Se il server Xrdp ascolta solo localhost, il traffico sul computer client deve essere incapsulato in un tunnel SSH (sshd deve essere in esecuzione su VPS). Su Windows, puoi utilizzare un client SSH grafico (ad esempio, PuTTY), mentre nei sistemi UNIX è necessaria l'utilità ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipDopo l'inizializzazione del tunnel, il client RDP si collegherà non al server remoto ma all'host locale.
Con i dispositivi mobili è più complicato: per stabilire un tunnel, i client SSH compatibili devono essere acquistati; inoltre, su iOS e iPadOS, l'esecuzione in background delle app di terze parti è difficile a causa di un'ottimizzazione energetica eccessiva. Su iPhone e iPad non è possibile stabilire un tunnel in un'app separata — è necessaria un'app combinata che sia in grado di stabilire una connessione RDP tramite SSH. Ad esempio, come .
Gestore delle sessioni e sessioni utenti
La possibilità di lavoro multiutente è implementata direttamente nel server Xrdp e non richiede una configurazione aggiuntiva. Dopo l'avvio del servizio tramite systemd, un processo funziona in modalità demone, ascolta la porta 3389 e interagisce tramite localhost con il gestore delle sessioni.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Il gestore delle sessioni non è generalmente visibile agli utenti, poiché il nome utente e la password impostati nelle impostazioni del client vengono trasmessi automaticamente. Se ciò non è avvenuto o si è verificato un errore durante l'autenticazione, al posto del desktop verrà mostrata una finestra interattiva per l'accesso al sistema.

L'avvio automatico del gestore delle sessioni è definito nel file /etc/default/xrdp, mentre la configurazione è memorizzata in /etc/xrdp/sesman.ini. Per impostazione predefinita, appare circa così:
[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
; Quando AlwaysGroupCheck=false l'accesso sarà consentito
; se il gruppo TerminalServerUsers non è definito.
AlwaysGroupCheck=false
[Sessions]Qui non c'è niente da modificare, è sufficiente vietare l'accesso con diritti root (AllowRootLogin=false). Per ogni utente autenticato nel sistema viene avviato un processo xrdp separato: se ci si disconnette senza terminare la sessione, i processi degli utenti continueranno a funzionare per impostazione predefinita, e potrà essere possibile riconnettersi alla sessione. Le impostazioni possono essere modificate nel file /etc/xrdp/sesman.ini (sezione [Sessions]).
Cambio delle disposizioni della tastiera
Di solito non ci sono problemi con il buffer di scambio bidirezionale, mentre con la disposizione della tastiera russa sarà necessario un po' di lavoro (la locale russa deve essere già ). Modifichiamo le impostazioni della tastiera del server Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniAlla fine del file di configurazione bisogna aggiungere le seguenti righe:
[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,ruResta da salvare il file e riavviare Xrdp:
sudo systemctl restart xrdpCome puoi vedere, allestire un server RDP su un VPS Linux non è difficile, e già abbiamo esaminato la configurazione di VNC. Oltre a queste tecnologie, c'è un'altra opzione interessante: il sistema X2Go che utilizza un protocollo NX 3 modificato. Ci occuperemo di questo nella prossima pubblicazione.
Fonte: habr.com
