OpenSSH: X11 forwarding: differenze tra le versioni

verificata per Buster, correzione ForwardX11Trusted in Debian
(verificata per Buster, correzione ForwardX11Trusted in Debian)
Riga 1: Riga 1:
{{Versioni compatibili|Wheezy|Jessie}}{{OpenSSH}}
{{Versioni compatibili|Jessie|Stretch|Buster}}{{OpenSSH}}


== Introduzione ==
== Introduzione ==
L'uso del comando <code>ssh</code>, una volta configurato il server e aggiunte le credenziali di autenticazione dell'utente del client, permette l'esecuzione di comandi su una macchina remota, ma soltanto tramite una [[shell]] testuale. Perciò un'applicazione può essere lanciata con interfaccia grafica soltanto se fa uso delle librerie ''ncurses'' o comunque che non richiedono la presenza di un server grafico X attivo.
L'uso del comando <code>ssh</code>, una volta configurato il server e aggiunte le credenziali di autenticazione dell'utente del client, permette l'esecuzione di comandi su una macchina remota, ma soltanto tramite una [[shell]] testuale. Perciò un'applicazione può essere lanciata con interfaccia grafica soltanto se fa uso delle librerie ''ncurses'' o comunque che non richiedono la presenza di un server grafico Xorg attivo.


Per poter lanciare un'applicazione grafica che richiede l'esecuzione di un server grafico X (per esempio perché sviluppata con uso delle librerie ''GTK'', ''Qt'', ecc...) e interagirvi come si farebbe con una qualsiasi applicazione, è necessario reindirizzare (''forwarding'') tutte le chiamate dirette al server X della macchina remota sul server X locale, ossia la stessa del client <code>ssh</code>.
Per poter lanciare un'applicazione grafica che richiede l'esecuzione di un server grafico X (per esempio perché sviluppata con uso delle librerie ''GTK'', ''Qt'', ecc...) e interagirvi come si farebbe con una qualsiasi applicazione, è necessario reindirizzare (''forwarding'') tutte le chiamate dirette al server X della macchina remota sul server X locale, ossia la stessa del client <code>ssh</code>.
Riga 8: Riga 8:
Si noti quindi che '''non''' è necessario né che sia in esecuzione né che sia installato un server grafico X sulla macchina remota. Per poter avviare un'applicazione grafica è invece necessario che sia installato e in esecuzione un server X sulla macchina client.
Si noti quindi che '''non''' è necessario né che sia in esecuzione né che sia installato un server grafico X sulla macchina remota. Per poter avviare un'applicazione grafica è invece necessario che sia installato e in esecuzione un server X sulla macchina client.


