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


Capitolo 312.   Servente WU-FTP

pericolo: software non libero software non libero: non è consentita la commercializzazione a scopo di lucro

WU-FTP (1) è un servente FTP molto comune, anche se ormai si può considerare superato, soprattutto a causa della complessità della sua configurazione.

WU-FTP si compone in pratica del demone ftpd, o in.ftpd, configurato attraverso diversi file; inoltre, per consentire l'accesso anonimo, è necessario predisporre una directory apposita, strutturata in modo appropriato.

312.1   Avvio del demone

Il demone ftpd (o in.ftpd) è gestito normalmente dal supervisore dei servizi di rete.

in.ftpd [opzioni]

Nell'esempio seguente viene mostrata la riga di /etc/inetd.conf in cui si dichiara il suo possibile utilizzo per quanto riguarda il caso particolare di Inetd:

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

Nelle comunicazioni, ftpd interpreta i caratteri jolly, cioè i simboli per i riferimenti a gruppi di file, secondo lo standard della shell C, utilizzando quindi i simboli *, ?, &, [, ], { e }.

Tabella 312.3. Alcune opzioni della riga di comando.

Opzione Significato mnemonico Descrizione
-d
-v
diagnostic, verbose Vengono aggiunte informazioni diagnostiche all'interno del registro di sistema.
-l
log Ogni sessione FTP viene annotata all'interno del registro di sistema.
-tn
timeout Permette di specificare la durata espressa in secondi (n) del tempo di inattività oltre il quale la sessione FTP viene conclusa automaticamente. Questo parametro è negoziabile anche da parte del cliente. Il valore predefinito è di 15 minuti (900 s).
-Tn
max timeout Permette di specificare la durata espressa in secondi (n) del tempo massimo di inattività. In questo modo, un cliente non può negoziare una durata superiore.
-a
access Stabilisce l'uso da parte di ftpd della configurazione contenuta all'interno del file /etc/ftpaccess.
-A
no access Disabilita l'uso da parte di ftpd della configurazione contenuta all'interno del file /etc/ftpaccess. Questa è la modalità predefinita.
-L
max log Ogni comando inviato da parte degli utenti FTP viene annotato all'interno del registro di sistema.
-i
log in Vengono registrate le operazioni di invio di file da parte dei clienti FTP all'interno di /var/log/xferlog.
-o
log out Vengono registrate le operazioni di prelievo di file da parte dei clienti FTP all'interno di /var/log/xferlog.
-uumask
umask Definisce un valore particolare della maschera dei permessi.

312.2   Configurazione elementare

Il primo file da prendere in considerazione per la configurazione di WU-FTP è /etc/ftpusers, che viene utilizzato per impedire l'accesso agli utenti indicati al suo interno. Si tratta solitamente dell'utente root e di utenti fittizi, come nell'esempio seguente:

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

Questi utenti sono esclusi da un accesso normale, mentre rimane aperta, eventualmente, la possibilità di accedere come utenti anonimi.

WU-FTP ha la particolarità di poter gestire automaticamente l'archiviazione, la compressione e l'estrazione di file, attraverso la configurazione del file /etc/ftpconversions. In generale, si tratta di una funzionalità che viene ignorata dagli utilizzatori del servizio; tuttavia, vale la pena di vedere un esempio di questo file, che di solito viene già fornito nella distribuzione di WU-FTP:

 :.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 312.6 dovrebbe chiarire il meccanismo.

Tabella 312.6. Conversione automatica degli archivi in base alle estensioni utilizzate.

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.

312.3   FTP anonimo

Una volta effettuato il collegamento, l'utente anonimo (ftp o anonymous) viene posizionato nella directory indicata nel file /etc/passwd nella voce corrispondente dell'utente ftp. Di solito si tratta della directory /home/ftp/ o di /var/ftp/. In altri termini, si tratta della directory personale dell'utente fittizio 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 servente FTP esegue la funzione chroot(). È questo il motivo per cui è bene che da quel punto siano disponibili alcuni programmi di servizio nella directory ~ftp/bin/, assieme ad altri elementi elementari di un file system Unix.

Generalmente, le varie distribuzioni GNU 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 diverse da quelle proposte.

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

