[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 310.   FTP: introduzione e uso del servizio

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.

310.1   Caratteristiche elementari del protocollo

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).

Figura 310.1. Fasi di una sessione FTP attiva.

fasi di una modalità attiva del protocollo FTP

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.

Figura 310.2. Fasi di una sessione FTP passiva.

fasi di una modalità passiva del protocollo FTP

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.

Come si può intuire, è il programma cliente che chiede alla controparte di utilizzare una o l'altra modalità. Esistono programmi clienti che in modo predefinito utilizzano la modalità attiva, mentre altri che fanno il contrario; di solito i programmi più recenti sono impostati in modo da usare la modalità passiva se non si specifica diversamente con la configurazione.

310.2   Identificazione e privilegi

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)

...
ftp:*:14:50:FTP User:/home/ftp:
...

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)

Generalmente, un servente FTP che consente l'accesso anonimo, fa sì che tali utenti non identificati possano accedere solo alla directory personale dell'utente fittizio ftp, senza poter esplorare il resto del file system.

La descrizione su come impostare un servente FTP viene ripresa in altri capitoli.

310.3   Facilitare le ricerche

Il modo più semplice di fornire un indice del contenuto del proprio servizio FTP anonimo è quello di posizionare nella sua directory di partenza un cosiddetto file ls-lR. Si tratta in pratica del risultato dell'esecuzione del comando ls -lR, che ha quindi suggerito il nome del file indice in questione. Generalmente si comprime questo file con gzip, per cui si usa il nome ls-lR.gz.

Il comando per generare questo file deve essere eseguito quando la directory corrente è quella di partenza del servizio; in pratica, agendo nel modo seguente:

cd ~ftp[Invio]

ls -lR | gzip -9 > ls-lR.gz[Invio]

Se si decide di creare regolarmente questo file attraverso il sistema Cron, si può fare come nell'esempio seguente che rappresenta un comando di Cron, nel file crontab dell'utente root,

16 6 * * *      cd /home/ftp; ls -lR | gzip -9 > ls-lR.gz

oppure si può modificare in modo da usarlo nel file /etc/crontab (quello di sistema).

16 6 * * *      root    cd /home/ftp; ls -lR | gzip -9 > ls-lR.gz

In entrambi gli esempi, l'operazione è programmata per le ore 06:16 di ogni mattina.

Quando si genera il file ls-lR.gz, si possono ottenere degli errori di vario tipo che vengono emessi attraverso lo standard error. Questi errori possono essere generati dalla mancanza dei permessi necessari ad attraversare una directory durante la scansione, oppure quando i collegamenti simbolici non raggiungono alcuna destinazione. Per evitare noie, si può correggere il comando nel modo seguente:

ls -lR 2> /dev/null | gzip -9 > ls-lR.gz

Tabella 310.6. Indice di un servizio FTP.

Comando Descrizione
ls -lR > ls-lR
Crea un file ls-lR.
ls -lR | gzip -9 > ls-lR.gz
Crea un file ls-lR.gz.
cd ~ftp ; ls -lR | gzip -9 > ls-lR.gz
Si sposta nella directory iniziale dell'FTP anonimo e quindi crea il file ls-lR.gz.

310.4   Cliente FTP tradizionale

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>.

Tabella 310.7. Alcune opzioni della riga di comando.

