VNC server su Fedora e CentOS

Sono lontani i tempi in cui VNC era considerato un trojan. Oggi quasi tutte le distribuzioni hanno una versione di questo demone per amministrare da remoto un computer in ambiente visuale.

Nonostante l’installazione sia alquanto banale, la messa a punto dello strumento può risultare problematica, specie la prima volta.

Di seguito riporto una breve guida che veste bene per le distribuzioni derivate da Red Hat come ad esempio CentOS e Fedora.

Diamo per scontato che il gestore delle finestre X Window sia correttamente installato e funzionante; non è necessario che sia attualmente in uso. È possibile trovare server che non hanno testiera e monitor ma che comunque offrono una interfaccia visuale con VNC.

Procediamo verificando in primo luogo l’esistenza del demone

yum list vnc-server

In caso procediamo con l’installazione

 yum install vnc-server

Consiglio vivamente di eseguire il demone con un utente non amministrativo, anzi, per dirla tutta, la cosa migliore è creare un utente ad-hoc che non appartenga al gruppo utenti “users”. Questo ci consentirà di definire policy specifiche per questo servizio

groupadd vnc
useradd -g vnc vnc
passwd vnc

Con il comando precedente abbiamo definito un nuovo gruppo, un nuovo utente ed una password per l’utente stesso.

Ora passiamo alla personalizzazione del servizio. Su Red Hat è sufficiente editare e personalizzare il file “/etc/sysconfig/vncservers“. Di seguito un esempio funzionante per la nostra dimostrazione

# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the lines below to start a VNC server on display :2
# as my 'myusername' (adjust this to your own).  You will also
# need to set a VNC password; run 'man vncpasswd' to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC, see
# .

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

# Use "-nohttpd" to prevent web-based VNC clients connecting.

# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel.  See the "-via" option in the
# `man vncviewer' manual page.

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

 VNCSERVERS="2:vnc"
 VNCSERVERARGS[2]="-geometry 1024x768"

Le righe che interessano sono le ultime due dove vengono definite le variabili necessarie al demone per “girare”.

VNCSERVERS definisce la porta e l’utente di ogni singola sessione. È possibile infatti eseguire diverse sessioni utente ovviamente ognuna su porte differenti.

vncserver si mette in ascolto a partire dalla porta TCP 5900. Impostando il primo parametro a “2″ chiediamo al demone di aprire una sessione sulla porta 5902.

Più sessioni possono essere specificate nella stessa variabile. Ad esempio

VNCSERVERS="1:utente1 2:utente2 3:utente3"

VNCSERVERARGS[X] (dove “X” indica il numero di porta) definisce i parametri da passare al demone per ogni sessione. Nel caso di più sessioni sarà necessario specificare più parametri:

VNCSERVERARGS[1]="-geometry 1024x768"
VNCSERVERARGS[2]="-geometry 800x600 -depth 16"
VNCSERVERARGS[3]="-geometry 1024x768 -localhost"

Per un dettaglio maggiore sui parametri supportati consultare la documentazione ufficiale (man Xvnc).

Poiché il servizio partirà con l’utenza vnc è necessario personalizzare l’ambiente di questo utente. In particolare è necessario impostare una password che vncserver chiederà al momento del log-on

su vnc
vncpasswd

Dopo aver impostato la password, che può essere diversa da quella specificata per l’utente, facciamo partire il servizio (sempre come utente vnc)

vncserver

Se tutto è andato a buon fine dovremmo avere una sessione attiva sulla porta 5902

vncviewer remotehost:5902:2

Dove remotehost è il nome della macchina e 5902 la porta tcp.

All’avvio del servizio verrà creato un file, una sorta di autoexec.bat contenente i comandi da eseguire per gestire l’ambiente visuale.
Nel nostro esempio questo file sarà “/home/vnc/.vnc/xstartup” ed avrà un aspetto del tutto simile a questo

xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

Questo script si occupa tra le altre cose di definire quale gestore grafico utilizzare nella sessione. Nell’esempio riportato in alto, è stato specificato twm, un gestore molto leggero ed essenziale

Chi volesse cambiare gestore può tranquillamente editare il file sostituendo l’ultima riga. Di seguito un esempio che mostra impiego di KDE

startkde &