Directory Permessi Descrizione
~ftp/ 05558 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/ 01118 Serve a contenere alcuni programmi di servizio 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/ 01118 Serve a contenere essenzialmente i file passwd e group. È importante che questi file non contengano parole d'ordine, 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, 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/ 05558 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, ma naturalmente devono essere protetti dalla scrittura.
~ftp/pub/ 05558 Questa directory può essere organizzata in vario modo. Di solito è il contenitore di file messi a disposizione per il prelievo. In tal caso è 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, dandole solo i permessi di esecuzione (attraversamento) 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:*:65534:65534:::

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:

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.

312.3.1   Collegamenti simbolici

Quando si utilizzano collegamenti simbolici all'interno della struttura di directory dell'FTP anonimo, occorre tenere presente che il programma servente FTP cambia la posizione della directory principale. Se si creano dei collegamenti, è opportuno utilizzare solo riferimenti relativi (senza la barra iniziale), in modo che siano validi anche quando si accede al file system normalmente, senza questi vincoli particolari.

312.4   Configurazione con «/etc/ftpaccess»

In ordine di importanza, dopo il file /etc/ftpusers che permette di escludere alcuni utenti (tipicamente gli utenti di sistema) viene il file /etc/ftpaccess, il quale viene preso in considerazione dal demone ftpd solo se questo è stato avviato con l'opzione -a. Purtroppo, l'insieme della gestione di questo file è piuttosto complesso, tanto che di solito si evita di modificare quanto accompagna già la distribuzione di WU-FTP, ma in questi casi conviene forse utilizzare un servente più semplice da amministrare.

Di seguito appare un esempio di questo, che dovrebbe corrispondere alla configurazione standard di partenza.

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

Ai fini dei controlli di accesso, si distinguono tre tipi di utenti:

Nelle sezioni seguenti vengono descritte alcune delle direttive che possono apparire in questo file.

312.4.1   Controlli di accesso

Gli utenti che accedono al servizio FTP vengono classificati in due modi: il tipo e la classe. I tipi di utenti sono già definiti e si tratta di anonymous, guest e real, come già descritto. Le classi di utenti vengono invece definite all'interno del file /etc/ftpaccess, in base al tipo e alla provenienza della richiesta di accesso al servizio. Queste distinzioni permettono di consentire o negare l'accesso agli utenti e di distinguere tra altri privilegi.

Classi di utenti
class classe elenco_tipi_utente famiglia_di_indirizzi...

Con la direttiva class è possibile definire una classe di utenti in base al tipo di utente e agli indirizzi da cui può provenire la richiesta di accesso al servizio. Gli indirizzi rappresentano l'elaboratore cliente e possono essere espressi in forma di nome di dominio o di indirizzo numerico, con l'aiuto di caratteri jolly.

Per poter accedere al servizio, occorre appartenere a una delle classi dichiarate con questo tipo di direttiva. Per esempio, la riga seguente è un modo per definire una classe generica che rappresenta ogni tipo di utente.

class   all     real,guest,anonymous  *

L'esempio seguente, invece, serve a riconoscere gli utenti di tipo guest che accedono dal dominio .dg, o dalla sottorete 192.168.*.*, attribuendogli la classe amici.

class   amici   guest   *.dg    192.168.*

Quando un utente potrebbe appartenere a diverse classi simultaneamente, vale quella in cui viene riconosciuto prima. Sotto questo aspetto, conviene elencare prima le classi più restrittive, come nell'esempio seguente:

class   amici   guest                   *.dg    192.168.*
class   all     real,guest,anonymous    *
Distinguere tra gli utenti anonimi
autogroup gruppo classe...

È possibile utilizzare la direttiva autogroup per fare in modo che gli utenti anonimi appartenenti alle classi indicate, accedano con i privilegi del gruppo indicato.

Questa tecnica può permettere a gruppi di utenti anonimi di poter accedere a file che risultano esclusi agli altri.

class   amici   guest,anonymous         *.dg    192.168.*
class   all     real,guest,anonymous    *
...
autogroup       locali          amici

Nell'esempio appena mostrato, gli utenti anonimi che accedono dal dominio .dg ottengono i privilegi del gruppo di utenti denominato locali.

