[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

91. FTP

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 filesystem (NFS) o della copia remota. A questo scopo si presta meglio il protocollo FTP (File Transfer Protocol).

Il servizio FTP viene offerto da un demone che funge da server e viene utilizzato da un programma client in grado di comunicare attraverso il protocollo FTP. Il funzionamento di un programma client tradizionale è paragonabile a quello di una shell specifica per la copia di file da e verso un sistema remoto.

In questo capitolo si mostra in modo sommario l'organizzazione del server FTP della Washington University (WU-FTP), e l'utilizzo di alcuni client. Per un approfondimento della configurazione del server, si deve leggere il capitolo 165.

91.1 Identificazione e privilegi

Il sistema di trasferimento di file attraverso FTP richiede una forma di identificazione. Prima di iniziare una sessione FTP è necessario passare per una fase di autenticazione, e in base a questo si potrà accedere ai file del sistema remoto.

Perché un utente registrato venga accettato per una sessione FTP è necessario che abbia una password (non sono quindi ammessi utenti senza password) e una shell valida, cioè compresa nell'elenco del file /etc/shells. Quest'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 il file /etc/ftpusers per determinare quali utenti non possano essere accettati per una sessione di FTP normale. Di solito si tratta dell'elenco degli utenti di sistema: root bin mail,...

91.1.1 FTP anonimo

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.

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

A questo utente non deve essere abbinata alcuna password (l'asterisco non corrisponde ad alcuna password) e non deve avere alcuna shell (eventualmente, se si temono accessi indesiderati in altra forma, si può indicare il programma /bin/false come shell).

Per utilizzare un FTP anonimo si può accedere identificandosi come ftp, oppure anonymous. Di norma, viene richiesta ugualmente una password che però non viene (e non può essere) controllata: per convenzione si inserisce l'indirizzo di posta elettronica. *1*

91.2 Dal lato del server

Come già accennato, per poter offrire un servizio FTP, occorre che l'elaboratore disponga del demone ftpd. Oltre al demone occorre predisporre la directory home del servizio FTP anonimo, sempre ammesso che si intenda offrire anche quest'ultimo tipo di servizio.

91.2.1 # ftpd

in.ftpd [<opzioni>]

Si tratta del demone per la gestione degli accessi FTP, cioè del programma che si occupa di rendere disponibile l'accesso all'elaboratore per il File Transfer Protocol. È gestito dal supervisore inetd e filtrato da tcpd. ftpd interpreta il globbing, cioè i simboli per i riferimenti a gruppi di file, secondo lo standard della shell C, utilizzando quindi i simboli *, ?, &, [, ], { e }.

Nell'esempio seguente viene mostrata la riga di /etc/inetd.conf in cui si dichiara il suo possibile utilizzo.

ftp	stream	tcp	nowait	root	/usr/sbin/tcpd	in.ftpd -l -a

Opzioni

-d | -v

Vengono aggiunte informazioni diagnostiche all'interno del registro di sistema.

-l

Ogni sessione FTP viene annotata all'interno del registro di sistema.

-tn

Permette di specificare la durata espressa in secondi (n) del timeout, cioè del tempo di inattività oltre il quale la sessione FTP viene conclusa automaticamente. Questo parametro è negoziabile anche da parte del client. Il valore predefinito è di 15 minuti (900 secondi).

-Tn

Permette di specificare la durata espressa in secondi (n) del timeout massimo. In questo modo, un client non può negoziare un tempo di timeout superiore.

-a

Stabilisce l'uso da parte di ftpd della configurazione contenuta all'interno del file /etc/ftpaccess.

-A

Disabilita l'uso da parte di ftpd della configurazione contenuta all'interno del file /etc/ftpaccess. Questa è la modalità predefinita.

-L

Ogni comando inviato da parte degli utenti FTP viene annotato all'interno del registro di sistema.

-i

Vengono registrate le operazioni di invio di file da parte dei client FTP all'interno di /var/log/xferlog.

-o

Vengono registrate le operazioni di prelievo di file da parte dei client FTP all'interno di /var/log/xferlog.

-u<umask>

Definisce un valore particolare della maschera dei permessi.

91.2.2 /etc/ftpaccess

È il file di configurazione di ftpd per la gestione degli accessi da parte di utenti FTP. Viene utilizzato dal demone ftpd solo se questo è stato avviato con l'opzione -a. Segue un esempio del contenuto di questo file.

class   all   real,guest,anonymous  *

email root@localhost

loginfails 5

readme  README*    login
readme  README*    cwd=*

message /welcome.msg            login
message .message                cwd=*

compress        yes             all
tar             yes             all
chmod		no		guest,anonymous
delete		no		guest,anonymous
overwrite	no		guest,anonymous
rename		no		guest,anonymous

log transfers anonymous,real inbound,outbound

shutdown /etc/shutmsg

passwd-check rfc822 warn

La sezione 165.3 descrive meglio la configurazione con questo file. In alternativa si può anche leggere ftpaccess(5).

91.2.3 /etc/ftpconversions

Viene usato da ftpd per determinare le modalità di conversione dei file compressi. Segue un esempio di questo file.

 :.Z:  :  :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
 :   : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
 :.gz: :  :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
 :   : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
 :   : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
 :   : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
 :   : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

In pratica, a seconda di come viene identificato un file durante una sessione FTP, con l'aggiunta o l'eliminazione di un'estensione, si indica implicitamente una conversione di questo. La tabella 91.1 dovrebbe chiarire il meccanismo.

Nome reale Nome specificato Azione compiuta prima della trasmissione del file
<radice>.Z <radice> Viene trasmesso dopo essere stato decompresso con uncompress.
<radice> <radice>.Z Viene trasmesso dopo essere stato compresso con compress.
<radice>.gz <radice> Viene trasmesso dopo essere stato decompresso con gunzip.
<radice> <radice>.gz Viene trasmesso dopo essere stato compresso con gzip.
<radice> <radice>.tar Viene trasmesso dopo essere stato archiviato con tar.
<radice> <radice>.tar.Z Viene archiviato e compresso con tar e compress.
<radice> <radice>.tar.gz Viene archiviato e compresso con tar e gzip.

Tabella 91.1: FTP -- conversione automatica degli archivi in base alle estensioni utilizzate.

Di solito, questa tecnica di trasformazione automatica non viene utilizzata: i nomi dei file vengono indicati esattamente come sono nella realtà e nessuna conversione ha luogo.

91.2.4 /etc/ftpusers

Il file /etc/ftpusers viene utilizzato per impedire l'accesso agli utenti indicati al suo interno. L'esempio seguente chiarisce il senso di questo file.

root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

Come si vede, si vuole evitare che si possa accedere a un servizio FTP normale (non anonimo) utilizzando i nomi degli utenti di sistema, root incluso. Ovviamente, si possono aggiungere altri nomi di utenti registrati in questo elenco, impedendo così il loro utilizzo del servizio FTP normale (se il servizio FTP anonimo è attivato, continuano a poterlo utilizzare).

91.2.5 /etc/ftphosts

Il file /etc/ftphosts viene utilizzato per filtrare l'accesso da parte di determinati utenti da determinati nodi.

deny <utente> <host>...

L'utente indicato non può accedere dai nodi elencati. Questi nodi possono essere specificati in modo completo o in modo parziale, intendendo così un intero gruppo di nodi.

91.2.6 Home dell'FTP anonimo

Una volta effettuato il collegamento, l'utente anonimo (ftp o anonymous) viene posizionato nella directory home, in base a quanto indicato nel file /etc/passwd nella voce corrispondente dell'utente ftp. Di solito si tratta della directory /home/ftp/.

È bene precisare che l'utente anonimo, dopo la connessione, trova davanti a sé solo la gerarchia che si articola a partire da ~ftp/, dal momento che il server FTP esegue la funzione chroot(). È questo il motivo per cui è necessario che da quel punto siano disponibili alcuni programmi di utilità nella directory ~ftp/bin/, assieme ad altri elementi essenziali di un filesystem Unix.

Generalmente, le varie distribuzioni GNU/Linux organizzano già questa directory in modo ragionevolmente corretto. Segue un esempio di struttura di ~ftp/ che può essere utilizzato in mancanza d'altro. È da tenere presente che le soluzioni legate all'organizzazione e alla sicurezza possono essere molte altre.

È opportuno che nessuna directory sia modificabile, a parte il caso di incoming/, descritta più avanti.

Segue un esempio del contenuto delle directory appena esaminate.

bin:
total 534
---x--x--x   1 root     root        14940 Mar  3  1997 compress
---x--x--x   1 root     root       292160 Mar  3  1997 cpio
---x--x--x   1 root     root        45056 Mar  3  1997 gzip
---x--x--x   1 root     root        49432 Mar  3  1997 ls
---x--x--x   1 root     root        56380 Mar  3  1997 sh
---x--x--x   1 root     root        77560 Mar  3  1997 tar
lrwxrwxrwx   1 root     root            4 Jul 12 11:29 zcat -> gzip

etc:
total 6
-r--r--r--   1 root     root           53 Mar  3  1997 group
-r--r--r--   1 root     root         4004 Feb 26  1997 ld.so.cache
-r--r--r--   1 root     root           79 Mar  3  1997 passwd

lib:
total 725
-rwxr-xr-x   1 root     root        19704 Mar  3  1997 ld-linux.so.1
-rwxr-xr-x   1 root     root        19704 Mar  3  1997 ld-linux.so.1.7.14
-rwxr-xr-x   1 root     root        24576 Mar  3  1997 ld.so
-rwxr-xr-x   1 root     root        24576 Mar  3  1997 ld.so.1.7.14
lrwxrwxrwx   1 root     root           14 Jul 12 11:29 libc.so.5 -> libc.so.5.3.12
-rwxr-xr-x   1 root     root       644036 Mar  3  1997 libc.so.5.3.12

pub:
total 0

Quello che segue è l'esempio del contenuto del file ~ftp/etc/passwd.

root:*:0:0:::
bin:*:1:1:::
operator:*:11:0:::
ftp:*:14:50:::
nobody:*:99:99:::

Quello che segue è l'esempio del contenuto del file ~ftp/etc/group.

root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::50:

91.2.6.1 Conciliare sicurezza e praticità

Il massimo della sicurezza si ottiene:

Da un punto di vista di praticità, o di necessità, può essere opportuno che sia consentito all'utente root di accedere in lettura e scrittura, altrimenti il lavoro di amministrazione dell'FTP anonimo risulterebbe impedito.

91.3 Dal lato del client

Per usufruire di un servizio FTP è necessario un programma in grado di comunicare attraverso il protocollo FTP. Per esempio, i navigatori web integrati includono anche questa funzionalità. Tuttavia, i programmi tradizionali che funzionano in modo simile a una shell, sono spesso più ricchi di funzionalità.

91.3.1 $ ftp

ftp [<opzioni>] [<host>]

È il programma client tradizionale per il trasferimento di file da e verso un nodo remoto. Quando viene avviato con l'indicazione del nome dell'elaboratore remoto, ftp tenta immediatamente di effettuare il collegamento; diversamente si avvia e attende il comando con il quale questo elaboratore verrà 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 (prompt): ftp>.

Alcune opzioni

-V

Vengono visualizzati tutti i messaggi.

-n

Disabilita l'accesso automatico.

-i

Disattiva la richiesta interattiva durante i trasferimenti multipli di file.

-d

Attiva il debug, ovvero la modalità diagnostica.

-g

Disabilita il globbing, ovvero l'uso di simboli per l'indicazione di gruppi di file.

91.3.1.1 Comandi

Come già accennato, quando ftp è in attesa di un comando da parte dell'utente, presenta l'invito ftp>. Quello che segue è l'elenco 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 ("). L'elenco è suddiviso per categorie.

Se la lettura di questa sezione è troppo noiosa, si può saltare direttamente a leggere gli esempi della sezione 91.3.2.

Shell

! [<comando> [<argomenti>]]

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

Macro

$ <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 (unglobbed).

macdef <macro>

Definisce una macro (macro istruzione) 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 4096 caratteri. Le macro restano definite fino a che non viene immesso un comando close che conclude la connessione con un determinato sistema remoto.

La macro viene interpretata nel modo seguente:

Identificazione

account [<password>]

Fornisce a ftp l'informazione sulla password di account che a volte viene richiesta da alcuni sistemi per potervi accedere. Se l'argomento password non viene fornito, viene richiesto all'utente di inserirlo.

user <utente> [<password>] [<account>]

Definisce l'identità dell'utente da utilizzare per il l'accesso nel sistema remoto. Se password e account non vengono forniti, ma sono richiesti nel sistema con il quale si intende connettersi, questi dovranno essere inseriti al momento del collegamento.

Trasferimento dati

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 simboli per il globbing.

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 con l'aiuto dei simboli per il globbing 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.

Interruzione del trasferimento

L'operazione di trasferimento può essere interrotta utilizzando la combinazione [Ctrl+c].

Modalità di trasferimento dei dati

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

Informazioni

bell

Attiva o disattiva la segnalazione acustica alla fine di ogni operazione di trasferimento di file.

debug [<livello-di-debug>]

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

bye | quit

bye e quit sono sinonimi. Termina il collegamento e termina l'attività di ftp.

close | disconnect

Termina la connessione senza uscire del programma.

open <host> [<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

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 simboli per il globbing 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). Il globbing, cioè l'espansione dei nomi, viene fatto 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 server FTP in funzione nell'elaboratore remoto. Per verificare il comportamento dell'espansione dei nomi in un elaboratore remoto è possibile utilizzare il comando mls nel modo seguente:

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

cd [<directory-remota>]

Cambia la directory corrente nel sistema remoto.

cdup

Cambia la directory corrente nel sistema remoto, portandosi sul livello precedente (parent).

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 indicati con l'aiuto di simboli opportuni per il globbing,

mdir <file-remoti> <file-locale> | mls <file-remoti> <file-locale>

mdir e mls sono sinonimi. Elencano i file remoti indicati con l'aiuto di simboli per il globbing 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 per il globbing 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

lcd [<directory>]

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

Help

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

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 sarà 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 quest'ultimo come se fosse quello locale.

91.3.1.2 Flusso standard di dati

Se, all'interno dei parametri dei comandi, quando viene richiesto un nome di file, viene fornito un singolo trattino (-), 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.

91.3.1.3 Configurazione

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.

Alcune direttive

machine <nome>

Il nome del nodo a cui fa riferimento la configurazione seguente:

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

Definisce la password per l'accesso al sistema remoto.

account <stringa-password>

Definisce una password ulteriore per i sistemi remoti che lo richiedono.

macdef <macro>

Definisce una macro (macro istruzione) attribuendole un nome. Il contenuto della macro è rappresentato dalle righe successive alla definizione. 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 4096 caratteri. Le macro restano definite fino a che non viene immesso un comando close che conclude la connessione con un determinato sistema remoto. La macro viene interpretata nel modo seguente:

Se viene definita una macro con il nome init, questa viene eseguita automaticamente come ultima operazione dell'accesso automatico.

91.3.2 Esempi

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

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](1) Wed Mar 5 12:37:21 EST 1997) 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 password.

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 verrà richiesta tra un po'; per ora viene richiesta 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 client FTP, che accede al servizio remoto, si tratta della prima directory dopo la radice, in realtà questa radice è solo la directory home del servizio FTP anonimo. Di conseguenza, è quasi impossibile che corrisponda realmente con la directory radice del filesystem remoto. Tutto questo serve solo a spiegare perché il comando cd /pub potrebbe non funzionare quando ci si collega a server 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.

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.

