Gestire un server o un sito in hosting diventa ogni giorno più facile grazie alla progressione della tecnologia e alla diffusione di strumenti flessibili ed avanzati come pannelli di controllo tipo Plesk o CPanel, o client FTP come FileZilla o SmartFTP, software come Putty per connettersi in SSH o Telnet ed altro ancora.
In quest'articolo ci occuperemo del protocollo FTP: come è nato, a quali esigenze viene incontro, come si utilizza e soprattutto come funziona. Il suo comportamento un po' particolare causa molto spesso confusione nella configurazione rischiando cosi di creare problemi d'utilizzo agli utenti che tentano di usufruire di questi serivizi.
Negli articoli successivi, invece, prenderemo in considerazione, sempre dal lato Server del processo, alcuni software da installare sia su server Windows sia su server Linux.
Cos'è l'FTP e come funziona
L'FTP (File Transfer Protocol) è un sistema di comunicazione abbastanza datato ma estremamente semplice da implementare nei software ed è molto semplice da utilizzare per gli utenti. Questa combinazione lo rende preferibile ad altri sistemi più avanzati ma sicuramente più complessi.
La sua semplicità consiste nel fatto che la struttura del protocollo utilizza pochi semplici comandi per impostare permessi, eliminare o spostare file, uploadare o scaricare dati, mostrare il contenuto delle directory e cosi via.
Purtroppo però, come ogni strumento che si basa su tecnologie ormai datate, ci sono delle problematiche legate al sistema di funzionamento, tanto che uno dei più grossi problemi di sempre di questo protocollo è stato il sistema di trasferimento dei dati, come file o elenchi di file, tra il client ed il server. L'utilizzo di due distinti canali di comunicazione, il primo per lo scambio di comando, aperto alla connessione, ed il secondo per lo scambio dei file, aperto al volo durante le operazioni, ha portato con sé notevole scompiglio ai fruitori di questi servizi.
Le connessioni passive
Per ovviare a questo problema è stato implementato nel protocollo il supporto per le connessioni passive: connessioni avviate dal client e non dal server in modo da evitare problemi legati a firewall, router o architettura della rete dell'utente finale.
A differenza di quelle attive, le connessioni passive portano con loro notevoli problemi di sicurezza perché, quando il server apre la connessione verso il client, il software è sicuro che dall'altra parte ci sia l'utente. Utilizzando invece l'altro tipo di connessioni questa sicurezza viene a mancare: potrebbe esserci infatti qualche software malevolo pronto a intercettare la comunicazione e ad agganciarsi ad essa al posto del client FTP. Inoltre la porta di connessione utilizzata in queste transizioni è casuale e questo ha costretto molti amministratori di sistema ad aprire tutte le porte dei propri server per permettere un corretto funzionamento del servizio.
Ovviamente esistono soluzioni più o meno efficaci e utilizzando dei firewall che supportino la Stateful Inspection è possibile risolvere le problematiche di sicurezza: questi software, estremamente avanzati, sono in grado di carpire il contenuto di una sequenza di pacchetti e di agire di conseguenza! Nel caso dell'FTP questo si traduce in un'apertura al volo della porta necessaria per eseguire la connessione passiva richiesta dal client o per bloccare una connessione passiva proveniente da un'ip diverso da quello originario della connessione principale.
I client FTP
Poiché il protocollo FTP è basato su un'architettura Client/Server c'è bisogno di un software client per gestire le funzionalità esposte dal server. Ci sono tantissimi software di questo genere: a pagamento, gratuiti o shareware. Pochi sono realmente ben fatti e funzionanti. Ne troverete molti nella categoria FTP della sezione Download di HTML.it, sia per Windows sia per Linux.
Ovviamente è anche possibile connettersi al server con software come Putty o Telnet e inviare i comandi manualmente: ciò risulta estremamente scomodo per l'upload/download di files ma è utile per effettuare verifiche su un eventuale malfunzionamento causato dalla configurazione errata, da un bug del server o da un problema legato al client FTP.
Il protocollo FTP
Come detto prima è possibile, con semplici software come Putty o Telnet, connettersi al server FTP e inviare direttamente i comandi che si vogliono. Ovviamente è anche possibile scaricare ed uploadare file utilizzando software come Netcat o simili da affiancare a quelli citati precedentemente.
Qui di seguito sono elencati una serie di comandi implementati dal protocollo FTP:
- USER, serve ad inviare il nome utente per l'autenticazione;
- PASS, utilizzato per completare la fase di autenticazione inviando la password;
- PASV, necessario per impostare la connessione passiva acquisendo quindi la porta da utilizzare per lo scambio di files e liste di files;
- PWD, per acquisire la directory corrente;
- CWD, per spostarsi tra le directory;
- TYPE, permette di impostare il tipo di codifica usato per lo scambio dei files;
- RNFR e RNTO, indicano rispettivamente Rinomina Da e Rinomina A permettendo di rinominare un file o una directory;
- MKD, crea una cartella;
- RMD, elimina una cartella esistente;
- DELE, permette l'eliminazione di files;
- HELP, restituisce l'help dei comandi;
- SYST, ritorna il sistema operativo utilizzato dal server FTP;
- NOOP, comando per bloccare un'eventuale chisura di connessione dovuta al timeout di trasferimento dei file;
- LIST, per elencare le directory ed i file presenti nella cartella corrente sul canale dati;
- STAT, che sostituisce LIST permettendo di acquisire l'elenco delle cartelle sul canale dei comandi;
- STOR, che indica al server FTP di acquisire il file che verrà sul canale dati;
- RETR, per scaricare il file indicato tramite il canale dati;
- QUIT, esegue la disconnessione.
I comandi qui sopra elencati non sono tutti ma sono quelli più comunemente utilizzati per eseguire le operazioni sui server FTP. Per maggiori informazioni sui comandi è possibile visitare la Wikipedia sull'argomento FTP.
Se ad esempio volessimo acquisire l'elenco delle cartelle presenti nella directory radice di un'account di un server FTP senza utilizzare il canale di scambio dati dovremmo eseguire una connessione al server tramite Putty o Telnet sulla porta 21 eseguendo una conversazione di questo tipo (in rosso i comandi eseguiti dalla nostra connessione):
220 ProFTPD 1.2.9 Server (ProFTPD) [remote-ftp-server.tld]
USER nome-utente
331 Password required for nome-utente.
PASS password-corretta
230 User nome-utente logged in.
TYPE A
200 Type set to A
SYST
215 UNIX Type: L8
PWD
257 "/" is current directory.
STAT /
211-status of /:
drwxr-xr-x 3 nome-utente gruppo-utente 4096 Jun 24 16:49 .
drwxr-xr-x 3 nome-utente gruppo-utente 4096 Jun 24 16:49 ..
-rw------- 1 nome-utente gruppo-utente 249 Jun 24 16:50 .bash_history
-rwxr-xr-x 1 nome-utente gruppo-utente 40244 Jun 24 16:49 libproc.so.2.0.17
-rwxr-xr-x 1 nome-utente gruppo-utente 46698 Jun 24 16:49 libproc.so.2.0.7
drwxr-xr-x 13 nome-utente gruppo-utente 4096 Jun 24 15:14 website
211 End of Status
NOOP
200 NOOP command successful
QUIT
221 Goodbye.
Le righe dove figurano i comandi sopra elencati sono quelli che sono stati inviati tramite il telnet, e quindi sono quelli da eseguire per ottenere una risposta valida, mentre gli altri sono le risposte dei comandi inviati al server FTP. Il codice numerico all'inizio delle risposte sta ad indicare il successo o il fallimento dell'operazione richiesta. Dal codice si può anche capire il motivo del fallimento dato che ogni numero corrisponde ad uno specifico errore.
Com'è possibile vedere, dopo che sono stati inviati i comandi USER
e PASS
, il server ha autorizzato l'esecuzione di tutte le altre operazioni.
Nel caso di un login errato la risposta sarebbe di tipo diverso:
220 ProFTPD 1.2.9 Server (ProFTPD) [remote-ftp-server.tld]
USER nome-utente
331 Password required for nome-utente.
PASS password-errata
530 Login incorrect.
QUIT
221 Goodbye.
Il codice di risposta che è stato inviato dopo il comando PASS
è 530 e non 230 che significa "login fallito" invece di "login eseguito con successo".
Se si volesse testare il corretto funzionamento delle connessioni passive sul server FTP, oltre ad utilizzare un client accedendo ad una directory, è possibile, manualmente, eseguire una loro enumerazione richiedendo la risposta sul canale file, ovvero utilizzando il comando LIST
:
220 ProFTPD 1.2.9 Server (ProFTPD) [remote-ftp-server.tld]
USER nome-utente
331 Password required for nome-utente.
PASS password-corretta
230 User nome-utente logged in.
TYPE I
200 Type set to I
MODE S
200 Mode set to S.
SYST
215 UNIX Type: L8
PWD
257 "/" is current directory.
PASV
227 Entering Passive Mode (111,222,333,444,171,76).
LIST
Una volta inviato il comando LIST
è necessario avviare la connessione sulla porta indicata nella risposta al comando PASV
presente nelle ultime due sequenze di numeri, ovvero 171 e 76. La porta è inviata in "modo scomposto" per rendere il protocollo indipendente dall'architettura Big Indian o Little Indian, di conseguenza è necessario fare una moltiplicazione ed una somma, utilizzando la calcolatrice, per ottenere la porta di connessione.
L'operazione da eseguire è di questo tipo: PrimoNumero * 256 + SecondoNumero
Ovvero: 171 * 256 + 76 = 43852
Aprendo quindi il software utilizzato per eseguire la connessione al server FTP ed impostando la porta su quella calcolata subito prima (43852) avremo in risposta il seguente contenuto:
.....
-rwxr-xr-x 1 nome-utente gruppo-utente 40244 Jun 24 16:49 libproc.so.2.0.17
-rwxr-xr-x 1 nome-utente gruppo-utente 46698 Jun 24 16:49 libproc.so.2.0.7
drwxr-xr-x 13 nome-utente gruppo-utente 4096 Jun 24 15:14 website
A questo punto il server continuera la comunicazione sul canale dati notificando il completamento ed il successo dell'operazione
.....
150 Opening ASCII mode data connection for file list
226 Transfer complete.
QUIT
221 Goodbye.
Basandosi sullo stesso principio è possibile scambiare files, ma ovviamente in questo caso è necessario utilizzare software come Netcat che su linux è presente di default mentre è possibile scaricare la versione per Windows dal sito Vulnwatch.
Conclusioni
Quest'articolo non vuol essere una guida completa su come sfruttare a pieno il protocollo FTP, bensì è stato realizzato per coloro che hanno avuto poca esperienza, se non niente, con questo sistema di scambio dati permettendogli quindi di approfondire un po l'argomento. Per maggiori informazioni sul protocollo è possibile leggere l'RFC relativo, scritto in inglese.