Il gruppo in questione deve essere stato dichiarato nel file /etc/group e questo è sufficiente perché le cose funzionino. Ma per fare in modo che l'utente del servizio FTP possa vedere il nome di questo gruppo quando esegue un comando ls -l occorre anche aggiornare il file ~ftp/etc/group.

Definizione degli utenti di tipo guest
guestgroup gruppo...

Gli utenti di tipo guest sono soggetti a limitazioni equivalenti a quelle riservate agli utenti anonimi, con la differenza che in questo caso vengono individuati precisamente attraverso un nome di utente e una parola d'ordine. Inoltre, non possono accedere se la shell non è valida.

Per gli utenti di questo tipo occorre predisporre una directory personale, strutturata come ~ftp/, con le directory bin/, etc/ e lib/, proprio perché, anche in questo caso, il servente trasforma tale directory nella directory radice.

La direttiva guestgroup definisce i gruppi i cui utenti appartengono automaticamente al tipo guest, per cui, se si appartiene al gruppo indicato in questa direttiva, si è limitati ad accedere alla propria directory personale.

Per attuare questo è sufficiente creare un gruppo e abbinargli gli utenti a cui si vuole limitare l'accesso in questo modo.

ftpguest:*:450:tizio,caio,sempronio

L'esempio mostra una riga del file /etc/group che dichiara il gruppo ftpguest e gli abbina alcuni utenti, anche se questi sono collegati normalmente a un gruppo differente. Nel file /etc/ftpaccess, la direttiva seguente esclude dagli accessi normali tutti gli utenti che appartengono, direttamente o indirettamente, al gruppo ftpguest: per loro è ammissibile solo un accesso limitato alla propria directory personale.

guestgroup      ftpguest

L'utente che appartiene a questa categoria può avere l'indicazione di una directory personale composta da due parti, suddivise da /./, come nell'esempio seguente che mostra un record del file /etc/passwd.

tizio:Ide2ncPYY:500:500:Tizio Tizi:/home/tizio/./archivio:/bin/bash

Se questo utente accede al sistema normalmente, al di fuori del servizio FTP, la sua directory personale è automaticamente /home/tizio/archivio, perché l'effetto del punto intermedio si traduce con uno spostamento nullo. Per il servente FTP invece, la prima parte, quella prima del punto, diventa la directory radice; la parte seguente, diventa la directory di partenza in cui viene a trovarsi l'utente.

Impedire l'accesso a categorie di indirizzi determinate
deny famiglia_di_indirizzi file_messaggio

La direttiva deny permette di bloccare tutti gli utenti che accedono da un gruppo di indirizzi determinato, esprimibili sia in forma di nome di dominio che in forma numerica. L'utente che si vede rifiutare l'accesso, riceve un messaggio contenuto nel file indicato come terzo argomento. Questo file può contenere delle metavariabili elencate nella tabella 312.28.

È il caso di sottolineare che il filtro di accesso vale per tutti gli utenti e non solo per una classe particolare.

deny    *.mehl.dg       /etc/ftpdeny.msg
deny    192.168.2.*     /etc/ftpdeny.msg
deny    dinkel.*        /etc/ftpdeny.msg

L'esempio mostra una serie di filtri contro l'accesso da parte di utenti che provengono dal dominio mehl.dg, dalla rete 192.168.2.0 e dai nodi che si chiamano dinkel, indipendentemente dal dominio cui appartengono. In tutti questi casi, viene inviato il contenuto del file /etc/ftpdeny.msg all'utente che viene respinto.

Al posto della famiglia di indirizzi da escludere, si può indicare la parola chiave !nameserved, che rappresenta tutti gli indirizzi per i quali non esiste un nome di dominio corrispondente.

deny    !nameserved     /etc/ftpdeny.msg
Limitare gli accessi simultanei in base alla classe
limit classe numero_accessi periodo file_messaggio

La direttiva limit permette di limitare l'accesso simultaneo degli utenti appartenenti alla classe indicata, per un periodo determinato. Gli utenti che non possono accedere ricevono il contenuto del file indicato come ultimo argomento. Questo file può contenere delle metavariabili elencate nella tabella 312.28.

limit   all     10      any     /etc/ftplimit.msg

L'esempio mostra l'imposizione di un limite massimo di 10 utenti della classe all, in qualunque momento (any). Agli utenti che non possono accedere viene inviato il messaggio contenuto nel file /etc/ftplimit.msg.

