In Abbiamo analizzato l'avvio di un server VNC su una macchina virtuale di qualsiasi tipo. Questa opzione ha molti svantaggi, il principale dei quali è l'elevata richiesta di larghezza di banda. Oggi cercheremo di connetterci al 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 primitive grafiche più complesse e comandi di alto livello. Viene normalmente utilizzato per organizzare i servizi di desktop remoto in Windows, ma sono disponibili anche server per Linux.
Indice:
Installazione dell'ambiente grafico
Prenderemo una macchina virtuale con Ubuntu Server 18.04 LTS con due core, 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% al momento dell'ordine.

L'installazione dell'ambiente desktop con tutte le dipendenze si esegue con il seguente comando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsCome nel caso precedente, abbiamo scelto XFCE per i suoi requisiti relativamente bassi in termini di risorse computazionali.
Localization del server e installazione del software
Spesso le macchine virtuali vengono implementate solo con la localizzazione inglese. Potrebbe essere necessaria una versione russa sul desktop, che non è difficile da configurare. Iniziamo installando le traduzioni per i programmi di sistema:
sudo apt-get install language-pack-ruImpostiamo la 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, nel repository sono disponibili i pacchetti language-pack-gnome-it e language-pack-kde-it, necessari se si utilizzano programmi di questi ambienti desktop. In XFCE, le traduzioni vengono installate insieme alle applicazioni. Dopo, è 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 potrebbe 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-ruA questo punto, la preparazione dell'ambiente desktop è conclusa e resta da configurare il server RDP.
Installazione e configurazione del server RDP
Nei repository di Ubuntu è disponibile il server Xrdp, che utilizzeremo:
sudo apt-get install xrdpSe tutto è andato a buon fine, il server dovrebbe avviarsi automaticamente:
sudo systemctl status xrdp 
Il server Xrdp si avvia 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 personale. Per concedere accesso in lettura al file, è necessario aggiungere l'utente al gruppo ssl-cert:
sudo adduser xrdp ssl-certLe impostazioni predefinite possono essere trovate 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. La configurazione è ben documentata e sono incluse le relative manpages:
man xrdp.ini
man xrdpÈ necessario solo modificare lo script /etc/xrdp/startwm.sh, che viene eseguito durante l'inizializzazione della sessione utente. Prima di tutto, facciamo un backup dello script dalla distribuzione:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shPer avviare l'ambiente desktop XFCE, è necessario uno script con un contenuto simile:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Nota: è consigliabile specificare il percorso completo per i file eseguibili negli script; è una buona abitudine. Rendiamo lo script eseguibile e possiamo considerare conclusa la configurazione del server Xrdp:
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 necessaria la regolazione del firewall Netfilter. In Linux, questo è solitamente fatto con l'utility iptables, ma su Ubuntu è meglio utilizzare 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 3389Per consentire le connessioni da qualsiasi IP, si può fare così:
sudo ufw allow 3389Il protocollo RDP supporta la crittografia, ma aprire l'accesso al server Xrdp dalle reti pubbliche è una cattiva idea. Se il cliente 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à il traffico dal computer del cliente in modo sicuro. Un approccio simile per il server VNC.
Connessione al server RDP
Per lavorare con l'ambiente desktop, è meglio creare un utente non privilegiato separato:
sudo adduser rdpuser 
Aggiungiamo l'utente al gruppo sudo, affinché possa gestire i compiti legati all'amministrazione. Se non è necessaria questa operazione, si può saltare questo passaggio:
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 sono necessari ulteriori passaggi. Basta inserire nelle impostazioni di connessione l'indirizzo IP del VPS, il nome utente e la password. Una volta connessi, vedremo un'interfaccia simile a questa:

Dopo la configurazione iniziale dell'ambiente desktop, avremo un desktop completo. Come puoi vedere, consuma poche risorse, anche se in seguito tutto dipenderà dalle applicazioni utilizzate.

Se il server Xrdp ascolta solo localhost, il traffico sul computer client dovrà essere incapsulato in un tunnel SSH (sshd deve essere in esecuzione sul VPS). Su Windows, è possibile 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 connetterà non più al server remoto, ma all'host locale.
Con i dispositivi mobili è più complicato: per stabilire un tunnel SSH, sarà necessario acquistare un client apposito, e in iOS e iPadOS, l'esecuzione in background delle app di terze parti è limitata per via di un'ottima ottimizzazione del consumo energetico. Su iPhone e iPad non è possibile aprire un tunnel in un'app separata: è necessario un'app combinata che possa stabilire la connessione RDP tramite SSH. Un esempio è .
Gestore sessioni e sessioni utente
La funzionalità di lavoro multiutente è implementata direttamente nel server Xrdp e non richiede ulteriori configurazioni. 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 
Di solito, gli utenti non vedono il manager delle sessioni perché le credenziali di accesso impostate nelle impostazioni del client vengono trasmesse automaticamente. Se ciò non è avvenuto o si è verificato un errore di autenticazione, apparirà una finestra interattiva per l'accesso invece del desktop.

L'avvio automatico del gestore di sessioni è definito nel file /etc/default/xrdp, mentre la configurazione è memorizzata in /etc/xrdp/sesman.ini. Per impostazione predefinita appare in questo modo:
[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]In questa sezione non è necessario apportare modifiche, basta disabilitare l'accesso con privilegi di root (AllowRootLogin=false). Per ciascun utente autenticato nel sistema viene avviato un processo xrdp separato: se ci si disconnette senza terminare la sessione, i processi utente continueranno a funzionare per impostazione predefinita e sarà possibile riconnettersi alla sessione. Le impostazioni possono essere modificate nel file /etc/xrdp/sesman.ini (sezione [Sessions]).
Cambiamento delle disposizioni della tastiera
Di solito non ci sono problemi con il buffer di scambio bidirezionale, ma per la disposizione della tastiera in russo sarà necessario fare alcune modifiche (la locale russa deve essere già ). Andiamo a modificare le impostazioni della tastiera del server Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.iniAlla fine del file di configurazione è necessario 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,ruSalva il file e riavvia Xrdp:
sudo systemctl restart xrdpCome puoi vedere, avviare un server RDP su VPS Linux è semplice, e abbiamo già esaminato la configurazione di VNC. Oltre a queste tecnologie, c'è un'altra opzione interessante: il sistema X2Go, che utilizza un protocollo NX 3 modificato. Ne parleremo nel prossimo articolo.
Fonte: habr.com
