|
Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/library/linux/AppLinux/al117.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:43 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 10:26:22 2007 Êîäèðîâêà: |
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 visualizzazio