Quando un servizio FTP è riprodotto in altri siti speculari, il file utilizzato per informare gli utenti dall'esclusione dal servizio serve normalmente per elencare gli indirizzi alternativi.

Impedire il prelievo di alcuni file
noretrieve file...

Con la direttiva noretrieve si impedisce il prelievo dei file indicati come argomento. Se i file vengono indicati specificando un percorso assoluto, si vuole fare riferimento a un file particolare, mentre se non viene indicato il percorso, si vuole impedire il prelievo di ogni file con quel nome.

noretrieve      /etc/passwd core

Nell'esempio viene impedito il prelievo del file /etc/passwd e di tutti i file core.

Impedire l'accesso in base a un limite di tentativi errati
loginfails n_tentativi

La direttiva loginfails permette di porre un limite ai tentativi falliti di accesso agli utenti reali, cioè a quelli provvisti di parole d'ordine.

loginfails 5

L'esempio mostra un limite di cinque tentativi di autenticazione all'interno della stessa sessione FTP. Una volta superato il limite, l'utente viene disconnesso e deve ricominciare la connessione.

Controllo sulla parola d'ordine dell'utente anonimo
password-check {none|trivial|rfc822} [enforce|warn]

All'utente anonimo viene richiesto l'inserimento di una parola d'ordine, che in realtà serve solo come «firma» e dovrebbe corrispondere convenzionalmente all'indirizzo di posta elettronica di chi accede. L'utente anonimo può limitarsi a indicare la prima parte del suo indirizzo, fino al simbolo @, lasciando al servente, il compito di determinare la parte restante.

Con la direttiva password-check si può definire un livello di controllo su questo indirizzo inserito. Segue l'elenco delle parole chiave che possono essere usate in questa direttiva, assieme al loro significato.

Tabella 312.27. Parole chiave utilizzabili nella direttiva password-check.

Parola chiave Descrizione
none
Non viene fatto alcun controllo.
trivial
La parola d'ordine deve contenere il carattere @.
rfc822
Verifica che il dominio sia corretto (in base alle specifiche del documento RFC 822).
warn
La parola d'ordine non valida viene accettata avvisando l'utente per la prossima volta.
enforce
L'accesso viene negato se la parola d'ordine non viene ritenuta corretta.

Segue l'elenco di alcuni codici macro utilizzabili nei file di messaggi restituiti agli utenti del servizio FTP.

Tabella 312.28. Codici macro.

Macro Descrizione
%T
Data e ora locale.
%C
La directory corrente.
%E
L'indirizzo di posta elettronica dell'amministratore del servizio.
%R
Indirizzo del nodo remoto.
%L
Indirizzo del nodo che offre il servizio FTP.
%U
Il nome dell'utente utilizzato per accedere.
%M
Numero massimo di accessi ammissibili per gli utenti della classe cui appartiene chi accede.
%N
Numero di accessi in corso nella classe cui appartiene l'utente in questione.

312.4.2   Informazioni e messaggi

In varie occasioni, il servente FTP invia agli utenti dei messaggi contenuti in file appositi, oppure invita alla lettura di questi.

Indirizzo di posta elettronica dell'amministratore del servizio
email indirizzo_email

Con questa direttiva si indica l'indirizzo di posta elettronica dell'amministratore del sistema. Questo è utile praticamente solo per i file di messaggi che possono contenere la metavariabile %E, al posto della quale viene messo questo indirizzo.

Messaggio introduttivo
message file {login | cwd=directory}  [classe...]

Con la direttiva message è possibile presentare all'utente che accede un messaggio contenuto nel file indicato come primo argomento. Questo file viene presentato quando si verifica una condizione particolare, specificata attraverso le parole chiave login o cwd.

login indica che si vuole mostrare il messaggio solo all'inizio dell'accesso; cwd serve a farlo quando l'utente cambia directory spostandosi precisamente in quella indicata subito dopo questa parola chiave.

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

Nell'esempio, viene inviato il messaggio contenuto nel file /welcome.msg tutte le volte che un utente accede; inoltre, ogni volta che cambia directory (l'asterisco rappresenta qualunque directory) viene inviato quanto contenuto nel file .message della directory corrente.(2)

