Il File Transfer Protocol (FTP) è un protocollo di comunicazione usato per il trasferimento di file da un server a un client su una rete informatica. Il protocollo FTP è basato su un'architettura di tipo client-server, tenendo separati il controllo e le connessioni di dati tra il client e il server.[1] Gli utenti di un FTP possono autenticarsi con un protocollo di registrazione in testo semplice, tipicamente sotto forma di nome utente e password, ma possono connettersi in maniera anonima se il server è configurato appositamente. Dal momento che FTP trasmette le credenziali in chiaro, e inoltre che non dispone di meccanismi di autenticazione del server presso il client, FTP è spesso reso sicuro con un sostrato SSL/TLS, definendo una variante del protocollo chiamata FTPS. Un altro simile protocollo sicuro è il cosiddetto SSH File Transfer Protocol (SFTP) che a dispetto del nome è un protocollo tecnologicamente diverso.
Le prime applicazioni di FTP furono programmi a riga di comando sviluppati prima dell'avvento dell'interfaccia grafica, e sono ancora distribuite con la maggior parte dei sistemi operativi Windows, Unix e Linux.[2][3] Un client FTP è stato integrato nei browser, dove si potevano navigare i server FTP col prefisso ftp://
. Tuttavia, nel 2021, il supporto a FTP fu dismesso da Google Chrome e Firefox,[4][5] in quanto è ormai superato dalle alternative più sicure SFTP e FTPS, nonostante nessun navigatore abbia implementato questi protocolli.[6][7]
FTP è uno dei primi protocolli definiti della Rete Internet e ha subito una lunga evoluzione negli anni. La prima specifica, sviluppata presso il MIT, risale al 1971[8]. L'attuale specifica fa riferimento all'RFC 959[9].
Gli obiettivi principali di FTP descritti nella sua RFC ufficiale furono:
Dove:
FTP, a differenza di altri protocolli come per esempio HTTP, utilizza due connessioni separate per gestire comandi e dati. Un server FTP generalmente rimane in ascolto sulla porta 21 TCP a cui si connette il client. La connessione da parte del client determina l'inizializzazione del canale comandi attraverso il quale client e server si scambiano comandi e risposte. Lo scambio effettivo di dati (come per esempio un file) richiede l'apertura del canale dati, che può essere di due tipi.
Sia il canale comandi, sia il canale dati sono delle connessioni TCP; FTP crea un nuovo canale dati per ogni file trasferito all'interno della sessione utente, mentre il canale comandi rimane aperto per l'intera durata della sessione utente, in altre parole il canale comandi è persistente mentre il canale dati è non persistente.
Un server FTP offre svariate funzioni che permettono al client di interagire con il suo filesystem e i file che lo popolano, tra cui:
FTP fornisce inoltre un sistema di autenticazione in chiaro (non criptato) degli accessi. Il client che si connette potrebbe dover fornire delle credenziali a seconda delle quali gli saranno assegnati determinati privilegi per poter operare sul filesystem. L'autenticazione cosiddetta "anonima" prevede che il client non specifichi nessuna password di accesso e che lo stesso abbia privilegi che sono generalmente di "sola lettura".
Lista dei comandi definiti nella RFC 959[9].
Nome | Comando | Parametri | Descrizione |
---|---|---|---|
Abort | ABOR
|
Interrompe trasferimento dati. | |
Account | ACCT
|
<account-information>
|
Informazioni account (raramente usato). |
Allocate | ALLO
|
<decimal-integer>
|
Alloca spazio sufficiente per ricevere un file (raramente usato). |
Append (with create) | APPE
|
<pathname>
|
Appende dati ad un file esistente. |
Change to parent directory | CDUP
|
Va alla parent directory. | |
Change working directory | CWD
|
<pathname>
|
Cambia directory corrente. |
Delete | DELE
|
<pathname>
|
Cancella file. |
Help | HELP
|
<command>
|
Restituisce la lista dei comandi accettati dal server. Con argomento fornisce spiegazioni riguardo al comando specificato. |
List | LIST
|
<pathname>
|
Restituisce il contenuto della directory specificata con metadati |
Transfer mode | MODE
|
<mode-type>
|
Imposta la modalità di trasferimento (S=stream , B=block , C=compressed ).
|
Make directory | MKD
|
<pathname>
|
Crea directory. |
Name list | NLST
|
<pathname>
|
Restituisce i nomi dei file contenuti nella directory specificata. |
Noop | NOOP
|
Non fa nulla (usato prevalentemente per prevenire disconnessioni per inattività prolungata). | |
Password | PASS
|
<password>
|
Specifica la password dell'utente. |
Passive | PASV
|
Inizializza connessione dati passiva. | |
Data port | PORT
|
<host-port>
|
Inizializza connessione dati attiva. |
Print working directory | PWD
|
Ritorna nome della directory corrente. | |
Logout | QUIT
|
Disconnette. Se un trasferimento è ancora in corso attende che termini prima di chiudere la sessione. | |
Reinitialize | REIN
|
Effettua il log-off dell'utente loggato. | |
Restart | REST
|
<marker>
|
Riprende il trasferimento dall'offset indicato. |
Retrieve | RETR
|
<pathname>
|
Preleva file (da server a client). |
Remove directory | RMD
|
<pathname>
|
Rimuove directory. |
Rename from | RNFR
|
<pathname>
|
Rinomina (sorgente). |
Rename to | RNTO
|
<pathname>
|
Rinomina (destinazione). |
Site parameters | SITE
|
<command>
|
Manda comando specifico per il server (non standardizzato; varia tra implementazioni). |
Structure mount | SMNT
|
<pathname>
|
Monta struttura (raramente usato). |
Status | STAT
|
<pathname>
|
Restituisce statistiche riguardo al server. Con argomento lista il contenuto di una directory utilizzando il canale comandi. |
Store | STOR
|
<pathname>
|
Spedisce un file (da client a server). |
Store unique | STOU
|
<pathname>
|
Spedisce un file (da client a server) utilizzando un nome univoco. |
File structure | STRU
|
<structure-code>
|
Imposta la struttura dati (F=file , R=record , P=page ). Praticamente inutilizzato. Il valore di default è F .
|
System | SYST
|
Restituisce il tipo di sistema operativo. | |
Representation type | TYPE
|
<type>
|
Imposta la modalità di trasferimento (A=ASCII , E=EBCDIC , I=Binary , L=Local ). Il valore di default è A . EBCDIC e Local sono raramente usati (esempio: unicamente su sistemi mainframe).
|
User Name | USER
|
<username>
|
Specifica nome utente. |
La specifica originale di FTP non prevede alcuna cifratura per i dati scambiati tra client e server. Questo comprende nomi utenti, password, comandi, codici di risposta e file trasferiti i quali possono essere "sniffati" o visionati da malintenzionati in determinate situazioni (esempio: ambienti intranet).
Il problema è comune a diversi altri protocolli utilizzati prima della diffusione di SSL quali HTTP, TELNET e SMTP. Per ovviare al problema è stata definita una nuova specifica che aggiunge al protocollo FTP originale un layer di cifratura SSL/TLS più una nuova serie di comandi e codici di risposta. Il protocollo prende il nome di FTPS ed è definito nella RFC-4217. Da non confondersi con SFTP che è comunque una valida alternativa per ovviare al problema descritto.
FileZilla, Fire Downloader, gFTP, JDownloader sono alcuni dei tanti gestori di download che permettono di trasferire i dati mediante connessione FTP.
Tuttavia nei sistemi operativi, in genere, si può effettuare l'accesso anche tramite riga di comando.
Alcuni server FTP popolari sono[10]:
Controllo di autorità | LCCN (EN) sh95000465 · GND (DE) 4268371-3 · J9U (EN, HE) 987007530226005171 |
---|