sabato 18 dicembre 2010

Accesso remoto a un computer, con telnet

L'accesso remoto a un computer, per la gestione di file e l'uso di particolari servizi di rete, è sempre stata una prerogativa principale dei sistemi operativi GNU/Linux. Non a caso l'elenco dei comandi e dei tool messi a disposizione dell'utente per la gestione delle connessioni di rete è assai lungo. Il comando telnet, che realizza l'interfaccia all'omonimo protocollo di rete (definito nelle RFC 854 e 855), è uno dei comandi più utilizzati. Se il comando telnet viene invocato senza alcun parametro si accede alla modalità a comando prevista dal client (nel terminale dovrebbe comparire un nuovo prompt, telnet>). L'utente può allora impartire al client i comandi necessari all'accesso dei servizi e delle risorse di rete. Alcuni di questi sono:
  • status: ritorna lo stato di telnet;
  • open host porta: apre una connessione di rete verso l'host indicato, e alla porta indicata. Se nessuna porta viene indicata, telnet ne utilizza una di default;
  • mode type: permette, a seconda dello stato di telnet, l'impostazione di una delle modalità previste dal comando (character, line etc...);
  • close: chiude la sessione telnet e ritorna alla modalità a comandi;
  • quit: chiude il client di telnet;
Per un elenco completo vi rimando alle pagine del manuale dedicate al comando (man telnet). Il secondo utilizzo di telnet permette un accesso rapido alle risorse di rete, in tal caso è sufficiente passare al comando l'indirizzo ip dell'host da contattare.
In tutti i servizi di rete è indispensabile definire ruoli ben precisi ai vari host che partecipano alla connessione. L'host che offre un servizio viene detto server, quello che ne richiede i servizi è invece detto client. A seconda dei ruoli, quindi, per realizzare l'accesso remoto a un computer, va installata la parte client e/o la parte server dell'applicazione. Nel caso di telnet l'installazione del client e del server si risolve, rispettivamente, con sudo apt-get install telnet e sudo apt-get install telnetd. Quest'ultimo corrisponde al daemon (disk and execution monitor) di telnet: il servizio di rete, su protocollo telnet, che si pone in attesa di eventuali connessioni (in altre parole il server).
La connessione a un host avviene, dunque, solo se su quest'ultimo è in esecuzione il server di telnet, telnetd. Se su un host possono essere disponibili più servizi chi si preoccupa, allora, della loro gestione? La risposta è molto semplice: inetd (internet services daemon), un daemon che controlla i servizi Internet! Tale servizio, a causa di alcune sue limitazioni, è stato recentemente sostituito da xinetd. In ogni caso, per avviare il servizio telnet cercate il daemon sulla vostra distribuzione GNU/Linux a cui è stato assegnato questo compito.
Il file di configurazione /etc/inetd.conf associa l'esecuzione di un programma non appena giunge una richiesta di connessione all'host. All'interno di questo file viene dedicata una riga per ogni servizio di rete, con la seguente sintassi: service_name sock_type proto flags user server_path args. Le righe vuote e quelle che iniziano con il carattere # sono ignorate da inetd (commentate una riga se volete quindi disabilitare un servizio di rete). In questa immagine potete vedere il file /etc/inetd.conf presente sul mio Aspire One:


Per avviare il servizio appena configurato ho installato openbsd-inetd, con il comando sudo apt-get install openbsd-inetd. Il servizio telnet (prima configurato in /etc/inetd.conf, avete controllato questo file?) è stato quindi avviato con il comando sudo /etc/init.d/openbsd-inetd start.
Con il comando netstat possiamo conoscere le connessioni in corso sul nostro computer, sia in entrata che in uscita. Il comando in realtà fornisce altre informazioni, in questo contesto è stato tuttavia utilizzato per rilevare la presenza del daemon di telnet. Digitate il comando netstat -a | grep telnet, se tutto è andato per il verso giusto ci verrà ritornata una riga (quella che fa riferimento al servizio telnet, il cui stato, come riporta l'ouput è su LISTEN, in ascolto).
Tutti i comandi fin qui visti sono stati ripetuti su due computer: un netbook (Aspire One) il cui indirizzo ip nelle prossime immagini è stato ricoperto con un rettangolo rosso e un PC desktop, il cui indirizzo ip nelle prossime immagini è stato invece ricoperto con un rettangolo blu. Sul netbook era installata Xubuntu 10.04 (Lucid Lynx), sul PC desktop Xubuntu 9.10 (Karmic Koala). Ho quindi creato sui due computer un file con lo stesso nome (NEW_FILE.txt) ma dal contenuto differente. Per realizzare una connessione remota all'host occorre passare a telnet l'indirizzo ip dell'host da contattare: telnet indirizzo_ip. Se la connessione riesce vi verrà chiesto il nome utente e la password in uso presso l'host remoto. Se il login riesce senza nessun errore possiamo allora interagire con l'host contattato, come se fossimo seduti davanti al computer remoto! Nelle immagini che seguono potete vedere la connessione dal PC verso il netbook:



In queste immagini, invece, potete vedere la connessione dal netbook al PC:



Qui, infine, la connessione remota è stata realizzata su un PC dotato di sistema operativo Windows XP, sempre verso il netbook:


Usare telnet è davvero semplice ma allo stesso tempo poco sicuro poiché la connessione creata non è protetta in alcun modo. La trasmissione dei pacchetti avviene in chiaro, le informazioni non sono cioè codificate. La password digitata in fase di login, ad esempio, è allora facilmente intercettabile! Per questo motivo è preferibile usare ssh (secure shell) al posto di telnet, oppure telnet-ssl (la versione con protocollo SSL di telnet).

1 commento:

  1. Ciao bel Blog il tuo, informazioni scritte con passione e vera voglia di condividere. Bravo!

    RispondiElimina