Opzione Significato mnemonico Descrizione
-v
verbose Vengono visualizzati tutti i messaggi.
-n
no auto Disabilita l'accesso automatico.
-i
interactive Disattiva la richiesta interattiva durante i trasferimenti multipli di file.
-d
debugging Attiva la modalità diagnostica.
-p
passive Utilizza la modalità di funzionamento passiva.
-g
globbing Disabilita l'uso dei caratteri jolly per l'indicazione di gruppi di file.

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 (").

Shell.

Comando Descrizione
! [comando [argomenti]]
Avvia una shell sull'elaboratore locale, oppure esegue il comando indicato con gli argomenti che gli vengono forniti.

Macro.

Comando Descrizione
$ macro [argomenti]
Esegue la macro indicata che si riferisce a un nome di una macro creata con il comando macdef. Gli argomenti vengono passati alla macro già espansi.
macdef macro
Definisce una macro (macroistruzione) attribuendole un nome. La macro può contenere più righe purché consecutive: la prima riga vuota viene interpretata come la fine dell'inserimento. Possono essere inserite un massimo di 16 macro che occupano uno spazio complessivo di 4 096 caratteri. Le macro restano definite fino a che non viene immesso un comando close che conclude la connessione con un sistema remoto determinato.
La macro viene interpretata nel modo seguente.
Il simbolo $ seguito da una o più cifre numeriche ($n) viene interpretato come variabile contenente l'n-esimo argomento (della macro nel momento in cui viene richiamata).
Il simbolo $ seguito dalla lettera i indica che l'esecuzione della macro deve essere ripetuta tante volte quanti sono i parametri forniti alla macro quando viene richiamata. Ogni volta, $i rappresenta il parametro per il quale si sta ripetendo l'esecuzione della macro.
Il simbolo \ seguito da un carattere (\x) indica il carattere stesso. Per esempio è necessario usare questo simbolo per poter indicare il dollaro senza volersi riferire a uno dei parametri.

Identificazione.

Comando Descrizione
account [parola_d'ordine]
Fornisce a ftp l'informazione sulla parola d'ordine di account che a volte viene richiesta da alcuni sistemi per potervi accedere. Se l'argomento non viene fornito, viene richiesto all'utente di inserire la parola d'ordine.
user utente [parola_d'ordine] \
  \[account]
Definisce l'identità dell'utente da utilizzare per l'accesso nel sistema remoto. Se la parola d'ordine e l'account non vengono forniti, ma sono richiesti nel sistema con il quale ci si intende connettere, questi devono essere inseriti al momento del collegamento.

Trasferimento dati.

Comando Descrizione
append file_locale [file_remoto]
Aggiunge, in coda, il contenuto del file locale a quello del sistema remoto. Se non viene fornito il nome del file di destinazione, si intende lo stesso nome di quello di origine.
get file_remoto [file_locale]
recv file_remoto [file_locale]
get e recv sono sinonimi. Riceve il file remoto indicato, eventualmente rinominandolo come indicato.
mget file_remoti
Esegue un get multiplo, cioè su tutti i file che si ottengono dall'espansione del nome indicato utilizzando i caratteri jolly.
newer file_remoto
Esegue un get del file remoto, solo se risulta essere più recente di quello presente nel sistema locale.
put file_locale [file_remoto]
send file_locale [file_remoto]
put e send sono sinonimi. Copia il file specificato nel sistema remoto eventualmente rinominandolo come indicato.
mput file_locali
Espande il nome indicato se contiene dei caratteri jolly ed esegue un put per tutti questi file, trasmettendoli in sostanza nel sistema remoto.
reget file_remoto [file_locale]
Permette di riprendere il get di un file remoto quando l'operazione precedente è stata interrotta involontariamente. L'operazione non è sicura e si basa solo sul calcolo della dimensione del file locale per determinare la parte mancante ancora da trasferire.
[Ctrl c] L'operazione di trasferimento può essere interrotta utilizzando la combinazione [Ctrl c].

Modalità di trasferimento dei dati.

Comando Descrizione
passive
Richiede di utilizzare la modalità «passiva» per il protocollo FTP.
ascii
Imposta il tipo di trasferimento in modalità ASCII. Questa è la modalità normale e comunque non è adatta al trasferimento di file i cui byte contengono informazioni anche dopo il settimo bit. Questo tipo di modalità di trasferimento di dati può essere conveniente (ma non necessaria) solo per i file di testo puro che non contengono caratteri speciali di alcun tipo.
binary
Imposta il tipo di trasferimento in modalità binaria. Questa modalità è adatta al trasferimento di qualunque tipo i file.
cr
Attiva o disattiva la trasformazione della sequenza <CR><LF> in <LF> per i trasferimenti ASCII verso il sistema locale. In pratica, converte i file di testo scritti in stile Dos in file corrispondenti in stile Unix. Quando è attivata la modalità, viene eseguita la conversione.
mode [modalità_di_trasferimento]
Configura la modalità di trasferimento. Il valore predefinito è stream.
runique
Attiva o disattiva la modalità di unicità dei nomi in ricezione. Quando la modalità è attiva, se durante le operazioni di get o mget, si incontrano nel sistema locale dei file con gli stessi nomi, l'operazione di trasferimento avviene aggiungendo al nome il suffisso .1, oppure .2, fino a un massimo di .99. La condizione predefinita di questa modalità è di disattivazione.
sunique
Attiva o disattiva la modalità di unicità dei nomi in trasmissione. Quando la modalità è attiva, se durante le operazioni di put o mput, si incontrano nel sistema remoto dei file con gli stessi nomi, l'operazione di trasferimento avviene aggiungendo al nome il suffisso .1, oppure .2, fino a un massimo di .99. La condizione predefinita di questa modalità è di disattivazione.
struct [struttura]
Stabilisce il tipo di struttura da utilizzare per il trasferimento dei dati. Il valore predefinito è stream.
tenex
Configura il tipo di trasferimento dati in modo da essere compatibile con il sistema usato da un elaboratore remoto che utilizza questo tipo di protocollo.
type [tipo_di_trasferimento]
Attiva o visualizza il tipo di trasferimento dei dati. Il valore predefinito è ascii. I tipi a disposizione sono: ascii, ebcdic, image (trasferimento binario), local byte size.

Informazioni.

Comando Descrizione
bell
Attiva o disattiva la segnalazione acustica alla fine di ogni operazione di trasferimento di file.
debug [livello_diagnostico]
Attiva o disattiva la modalità diagnostica. Quando questa è attiva, vengono visualizzati i comandi inviati al sistema remoto, evidenziati dal simbolo -->.
hash
Abilita o disabilita la visualizzazione della progressione delle operazioni di trasferimento utilizzando i simboli # che rappresentano un blocco di 1 024 byte.
prompt
Attiva o disattiva la modalità di conferma. Se è attiva, durante le operazioni di trasferimento di gruppi di file, viene richiesta la conferma per ogni file.
trace
Attiva o disattiva il tracciamento dei pacchetti. Normalmente è disattivato.
verbose
Attiva o disattiva la modalità con la quale si visualizzano tutti i messaggi legati alla comunicazione con il sistema remoto.

Connessione e chiusura.

Comando Descrizione
bye
quit
bye e quit sono sinonimi. Termina il collegamento e termina l'attività di ftp.
close
disconnect
Termina la connessione senza uscire dal programma.
open nodo [porta]
Apre una connessione con l'elaboratore remoto indicato ed eventualmente anche specificando la porta di comunicazione. Se la modalità di accesso automatico è attiva, ftp tenta anche di effettuare l'accesso nel sistema remoto.

Conversione dei nomi e filtri.

Comando Descrizione
case
Attiva o disattiva la modalità di trasformazione per cui i nomi dei file trasferiti dal sistema remoto attraverso il comando mget vengono copiati nel sistema locale utilizzando solo lettere minuscole.
form formato
Configura il filtro di trasferimento form in base al formato attribuito. Il valore predefinito è file.
glob
Attiva o disattiva l'espansione dei nomi di file contenenti caratteri jolly per l'uso con mdelete, mget e mput. L'utilità di disattivare l'espansione dei nomi sta nella possibilità di identificare (e trasferire) file con nomi strani che utilizzano simboli speciali che altrimenti sarebbero intesi come jolly (o metacaratteri). L'espansione dei nomi viene fatta in maniera differente a seconda che si riferisca a dati contenuti nell'elaboratore locale, oppure nell'elaboratore remoto. Per le operazioni con mput che si riferiscono a dati locali da trasmettere, si utilizza il modello della shell C.
Nel caso di mget e mdelete che si riferiscono all'acquisizione e alla cancellazione di dati remoti, valgono le regole stabilite dal servente FTP in funzione nell'elaboratore remoto. Per verificare il comportamento dell'espansione dei nomi in un elaboratore remoto è possibile utilizzare il comando mls in questo modo: mls file_remoti -.
nmap [modello_in_ingresso \
  \modello_in_uscita]
Definisce una regola per la trasformazione dei nomi dei file per il collegamento con il sistema remoto. Se non viene fornito alcun parametro, la regola di trasformazione viene annullata.
ntrans [caratteri_in_ingresso \
  \caratteri_in_uscita]
Definisce una trasformazione dei caratteri in ingresso con i rispettivi caratteri in uscita per la trasformazione dei nomi dei file quando ci sono incompatibilità con i nomi utilizzati nel sistema remoto. Se non viene fornito alcun parametro, la regola di trasformazione viene annullata.
umask [maschera]
Definisce una nuova maschera dei permessi nel sistema remoto. Se non viene specificato l'argomento, si ottiene la visualizzazione del valore corrente di questa maschera.

Operazioni sul sistema remoto.

Comando Descrizione
cd [directory_remota]
Cambia la directory corrente nel sistema remoto.
cdup
Cambia la directory corrente nel sistema remoto, portandosi sul livello superiore.
chmod permessi file_remoto
Cambia i permessi sul file remoto.
delete file_remoto
Cancella il file indicato nel sistema remoto.
dir [directory_remota] \
  \[file_locale]
ls [directory_remota] \
  \[file_locale]
nlist [directory_remota] \
  \[file_locale]
dir, ls, nlist sono sinonimi. Elencano il contenuto della directory remota specificata, oppure di quella attuale se non viene indicata. L'elenco viene emesso attraverso lo standard output, quando non viene specificato il file locale all'interno del quale si vuole immettere questo elenco. L'aspetto dell'elenco dipende dal sistema con il quale si sta comunicando. Di solito è molto simile a quello di un ls -l.
mdelete [file_remoti]
Cancella i file remoti espandendo i caratteri jolly prima di procedere.
mdir file_remoti file_locale
mls file_remoti file_locale
mdir e mls sono sinonimi. Elencano i file remoti espandendo i caratteri jolly e ne immettono il risultato nel file locale indicato. Se si vuole visualizzare l'elenco, invece di generare un file, si può utilizzare un trattino singolo (-) al posto del nome di questo file. Questo comando è particolarmente importante per verificare la trasformazione dei simboli usati come caratteri jolly sui file del sistema remoto prima di procedere con operazioni più delicate come il prelievo multiplo (mget) o la cancellazione multipla (mdelete).
mkdir directory_remota
Crea una directory nel sistema remoto.
modtime file_remoto
Visualizza la data e l'ora dell'ultima modifica del file indicato nel sistema remoto.
pwd
Visualizza il nome della directory corrente del sistema remoto.
quote argomenti
Trasmette gli argomenti indicati al sistema remoto esattamente così come vengono scritti.
remotestatus [file_remoto]
Se il comando viene dato senza l'argomento, si ottiene lo stato del sistema remoto. Se viene fornito il nome di file remoto, si ottiene lo stato di quel file nel sistema remoto.
rename origine destinazione
Permette di cambiare il nome di un file nel sistema remoto.
rmdir directory_remota
Cancella una directory nel sistema remoto.
size file_remoto
Restituisce la dimensione del file remoto.
status
Visualizza lo stato attuale del sistema remoto.
system
Visualizza il tipo di sistema operativo in funzione nel sistema remoto.

Operazioni sul sistema locale.

Comando Descrizione
lcd [directory]
Cambia la directory corrente all'interno dell'elaboratore locale. Se non viene specificato il percorso si intende la directory personale dell'utente.

Guida dei comandi.

Comando Descrizione
help [comando]
? [comando]
help e ? sono sinonimi. Visualizza una breve guida dei comandi.
remotehelp [comando]
Permette di richiedere la guida dei comandi al sistema remoto.

Proxy.

Comando Descrizione
proxy comando_ftp
Invia il comando indicato a un altro elaboratore remoto. Questo è un modo per potersi connettere contemporaneamente a due sistemi remoti e di conseguenza di trasferire file tra i due. Per poter iniziare il collegamento con un elaboratore remoto secondario, il primo comando è proxy open. Non tutti i comandi sono disponibili anche per una connessione secondaria; per visualizzarne l'elenco, basta dare il comando proxy ?. Quando viene aperta la connessione con un elaboratore secondario, i comandi proxy riguardano il trasferimento di file tra l'elaboratore remoto normale e quello secondario, trattando questo ultimo come se fosse quello locale.

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:

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.

310.4.1   Configurazione

L'eseguibile 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.

Direttiva Descrizione
machine nome
Il nome del nodo a cui fanno riferimento le direttive successive.
default
Rappresenta la configurazione predefinita per tutti i nodi remoti non previsti all'interno di questo file.
login utente
Definisce il nominativo da utilizzare per il collegamento.
password stringa_parola_d'ordine
Definisce la parola d'ordine per l'accesso al sistema remoto.
account stringa_parola_d'ordine
Definisce una parola d'ordine ulteriore per i sistemi remoti che lo richiedono.
macdef macro
Definisce una macro (macroistruzione) attribuendole un nome. La macro può contenere più righe purché consecutive: la prima riga vuota viene interpretata come la fine dell'inserimento. Possono essere inserite un massimo di 16 macro che occupano uno spazio complessivo di 4 096 caratteri. Le macro restano definite fino a che non viene immesso un comando close che conclude la connessione con un sistema remoto determinato.
La macro viene interpretata nel modo seguente.
Il simbolo $ seguito da una o più cifre numeriche ($n) viene interpretato come variabile contenente l'n-esimo argomento (della macro nel momento in cui viene richiamata).
Il simbolo $ seguito dalla lettera i indica che l'esecuzione della macro deve essere ripetuta tante volte quanti sono i parametri forniti alla macro quando viene richiamata. Ogni volta, $i rappresenta il parametro per il quale si sta ripetendo l'esecuzione della macro.
Il simbolo \ seguito da un carattere (\x) indica il carattere stesso. Per esempio è necessario usare questo simbolo per poter indicare il dollaro senza volersi riferire a uno dei parametri.
Se viene definita una macro con il nome init, questa viene eseguita automaticamente come ultima operazione dell'accesso automatico.

310.5   Esempi

L'uso di un cliente FTP può essere anche semplice, se si lasciano da parte raffinatezze non indispensabili. Seguono alcuni esempi di sessioni FTP.

310.5.1   Prelievo di file

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.

310.5.2   Invio di dati

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.

310.6   Lftp

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: /etc/lftp.conf e ~/.lftprc. Si veda comunque la pagina di manuale lftp(1) per maggiori dettagli.

310.7   Midnight Commander

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}.

Figura 310.42. La maschera di modifica della configurazione relativa alle funzionalità FTP di Midnight Commander. Si può osservare che in questo caso è previsto il funzionamento in modalità passiva.

.----------- Virtual File System Setting ------------.
|                                                    |
|  Timeout for freeing VFSs:         [60      ] sec  |
|                                                    |
|  ftp anonymous password:                           |
|  [tizio@                                        ]  |
|  ftpfs directory cache timeout:    [1800    ] sec  |
|  [ ] Always use ftp proxy                          |
|  [gate                                          ]  |
|  [x] Use ~/.netrc                                  |
|  [x] Use passive mode                              |
|                                                    |
|          [< OK >]          [ Cancel ]              |
`----------------------------------------------------'

Midnight Commander è descritto nel capitolo 197.

310.8   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 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

4) Lftp   GNU GPL


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] [indice analitico]

Valid ISO-HTML!

CSS validator!