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


196. Servente FTP

Nel capitolo 102 è già stato descritto questo servizio, parte della sua configurazione e il funzionamento del tipico cliente per questo protocollo. In questo capitolo si vuole approfondire un po' la configurazione e la gestione di questo servizio, quando si utilizza il servente FTP della Washington University (WU-FTP).

196.1 Riepilogo del comportamento del servente FTP

Prima di vedere i dettagli dell'impostazione del servente è il caso di ripassare in breve il suo funzionamento.

  1. In linea di principio è ammesso l'accesso a utenti registrati e a utenti anonimi; se si tratta di utenti registrati, questi devono disporre di una shell valida e deve esistere una password.

  2. Non possono accedere gli utenti elencati nel file `/etc/ftpusers'.

  3. L'accesso anonimo può avvenire solo se è stato previsto l'utente `ftp'.

  4. Quando l'accesso viene fatto da un utente registrato, la directory iniziale che gli appare è la sua directory personale (home), ma può attraversare anche altre directory se i permessi lo consentono.

  5. L'utente anonimo non ha diritto di accedere ad altre directory che non siano quelle che si diramano da quella stabilita per l'utente fittizio `ftp'. Per questo, la directory personale dell'utente anonimo corrisponde per lui alla radice del servizio FTP.

196.2 Struttura di directory per l'FTP anonimo

Nel capitolo 102 è già stata descritta la struttura fondamentale della directory iniziale del servizio FTP anonimo, senza però spiegare il perché siano necessari programmi, librerie e file di configurazione, che sarebbero già presenti nel filesystem normale.

~ftp/
  |
  +--bin/
  |
  +--etc/
  |
  +--lib/
  |
  +--pub/
      |
      |--...
      |--...
      :

Quando un utente anonimo accede, il servente FTP non si limita a modificare la directory corrente in modo da trovarsi in `~ftp/'; per evitare che questo utente sconosciuto abbia accesso al resto del filesystem, esegue una chiamata di sistema specifica, `chroot()', per fare in modo che quella posizione divenga la directory radice.

In queste condizioni, quando un utente anonimo, attraverso il proprio cliente, utilizza il comando `ls', il servente non è più in grado di avviare il programma `ls' che si trova nel filesystem normale. Può utilizzare solo ciò che si trova a partire dalla ex directory `~ftp/', divenuta la radice.

Questo dovrebbe spiegare la presenza di alcuni programmi nella directory `bin/', delle librerie corrispondenti in `lib/', e del file `etc/ld.so.cache' necessario alle librerie.

I due file `etc/passwd' e `etc/group' servono solo a `ls' per poter tradurre i numeri UID e GID in nomi di utenti e di gruppi. Di conseguenza dovranno contenere tutte le voci necessarie in base alla proprietà dei file che si vuole indicare in questa struttura di directory.

196.2.1 Collegamenti simbolici

Quando si utilizzano collegamenti simbolici all'interno della struttura di directory dell'FTP anonimo, occorre tenere presente che il 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 filesystem normalmente, senza questi vincoli particolari.

196.3 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'. Di seguito appare un esempio di questo secondo file, già presentato in precedenza, 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.

196.3.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 password. 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,semproni

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, diventerà la directory radice; la parte seguente, sarà la directory di partenza in cui si troverà 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 196.2.

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

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

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 password dell'utente anonimo

password-check {none|trivial|rfc822} [enforce|warn]

All'utente anonimo viene richiesto l'inserimento di una password, 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. La tabella 196.1 elenca le parole chiave che possono essere usate in questa direttiva, e il loro significato.

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

Tabella 196.1: Parole chiave utilizzabili nella direttiva `password-check'.

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.

Tabella 196.2: Alcuni codici macro utilizzabili nei file di messaggi restituiti agli utenti del servizio FTP.

196.3.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 verrà 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, e precisamente in quella indicata subito dopo.

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, e ogni volta che cambia directory (l'asterisco rappresenta qualunque directory) viene inviato quanto contenuto nel file `.message' della directory corrente. *1*

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

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

196.3.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', `outbound'), per gli utenti che appartengono al tipo `anonymous' e `real'.

196.3.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 che figureranno essere proprietari 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 in scrittura e lettura solo per il proprietario. *2*

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 sottolineato e il trattino, e non possono iniziare con una cifra numerica, un sottolineato o un trattino.

È importante osservare che in queste espressioni regolari, il punto vale esattamente per quello che è, e 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.

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

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 quest'altro caso, si impedisce all'utente `caio' di accedere dalla sottorete 192.168.2.0.

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

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

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

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

196.5.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', e di seguito il contenuto dei due ipotetici file `/etc/ftpdeny.msg' e `/etc/ftpdenydns.msg'. *3*

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 determinata classe 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', e si possono definire limiti diversi per le varie classi di utenti. Volendo, è possibile definire un solo file di spiegazioni, senza troppi dettagli. *4*

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.

196.6 Facilitare le ricerche

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

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

cd ~ftp

ls -lR | gzip -9 > ls-lR.gz

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

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

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

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

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

196.6.1 Gestione degli errori

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

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

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

196.7.1 # xferstats

xferstats [<opzioni>]

`xferstats' è un programma per 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.

Opzioni

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

Include le informazioni sugli utenti reali.

-a

Include le informazioni sugli utenti anonimi.

-h

Include il rapporto sul traffico orario.

-d

Include il rapporto sul traffico in base al dominio.

-t

Include il rapporto sul traffico totale per sezione (directory).

-D <dominio>

Limita la statistica al traffico con il dominio indicato.

-l <profondità>

Permette di limitare i dettagli nelle sottodirectory.

-s <sezione>

Permette di concentrare l'attenzione alle operazioni riferite a una sezione determinata di directory.

Configurazione

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

xferstats -D dg

Genera un rapporto sui trasferimenti eseguiti con il dominio `.dg'. 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

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

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Quando si indica un percorso in un file di messaggi, e l'utente ha a disposizione un filesystem limitato come nel caso dell'utente anonimo, conta quel filesystem particolare. Quindi, nel caso dell'esempio, il file `welcome.msg' si troverà presumibilmente in `~ftp/welcome.msg'.

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

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

4.) Anche in questo caso, il percorso di questi file di messaggi si riferisce al filesystem globale.


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