La direttiva message permette di distinguere anche tra diverse classi di utenti, se uno o più nomi di classi vengono aggiunte alla fine della direttiva stessa.

È il caso di ricordare che il file di messaggi può contenere delle metavariabili secondo lo schema della tabella 312.28.

Invito alla lettura dei file contenenti informazioni importanti
readme file {login | cwd=directory}  [classe...]

Si tratta di una direttiva analoga a message, con la differenza che qui non viene inviato il file in questione, piuttosto viene invitato l'utente a scaricare e a leggere il contenuto di tali file.

readme  README*    login
readme  README*    cwd=*

L'esempio mostra il caso in cui si vuole che l'utente sia avvisato della presenza di file che iniziano per README nella directory corrente. Ciò all'inizio dell'accesso e tutte le volte che si cambia directory.

312.4.3   Registrazione delle azioni degli utenti

L'attivazione del controllo sulla registrazione degli eventi legati al servizio FTP può essere fatta attraverso l'opzione -L nella riga di comando di ftpd. La direttiva log, tuttavia, scavalca l'utilizzo di questa opzione eventuale.

Registrazione dei comandi
log commands elenco_tipi_utenti

Utilizzando la direttiva log in questo modo, si attiva la registrazione di tutti i comandi inseriti dagli utenti che appartengono all'elenco di tipi indicato. I tipi possibili sono sempre solo anonymous, guest e real, già descritti in precedenza.

Registrazione dei trasferimenti
log transfers elenco_tipi_utenti elenco_direzioni

La direttiva log utilizzata con la parola chiave transfers permette di indicare i tipi di utente per i quali attivare la registrazione delle operazioni di trasferimento dati. Si distingue tra prelievi dal servizio FTP, outbound (scarico o download), e consegna al servizio, inbound (carico o upload).

log transfers anonymous,real inbound,outbound

L'esempio mostra la richiesta di registrare tutte le operazione di carico e di scarico dati (inbound e outbound), per gli utenti che appartengono al tipo anonymous e real.

312.4.4   Permessi e filtri sul caricamento dei file

Il caricamento dei file in un FTP è una cosa molto delicata e generalmente da impedire agli utenti anonimi. Attraverso le direttive upload e path-filter si possono controllare queste operazioni, oltre che con la gestione corretta dei permessi delle directory.

Limitazione del caricamento di file
upload directory_iniziale directory_di_destinazione {yes|no} \
  \utente_proprietario gruppo_proprietario modalità [dirs|nodirs]

La direttiva upload permette di controllare il caricamento di file, cioè l'invio nel servente FTP, da parte degli utenti anonimi e da quelli di tipo guest.

La directory iniziale rappresenta la posizione di partenza del servizio e serve a identificare gli utenti a cui si rivolge la direttiva stessa. Per esempio, se viene indicato /home/ftp, corrispondente a ~ftp/, cioè alla directory personale dell'utente fittizio ftp, si intende che questa direttiva riguardi proprio gli utenti anonimi.

La directory di destinazione è quella in cui si vuole controllare il caricamento di file e può essere rappresentata anche utilizzando caratteri jolly.

Le parole chiave yes e no permettono di stabilire se si intende permettere o impedire il caricamento nella directory.

Quando si permette il caricamento di dati, si devono indicare l'utente e il gruppo a cui assegnare la proprietà dei file caricati, quindi occorre anche specificare i permessi, in forma numerica ottale.

Attraverso questa stessa direttiva è possibile concedere o impedire la creazione di directory attraverso le parole chiave dirs e nodirs.

upload  /home/ftp       *               no
upload  /home/ftp       /incoming       yes     ftp  daemon  0600  nodirs

Nell'esempio appena mostrato si intende che /home/ftp corrisponda alla directory iniziale del servizio FTP anonimo. Nella prima direttiva viene impedito in modo generalizzato di caricare file in qualunque directory; nella seconda viene concesso di caricare solo nella directory incoming/ discendente da /home/ftp/, senza la possibilità di creare directory, attribuendo ai file la proprietà dell'utente fittizio ftp e del gruppo daemon, con i permessi di scrittura e di lettura solo per il proprietario.(3)

Limiti sul nome dei file
path-filter elenco_tipi_utente file_messaggio regexp_consentita [regexp_vietata...]

