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.
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
,...
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*
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.
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 |
|
Vengono aggiunte informazioni diagnostiche all'interno del registro di sistema.
|
Ogni sessione FTP viene annotata all'interno del registro di sistema.
|
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).
|
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.
|
Stabilisce l'uso da parte di ftpd
della configurazione contenuta all'interno del file /etc/ftpaccess
.
|
Disabilita l'uso da parte di ftpd
della configurazione contenuta all'interno del file /etc/ftpaccess
. Questa è la modalità predefinita.
|
Ogni comando inviato da parte degli utenti FTP viene annotato all'interno del registro di sistema.
|
Vengono registrate le operazioni di invio di file da parte dei client FTP all'interno di /var/log/xferlog
.
|
Vengono registrate le operazioni di prelievo di file da parte dei client FTP all'interno di /var/log/xferlog
.
|
Definisce un valore particolare della maschera dei permessi.
È 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
. Segue un esempio del contenuto di questo file.
-
a
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).
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 . |
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.
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).
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.
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 |
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 |
~ftp/
0555
Contiene normalmente un file con un messaggio introduttivo. Si tratta di solito del file welcome.msg
che deve essere protetto opportunamente: deve essere accessibile solo in lettura a tutti gli altri utenti.
~ftp/bin/
0111
Serve a contenere alcuni programmi di utilità indispensabili per le operazioni di FTP. Per esempio, non deve mancare ls
.
Dal punto di vista dell'utilizzo, è sufficiente che tali file siano accessibili in esecuzione, mentre dal punto di vista della sicurezza è necessario che non siano modificabili.
~ftp/etc/
0111
Serve a contenere essenzialmente i file passwd
e group
. È importante che questi file non contengano password, o al massimo che queste non siano reali. La presenza di questi file serve solo a ottenere una conversione tra UID e nome dell'utente, e tra GID e nome del gruppo. In pratica, vengono utilizzati da ls
per generare un listato leggibile della proprietà dei file.
Se la directory ~ftp/lib/
contiene delle librerie, oltre ai due file già visti, è necessario che sia presente ld.so.cache
.
I file contenuti in questa directory devono essere accessibili solo in lettura.
~ftp/lib/
0555
Serve a contenere i file di libreria degli eseguibili contenuti in ~ftp/bin/
. Questi file di libreria devono essere accessibili in lettura e in esecuzione, e naturalmente devono essere protetti dalla scrittura.
~ftp/pub/
0555
Questa directory può essere organizzata in vario modo. Di solito è il contenitore di file messi a disposizione per il prelievo. In tal caso sarà conveniente che la directory non sia modificabile e che i file siano accessibili solo in lettura.
Per poter rendere disponibile una directory per la ricezione di file, questa deve essere accessibile in scrittura. Di solito si crea la directory incoming/
collocata al di sotto di ~ftp/pub/
o di un'altra sottodirectory, e gli si danno solo i permessi di esecuzione e scrittura, impedendo così la lettura del suo contenuto.
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: |
Il massimo della sicurezza si ottiene:
facendo in modo che le directory e i file di ~ftp/
appartengano all'utente root
;
evitando di concedere permessi in scrittura;
concedendo i permessi di lettura solo quando necessario.
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.
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à.
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>
.
|
Vengono visualizzati tutti i messaggi.
|
Disabilita l'accesso automatico.
|
Disattiva la richiesta interattiva durante i trasferimenti multipli di file.
|
Attiva il debug, ovvero la modalità diagnostica.
|
Disabilita il globbing, ovvero l'uso di simboli 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>
. 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.
! [<comando> [<argomenti>]] |
Avvia una shell sull'elaboratore locale, oppure esegue il comando indicato con gli argomenti che gli vengono forniti.
$ <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:
$n
Il simbolo $
seguito da una o più cifre numeriche viene interpretato come variabile contenente l'n-esimo argomento (della macro nel momento in cui viene richiamata).
$i
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.
\x
Il simbolo \
seguito da un carattere indica il carattere stesso. Per esempio è necessario usare questo simbolo per poter indicare il dollaro senza volersi riferire a uno dei parametri.
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.
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.
L'operazione di trasferimento può essere interrotta utilizzando la combinazione [Ctrl+c].
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.
ascii
ebcdic
image
(trasferimento binario)
local byte size
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.
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.
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.
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.
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 [<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-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.
Se, all'interno dei parametri dei comandi, quando viene richiesto un nome di file, viene fornito un singolo trattino (
), si intende riferirsi a:
-
standard input in caso di apertura del file in lettura;
standard output nel caso di apertura del file 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.
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:
$n
Il simbolo $
seguito da una o più cifre numeriche viene interpretato come variabile contenente l'n-esimo argomento (della macro nel momento in cui viene richiamata).
$i
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.
\x
Il simbolo \
seguito da un carattere 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.
L'uso di un client 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](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 |
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
[Invio]-
1*
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. |
Alcuni programmi possono informare sullo stato dell'utilizzo del servizio FTP.
ftpcount |
ftpcount
visualizza la quantità di utenti connessi in modo ftp
per ogni classe e anche il massimo numero di connessioni ammissibili.
#
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.
ftpwho |
ftpwho
visualizza le informazioni disponibili inerenti gli utenti connessi in modo ftp
.
#
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.
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.
ncftp
Si tratta di un programma per l'FTP che può funzionare sia come motore per un sistema di script che in modo autonomo. Si comporta in modo molto simile a una shell, consentendo anche l'uso della ridirezione.
Vedere ncftp(1).
mc
Si tratta di Midnight Commander, una sorta di attrezzo multiuso apparentemente molto simile al noto programma Norton Commander del sistema operativo Dos. Tra le sue varie funzioni, permette anche di effettuare un collegamento FTP gestendolo come se si trattasse di un filesystem. Il vantaggio di usare questo programma sta nella facilità con cui è possibile trasferire un intero ramo di directory.
Midnight Commander viene descritto nel capitolo 61.
---------------------------
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@
.