91.4 Informazioni

Alcuni programmi possono informare sullo stato dell'utilizzo del servizio FTP.

91.4.1 # ftpcount

ftpcount

ftpcount visualizza la quantità di utenti connessi in modo ftp per ogni classe e anche il massimo numero di connessioni ammissibili.

Esempi

ftpcount[Invio]

Service class all	-    1 users ( -1 maximum)

L'esempio mostra la risposta di ftpcount quando un solo utente accede al proprio sistema. Il valore -1 rappresenta in realtà 65535, o comunque l'intero di dimensione massima che può essere gestito.

91.4.2 # ftpwho

ftpwho

ftpwho visualizza le informazioni disponibili inerenti gli utenti connessi in modo ftp.

Esempi

ftpwho[Invio]

Service class all: 
  592  ?  S    0:00 ftpd: dinkel.brot.dg: anonymous/daniele@: IDLE
   -   1 users ( -1 maximum)

L'esempio mostra la risposta di ftpwho quando un solo utente accede al proprio sistema. Il valore -1 rappresenta in realtà 65535, o comunque l'intero di dimensione massima che può essere gestito.

91.5 Altri tipi di client

Il protocollo FTP è molto importante per il trasferimento dei file, di conseguenza, oltre al programma client tradizionale (ftp), ne esistono diversi altri che possono compiere funzioni analoghe. Due di questi meritano particolare attenzione.

---------------------------

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Quando si inserisce il proprio indirizzo di posta elettronica come password 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@.


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]