La direttiva path-filter permette di definire un filtro per i nomi dei file che vengono caricati. Si distingue tra tipi di utenti (e non di classi), si indica il file contente un messaggio di spiegazione in caso l'utente tenti di caricare un file con un nome non consentito, quindi si indica un'espressione regolare che deve essere valida per il tipo di nome. Eventualmente si possono specificare altre espressioni regolari che non devono corrispondere ai nomi dei file.

path-filter anonymous /etc/pathname.msg ^[A-Za-z0-9]*.*_*-*$ ^[0-9] ^_ ^-

Nell'esempio mostrato, gli utenti anonimi possono caricare file che però devono rispettare regole molto rigide nei nomi: possono contenere solo lettere dell'alfabeto, cifre numeriche, il punto, il trattino basso e il trattino normale, ma non possono iniziare con una cifra numerica, un trattino basso o un trattino normale.

È importante osservare che in queste espressioni regolari, il punto vale esattamente per quello che è, per cui non rappresenta un carattere qualunque come avviene generalmente.

Il messaggio di errore indicato viene visualizzato anche quando il caricamento dei file fallisce per altre ragioni diverse dal filtro sul nome.

Il meccanismo messo a disposizione dalla direttiva path-filter può essere utile anche per impedire il caricamento di file da parte di utenti di tipo guest, esclusi dal controllo della direttiva upload, o da parte di utenti reali.

path-filter  real,guest  /etc/pathname.msg  ^vietato$  ^vietato$

Nell'esempio si indica che si può caricare solo file con il nome vietato, e subito dopo si vieta di caricare lo stesso nome.

312.5   Filtro individuale con «/etc/ftphosts»

Il file /etc/ftphosts viene utilizzato per filtrare l'accesso da parte di utenti determinati da nodi determinati. Questa possibilità di filtro si affianca alla direttiva deny del file /etc/ftpaccess, con la quale si impedisce l'accesso a tutto un dominio o a una sottorete espressa in forma numerica.

deny { utente|tipo } nodo...

L'utente, o il tipo di utenti indicato, non può accedere dagli indirizzi specificati in modo preciso o attraverso l'aiuto di caratteri jolly.

deny anonymous *.mehl.dg

L'esempio mostra in che modo impedire a tutti gli utenti anonymous di accedere dal dominio mehl.dg.

deny caio 192.168.2.*

In questo caso, si impedisce all'utente caio di accedere dalla sottorete 192.168.2.0.

312.6   Organizzazione del sistema di messaggi

Un'organizzazione corretta del sistema di file di messaggi è importante, sia per l'immagine del servizio, sia per poter informare correttamente l'utente.

312.6.1   Messaggio di ingresso

Quando viene accettato l'accesso da parte di un utente è opportuno inviargli un messaggio di benvenuto, contenente alcune informazioni sul proprio servizio. Si ottiene questo con la direttiva message del file /etc/ftpaccess, specificando la parola chiave login, come nell'esempio seguente:

message /etc/ftpbenvenuto.msg   login

Il file etc/ftpbenvenuto.msg dell'esempio, indica un percorso relativo alla directory iniziale, cosa che cambia a seconda del tipo di utente. Tuttavia, questo permette di definire diversi file per il messaggio introduttivo a seconda del tipo di utente. Il file /etc/ftpbenvenuto.msg per gli utenti reali, il file ~/ftp/etc/ftpbenvenuto.msg per gli utenti anonimi e qualcosa di simile per gli utenti di tipo guest. Un file di benvenuto del genere potrebbe essere composto nel modo seguente:

Benvenuto %U. Questo è il servizio FTP di %L.

%T ora locale.

L'amministratore di questo servizio può essere contattato all'indirizzo
email %E.

312.6.2   Messaggio di ingresso nelle directory

Prima di accedere a una directory particolare, potrebbe essere conveniente inviare un messaggio di presentazione o spiegazione. Se non ci sono directory con contenuti particolari, questa è l'occasione per dare messaggi specifici. Si ottiene questo con la direttiva message del file /etc/ftpaccess, specificando la parola chiave cwd, seguita dall'indicazione della directory, o della famiglia di directory, come nell'esempio seguente:

message .message        cwd=*