Ed ecco una immagine dell’ambiente grafico in esecuzione

Per far partire il servizio all’avvio del sistema operativo possiamo utilizzare chkconfig (con credenziali amministrative)

chkconfig vncserver on

Concludiamo la procedura assicurandoci che il traffico di rete sia abilitato sulla macchina istruendo correttamente iptables. Di seguito le righe da aggiungere al file “/etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5902 -j ACCEPT

Bisogna fare attenzione ad inserire la riga precedente nella esatta posizione, prima cioè delle seguenti righe

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

Altrimenti le regole di iptables non avranno l’effetto desiderato.


VNC e sessioni sicure
VNC non fa uso di crittografia a meno di non andare su prodotti commerciali la cui licenza è a pagamento. Questo significa che con un semplice sniffer è possibile rubare la password di accesso.

Una soluzione percorribile “out of the box” prevede l’uso di ssh (il comando utilizzato in Linux per ottenere una shell sicura).

L’idea è quella di far transitare il traffico in un tunnel ssh aperto su entrambi gli host (client e server) secondo il seguente schema:

client --> SSH --| network |-- SSH <-- server

Nel nostro esempio le terminazioni del tunnel verranno create direttamente sui due host in modo da rendere sicura la comunicazione su tutta la rete.

Chiediamo ad ssh di collegarsi al server VNC sulla porta 5902. Chiediamo inoltre ad ssh di mettersi in ascolto su un’altra porta, la 55902 e di fare in modo che il traffico criptato su quest’ultima finisca in chiaro sulla 5902 (forwarding)

ssh -f -L 55902:localhost:5902 remotehost

Il parametro -f istruisce il comando a liberare il prompt agendo come un comune demone.
Il paramtro -L si occupa invece del forwarding trasferendo i byte dalla porta 55902 del client sulla porta 5902 del server.

Per accedere al servizio possiamo eseguire vncviewer localmente

vncviewer localhost:55902:2

Per rendere le cose un tantino più semplici è possibile avvalersi del paramtro sleep con il quale specificare un tempo massimo di attesa (ad esempio 60 secondi) entro il quale creare una connessione. Questo garantisce che non restino appese sessioni inutili.

ssh -f -L 55902:localhost:5902 remotehost sleep 60; vncviewer localhost:55902:2

Nel caso ci fossero problemi è necessario verificare i parametri di ssh ed eventualmente di OpenSSL. Per maggiori informazioni prendere visione della miniguida riportata alla fine dell’articolo.

Sessioni sicure con Windows
Quanto detto in precedenza vale anche per i client Windows dato che ssh esiste anche per cygwin.

Volendo è possibile utilizzare PuTTY creando una sessione e specificando i parametri Source port (55902) e Destination (remotehost:5902) sotto Category -> SSH -> Tunnels e cliccando su “Add“.

Di seguito un esempio che replica quanto fatto in precedenza

Per il momento è tutto. Spero come al solito di non avervi annoiato.
Alla prossima.

Per saperne di più
VNC Mini-FAQ

Leave a comment

3 Comments.

  1. Buonasera,
    stavo studiando questa stupenda guida
    Una domanda:
    Attualmente il mio VPS (Centos) è solo a carattere
    Le chiedo i comandi da shell per installare un desktop grafico ed X Window
    Lei pensa che questo ambiente grafico e VNs appesantiranno di molto il mio server Web..??
    Saluti
    Grazie :razz:

  2. il comando per installare kde è:

    yum -y groupinstall kde

    mentre per gnome:

    yum -y groupinstall gnome

    per far funzionare l’ambiente devi inoltre installare x-11 ed eventualmente altro come ad esempio firefox:

    yum -y install x11-xorg firefox

    Se pensi che l’ambiente grafico possa dare problemi di performance allora puoi pensare ad xfce, un ambiente grafico minimalista e veloce. Per installare il pacchetto puoi usare:

    yum groupinstall XFCE

    Te la dovresti cavare con circa 64 mega di spazio su disco e qualche mega di memoria ram assorbita.

    ciao.

  3. Grazie per la guida, mi ha aiutato tantissimo

    PS: Kaspersky 2011 ancora l’ ho segna come virus se ti interessa saperlo ^^

Leave a Reply


[ Ctrl + Enter ]