[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
Quando il trasferimento di file riguarda un ambito che supera l'estensione di una piccola rete locale, non è conveniente consentire l'utilizzo della condivisione del file system (NFS) o della copia remota. A questo scopo si prestano meglio altri protocolli; storicamente, il più importante è stato il protocollo FTP (File transfer protocol).
Il servizio FTP viene offerto da un demone che funge da servente e viene utilizzato da un programma cliente in grado di comunicare attraverso il protocollo FTP. Il funzionamento di un programma cliente tradizionale è paragonabile a quello di una shell specifica per la copia di file da e verso un sistema remoto.
In generale, il protocollo FTP si avvale di TCP al livello inferiore, utilizzando precisamente due connessioni TCP per ogni sessione del protocollo FTP. Ciò costituisce un problema molto importante quando si deve controllare in qualche modo il traffico relativo al protocollo FTP, pertanto occorre conoscere come si sviluppa questa connessione. Infatti si distinguono due modalità di utilizzo del protocollo FTP: attiva e passiva. In entrambi i casi, il servente FTP è inizialmente in ascolto della porta 21.
Quando il protocollo FTP viene utilizzato in modalità attiva, il programma cliente apre una porta locale, n, non privilegiata (n > 1 024), iniziando una connessione TCP con la porta 21 dell'elaboratore che contiene il servente FTP. Nell'ambito di questa connessione vengono inviati dal programma cliente dei comandi al programma servente. Per consentire lo scambio di dati, deve essere aperta una seconda connessione TCP tra i due programmi; per questo il programma cliente apre una seconda porta locale, che dovrebbe corrispondere a n+1, informando di questo il programma servente attraverso la connessione già attiva. A questo punto, il programma servente inizia la seconda connessione TCP utilizzando la propria porta 20, contattando presso l'elaboratore del programma cliente la porta n+1 (o qualunque altra porta comunicata dal programma cliente).
|
Quando il protocollo FTP viene utilizzato in modalità passiva, il programma cliente si comporta inizialmente come nel caso della modalità attiva, iniziando una connessione TCP con la porta 21 dell'elaboratore che contiene il servente FTP. Questa volta, però, chiede al programma servente di operare in modalità «passiva». Così facendo, è il programma servente che apre una porta non privilegiata e comunica al programma cliente il valore di questa, in modo che sia sempre il programma cliente a iniziare tale connessione TCP.
|
Quando in una rete si attuano delle tecniche di trasformazione degli indirizzi e delle porte, oppure si intende filtrare il traffico, il controllo del protocollo FTP diventa un problema, proprio a causa dell'apertura di questa connessione secondaria: dal lato servente è più comodo usare la modalità attiva, mentre dal lato cliente è più conveniente la modalità passiva. Purtroppo, nessuna delle due situazioni è equilibrata ed è questo il limite del protocollo FTP.
Il sistema di trasferimento di file attraverso FTP richiede una forma di autenticazione, in base alla quale il servente può dare privilegi differenti agli utenti.
Di solito, perché un utente registrato venga accettato per una sessione FTP è necessario che presso il servente abbia una parola d'ordine (non sono quindi ammessi utenti senza parole d'ordine) e una shell valida, cioè compresa nell'elenco del file /etc/shells
. Questo ultimo particolare non è trascurabile, infatti, a volte si sospende l'utilizzo di un'utenza modificando il campo della shell nel file /etc/passwd
: di solito si tratta di uno script che emette un messaggio contenente la motivazione di questa sospensione.
Oltre a queste limitazioni, si utilizza solitamente il file /etc/ftpusers
per determinare quali utenti non possono essere accettati per una sessione di FTP normale. Di solito si tratta dell'elenco degli utenti di sistema, come per esempio root, bin e mail.
Se si vuole permettere l'accesso a utenti che non sono registrati nel proprio sistema (si parla di utenti che non sono previsti nel file /etc/passwd
), è possibile abilitare l'utilizzo dell'FTP anonimo. Per questo è necessario che sia stato previsto un utente speciale nel file /etc/passwd
: ftp.(1)
|
A questo utente non viene abbinata alcuna parola d'ordine (l'asterisco non corrisponde ad alcuna parola d'ordine) e nemmeno una shell (eventualmente, se si temono accessi indesiderati in altra forma, si può indicare il programma /bin/false
come shell).
Per utilizzare un servizio FTP in modo anonimo si può accedere identificandosi come ftp, oppure anonymous. Di norma, viene richiesta ugualmente una parola d'ordine che però non viene (e non può essere) controllata: per convenzione si inserisce l'indirizzo di posta elettronica.(2)
La descrizione su come impostare un servente FTP viene ripresa in altri capitoli.
Il programma cliente tradizionale per accedere a un servizio FTP, è «Netstd ftp», (3) conosciuto normalmente solo attraverso il nome del suo eseguibile: ftp.
ftp [opzioni] [nodo] |
Quando l'eseguibile ftp viene avviato con l'indicazione del nome dell'elaboratore remoto, tenta immediatamente di effettuare il collegamento; diversamente si avvia e attende il comando con il quale questo elaboratore deve essere poi specificato. Se esiste il file ~/.netrc
, questo viene utilizzato per automatizzare l'accesso nell'elaboratore remoto. Quando ftp è in attesa di un comando da parte dell'utente, presenta l'invito seguente: ftp>.
|
Come già accennato, quando ftp è in attesa di un comando da parte dell'utente, presenta l'invito ftp>. Le tabelle che seguono elencano, per categorie, molti dei comandi che possono essere utilizzati. Se i parametri dei comandi contengono il carattere spazio, questi devono essere delimitati da una coppia di apici doppi (").
|
|
|
|
|
|
|
|
|
All'interno dei parametri dei comandi, quando viene richiesto un nome di file, può essere fornito un trattino singolo (-); in tal caso, si intende riferirsi a:
standard input se si tratta di un file che viene aperto in lettura;
standard output se si tratta di un file che viene aperto in scrittura.
Quando al posto del nome di un file viene fornita una barra verticale (|) seguita da una qualche stringa (eventualmente racchiusa tra apici doppi, nel caso contenga spazi), quella stringa viene interpretata come un comando da inviare alla shell. Ciò in modo che venga sostituito l'insieme |stringa con il risultato di quel comando inviato alla shell.
ftp può essere configurato creando o modificando il file ~/.netrc
. Si tratta di un file di testo normale in cui ogni riga corrisponde a un comando. Per separare i comandi dai loro parametri possono essere usati sia spazi che caratteri di tabulazione. Le indicazioni contenute all'interno del file sono precedute dal nome del nodo remoto a cui si riferiscono. In tal modo, quando ftp riceve l'ordine di collegamento con un certo nodo, cerca all'interno di questo file per trovare il profilo che lo riguarda. Segue la descrizione di alcune direttive.
|
L'uso di un cliente FTP può essere anche semplice, se si lasciano da parte raffinatezze non indispensabili. Seguono alcuni esempi di sessioni FTP.
daniele@roggen:~$
ftp dinkel.brot.dg
[Invio]
Si richiede la connessione FTP all'elaboratore dinkel.brot.dg
.
Connected to dinkel.brot.dg. 220 dinkel.brot.dg FTP server (Version wu-2.4.2-academ[BETA-12]) ready. Name (roggen.brot.dg:daniele): |
anonymous
[Invio]
Si utilizza una connessione anonima e per correttezza si utilizza il proprio indirizzo di posta elettronica abbreviato al posto della parola d'ordine.
331 Guest login ok, send your complete e-mail address as password. Password: |
daniele@
[Invio]
230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using ascii mode to transfer files. |
Come si vede, la modalità di trasferimento predefinita è ASCII (almeno così succede di solito). Generalmente si deve utilizzare una modalità binaria. Questa viene selezionata tra un po'; per ora si richiede la guida interna dei comandi a disposizione:
ftp>
help
[Invio]
Commands may be abbreviated. Commands are: ! debug mdir sendport site $ dir mget put size account disconnect mkdir pwd status append exit mls quit struct ascii form mode quote system bell get modtime recv sunique binary glob mput reget tenex bye hash newer rstatus tick case help nmap rhelp trace cd idle nlist rename type cdup image ntrans reset user chmod lcd open restart umask close ls prompt rmdir verbose cr macdef passive runique ? delete mdelete proxy send |
ftp>
binary
[Invio]
Come accennato, viene richiesto di passare alla modalità di trasferimento binario.
200 Type set to I. |
ftp>
prompt
[Invio]
Anche la modalità interattiva viene disattivata per evitare inutili richieste.
Interactive mode off. |
La struttura delle directory di un normale servizio FTP anonimo prevede la presenza della directory pub/
dalla quale discendono i dati accessibili all'utente sconosciuto.
Anche se dal punto di vista del cliente FTP, che accede al servizio remoto, si tratta della prima directory dopo la radice, in realtà questa radice è solo la directory iniziale del servizio FTP anonimo. Di conseguenza, è quasi impossibile che corrisponda realmente con la directory radice del file system remoto. Tutto questo serve solo a spiegare perché il comando cd /pub potrebbe non funzionare quando ci si collega a serventi configurati male. Ecco perché nell'esempio che segue non si utilizza la barra obliqua davanti a pub. |
ftp>
cd pub
[Invio]
250 CWD command successful. |
ftp>
pwd
[Invio]
257 "/pub" is current directory. |
ftp>
ls
[Invio]
200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 4 dr-xr-sr-x 3 root ftp 1024 Nov 12 21:04 . drwxr-xr-x 6 root root 1024 Sep 11 20:31 .. -rw-r--r-- 1 root ftp 37 Nov 12 21:04 esempio drwxrwsrwx 2 root ftp 1024 Nov 2 14:04 incoming 226 Transfer complete. |
Attraverso il comando ls si vede che la directory pub/
contiene solo il file esempio
e la directory incoming/
. Si decide di prelevare il file.
ftp>
get esempio
[Invio]
local: esempio remote: esempio 200 PORT command successful. 150 Opening BINARY mode data connection for esempio (37 bytes). 226 Transfer complete. 37 bytes received in 0.00155 secs (23 Kbytes/sec) |
Il file scaricato viene messo nella directory in cui si trovava l'utente quando avviava il programma ftp.
ftp>
quit
[Invio]
221 Goodbye. |
daniele@roggen:~$
ftp dinkel.brot.dg
[Invio]
Si richiede la connessione FTP all'elaboratore dinkel.brot.dg
e si danno una serie di comandi per raggiungere la directory pub/incoming
.
Connected to dinkel.brot.dg. 220 dinkel.brot.dg FTP server (Version wu-2.4.2-academ[BETA-12](1) Wed Mar 5 12:37:21 EST 1997) ready. Name (dinkel.brot.dg:daniele): |
anonymous
[Invio]
331 Guest login ok, send your complete e-mail address as password. Password: |
daniele@
[Invio]
230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using ascii mode to transfer files. |
ftp>
binary
[Invio]
200 Type set to I. |
ftp>
prompt
[Invio]
Interactive mode off. |
ftp>
cd pub/incoming
[Invio]
250 CWD command successful. |
ftp>
pwd
[Invio]
Si verifica la posizione in cui ci si trova.
257 "/pub/incoming" is current directory. |
ftp>
mput al-1*
[Invio]
Dal momento che la directory è giusta, si inizia la trasmissione di tutti i file che nella directory locale corrente iniziano per al-1.
local: al-1 remote: al-1 200 PORT command successful. 150 Opening BINARY mode data connection for al-1. 226 Transfer complete. 2611649 bytes sent in 1.38 secs (1.9e+03 Kbytes/sec) local: al-15 remote: al-15 200 PORT command successful. 150 Opening BINARY mode data connection for al-15. 226 Transfer complete. 2612414 bytes sent in 2.51 secs (1e+03 Kbytes/sec) local: al-16 remote: al-16 200 PORT command successful. 150 Opening BINARY mode data connection for al-16. 226 Transfer complete. 2612414 bytes sent in 2.16 secs (1.2e+03 Kbytes/sec) local: al-17 remote: al-17 200 PORT command successful. 150 Opening BINARY mode data connection for al-17. 226 Transfer complete. 2612420 bytes sent in 2.17 secs (1.2e+03 Kbytes/sec) local: al-18 remote: al-18 200 PORT command successful. 150 Opening BINARY mode data connection for al-18. 226 Transfer complete. 2612409 bytes sent in 2.4 secs (1.1e+03 Kbytes/sec) local: al-19 remote: al-19 200 PORT command successful. 150 Opening BINARY mode data connection for al-19. 226 Transfer complete. 2612431 bytes sent in 2.35 secs (1.1e+03 Kbytes/sec) |
ftp>
ls
[Invio]
Si controlla il risultato nell'elaboratore remoto. A volte, i servizi FTP impediscono la lettura del contenuto di questa directory.
200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 15379 drwxrwsrwx 2 root ftp 1024 Dec 11 20:40 . dr-xr-sr-x 3 root ftp 1024 Nov 12 21:04 .. -rw-rw-r-- 1 ftp ftp 2611649 Dec 11 20:40 al-1 -rw-rw-r-- 1 ftp ftp 2612414 Dec 11 20:40 al-15 -rw-rw-r-- 1 ftp ftp 2612414 Dec 11 20:40 al-16 -rw-rw-r-- 1 ftp ftp 2612420 Dec 11 20:40 al-17 -rw-rw-r-- 1 ftp ftp 2612409 Dec 11 20:40 al-18 -rw-rw-r-- 1 ftp ftp 2612431 Dec 11 20:40 al-19 226 Transfer complete. |
ftp>
quit
[Invio]
221 Goodbye. |
A fianco del cliente FTP tradizionale, di origine BSD, ne esistono altri, più o meno sofisticati. Tra questi, merita attenzione Lftp, (4) che è in grado di usare anche il protocollo IPv6, quando naturalmente anche il servente che si vuole contattare è predisposto per questo. In questo caso, il programma eseguibile è lftp:
lftp [opzioni] [nodo] |
Il suo funzionamento è molto simile a quello di Netstd ftp, soprattutto per quanto riguarda i comandi, con delle particolarità che possono essere approfondite leggendo la pagina di manuale lftp(1). Appare evidente l'aspetto dell'invito è leggermente diverso:
lftp :~>
A differenza di Netstd ftp, quando si avvia Lftp con l'indicazione di un elaboratore, ma senza il nominativo utente da utilizzare, questo tenta di accedere automaticamente in modo anonimo; pertanto, diventa importante l'indicazione dell'utenza già al momento dell'avvio dell'eseguibile. Per esempio così:
$
lftp tizio@dinkel.brot.dg
[Invio]
Come si può intendere, si tratta dell'accesso all'elaboratore dinkel.brot.dg
con il nominativo utente tizio. In questi casi, ancora prima di tentare l'accesso, Lftp chiede l'inserimento della parola d'ordine. In base all'esempio, dopo l'inserimento della parola d'ordine, l'invito dovrebbe apparire così:
lftp tizio@dinkel.brot.dg:~>
Tuttavia, Lftp tenta effettivamente di accedere all'elaboratore remoto solo quando si dà un comando. Pertanto, ci si può accorgere solo dopo se il servizio FTP risulta attivo effettivamente.
Per fare in modo che Lftp funzioni in modalità passiva, occorre intervenire necessariamente nei file di configurazione, che di solito possono essere: |
Midnight Commander (a cui corrisponde l'eseguibile mc) è un programma che offre le funzionalità di un gestore di file abbastanza completo, includendo la capacità di utilizzare il protocollo FTP. Con Midnight Commander è sufficiente utilizzare il comando cd in modo appropriato per accedere a un servizio FTP remoto:
$
cd ftp://tizio@dinkel.brot.dg
[Invio]
In questo caso si accede al servizio FTP dell'elaboratore dinkel.brot.dg
con il nominativo utente tizio. Trattandosi di un accesso che non è anonimo, prima di iniziare, Midnight Commander chiede l'inserimento della parola d'ordine.
La configurazione predefinita di Midnight Commander prevede l'uso della modalità passiva, ma si può ripristinare l'uso della modalità attiva intervenendo attraverso la voce {Virtual FS
} del menù {Options
}.
|
Midnight Commander è descritto nel capitolo 135.
Jay Rabak, Active vs. passive FTP, a definitive explanation
J. Postel, J. Reynolds, RFC 959, File transfer protocol (FTP), 1985
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
1) I numeri UID e GID dipendono dall'organizzazione del proprio sistema
2) Di solito, quando si inserisce il proprio indirizzo di posta elettronica come parola d'ordine per accedere a un servizio FTP anonimo, è sufficiente indicare la parte che precede il dominio, fino al simbolo @ incluso. Quindi, se l'indirizzo fosse daniele@dinkel.brot.dg
, basterebbe inserire daniele@.
3) Netstd ftp UCB BSD
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome ftp_introduzione_e_uso_del_servizio.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]