L'esempio mostra una soluzione molto semplice e pratica: si fa riferimento al file .message della directory corrente, per gli ingressi in ogni directory. In questo modo, si possono fare tanti file differenti, uno per ogni directory, collocati esattamente dove serve. Il punto iniziale nel nome del file serve solo per non farlo apparire nell'elenco quando si usa ls.

Il testo del messaggio dovrebbe riguardare il contenuto della directory a cui si riferisce. Eventualmente, può trattarsi di una semplice ripetizione del messaggio introduttivo.

312.6.3   Invito alla lettura dei file contenenti informazioni importanti

Per tradizione, i file readme sono quelli che contengono informazioni importanti per cui si invita l'utente a leggerli. Può trattarsi di istruzioni sul come utilizzare il materiale contenuto nella directory, annotazioni di carattere legale e ogni altra cosa che sia ritenuta importante.

È importante definire in modo automatico un invito alla lettura di questi file, quando appaiono nelle directory. Si ottiene questo con la direttiva readme del file /etc/ftpaccess, come nell'esempio seguente, che rappresenta lo standard.

readme  README*    login
readme  README*    cwd=*

In questo modo, si invita l'utente a leggere il contenuto dei file che iniziano per README, sia all'atto dell'accesso, sia tutte le volte che si cambia directory.

312.6.4   Motivazione del rifiuto di concedere l'accesso

L'accesso al servizio può essere rifiutato per ragioni diverse:

Nel primo caso non è possibile predisporre un file di messaggi: l'utente vede semplicemente un semplice access denied. Nel secondo caso si utilizza il file specificato nella direttiva deny, nel terzo si utilizza il file della direttiva limit.

Il messaggio da inviare nel caso della direttiva deny del file /etc/ftpaccess può essere fondamentalmente di due tipi, a seconda che si tratti del blocco a un gruppo di indirizzi particolare, oppure che si tratti del filtro contro gli utenti che accedono da macchine per le quali non esiste un nome di dominio.

Segue l'esempio di un pezzo del file /etc/ftpaccess, seguito dal contenuto dei due ipotetici file /etc/ftpdeny.msg e /etc/ftpdenydns.msg.(4)

deny    *.mehl.dg       /etc/ftpdeny.msg
deny    192.168.2.*     /etc/ftpdeny.msg
deny    dinkel.*        /etc/ftpdeny.msg
deny    !nameserved     /etc/ftpdenydns.msg
Siamo spiacenti.

Non si accettano accessi da %R.
Siamo spiacenti.

Per motivi di sicurezza non si accettano accessi da sistemi che non
dispongono di un nome di dominio.

Quando il problema è il superamento del limite posto agli accessi simultanei per una classe determinata di utenti, si può avvisare semplicemente, pregando di avere pazienza, oppure si può suggerire un elenco di URI alternativi. Questo limite viene fissato attraverso la direttiva limit nel file /etc/ftpaccess, potendo definire limiti diversi per le varie classi di utenti. Volendo, è possibile definire un solo file di spiegazioni, senza troppi dettagli.(5)

Segue un esempio molto semplice di questo tipo di messaggio.

Siamo spiacenti.

È stato raggiunto il limite massimo di accessi.
Si prega di riprovare in un altro momento.

312.7   File delle registrazioni

Le registrazioni degli accessi e delle altre operazioni che si svolgono con il servizio FTP, vengono fatte nel file /var/log/xferlog. A seconda della configurazione si possono avere più o meno eventi registrati.

La struttura dei record di questo file è uniforme, per cui si possono costruire facilmente dei programmi di rielaborazione statistica. A questo proposito, dovrebbe essere disponibile il programma xferstats (scritto in Perl), che fa sempre parte della distribuzione di WU-FTP:

xferstats [opzioni]

Il programma xferstats esegue l'analisi statistica del file delle registrazioni del servente FTP. Se non vengono dati argomenti, dovrebbe essere in grado di accedere da solo al file corretto, generando una statistica semplificata.