{{Warningbox | Si presume che la macchina di destinazione sia fidata, perché anche se i comandi sono eseguiti soltanto su quella macchina, tutte le chiamate alle librerie che fanno uso del server grafico sono eseguite sulla macchina locale. Di conseguenza c'è la possibilità di subire un attacco sulla macchina client da quella remota: in particolare rivolto a tutte le altre applicazioni (di qualunque utente) eseguite sullo stesso server X, che potrebbero essere monitorate e/o manipolate, anche riguardo all'input immesso dall'utente attraverso mouse e tastiera.}}
{{Cautionbox | Si presume che la macchina di destinazione sia fidata, perché anche se i comandi sono eseguiti soltanto su quella macchina, tutte le chiamate alle librerie che fanno uso del server grafico sono eseguite sulla macchina locale. Di conseguenza c'è la possibilità di subire un attacco sulla macchina client da quella remota: in particolare rivolto a tutte le altre applicazioni (di qualunque utente) eseguite sullo stesso server X, che potrebbero essere monitorate e/o manipolate, anche riguardo all'input immesso dall'utente attraverso mouse e tastiera.}}
 
== Lato server ==
== Lato server ==
Requisiti:
Requisiti:
Riga 33: Riga 32:
</pre>
</pre>


È da notare che disabilitare ''X11Forwarding'' non incrementa la sicurezza della macchina remota che esegue il server ''ssh'', tuttavia potrebbe comunque essere nell'interesse di chi amministra ridurre i rischi per gli utenti autorizzati a collegarsi dalle loro postazioni, e per questo questa opzione è disabilitata di default.
È da notare che disabilitare ''X11Forwarding'' non incrementa la sicurezza della macchina remota che esegue il server ''ssh'', tuttavia potrebbe comunque essere nell'interesse di chi amministra ridurre i rischi per gli utenti autorizzati a collegarsi dalle loro postazioni.


Per altre possibili configurazioni si rimanda a [[OpenSSH: file di configurazione|questa parte della guida]].
Per altre possibili configurazioni si rimanda a [[OpenSSH: file di configurazione|questa parte della guida]].
Riga 41: Riga 40:
* installato e in esecuzione il server grafico [[Xorg]];
* installato e in esecuzione il server grafico [[Xorg]];
* aperta una sessione grafica per l'utente corrente (è sufficiente un login da un display manager come gdm3/kdm/lightdm/xdm/... oppure l'uso di <code>startx</code> da un terminale virtuale <code>/dev/tty1</code>, <code>/dev/tty2</code>, ecc...);
* aperta una sessione grafica per l'utente corrente (è sufficiente un login da un display manager come gdm3/kdm/lightdm/xdm/... oppure l'uso di <code>startx</code> da un terminale virtuale <code>/dev/tty1</code>, <code>/dev/tty2</code>, ecc...);
* installato il client ''ssh''.
* installato il client ''ssh'' (pacchetto <code>openssh-client</code>, installato di default).


In particolare si controlli che siano definite le variabili d'ambiente <code>$DISPLAY</code> e <code>$XAUTHORITY</code>:
In particolare si controlli che siano definite le variabili d'ambiente <code>$DISPLAY</code> e <code>$XAUTHORITY</code>:
Riga 50: Riga 49:
<pre>
<pre>
$ echo "$XAUTHORITY"
$ echo "$XAUTHORITY"
/la-propria-home/.Xauthority
/percorso-della-propria-home/.Xauthority
</pre>
</pre>


Riga 57: Riga 56:


Ciò non risolve completamente le problematiche di sicurezza, ma limita la possibilità di ascolto alle sole applicazioni ''untrusted''. Come risultato di questa impostazione, un'applicazione remota non avrà gli stessi permessi di una eseguita localmente, per cui alcune operazioni potrebbero essergli precluse: in caso questo interferisca con il suo normale funzionamento sarà perciò necessario dargli totale accesso, ossia considerarla fidata (''trusted''), consci dei possibili rischi di sicurezza per tutte le applicazioni (anche di altri utenti) eseguite sullo stesso server X e per gli input immessi dall'utente.
Ciò non risolve completamente le problematiche di sicurezza, ma limita la possibilità di ascolto alle sole applicazioni ''untrusted''. Come risultato di questa impostazione, un'applicazione remota non avrà gli stessi permessi di una eseguita localmente, per cui alcune operazioni potrebbero essergli precluse: in caso questo interferisca con il suo normale funzionamento sarà perciò necessario dargli totale accesso, ossia considerarla fidata (''trusted''), consci dei possibili rischi di sicurezza per tutte le applicazioni (anche di altri utenti) eseguite sullo stesso server X e per gli input immessi dall'utente.
In Debian e derivate, questa modalità presenta un'ulteriore difficoltà, perché l'opzione è ignorata di default, a meno che l'opzione '''ForwardX11Trusted''' sia anche impostata a no, via linea di comando (opzione <code>-o</code>) oppure in un file di configurazione (quello di sistema <code>/etc/ssh/ssh_config</code>, valido per tutti gli utenti; oppure quello specifico per ogni utente in <code>~/.ssh/config</code>; si noti che il nome del primo è ''ssh_config'', mentre il secondo solo ''config'').


=== Utilizzo ===
=== Utilizzo ===
Dalla macchina client è sufficiente lanciare <code>ssh</code> con l'opzione <code>-X</code>:
Dalla macchina client è sufficiente lanciare <code>ssh</code> con l'opzione <code>-X</code>:
<pre>
<pre>
$ ssh -X utente_remoto@host_remoto
$ ssh -o "ForwardX11Trusted=no" -X utente_remoto@host_remoto
utente_remoto@host_remoto:~$      (<-- sessione SSH)
utente_remoto@host_remoto:~$      (<-- sessione SSH)
</pre>
</pre>
Riga 82: Riga 83:
In alternativa è possibile specificare direttamente il comando da eseguire. Per esempio con <code>evince</code>:
In alternativa è possibile specificare direttamente il comando da eseguire. Per esempio con <code>evince</code>:
<pre>
<pre>
$ ssh -X utente_remoto@host_remoto -- evince
$ ssh -o "ForwardX11Trusted=no" -X utente_remoto@host_remoto -- evince
</pre>
</pre>
In tal caso la sessione SSH sarà terminata quando si chiuderà l'applicazione.
In tal caso la sessione SSH sarà terminata quando si chiuderà l'applicazione.
Per non scrivere '''ForwardX11Trusted''' ogni volta, basta scriverlo nella propria <code>~/.ssh/config</code> oppure in <code>/etc/ssh/ssh_config</code>, lato client:
<pre>
ForwardX11Trusted="no"
</pre>
Le modifiche hanno effetto immediatamente, fin dalla successiva esecuzione di <code>ssh -X ...</code> .


==== Compressione ====
==== Compressione ====
Riga 91: Riga 98:
$ ssh -X -C utente_remoto@host_remoto
$ ssh -X -C utente_remoto@host_remoto
</pre>
</pre>
In questo esempio si dà per scontato che '''ForwardX11Trusted''' sia già impostato in un file di configurazione.
E si noti che la compressione può essere abilitata di default in maniera analoga con l'opzione '''Compression'''.


==== Avvio di un'intera sessione grafica ====
==== Avvio di un'intera sessione grafica ====
Riga 97: Riga 108:
A titolo di esempio come sessione grafica si considera ''blackbox'', che rende disponibile un ambiente grafico minimale e quindi molto veloce, che si occupa soltanto della gestione delle finestre, dei menù accessibili con il mouse e di un pannello con gli spazi di lavoro. Dev'essere installato sulla macchina remota, si consiglia in combinazione a ''menu'':
A titolo di esempio come sessione grafica si considera ''blackbox'', che rende disponibile un ambiente grafico minimale e quindi molto veloce, che si occupa soltanto della gestione delle finestre, dei menù accessibili con il mouse e di un pannello con gli spazi di lavoro. Dev'essere installato sulla macchina remota, si consiglia in combinazione a ''menu'':
<pre>
<pre>
# apt-get install blackbox menu
# apt install blackbox menu
</pre>
</pre>


Sulla macchina locale, deve essere invece installato un server grafico annidato che faccia da proxy per l'''X11 forwarding'', come per esempio <code>Xephyr</code>, che è un'evoluzione più veloce e raccomandata del precedente <code>Xnest</code>:
Sulla macchina locale, deve essere invece installato un server grafico annidato che faccia da proxy per l'''X11 forwarding'', come per esempio <code>Xephyr</code>, che è un'evoluzione più veloce e raccomandata del precedente <code>Xnest</code>:
<pre>
<pre>
# apt-get install xserver-xephyr
# apt install xserver-xephyr
</pre>
</pre>


Riga 157: Riga 168:
{{Warningbox | Un'applicazione remota, in riferimento alla visualizzazione sul server X locale, avrà gli stessi permessi di una eseguita localmente, rendendo possibile il monitoraggio e la manipolazione delle altre applicazioni grafiche eseguite sullo stesso server (anche da parte di altri utenti) e dell'input immesso dall'utente con mouse e tastiera.
{{Warningbox | Un'applicazione remota, in riferimento alla visualizzazione sul server X locale, avrà gli stessi permessi di una eseguita localmente, rendendo possibile il monitoraggio e la manipolazione delle altre applicazioni grafiche eseguite sullo stesso server (anche da parte di altri utenti) e dell'input immesso dall'utente con mouse e tastiera.


Essere certi di avere necessità di una connessione ''trusted'' prima di effettuarla, e soltanto se si può considerare sicura la macchina di destinazione.}}
Essere certi di avere necessità di una connessione ''trusted'' prima di effettuarla, e soltanto se si può considerare sicura la macchina di destinazione.
 
Si ricorda nuovamente che in Debian e derivate, se l'opzione '''ForwardX11Trusted''' non è specificata, con l'opzione <code>-o</code> da linea di comando oppure in un file di configurazione, non c'è differenza tra <code>ssh -X</code> e <code>ssh -Y</code>, poiché è ignorata di default.}}


Per disattivare il controllo di accesso, effettuando una connessione fidata (''trusted X11 forwarding''), si deve utilizzare l'opzione <code>-Y</code>:
Per disattivare il controllo di accesso, effettuando una connessione fidata (''trusted X11 forwarding''), si deve utilizzare l'opzione <code>-Y</code>:
Riga 164: Riga 177:
utente_remoto@host_remoto:~$        (<-- sessione SSH)
utente_remoto@host_remoto:~$        (<-- sessione SSH)
</pre>
</pre>
Questa opzione permette anche di ignorare un'eventuale opzione '''ForwardX11Trusted''' impostata in <code>/etc/ssh/ssh_config</code> e/o quella nella propria home in <code>~/.ssh/config</code>.


=== Configurazione ===
=== Configurazione ===
Per rendere automatiche tali configurazioni, si rimanda a [[OpenSSH: file di configurazione|questa parte della guida]].
Per maggiori dettagli sui file di configurazione, si rimanda a [[OpenSSH: file di configurazione|questa parte della guida]].


{{Autori
{{Autori
|Autore = [[Utente:HAL 9000|HAL 9000]] 18:42, 28 nov 2015 (CET)
|Autore = [[Utente:HAL 9000|HAL 9000]] 21:01, 21 lug 2019 (CEST)
|Estesa_da =
|Estesa_da =
|Verificata_da =
|Verificata_da =
3 581

contributi