Opzione Significato mnemonico Descrizione
-f file
file Permette di specificare il nome del file contenente le registrazioni del servizio FTP. Può essere utile per analizzare l'archivio delle registrazioni fatte in periodi precedenti.
-r
real Include le informazioni sugli utenti reali.
-a
anonymous Include le informazioni sugli utenti anonimi.
-h
hour Include il rapporto sul traffico orario.
-d
domain Include il rapporto sul traffico in base al dominio.
-t
total Include il rapporto sul traffico totale per sezione (directory).
-D dominio
only domain Limita la statistica al traffico con il dominio indicato.
-l profondità
limit Permette di limitare i dettagli nelle sottodirectory.
-s sezione
section Permette di concentrare l'attenzione alle operazioni riferite a una sezione determinata di directory.

Il programma può essere configurato parzialmente modificando la prima parte in modo da non dover usare necessariamente le opzioni. È opportuno modificare la posizione in cui si attende di trovare il file delle registrazioni, se questa è errata. Anche i domini separati potrebbero essere modificati convenientemente.

...
# edit the next two lines to customize for your domain.
# This will allow your domain to be separated in the domain listing.

$mydom1 = "wustl";
$mydom2 = "edu";

# edit the next line to customize for your default log file
$usage_file = "/var/log/xferlog";

# Edit the following lines for default report settings.
# Entries defined here will be over-ridden by the command line.

$opt_h = 1; 
$opt_d = 0;
$opt_t = 1;
$opt_l = 3;
...

Il comando seguente genera un rapporto sui trasferimenti eseguiti con il dominio .dg:

xferstats -D dg[Invio]

Segue il risultato che si potrebbe ottenere.

Transfer Totals include the 'dg' domain only.
All other domains are filtered out for this report.

TOTALS FOR SUMMARY PERIOD Sun Mar 15 1998 TO Tue Mar 24 1998

Files Transmitted During Summary Period            23
Bytes Transmitted During Summary Period       8093489
Systems Using Archives                              0

Average Files Transmitted Daily                    12
Average Bytes Transmitted Daily               4046744

Daily Transmission Statistics

                 Number Of    Number of    Average    Percent Of  Percent Of
     Date        Files Sent  Bytes  Sent  Xmit  Rate  Files Sent  Bytes Sent
---------------  ----------  -----------  ----------  ----------  ----------
Sun Mar 15 1998          21      8093489  207.5 KB/s     91.30      100.00
Tue Mar 24 1998           2            0    0.0 KB/s      8.70        0.00

Total Transfers from each Archive Section (By bytes)

                                                 ---- Percent  Of ----
     Archive Section      Files Sent Bytes Sent  Files Sent Bytes Sent
------------------------- ---------- ----------- ---------- ----------
/pub/free                         15     6671985    65.22      82.44
/lib                               8     1421504    34.78      17.56

Hourly Transmission Statistics

                 Number Of    Number of    Average    Percent Of  Percent Of
     Time        Files Sent  Bytes  Sent  Xmit  Rate  Files Sent  Bytes Sent
---------------  ----------  -----------  ----------  ----------  ----------
14                        2            0    0.0 KB/s      8.70        0.00
20                       10      7320378  271.1 KB/s     43.48       90.45
21                       11       773111   64.4 KB/s     47.83        9.55

312.8   Informazioni

Alcuni programmi che fanno parte di WU-FTP possono informare sullo stato dell'utilizzo del servizio FTP. Vale la pena di conoscere ftpcount e ftpwho; entrambi si utilizzano senza argomenti.

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à l'intero di dimensione massima che può essere gestito.

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à l'intero di dimensione massima che può essere gestito.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) WU-FTP   software non libero: non è consentita la commercializzazione a scopo di lucro

2) Quando si indica un percorso in un file di messaggi e l'utente ha a disposizione un file system limitato come nel caso dell'utente anonimo, conta quel file system particolare. Quindi, nel caso dell'esempio, il file welcome.msg si trova presumibilmente in ~ftp/welcome.msg rispetto al file system complessivo.

3) Solitamente, per ridurre il rischio di usi impropri del servizio di caricamento dati, si tolgono i permessi di lettura alla directory utilizzata per questo scopo, per non mostrare all'esterno il suo contenuto.

4) È il caso di sottolineare che il percorso di questi file di messaggi si riferisce al file system globale, dal momento che il controllo avviene prima di qualunque identificazione dell'utente.

5) Anche in questo caso, il percorso di tali file di messaggi si riferisce al file system globale.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome servente_wu_ftp.htm

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

Valid ISO-HTML!

CSS validator!