Apache: il server web personalissimo // più diffuso server wcbfa parte della vostra distribuzione preferita: è l'occasione di approfondirne la conoscenza, per creare il proprio silo personale, per offrire accessi proietti da password ed altro ancora...
Rudy Lamarca <r.lamarcaialinuxpratieo.com>
Uno dei servizi più utilizzati del web è sicura mente il www: milioni di pagine HTML, stati che o dinamiche, vengono visitate giornal mente e la maggior parte di queste sono "inviate"
Terminata questa fase, il server web sarà installato
grazie allo stesso server che è disponibile anche
ed avviato con la configurazione di default: è possi
sulla vostra LinuxBox, Apache.
bile verificare che sia in esecuzione con il comando:
Apache, come detto, ha il compito di inviare le pagi ne web dei siti ospitati dalla macchina su cui è in
* ps
auxww
1
grep
apache
esecuzione, rispondendo alle richieste fatte dagli utenti tramite i propri client (browser), che potreb
Verranno restituite alcune righe, a dimostrazione
bero essere, indistintamente, Internet Explorer,
dei diversi processi in esecuzione. A questo punto è
Mozilla, Opera, ecc.
possibile aprire il browser preferito e farlo puntare
Per fornire questo servizio, Apache rimane in ascol
alla URL http://localhost e, se tutto è stato esegui
to su una o più porte: normalmente si tratta della
to correttamente, apparirà la pagina di benvenuto
porta 80 (HTTP) per il traffico generico e della porta
di Apache, come mostrato in figura 1.
443 (HTTPS) per le connessioni criptate che richie
Configurazione
dano una certa sicurezza e segretezza.
Apache, non appena installato, sarà in esecuzione
installazione
con le impostazioni di default: alcuni di questi valori
In questo articolo parleremo dell'installazione e
andranno modificati per renderli più adatti alle
configurazione della versione 2.x del server Apache
nostre esigenze.
sui sistemi operativi GNU/Linux Debian versione
Prima di tutto, cosa bisogna modificare: i file di con
Sarge e su Mandrake GNU/Linux versione 9.2.
figurazione si trovano nella directory /etc, secondo
E', però, possibile che Apache sia già installato sul
lo standard. Vi è una directory ad hoc per Apache,
vostro sistema: sarà sufficiente, su Debian, utilizza
che cambia nome a seconda delle distribuzioni: in Debian essa è /ctc/apache2/, mentre in Mandrake
re il comando
sarà /otc/httpd/. # dpkg-query
--list
|
grep apactie
per verificare la presenza o meno del server; su Mandrake tale controllo si effettua con
#
rpr
-qa
|
1=1
grep apaclie
".; ' ■*
J - -
root, su Debian lanciare il comando:
Apii ,]„
Inri/iiiihi! II Server Wv\
Nel caso non sia presente, l'installazione sarà que
questi sin.
stione di un attimo. Dopo essere diventati utenti Ser»
"- '
.
i.
_■ ■
l'
rttttO illst; Usto
SU
b!
' -
-.
L.;j.'
>. , -
-I- 1 V-Ttt
■
■ - -
■ '
F*t ìm rttna*uv il Tort
# apt-get instali apacfie2-mpm-worker
] Mfl • il
*M bi nvcte *l j*-^ ih* \>*\ ri
J
che porterà all'installazione anche del pacchetto
Ai*-!* «Ai 1 Ari
-
L"
i". r
jwir tittI !£•*( >f
apache2-common, dal quale Apache dipende. Per
Mandrake sarà sufficiente il comando:
I
i ■ ■-;
# urpni
apache2
: *J
^. -"
_ ,
s
i
,r
-
■■-■
..
-1
A; » 1*
"■
•
Anche in questo caso verranno installati altri pac chetti per le dipendenze: confermate e lasciate pro seguire. E' probabile che vengano richiesti CD-Rom di installazione, teneteli sempre a portata di mano.
Apache è pronto e già funzionante (pagina di default di Debian)
~
IMPOSTAZIONI <Direclory
i Direttive con valori </Oirectory>
standard
E' ora di intervenire suila configurazione vera e pro
Listen 80 - indica il numero della porta TCP sulla quale è in
pria. Per semplificare al massimo la trattazione, i
ascolto il server web. E' quella di default. per intendersi
parametri di configurazione sono stati divisi in due
quella ai quali i vari Internet Explorer, Mozilla. Netscape si
riquadri: nel primo sono elencati i valori che, nor
connettono quando viene specificato un indirizzo http:// senza opzioni particolari. In Debian lo si può trovare in
malmente, non devono essere modificati; nel
/Gtc/apache2/ports.conf; in Mandrake in
secondo, invece, i parametri che è necessario, se
/etc/httpd/httpd2.conf
non indispensabile talvolta, cambiare. Ogni volta che viene effettuata una modifica alle
User - è il nome dell'utente col quale verrà eseguito il server web e di conseguenza, secondo la tradizione Unix,
direttive del file di configurazione dei web server, è
determina i file ai quali ha accesso Apache. E' bene ricorda
consigliabile controllare che non si siano commessi
re che, se l'utente non ha accesso a qualche directory, i file
errori. Per questo, viene utilizzato i! comando:
in essa contenuti non potranno essere visualizzati dal browser. E' importante, inoltre, che Apache non sia in esecuzione con
tt
i privilegi dell'utente root, per eliminare problemi di sicurez za: di default è impostato sull'utente www-data per Debian e
apachecti
canfigtest
Che effettua un test delle impostazioni di Apache.
su quello apache per Mandrake. Potete comunque verificare sotto quale utente sta girando il vostro daemon con il
Nel caso non ci siano problemi, il sistema restituisce un
comando:
messaggio di Ok, diverso a seconda della distribuzione
*
ps
auxwwu
|
(Syntax OK per Debian, Checking configuration
grep apache
sanity for Apache 2.0: [OK] per Mandrake) Per collegarsi al server Apache esistono diverse
Group - è il gruppo di appartenenza dell'utente col quale il server web è in esecuzione. E' importante che i membri
possibilità: la prima, la più semplice, quella già
appartenenti a questo gruppo non abbiano troppi privilegi
vista, tramite il collegamento, dalla stessa macchi
sul sistema e, quindi, è opportuno che questo gruppo
na dove è installato il server web, all'indirizzo IP
venga principalmente utilizzato solo per l'utente che esegue
della rete di loopback come già visto in precedenza.
il server web. Di default è impostato su www-data per
Se l'host dove è in esecuzione il server web ha
Debian e apache su Mandrake.
anche una scheda di rete, alla quale è associato un
indirizzo IP, è possibile, dalla stessa macchina ma
Queste due direttive, Group e User, nella distribuzione Mandrake si trovano In conunonhttpd.conf, sempre in
anche dagli altri host della rete locale, collegarsi ad
/etc/httpd2/conf/; in Debian in /etc/apache2/apache2.conf
Apache scrivendo, come URL http://indiri2Z0_IP, ad esempio http://192.168.0.1 nel caso la scheda
ErrorLog ■ indica il file di log nel quale vengono registrati
ethO abbia tale indirizzo.
tutti gli errori del server. E' un file di testo e di default risie
de in /var/log/apache2/ per Debian e /var/log/httpd/
Se l'host con il server web in esecuzione è anche
per Mandrake.
connesso ad Internet, ad esempio tramite modem analogico o tramite ADSL (si tratta di casi frequenti
CustomLog - indica il file di log ed il suo formato (possono
negli ambiti domestici) e se è stata stabilita una
essere specificate le informazioni da inserire in esso, ma, se
connessione con il proprio provider, è possibile dis
non si hanno buoni motivi, si può lasciare il formato di
porre di una interfaccia pppO con un indirizzo IP
default). in cui vengono memorizzati tutti gli accessi al web
pubblico (che può essere sempre diverso, vedremo
server. E' un file di testo che di default risiede nella stessa directory di ErrorLog, e generalmente ha il nome
più avanti un trucco per avere una certa "staticizza-
access log. In Debian queste impostazioni sono nel file
zione" deil'IP).
/etc/apache2/sites-available/default
Potete scoprire l'indirizzo IP attualmente in uso con il comando:
II file in questione sarà, quindi, per Debian
0
ifconfig
pppG
|
grep
inet
/etc/apache2/apache2.conf mentre per Mandrake
/etc/httpd/conf/httpd2.conf.
Le istruzioni di configurazione presenti in questo file prendono il nome di direttive e si distinguono in due tipologie: le direttive di configurazione e le direttive di blocco.
Le prime servono ad impostare parametri globali dell'ambiente, come la porta sulla quale rimanere in
paerbatfl
ascolto, l'indirizzo E-Mail del webmaster. Le direttive di blocco, che sono facilmente identifi-
(1.0
(e
J
«[E
t.OJ
VlIHkln
NT
i.fll"
cabili grazie alla particolare struttura, che prevede un tag di apertura e uno di chiusura, servono per
applicare una serie di proprietà ad oggetti specifici quali ad esempio una particolare directory. Ectone un esempio:
Tutti gli accessi alle pagine di Apache vengono loggati: ecco la traccia della visione della pagina di esempio
_
IMPOSTAZIONI
Direttive con valori da modificare Prima di effettuare qualsiasi modifica al file littpd.conf, è consigliabile fare una copia di backup affinchè sìa possibile ripristinarlo nel caso si commettano orrori; in Debian sarà sufficiente un # ep
-av
-av
Se, ad esempio, viene richiesta la pagina test .ritmi, il server
mostrerà il contenuto del file /var/wwd/html/test .html. Attenzione non impostare mai tale direttiva a partire dalla / (radice) della nostra macchina! Questo modo di procedere potrebbe mostrare, ad ogni utente che si collegasse al web
server ogni file delia nostra macchina, compreso il file delle password /etc/passwd, esponendo il sistema ad evidenti e
/etc/apache2 /root/apache2 backup
mentre con Mandrake H cp
nostro sito web. In generale è definita come /var/www/html.
/etc/httpd
/root/dttpd-baekup
Ecco le direttive che, normalmente, è necessario modificare:
ed estremamente gravi problemi di sicurezza. In Debian vanno modificate le impostazioni di default: nel file
/etc/apache2/sites-available/default è necessario sostituire l'impostazione DocumentRoot con la seguente DocumentRoot
/var/www/html
ServerAdmin webmasten3iini1xpratico.com- indica l'indirizzo
Poi sarà necessario creare la directory lumi/ in /var/www
E-Mail che verrà incluso come riferimento nelle pagine HTML
(che, normalmente, non è presente) ed impostare i permessi.
di errore del server web mostrate agli utenti. In Mandrake questa impostazione si trova in conmonhttpd.conf mentre in Debian si può trovare in /etc/apache2/sites-available/default ServerName - questa direttiva permette di impostare il nome host per il server (ad esempio pd.esempio.it).
Attenzione: affinchè tutto funzioni correttamente, l'hostname deve esistere e deve puntare alla macchina su cui sta girando Apache. Nel caso non venisse specificato, Apache utilizzerà l'hostname del proprio PC.
Normalmente l'hostname della vostra macchina è indicato nel file /etc/hosts con una descrizione simile a: 192.163.0.1
miope
miopc.floniinio.it
# nkdir /var/wwWhtml # chown o+rx /var/www/html
Dìrectorytndex - è la pagina predefinita che viene restituita al client nel momento in cui viene fatta una richiesta. Ad
esempio, se viene specificato DirectoryIndex
index.html
index.htm
digitando l'URL http://localhost/ senza specificare niente altro, verrà prima cercata la pagina index.html e nel caso
questa non esista, la pagina index. htm; se anche quest'ulti ma dovesse mancare il comportamento di Apache viene deci so dalla direttiva Opt ìons.
Attenzione ad indicare, insieme ati'hostname. anche il domi
In Mandrake si trova in commonhttpd . conf, mentre su Debian
nio, altrimenti Apache vi restituirà errore alla partenza.
la trovate nel file apache2. conf.
DocumentRoot - è la directory a partire dalla quale sono
varie direttive disponibili potete consultare il sito
contenute tutte le pagine HTML e le directory, appartenenti al
http://iittpd.apaclie.org/docs/mod/directives.htnil
Per avere una lista completa, con tanto di spiegazione, delle
e leggendo il primo valore riportato nell'output.
Condivìdere i propri file
Chiunque su Internet potrà connettersi al vostro server web riportando tale indirizzo nel proprio
Apache non "serve" soltanto pagine web, intese
browser, sempre nella forma http://a.b.c.d.
come semplici file HTML: tale applicazione è tal
Occhio alle connessioni
sentire l'accesso ad un utente remoto ai file presen
Apache permette la visualizzazione degli utenti che
ti in una certa directory. A tale scopo si rivela
hanno richiesto le pagine controliando il file specifi
particolarmente utile la direttiva Options
cato alla voce CustomLog (tipicamente il file
Normalmente, quando si tenta di aprire un certo
access
log. presente nella directory /etc/apache2
URL senza specificare il nome del file, ad esempio
o /etc/httpd/conf a seconda della distribuzione):
http://localhost/ anziché utilizzare l'URL esteso
mente flessibile che. ad esempio, è possibile con
è un semplice file dì testo, strutturato in modo par
http://localhost/index.html a fare da padrona è la
ticolare definibile dall'utente.
direttiva Di rectorylndex: in base al suo contenuto
Nella configurazione stardard esso riporta:
viene scelto uno dei file presenti nella directory come pagina "di default" e viene aggiunta automa
>
■
>
TIP del client che ha richiesto la pagina;
ticamente all'URL inserito nella barra del browser.
la data e l'ora della richiesta;
C'è da chiedersi, però, cosa possa succedere se
l'operazione (ad esempio la GET) e quindi la
nessuno dei
pagina richiesta;
Directorylndex è presente nella directory.
dei
file
indicati dalla
direttiva
il codice del risultato di tale operazione;
Mettiamo subito in pratica quanto appena detto.
le dimensioni della pagina richiesta;
Supponiamo di aver inserito nel file di configurazio
una serie di informazioni sul browser utilizzato
ne di Apache la seguente riga:
per visualizzarla. Directorylndex
index.html
index.htm
Sarà grazie a questo file che, dato in pasto ai vari analizzatori di traffico, potrete generare statistiche
Creiamo la directory /var/www/html/prova e ren
di un certo interesse, per verificare quante pagine
diamola accessibile a tutti:
sono state viste, le sezioni più visitate, gli indirizzi IP che più hanno navigato il vostro sito.
# chmod
a+rx
/var/www/tilml/prova
~ Possiamo quindi provare a inserire all'interno della
<Olrectory /var/www/html/privato=
directory alcuni file, ad esempio pippol.txt e
AUowOverride Ali
pippo2. txt. Supponiamo ora di collegarci all'indiriz
</Directory>
zo http://local.host/prova/. All'interno della directory privato occorre poi crea
Apache cercherà i file
re un file di testo di nome . htaccess strutturato nel seguente modo:
/var/www/html/prova/index.htrnl /var/wviWhtml/prova/inelex.htm
AuthNarne
"Area
Privata"
ma senza successo.
AuthType Basic
A questo punto controllerà se è attiva l'opzione
AuthUserFile /eU/ap3Che2/webpasswd
Indexes per quel particolare percorso. Tale opzione
require valid-user
viene specificata solitamente nel file di configura zione di Apache /etc/apache2/apache2.conf per
AuthName indica il nome dell'area protetta. E' una
Debìan
in
stringa del tutto arbitraria che il browser riporterà
Mandrake e. di solito, viene attivata all'interno di un
nel momento in cui verrà richiesto l'inserimento dei
blocco "Di rectory".
dati per accedere all'area stessa (possiamo impo
Nel nostro esempio, se volessimo abilitare Vtndexes
starla come AuthName "Area Privata").
e
/etc/httpd/conf/httpd2.conf
per la directory /var/v/ww/html/prova sarebbe suf
AuthType è il tipo di protezione da utilizzare e può
ficiente aggiungere al file di configurazione:
avere due valori: Basic o Digest. La prima (che qui utilizzeremo) si avvale di un fife di testo (specificato
<Directory /var7www/htnil/provii> Options
dalla direttiva spiegata più avanti) ed è basata sul
♦InOexes
l'inserimento di una login in chiaro ed una password
</Directory>
cnptata dalla funzione e rypt ( ) di ogni sistema ope
Volendolo invece disabilitare, occorre sostituire il
rativo Unix-like.
segno "-" al segno "+".
Quando un browser richiede l'accesso ad un'area
Se l'opzione Indexes è attiva. Apache genera esso
protetta, Apache replica con il codice d'errore 401,
stesso una pagina HTML nella quale elenca i file
che indica la mancata autorizzazione per accedere
presenti in quella directory. Vengono esclusi dalla
all'area e fa si che il browser apra una finestra in
lista eventuali file i cui nomi sono specificati
cui compare la richiesta di inserire nome utente e
mediante la direttiva Indexlgnore: tra questi com
password per potervi accedere.
paiono di solito tutti quelli che cominciano con un
punto, come ad esempio il file .htaccess.
INFORMAZIONI
Nel caso, invece, l'opzione Indexes sia disattivata, al browser verrà inviata la pagina di "Listing
* Permessi sui file in stile Unix
denied" la quale sta a indicare che il server web è stato configurato in modo da non fornire informa zioni sul contenuto di quella particolare directory. Un visitatore occasionale che sia all'oscuro dei nomi
dei file contenuti in quella directory non sarà in grado di scaricarli. Ovviamente questo è un modo molto semplice (e spesso inefficace) di proteggere i
Una piccola parentesi sui permessi: viene abilitato il per
messo di lettura (r sta per Read) e di esecuzione (x sta per eXecuie) a tutti gli utenti (;i sta per Ali), anche se, a secon da dell'utente prescelto per l'esecuzione del server web. può essere sufficiente garantire l'accesso alla directory solo
propri dati. Nel prossimo paragrafo vedremo qual
ad esso. Con cnmod a+rx si permette a tutti gli utenti di leg
cosa di molto più sicuro per creare delle zone del
gere il file; il +x serve per passare attraverso le directory,
proprio sito accessibili solo a determinati utenti.
Creazione di aree private Con Apache c'è la possibilità di creare delle sezioni
del sito il cui accesso sia consentito solo ad alcuni utenti a seguito dell'inserimento di una login e di
riT ad un piene complessivo mono interessante e vantaggioso Per lune le lue esigerle rt
una password.
Immaginiamo di voler proteggere una directory del nostro server web, ad esempio
'> J
mst'ue nani*ut#»te e pMsivairi p*i "Aitrt PitvMA* a toc
http://localhost/pnvato/
Mom* utem*
da accessi non autorizzati. In questo caso, occorre
usemam»
prima di tutto creare la directory privato/ all'inter
no di quella impostata dalla direttiva DocumentRoot:
nel nostro caso, basterà un:
I ' ■ jpure
Usate Owti.w* passivo: ;( p« mtmwtaatt qu«&ti valori
ito 31 OK
#
rnkdir
/var/www/html/privato
Annull.1
arni
Per applicare regote di autenticazione personalizza
Quando si cerca di accedere ad una directory
te per tale directory. bisognerà assicurarsi che nel
privata, ecco la finestra che mostra il browser
file di configurazione di Apache sia presente:
Cte
~
AuthUserFile indica il file dì testo contenente l'e
sopra menzionato e cambiando di volta in volta il
lenco delle coppie login e password che sono abili
nome dell'utente.
tate all'accesso. Se il percorso del file non è espres
Se, in un secondo momento, avrete la necessità di
so in modo assoluto, ovvero senza lo slash (/)
cambiare la password ad un utente creato in prece
davanti, Apache lo cercherà nel percorso indicato
denza sarà sufficiente eseguire nuovamente il
dalla direttiva DocumentRoot. Il nome del file e la
comando htpasswd specificando come argomento il
sua posizione all'interno del filesystem è a discre
nome dell'utente le cui credenziali devono essere
zione dell'utente. Ovviamente occorre fare in modo
modificate.
che tale file sia accessibile in lettura/scrittura solo a
Il file delle password costruito con htpasswd è un
root e in sola lettura all'utente con i privilegi del
file di testo in cui il nome utente è memorizzato in
quale gira Apache. 5e così non fosse altri utenti
chiaro, mentre la password è criptata: in caso di
potrebbero accedere al file e tentare di crackarlo
smarrimento, quindi, la soluzione più veloce è quel
utilizzando programmi come John Thè Ripper.
la di cambiare la password all'utente.
Un esempio di file di password potrebbe essere; require valid-user, permette a tutti gli utenti con
tenuti nel file della direttiva precedente di accedere
# cat
all'area protetta. Non è obbligatorio inserirla, è un
pippol :qC0hztihe71ij2w
/etc/apache2/webpasswd
modo per limitare ulteriormente il controllo di
pÌppo2;HW2v7IRqTAp)E
accesso all'area protetta.
p ippo3 : vOelfmeWPuXHWq
require user <utente>, utilizzata al posto della
Immaginiamo ora di suddividere il nostro sito web
precedente, permette di specificare direttamente
in più sottodirectory "private". Se. ad esempio, è
il nome di un utente al quale consentire l'acces
necessario che un gruppo di utenti (i tre pippol,
so, dopo, ovviamente, l'immissione della password
pippo2,
corrispondente.
/var/www/html/audio, mentre, un'altro gruppo di
Procediamo dunque alla creazione degli utenti. Per
directory /var/www/html/video, è necessario crea
pippo3) abbia accesso alla directory
utenti (pippo4, pippo5) abbia accesso ad un'altra
prima cosa andrà usato touch per creare il file
re un file, da chiamare
(vuoto)/etc/apache2/webpasswd:
directory, con contenuto identico al blocco specifi
.htaccess, nelle due
cato nell'esempio precedente ("Area privata"), fatta #
touch
eccezione per la direttiva require
/etc/apache2/webpasswd
valid-user. Al
suo posto, nel file /var/www/html/audio/. htaccess Rendetelo accessibile solo a root (read/write) e
inseriremo la direttiva repuire
all'utente non privilegiato utilizzato da Apache
lista degli utenti che devono avere accesso a
(read only): su Debian è sufficiente il comando
http://Localhost/audio/:
#
require
cliown
root:www-data
/ete/apacheZ/webpasswd
mentre su Mandrake basterà un
user
pippol
pippo2
user seguita dalla
pippo3
Slmilmente nel file /var/www/html/video/.htaccess
inseriremo: # chown
root:apachc /etc/apaehe2/webpasswd require
user
pippo4
pippo5
In entrambi i casi, sarà opportuno cambiare i per messi di accesso.
Occorrerà aggiungere i cinque utenti di cui sopra al file delle password /etc/apache2/webpasswd utiliz
# ttimod
640
zando il consueto comando titpasswd.
/etc/apache2/webpas5wd
Se il numero di utenti dovesse crescere in modo Dopodiché si può utilizzare il comando htpasswd
elevato ed alcuni di questi richiedessero l'accesso a
(fornito nei pacchetti apache-commort su Debian e
entrambe le directory come andrebbe modificata la
httpd-common su Mandrake che vengono installati
configurazione?
in automatico per risolvere le dipendenze):
Esistono due possibili soluzioni al problema: la
prima, meno efficiente, consiste neli'aggiungere il 1
htpasswd
/etc/apaclie2/webpasswd
nomeutente
nome dell'utente che deve avere accesso a entram be le directory in entrambi i file.
Dopo aver inserito correttamente la password,
La seconda, estremamente più pulita, consiste nel-
verrà creato un utente che potrà accedere all'area
l'utilizzare una nuova direttiva, require group, che
protetta. Si dovrebbe ottenere il seguente output:
permette di suddividere gli utenti per gruppi.
Occorre quindi creare, come abbiamo fatto prece «
htpasswd
/etc/apache2/webpasswd
pippol
Re-type
new
password:
Adding password
dentemente per gli utenti, un file di testo contenen te i nomi dei gruppi.
New password:
(or user pippol
La struttura di tale file è estremamente semplice; consiste nel nome del gruppo, seguito dai due punti (:) e dalla lista degli utenti appartenenti a quel
Gli utenti successivi si creano ripetendo il comando
gruppo. Ad esempio:
video:
pippol pippo2
audio:
plppo4 pippo5 gino paolo
pippo3 gino paolo
http:/Aocalhost/-norneutente
Naturalmente l'utente dovrà preoccuparsi di creare Naturalmente, affinchè la direttiva require group sia
la directory publichtml/ in questo modo:
valida, occorre anche intervenire sul file .htaccess aggiungendo
il percorso in cui
trovare l'elenco dei
gruppi. Si deve quindi utilizzare la direttiva
S ed /home/nomeutente S
mkdir
public
html
E' importante assicurarsi che i permessi della
AuttiGroupFile nomefile
directory home dell'utente e della sottodirectory
Avremo quindi un file .htaccess più corposo rispet
public html siano corretti. E' necessario che la
to a quello visto in precedenza:
directory sia accessibile in lettura all'utente specifi cato tramite l'opzione User nel file dì configurazione
AuthName
"Documenti
AuthType
Basic
di Apache (ovvero l'utente con il quale gira il server).
Privati"
Normalmente questo significa che le directory
AuthUscrFile /etc/apache2/webpasswd
/home/nomeutente e /home/nomeutente/public html
AuthGroupFile /etc/apache2/webgroup
devono avere, per lo meno, permessi di esecuzione
requi re valid-user
per tutti:
require
group gruppol
gruppo2
Se , ad esempio, nel fife .htaccess presente nella
directory /var/www/html/audio/ inseriamo la riga; require
group audio
e nel file /var/www/html/video/.htaccess inseriamo
Ipagina_di_provaj
la riga: Iw— I
/Index
require group video .hfln*iiflnihjl*ni*>iblk_h™l e ì- efeimu ndt
come risultato avremo che gli utenti gino e paolo,
hoT>» »e—*til«rif«/pubJk hfrxl - :j iri*m» m4ai
appartenenti sia al gruppo audio che video, avran no accesso a entrambi gli indirizzi, mentre pippol, pippo2, pippo3 avranno accesso solo a http://localhost/audio/ e pippo4, pippo5
solo a
Le pagine personali degli utenti possono essere aggiunte in maniera estremamente veloce
http://localhost/video/.
Home page degli utenti di sistema Con Apache ogni utente dei sistema può avere una
S
chmod o*x
/tiome/nomeutente
propria homepage: affinchè questo sia possibile,
$
chmod o+x
/home/nomeutente/public
html
occorre abilitare il modulo mod userdir che, di default. è già attivo. In Debìan andranno decom
Chiaramente anche i file presenti in questa
mentate alcune righe in /etc/apache2/apacrie2. conf
directory devono avere i permessi di lettura per
per ottenere qualcosa di simile:
tutti in modo da essere accessibili all'utente con il quale sia in esecuzione Apache.
UserDir
In caso ci sia qualche problema, è sempre possibile
public html
controllare il log degli errori di Apache. Come espe rimento potete provare a togliere i permessi di let
<Direclory /home/Vpublic html>
tura globali per il file index.html: </Directory>
#
chmod
o-r
index.html
mentre in Mandrake le stesse informazioni sono contenute nel file commonhttpd. conf, anche se
Dopodiché, se provate a accedere via web a quel
sono disposte in maniera differente.
file dovreste ottenere un errore e, controllando il file
Nel caso in cui le righe appena viste fossero prece
di log specificato dalla direttiva ErrorLog nel file di
dute dal carattere #, per attivare la modifica sarà
configurazione, dovreste trovare la riga di testo
necessario eliminare tale carattere, salvare il file e
riavviare il server (con service httpd restart sii Mandrake e con /etc/ìnit.d/apache
restart su
Permissivi
denied /home/nomeutente/publichtml/
unable to open
file,
ensure it is
readable.
Debian).
Dopo questa nuova configurazione, le pagine html
che significa che tale file non è leggibile da Apache,
che si trovano in /home/nomeutente/public html
e che quindi non può essere visualizzato.
potranno essere visualizzare tramite l'URL
©te
-
Apachc: configurare virtual host e WebDAV Si entra nel dettaglio della configurazione, mostrando come sia facile
servire più domini con lo stesso server web. Inoltre, ecco come poter creare un disco virtuale su Interne!, via HTTP.
a cura della Redazione <redazionefalinuxpratico.com>
V
Dopo la prima configurazione di Apache, oltre
ad una certa soddisfazione personale, saranno apparsi all'orizzonte i primi interro gativi. Uno di questi riguarderà il numero di domini
Apache è correttamente configurato.
che il server web può ospitare: possibile che soltan
Quando si vogliono utilizzare i virtual host per
to quello configurato con la direttiva ServerName
nome, c'è da attivare la direttiva NameVirtualHost.
possa essere raggiungibile?
che permette di impostare su quale indirizzo IP
1 Vìrtual Hnst
Apache deve rimanere in ascolto per i domini vir tuali: generalmente è impostata su \ che vuoi dire
Apache può servire svariati domini su una stessa
"tutti gli indirizzi IP per i quali è in ascolto Apache"
macchina purché venga opportunamente configura
(si ricorda che tali indirizzi IP possono essere speci
to: verranno utilizzati i cosiddetti Virtual Host. host
ficati con la direttiva Listen), una configurazione
virtuali, che non sono sistemi veri e propri. ma ven
che può essere tranquillamente mantenuta.
gono tutti impersonati da un unico server.
In Debian, NameVirtualHost è presente nel file
Adesso c'è da capire come realizzare il tutto; non
/etc/apache/apache2.conf mentre in Mandrake si
prima, però, di aver padroneggiato l'iter delle
trova nel file Vhosts.conf contenuto nella directory
comunicazioni tra browser e server: quando vengo
/etc/httpd/conf/vhosts.
no richieste le pagine del sito X, il browser cerca di
A questo punto è necessario configurare i domini
"risolvere" il nome del dominio X in indirizzo IP, in
virtuali veri e propri: questi constano di una serie di
modo da conoscere quale sia il server da interroga
direttive comprese tra t delimitatori <VirtualHost> e
re; dopo aver inviato la richiesta all'indirizzo del
</VirtualHost>: all'interno di tali tag, che apriran
server web, quest'ultimo invia le risorse richieste.
no e chiuderanno la descrizione di un dominio vir
Già. ma quali risorse? Se su esso sono ospitati due
tuale, potranno essere inserite una serie di direttive
domini, www.alfa.org e www.beta.org. e la richiesta
come quelle viste nelle pagine precedenti per la confi
viene effettuata dal browser tramite indirizzo IP (che è
gurazione del server singolo (ad esempio il nome del
identico sia perwww.alfa.org sia perwww.beta.org):
server o la posizione dei file html). I file interessati per
come fa il server web a capire cosa inviare?
questa configurazione sono, per Debian, tutti quelli
Come visto nelle pagine di teoria di HTTP (Th 5-8). è
creati nella directory/etc/apache2/sites-available/
possibile gestire i virtual host sia indicando una
mentie, per Mandrake, le impostazioni sono sempre
specifica porta, sia indicando un preciso nome: la
contenute nel file Vhosts . conf visto sopra.
prima tecnica si utilizzava con lo standard 1.0 di
Il blocco minimo, necessario e sufficiente per la
HTTP, quando non vi erano altre possibilità. Ogni
configurazione di un Virtual Host, è il seguente:
server web poteva servire domini diversi se asso
ciati a porte diverse: la porta 80, quella standard, era il dominio di default. mentre gli altri dovevano avere una specifica esplicita della porta nell'URL
Con la versione 1.1 dì HTTP è invece possibile utiliz
<VirtualHost
•>
ServerName aHa.llnuxpratico.net DocumentRoot
/var/www/vhost/aUa/pubUc html
</VirtualHost>
zare i vìrtual host utilizzando una risoluzione per nome: i domini alfa e beta saranno entrambi rag
Vediamo subito di capire cosa è obbligatorio impo
giungibili sulla porta 80, direttamente, senza com
stare: all'interno del tag VirtualHost, dove abbia
plicazioni nell'indirizzo.
mo inserito *, vanno indicate le stesse informazioni
Passiamo alla
quali indirizzi IP (o, eventualmente, anche quali
configurazione
porte, si veda il prossimo paragrafo) quel virtual
Prima di tutto si controlli che Apache sia attivo e
si indicano tutti gli indirizzi in ascolto.
presenti in NameVirtualHost: in pratica indica su
host deve rimanere in attesa di connessione; con *
funzionante: una prova con il nostro browser pre
C'è da specificare necessariamente il ServerName:
ferito all'indirizzo IP locale del server (oppure
sarà con esso, infatti, grazie alla versione 1,1 del
localhost, se siamo sulla stessa macchina), e si
protocollo HTTP, che verranno identificati i domini
dovrebbe aprire la nostra pagina che informa che
ai quali rispondere, grazie alla direttiva:
Host:
pagina di benvenuto di Apache, collegandosi all'indiriz
nomedominlo
zo provato in precedenza: dov'è finita la pagina? passato subito dopo la GET del browser. Con la
Sembra proprio che il nostro virtual host funzioni un
configurazione dell'esempio viene, di fatto, indi
po' troppo bene, tanto da aver "cannibalizzato" la
cato ad Apache di rispondere alle richieste di
vecchia pagina.
http://alfa.linuxpratico.net
Riflettendo un attimo, il motivo di questo comporta
fornendo le risorse a
partire da /var/www/vhost/alfa/public_html, la
mento diventa subito chiaro: viene effettuato un
directory radice per il nostro sito.
confronto con la direttiva <VirtualHost
Ovviamente la directory sopra indicata, dove
fronto che risulta positivo visto che vengono accet
andranno memorizzate le pagine web, dovrà esiste
tati tutti gli IP; successivamente viene cercato qual
re: è sufficiente un comando mkdir, magari con
cosa di più "preciso" tra gli altri virtual host, ma
l'opzione -p nel caso non esista per intero il percorso
non ve ne sono altri da controllare e quindi viene
# mkdir
prima incontrata che abbia soddisfatto le condizioni.
•>, con
restituita la pagina più "vicina" alla richiesta, cioè la -p /var/www/vhost/alfa/public turni
Per evitare questo inconveniente, sarà necessario Per un test veloce, creiamo all'interno della directory
impostare come prima direttiva di virtual host il
public ritmi un file in questo modo:
nostro sito di default, in modo che non venga data
la precedenza agli altri siti ospitati. ff echo
"sono nel
dominio
Come si può realizzare tutto questo? Con Mandrake,
alfa" >
/var/tavw/vhost/alta/public html/andex.titml
è sufficiente indicare prima la sezione VirtualHost relativa al dominio di default. poi agli altri.
Adesso avremo una risposta per il nostro primo
virtual host. Un riavvio veloce delle impostazioni di Apache, con:
<VirtualHost
■>
ServerName
dominio.di.default
DoeurnentRoot # service httpd
<VlrtualHost
per quando riguarda Mandrake, oppure, per Debian
dominiodidefault
'>
ServerName
alfa.Unuipratico.net
OotumentRoot
# /etc/imt.o7apacne
pagine del
</VtrtualHo5t>
reload
reload
/var/*«w/vhost/alfa/pijblic htol
</VirtualHost>
e le nuove impostazioni saranno caricate: se tutto
In questo modo solo la corrispondenza esatta con il
va come dovrebbe, si dovrebbe riuscire a vedere,
dominio virtuale potrà permettere la visualizzazione
nel browser, la dicitura "sono nel dominio alfa".
delle pagine ad esso associate.
Proviamo adesso a controllare di nuovo la nostra
Per Debian, invece, è sufficiente numerare diversa mente i link simbolici presenti in sites
INFORMAZIONI
Impostazioni necessaria
enabled:
quello di default avrà un valore più basso (ad esem pio, 00 default), mentre gli altri virtual host avran no un valore più elevato (05 alfa.org). Durante il caricamento delia configurazione, quello con indice più basso verrà caricato per primo e prevarrà sulle
I domini che Apache dovrà servire dovranno essere "risolti"
in qualche modo, cioè tradotti nel corrispondente numerico proprio dell'indirizzo IP (cosa che avveniva anche per il domi nio singolo): questo può avvenire tramite DN5 (come gene
ralmente avviene su Internet) oppure tramite una risoluzione
altre configurazioni.
MyDebian;/etc/apachc2/sitei-enabled« ls Irwxrwxrwx
1
root
Irwxrwxrwx
1
root
locale, affidata al file /etc/hosts, che contiene l'elenco dei domini con relativo indirizzo numerico. Ad esempio, per
Bl default
poter eseguire le prove di questo articolo, è necessario un
127.Q.0.1
localhost
«dovrebbe già
192.168.6.19
alfa.linuxpratico.net
192.16B.0.1G
beta.linuxpratico.net
esserci
questa voce
->
/sìtes-available/default
root
65 alfa.org
file /etc/hosts almeno di questo tipo
-l
rotti
->
/sites-available/alfa.org
Forzando un reload della configurazione di Apache, la pagina "principale" del server viene nuovamente
resa disponibile. Configurare un altro virtual host, a questo punto,
Dove 192.168.0.10 è l'indirizzo di rete locale. Se non dispo
diventa banale: è sufficiente copiare ie impostazioni
nete di una scheda di rete, potete sostituirci comunque
già viste per alfa e, con le modifiche opportune per
127.0.0.1, l'indirizzo di loopback. Nel caso vogliate fare le
la distribuzione, creare un nuovo blocco con
prove da un altro client come Windows, sempre non utiliz
VirtualHost, con un altro ServerName e un'altra
zando il DNS, dovrete copiare le voci aggiuntive di alfa e beta nel file hosts contenuto solitamente nella directory
C:\WIND0WS\system32\drivers\etc\ (oppure WINNT al posto di WINDOWS, a seconda delle versioni). Potete utilizzare anche il servizio di DHIS per avere una risolu
DocumentRoot.
Virtual Host basati sulle porte
zione dei nomi tramite il DNS di LinuxPratico.com: in tal caso dovrete registrarvi con vari indirizzi deUipo http://vostronome.linuxpratico.net
©te
Come si è visto, è possibile discriminare i vari virtuai host in base alla porta di collegamento: la porta 80
INFORMAZIONI
\ Configurazione
f
Virtual Host
<VirtualHost
*:*>
ServerName dominio.di.default DocumentRoot
pagme_del_dominio di default
=/VirtualHost>
II file dove andranno inserite le informazioni relative ai virtual host cambia a seconda della distribuzione. In Debian si utilizza una logica piuttosto "pulita": viene creato il file relativo alle impostazioni di un virtual host all'interno della directory /etc/apache2/sites-available/, con un nome che indichi il dominio (ad esempio alfa.org). Quando si vorrà attivare il vir
<VirtualHosT
•:8080>
ServerName alfa.linuxpratico.net
DocumentRoot /var/www/vhost/al fa/pubiichtml </VirtualHost>
tual host configurato sarà sufficiente creare un link simbolico nella directory /etc/apache2/sites-enabled che punti pro
Abbiamo utilizzato ■. • per quella di default, in modo
prio al file con le impostazioni (ovviamente c'è da effettuare
da mettersi in ascolto su qualsiasi porta (ovviamente
un reload della configurazione di Apache), preceduto da due cifre decimali che serviranno per stabilire l'ordine del carica mento delle configurazioni, che vedremo essere discriminante per la precedenza: # ed
/etc/apache2/5ites
# In
-s
presente in Listen), mentre per la sola porta 8080 del dominio virtuale alfa.linuxpratico.net (raggiungibile quindi con http://al.fa.linuxpratico,net:80B0) ver
ranno restituite le pagine del dominio alfa.
enabled
../sites-available/alfa.org G5 alfa.org
Un reload della configurazione di Apache e i virtual host basati su porta sono pronti. Nel caso un certo
Quando si vorrà disattivarlo sarà sufficiente cancellare il link
dominio si volesse rendere disponibile solo per un
simbolico, mantenendo la configurazione per usi futuri.
IP tra quelli disponibili (si ricorda che Apache, di
In Mandrake, tutta la configurazione si sposta nel file
defauit, è in ascolto su tutti gli !P dell'host), sarà neces
Vhosts.conf. nella sezione VirtualNames. Inizialmente ogni voce del file è commentata, ma sarà sufficiente eliminare il ? ad inizio riga per attivare le diverse opzioni necessarie.
sario indicarli insieme alla direttiva Virtual
Host, in
questo modo
«VirtualHost
aaa.bbb.ccc.ddd:">
INFORMAZIONI
Sicurezza dì Mandrake Mandrake, tra le impostazioni di default, ha quelle di negare
l'accesso a tutti gli indirizzi IP che non sono specificati esplici tamente: è una impostazione estremamente sicura [fin trop po), per accertarsi che l'utente che configura il server sappia quello che faccia.
E' possibile utilizzare contemporaneamente virtual host basati su nome e basati sulla porta/IP nella stes
sa configurazione, purché si faccia attenzione che tutto sia coerente (direttiva Listen, NameVirtualHost,
definizione dei virtual host).
Ulteriore configurazione
Poiché l'uso, in questo modo, è assolutamente limitante,
All'interno dei tag <VirtualHost> è possibile speci
invertiamo la condizione di defauìt, andando a modificare
ficare ulteriori direttive, come già visto per ia confi
l'ordine di accesso, permettendo quindi tutte le connessioni tranne quelle esplicitamente negate.
Per far questo, aprite il file commonhttpd. conf, cercate la voce <Directory
/>, sostituite le voci
Order deny.allow Deny
from ali
con le voci Order aUow,deny
gurazione del server generale. In particolare, è possibile utilizzare la direttiva <Directory> per poter cambiare il comportamento di default.
<VirtualHost
*>
ServerName alfa.linuxpratico.net DocumentRoot /var/www/vhost/alfa/public titilli
Allow from ali Oirectory
Non dimenticate di effettuare un reload della configurazione.
Options
/>
FollowSymLinks
AllowOverride IndexOptions
Indexes
None Fancylndexing
</Directory>
ad uno, la porta 8080 ad un altro e così via. La tecnica per realizzarle non differisce molto da quella
ErrorLog /var/log/apache2/alfa error.log
appena vista: è sufficiente indicare nella direttiva NameVirtualHost ':' anziché *, che imposta Apache
</VirtualHo5t>
per "rimanere in ascolto su tutti gli IP e su tutte le
porte". Ricordate che questa direttiva, però, non ha la
In questo esempio nella directory radice del domì
precedenza su quella Listen, che deve necessaria
nio alfa.linuxpratico.net è ammessa la visualizza
mente comprendere la porta in ascolto, altrimenti il
zione indicizzata degli elementi, con l'opzione
server web ignorerà il tentativo di connessione.
Fancy, che permetterà di ottenere un risultato visi vo piuttosto gradevole, ed inoltre permetterà, con ii
Listen 8Q
solo click sul nome di una colonna, l'ordinamento
Listen
ascendente o discendente della stessa.
8680
Inoltre, è stato cambiato il file di log degli errori, in Per ogni blocco di VirtualHost sarà sufficiente indi
modo da avere nel file alfa_error.log solo gli
care, nel tag, anche la porta in ascolto.
errori inerenti a alfa.linuxpratico.net per un
• V
più veloce debug.
Riprendiamo la configurazione del VirtualHost alfa,
Sono molte altre le opzioni riguardanti la personaliz-
e aggiungiamo le necessarie impostazioni:
zazione di ogni singolo virtual host, ma è consiglia bile una lettura alla documentazione ufficiale per
<virtualHost
■>
approfondire l'argomento: quanto presentato è, normalmente, più che sufficiente per la maggior
ServerName alfa.linuxpratico.net
parte degli utilizzi.
DocumentRoot
Spazi condivisi su internet
<Location
Con la connettività sempre crescente, con la possi bilità di avere un IP fisso o quasi fisso (ad esempio,
/var/www/vhost/alfa
/mydoo
DAV t)n </Location>
con il servizio di DHIS per avere un dominio di terzo livello miohost.linuxpratico.net, vedi Hw-6 di
</VirtualHost>
questa raccolta), l'eventualità di avere un disco su Internet, un "contenitore" sul nostro PC casalingo
La configurazione è estremamente semplice nella
dove poter memorizzare i file che vogliamo, diventa
sua forma minima: è sufficiente inserire nel tag
spesso realtà.
Location la directory che si vuole rendere disponi
Ecco qua le indicazioni su come creare uno spazio
bile, e semplicemente inserire la voce "DAV On" per
condiviso WebDAV agendo proprio sulla configurazione
consentire l'accesso via WebDAV. A questo punto,
di Apache, visto che tale protocollo di condivisione
puntando il vostro konqueror all'indirizzo:
si appoggia ad HTTP.
webdav://al fa.linvjxpratico.net/mydoc/
Prima di tutto è necessario installare il supporto per
si aprirà una cartella che vi permetterà la copia del
questo tipo di funzionalità: in Debian i moduli
file come se fosse una cartella locale.
aggiuntivi per Apache stanno nella directory
Da Windows (XP, 2000), si potrà accedere creare
/etc/apache2/mods_available e quelli attivi in
una unità virtuale cliccando su "Risorse di rete" con
mods enabled.
il tasto destro del mouse. connetti unità di rete, e,
Come già visto per i virtual host, sarà sufficiente un
nella voce cartella, inserire l'URL (con http:// anzi
link simbolico da mods enabled a mods available
ché webdav://) della risorsa condivisa, e questa
per l'attivazione:
verrà agganciata e vista come un disco virtuale.
HyDebian:
V ed /etc/apache2/mods enabled
dimenticati della sicurezza.
HyDebian:
# In
Facile vero? Anche troppo, tanto che ci siamo s
. ./fnods-avaUable/dav
.
Per il momento, infatti, non ci siamo posti il proble ma di chi possa accedere a questo spazio condiviso:
in questo modo saranno creati i link simbolici neces
forse è i! caso di limitare l'accesso, per evitare che
sari all'attivazione. Per Mandrake. invece, è general
chiunque possa leggere i documenti qua salvati.
mente già installato come modulo, presente nella
WebDAV, appoggiandosi ad Apache, può utilizzare i
directory /etc/httpd/conf .d/45_mod_dav.conf .Se
meccanismi di autenticazione già visti in preceden
così non fosse, lanciate urpmi
za, compresa la scrittura di un file .htaccess nella
apache2-mod dav
da linea di comando per installarlo.
cartella da condividere (che potrà rimanere visibile
Inoltre, WebDav scrive delle informazioni in una par
nella lista dei file): non è la tecnica più sicura, in
ticolare directory, contenuta nei file di configurazione
quanto, se non vengono impostati propriamente i
deilo stesso: per Debian si trova nella directory
permessi di accesso a questo file, chiunque potreb
/var/lock/apache2/, mentre per Mandrake è
be sovrascriverlo con i propri valori (basta creare un
/var/lib/dav/
file con lo stesso nome e copiarlo nella cartella con
Queste directory devono essere scrivibili da
divisa). Ecco quindi che, se presente una autentica
Apache. quindi deve appartenere all'utente con il
zione basata su .htaccess nelta cartella, dovrebbe
quale gira il server web (che. di default, è apache
essere di proprietà di root. eliminando quindi la pos
per Mandrake e www-data per Debian).
sibilità che possa essere sovrascritto da chiunque.
Può quindi essere opportuno un
Ad esempio è sufficiente un:
HyDebian:/var/lock# chown www-data apache2/
HyDebian:
U
HyDebian:/var/lock# ctimad
HyDebian:
» chown
HyDebian:
U
Per Mandrake il discorso è simile, cambia solo
HyDebian:
# U
l'utente e la path da rendere scrivibile.
■rw-r-■r--
+w apache?/
ed
/var/www/vhost/alfa/mydoc
root.root
climod 644
1
-la root
.htaccess
.htaccess
.htaccess root
.htaccess
Terminata la fase di configurazione di base, si deve
decidere dove inserire questa directory condivisa: si
In questo modo nessuno può sovrascrivere il file
vuole condividere la cartella mydoc del dominio
con sue impostazioni, senza privilegi di root.
alfa.linuxpratico.net
Attenzione, lo stesso vale per l'eventuale file
Quindi, in pratica, si vuole poter accedere da remo
htpasswd cui fa riferimento il file .htaccess, che
to alla directory http://alfa.Unuxpratico.net/mydoc
NON deve essere contenuto in questa directory.
per poterci memorizzare file. Questa directory deve
Una alternativa decisamente più sicura è quella di
esistere e deve appartenere all'utente di Apache: la
impostare le restrizioni di accesso dalle direttive dei
directory va creata partendo dalla public_htm\.
file di configurazione del virtual host.
FTP server facile e sicuro con vsFTPd Poter disporre un server FTP locale può essere utile in molte situazio
ne: scambio di file, aggiornamento delle pagine di un sito web, o anche solo per scaricare un repositon/ di pacchetti... a
cura della Redazione <redazione@linuxpratico.com>
Allo stato attuale il protocollo FTP è, di fatto, lo standard per quanto riguarda il trasferi
mento di file attraverso la rete, in special modo per quelli di grosse dimensioni.
Debian è in modalità stand-alone (quella classi
Ogni giorno si ha a che fare con questo protocollo: il
ca), mentre quella di Mandrake segue quella via
download del nuovo kernel, i repository degli
superserver. Si mostreranno, quindi, le due modali
aggiornamenti della distribuzione o il download
tà, che saranno comunque intercambiabili.
della 150 della distribuzione stessa.
Con la distribuzione Debian testing l'installazione sì
Ha senso installare un server FTP nel proprio ufficio
riduce ad un semplice:
0 a casa? Al di la del puro esercizio, che male non fa, può essere molto utile in diverse situazioni.
# apt-get
update
Se, ad esempio, dovete installare molti computer
# apt-get
instali vsftpd
con la stessa distribuzione, può convenire effettua re un mirror di tutti i dei pacchetti disponibili ed uti
II primo comando, pur se non necessario, è consi
lizzare il server FTP appena installato con sopra il
gliato nel caso vi siano versioni aggiornate sul
vostro repository personale per aggiornare le varie
repository utilizzato.
LinuxBox: dopo lo sforzo del download, tutti gli altri
Dopo il secondo comando, che scarica e installa il
update saranno fulminei!
pacchetto, in pochi secondi il demone è già up and
Oppure, più semplicemente, se disponete di un sito
running, pronto a servire le richieste dei client: sarà
web e volete concedere accesso in modifica ai col
possibile gestire il servizio con i classici comandi
laboratori per la modifica delle pagine web...
start, stop, reload
Gli utilizzi, al solito, sono limitati solo dalla fantasia.
ta scelta dei demone FTP
#
/etc/mit.d/vsftpd comando
II mondo OpenSource offre sempre diverse soluzioni
dove start avvia it servizio, stop lo ferma, reload
ad un problema: nello specifico, esistono diversi
forza il servizio alla rilettura delia configurazione,
server FTP che possono essere installati sulla pro
utile quando sono state modificate ie impostazioni.
pria LinuxBox. Tra i più famosi, è possibile citare
Prima di provare la configurazione, andiamo a veri-
wu-FTP (Washington University FTP, sviluppato
ficare cosa l'installer abbia fatto dietro le quinte.
daN'omononima università) e proFTPd (Improved FTP, un demone con moltissime funzionalità).
# qrep
La nostra scelta, però, non ricade su nessuno dei
ftp:x:181:65534::/home/ftp:/bin/false
ftp /etc/passwd
due presentati, ma va su un piccolo server, vsFTPd. il cui nome chiarisce il motivo della scelta:
è stato creato un utente ftp con identificativo 101,
Very Secure FTPd, un servizio FTP estremamente
con identificativo di gruppo 65534, con una home in
sicuro, scelto per questo dalle maggiori distribuzioni
/home/f tp e senza alcuna shell associata.
e dai maggiori team di sviluppo (RedHat, Debian,
A cosa corrisponde il gruppo 65534? Un rapido con
SuSE, kde.org, kernel.org giusto per citarne alcuni).
trollo in
l'installazione
H
Come si vedrà, sarà possibile installare il server FTP
nogroup:x:65534:
/etc/group
grep 65534 /etc/group
in due modalità: quella classica, con un demone in esecuzione e uno script di start e di stop eseguito al
La directory che verrà vista come root per chi si col
runlevel specificato, oppure in modalità xinetd,
legherà al server sarà, come visto nel /etc/passwd,
avviato dal "superserver" solo quando vi è una
/home/ftp. Uno sguardo a tale directory
richiesta; questo ultimo approccio è più convenien te nel caso di usi sporadici, per evitare un consumo
#
di risorse per servizi che non vengono utilizzati.
drwxr-sr-x
U
-lad
/home/ftp
root
nogroup
4G96 Aug 20 63:40
/home/Up
1 pacchetti installati per Debian e Mandrake seguo no due approcci diversi: la pacchettizzazione per
si vede appunto che appartiene al gruppo nogroup,
17
~ e che ha una s al posto della x: tale flag (detto già
# ftp
bit) fa in modo che qualsiasi file creato all'interno di
Connected to
tale directory appartenga sempre al gruppo della
220
directory principale, ossia /home/ftp, e quindi
Name
nogroup. Per sincerarci di questo, si crei una
331
directory prova all'interno di tale home
127.0.0.1
127,8.9.1.
(vsFTPd 2.0.1)
(127.0.0.1:redazione): Please specify
ttie
Password:
230 Login
successful.
# mkdir /home/ftp/prova
Remote
# Is
Using binary mode to
lad /home/ftp/prova
drwxr-sr-x
root
nogroup
redazione
password.
/home/ftp/prova
System type
ftp> Is
UNIX. transfer
files.
-la
200 PORT command 150
is
Here
comes
successful.
Consider
using
PASV.
thè directory listing.
Prova su strada
drwxr-xr-x 2
1QG1
1B61
<J996 Aug
21 07:25
.
A questo punto è proprio arrivato il momento di pro
drwxrwsr-x 5
0
50
4096 Aug
21 37:24
..
vare il nuovo servizio: sarà sufficiente aprire un
■™
1
1001
1001
19 Aug
21
07:25
.bash
history
altro terminale e digitare semplicemente
-rw-r--r-- 1
10Q1
10G1
7G4 Aug
21 97:24
.basti
profile
.rw-r--r-- 1
1001
1001
1290 Aug
21 07:24
.bashrc
*
ftp
127.0.0.1
Connected 226 Name
to
226
127.0.0.1.
(vsFTPd 2.0.1)
257
(127.0.0.1;root):
Directory send GK.
ftp>
anonymous
pwd
"/nome/redazione"
ftp>
ed
331 Please specify thè password.
250
Password:
ftp> pwd
230
Login
successful.
Remote System
Using binary mode to ftp> Is
257
type is
**
..
Directory
successfully
changed.
"/home"
UNIX. transfer
Questa volta, a differenza dell'utente anonimo, la
files.
directory in cui si viene posizionati subito dopo la
-la
200
PORT
command
150
Mere
coraes
successful.
Consider
using
PASV.
login non è quella standard dell'ftp (/home/ftp), ma quella dell'utente stesso, che ha anche la possibilità
thè directory listing.
drwxr-sr-x
3
0
65534
4096 Aug
21
07:18
.
di cambiare directory, e vedere tutti gli altri file con
drwxr-sr-x
3
8
65534
4G96 Aug
21
07:18
..
gli stessi diritti e privilegi normalmente concessi
drwxr-sr-x
2
0
65534
4G96 Aug 21 07:18
prova
con la shell. Questo comportamento, ovviamente,
send
0K.
226 ftp»
257
Directory
può essere modificato a piacere agendo sul file di configurazione.
pwd
V
ftp>
Una prima persunalìzzazione
Cosa è successo? E' stato effettuato un collegamen
è vsftpd.conf, che si trova nelia directory /etc,
II file di configurazione che sarà di nostro interesse to al server locale, utilizzando l'indirizzo di loopback
insieme ad altri file e directory relativi a! servizio
(per evitare di conoscere gli altri indirizzi di rete), e
che. eventualmente, potranno essere creati.
con un utente anonimo (anonymous), digitando la
Le possibilità di modifica sono veramente molte, ma
propria E-Mail come password (in questo caso non
qua di seguito vedremo quelle che potrebbero inte
era neppure necessaria). La lista del file presenta
ressare gli utenti standard, rimandando al manuale
solo la directory prova creata in precedenza e nien te altro: osservando la directory corrente, si scopre,
# man
vsftpd.conf
con non poca sorpresa, di essere nella root, che non
assomiglia però a quella di sistema!
ulteriori approfondimenti e un elenco completo.
Infatti, ogni utente, in questo caso un utente senza
Prima di tutto la personalizzazione: qualsiasi server
credenziali valide (anonimo), perde la visibilità di
FTP si annuncia indicando almeno chi è che fornisce
tutto il contenuto presente del filesystem del
il servizio: è sufficiente aprire il file di configurazio
computer che offre il servizio FTP.
ne, cercare la stringa ftpd
Questa tecnica, nota come ehroot{) (acronimo per
ceiletto che dovrebbe essere presente (di default
CHange ROOT), serve appunto a modificare la visi
questa voce è commentata), e scrivere il banner
bilità della root per gli utenti, in modo che questi
desiderato.
banner, eliminare il can-
siano imprigionati in una gabbia (jail) dalla quale non possono uscire, e, quindi, non possono visiona
#
re o modificare file non di loro pertinenza.
Connected
Cosa accade con gli altri account del sistema?
22G
ff grep
Decisamente più chiaro.
redazione
/etc/passwd
redolione:x:1001:1001:Redazione LinuxPratico ,,,:/dome/redazione:/bin/bash
ftp
127.G.o.i
to 127.0.0.1.
LinuxPratico
FTP Test
Server
E se si volesse inserire un MOTD {Message on thè day, messaggio del giorno), per ogni directory, indi
cando magari cosa contiene la stessa? Cerchiamo di capire cosa accade alla loro login:
Per prima cosa è necessario controllare che la
~
direttiva dirmessage enable sia posta a YES nel file
Questa volta il messaggio di errore che verrà
di configurazione (se state utilizzando quello di
mostrato sarà
esempio è già impostata su questo valore). Fatto questo, è sufficiente creare un file .message
#
(attenzione al punto iniziale), con dentro il testo che
Connected
si vuole visualizzare: ad esempio
421
ftp
127.0.0.1 to
There are
127.G.9.1. too many
connectlons
from your ioternet # cat
>
/home/ftp/.nessage
address.
«FINE
Collegandosi invece da un altro indirizzo, utilizzan LinuxPratico
Test
do TIP della della scheda di rete, il coilegamento
Server
avviene normalmente FINE #
#
ftp
192.168.6.3
Connected
ta
192.168.0.3.
Questa istruzione scriverà nel file .message creato il
220 LinuxPratico FTP Test
contenuto che vedete sopra, senza la parola FINE,
Naine
(192.168.0.3: rootl :
Server flnonymous
nella directory principale {verrà quindi mostrato a tutti gli utenti anonimi al login}. E' il caso di proteggere tale fife dalla scrittura, per evitare che qualche utente non si diverta troppo...
a
chnod
o-w
Chi ha accesso
al sistema?
.ir-essage
Per default. solo gli utenti anonimi hanno accesso al Già subito dopo la login si dovrebbe vedere che
sistema, mentre questa possibilità è negata agli utenti validi (quelli presenti in /etc/passwd). E' pos
qualcosa è cambiato:
sibile modificare questo comportamento, agento sul f
flp
file /etc/vsftpd.conf. In particolare, già nel file di
127.0.8.1
esempio sono presenti queste impostazioni:
LinuxPratico
Z30-1 238-
238
Test Server
anonymous enabte=YES
••*
local_enable=YES
•••*»
Login
successful.
La prima viene indicata per chiarezza, ma in man
Remote System type ìs UNIX. Using binary mode to
transfer
canza di essa si assume comunque un valore pari a
fìles.
YES. La seconda, invece, accetta le connessioni
ftp>
anche dagli utenti di sistema.
II file . message si potrà inserire nelle varie directory:
Banalmente, nel caso si voglia disattivare comple
l'utente, navigando tra esse, sarà avvertito del con
tamente gli accessi anonimi, lasciando solo quelli
tenuto dal client FTP utilizzato.
autorizzati, sarà quindi sufficiente modificare il
Una volta attivato il server sarebbe opportuno evi
valore delle due direttive
tare degli abusi: potrebbe essere opportuno, per prima cosa, limitare il numero degli utenti che pos
anonymous enable»N0
sono collegarsi via ftp. E' sufficiente aggiungere in
locai enable=VES
coda al file di configurazione la direttiva Gli utenti anonimi, anche quando sono ammessi al max
sistema non possono scrivere file, ma soltanto
clients=l
effettuare download. se, ad esempio, desiderate che un solo utente alla
Se, invece, si vuole permettere loro di effettuare
volta possa connettersi. Ai secondo tentativo di colle
upload, è necessario specificare la direttiva
gamento (potete provare direttamente aprendo un
secondo terminale} si avrà il seguente messaggio:
write_enable=YES anon upload enable=YES
#
ftp
127.0.6.1
Connected
to
Se. oltre agli uploatì. si vuole concedere possibilità
127.e.9.1.
421 There are too irany connected users,
please try later.
ulteriori, come ad esempio di cancellare o rinomina re file, è necessaria una ulteriore specifica, come
E' anche possibile limitare il numero di richieste
pure se si vuole lasciare la possibilità di creare
provenienti dallo stesso IP: ad esempio, si può per
nuove directory, rispettivamente:
mettere l'accesso a 5 persone, e massimo 1 con nessione per singolo indirizzo. Anche in questo
anon otherwnte enable=YES
caso, è sufficiente inserire la direttiva
anon mkdir write enable^YES
maxper
Attenzione: permettere ad utenti anonimi di
ip=l
scrivere file potrebbe avere conseguenze, anche
»
J
legali, non indifferenti. E' possibile comunque sta
na trasferiti sul server: in questo modo si evita, ad
bilire i permessi con i quali i file uploadati vengono
esempio, che un servizio ftp non monitorato venga
creati, con la direttiva anon
utilizzato come zona di scambio per materiale non
umask
troppo legale.
Le stesse configurazioni viste per gli utenti anonimi
file__open_mode-Q777 anori
sono applicabili agli utenti locali, spesso modifican
umask-0777
do semplicemente il nome della direttiva da anon a i permessi con i quali i file vengono scritti è una
locai. Un buon valore per i file uploadati dagfi
operazione di matematica binaria (il complemento
utenti reali caricati nelle proprie nome è
di anon umask rispetto a f ileopen mode): se riportate i valori sopra presentati, i file saranno
locai
umask=B77
creati con permessi 000, e quindi nessun utente, tranne ovviamente root, può operare sui file appe
che rende i file gestibili solo dall'utente stesso.
INSTALLAZIONE
Installazione dì vsFTPti su Mandrake Lìnux L'installazione di vsFTPd sulla distribuzione Mandrake è leg-
e
service
xinetd
restart
germente differente da quella di Debian. sia per tipo di avvio del server che per alcune configurazioni di default.
Dovrebbe essere tutto a posto. Verifichiamo che il servizio
E' consigliabile scaricare la versione aggiornata presente in
ftp sia pronto a rispondere alle connessioni:
Mandrake Cooker, che al momento è ia 2.0.1, anziché utiliz zare la 1.2.1 presente nelle repository ufficiali.
*
Scaricate il pacchetto da
root 2731
S wget
Non c'è alcun server in esecuzione: eppure collegandosi via
ftp://fr2.rpmfind.net/linux/HandrakeCooker/cooker /i586/rnedia/main/vsftpd-2.B.l-ln)dk.i586.rpm
ps
.nix
|
grep
...
vsftpd
S 20:10 0:00 grep vsftpd
FTP sembra funzionare tutto:
Poiché il pacchetto RPM non crea né l'utente né il gruppo
# ftp
FTP, è consigliabile preparare il sistema manualmente prima
Connected
127.S.0.1 to 127.G.Q.1.
dell'installazione.
Ad ogni utente è associata una shell, come visibile nel file passwd: nel caso dell'utente FTP, questa non è necessaria e, per ragioni di sicurezza, si imposta a /bin/false, che è un
valore che identifica nessuna shetl. Tale valore, però, per essere assegnato deve essere presente nel file /etc/shells;
se non lo fosse, è sufficiente il seguente comando # echo
"/bin/false"
>=■
groupadd
# useradd
-g
74
-s /bin/false
(127.0.0.1:root): Ptease
specify
anonymous
thè
password.
Password:
230 Login successful.
la lista dei processi attivi, si scoprirà che è in esecuzione:
ftp
-d /var/ftp
331
Se adesso, a connessione avvenuta, si richiede nuovamente
/etc/shells
A questo punto si può creare il gruppo e l'utente FTP: ff
Name
-u 74
-g 74
#
ps
aux
|
grep
vsftpd
nobody
2771
...
SN
20:11
0:00
ftp
2773
...
SN
20:11
G:00 vsftpd
vsftpd
ftp
Come detto, quindi, viene attivato a richiesta!
Ecco, finalmente, l'installazione del pacchetto:
A questo punto, c'è da chiedersi cosa sia xinetd e come vada configurato: da una rapida ricerca in /etc, dove ci si aspetta
#
urpmi vsftpd-2.0. l-lmdk.i586. rpir
di trovare qualche file di configurazione, si scopre che è pre sente un file vsftpd, all'interno della directory
L'unica operazione effettuata dietro le quinte dagli script di
/etc/xinetd.d/, con i! seguente contenuto
installazione contenuti nel pacchetto RPM è la creazione, nella home scelta per l'utente ftp. di una directory pub
service
ftp
(piuttosto comune, se avete navigato tra I siti ftp delle varie distribuzioni), con il gìd bit settato, come visto per Debian.
socket
=
streara
Verifichiamo che tutto sia attivo:
wait
=
no
user
=
root
server
= /usr/sbin/vsftpd
rtice
=
10
dlsable
=
no
#
ftp
ftp:
127.8.9.1 connect:
Connection
refused
II server non è partito, mentre con Debian non avevamo
type
avuto problemi. Osservando la directory /etc/init .d/ non
c'è niente che assomigli a vsftpd da lanciare! Niente paura: nella pacchettizzazione di Mandrake, come
Senza entrare troppo nel dettaglio, ad ogni connessione in
detto inizialmente, il servizio FTP non viene lasciato in
entrata sulla porta ftp fla porta viene decisa osservando
esecuzione, ma viene lanciato alla bisogna tramite il
/etc/services) viene attivato il servizio presente alla diret
superserver xinetd- Il pacchetto RPM ha provveduto a modi
tiva server= e rimane in esecuzione fino alla cessazione del
ficare la configurazione di xinetd per gestire anche il nuovo
collegamento.
server, ma non lo ha rìavviato con le nuove impostazioni.
Il significato delle impostazioni di /etc/vsf tpd.conf riman
Provvediamo immediatamente:
gono le stesse di quelle mostrate in queste pagine.
Ovviamente è necessario che la directory nella
si del file creato come la differenza tra 777 e umask
quale viene scritto il file sia accessibile agli utenti:
(777 - 333 = 444, che corrisponde proprio a - r--r- -
ad esempio è possibile creare un percorso come
r- - considerando che r vale 4, w vale 2 e x vale 1).
segue dedicato all'upload:
Configurazione avanzata
# mkdir /home/ftp/incomng
Nei precedenti esempi si è visto come i file che
# chmod a+w /home/ftp/incoming
abbiamo creato siano di proprietà di numeri anziché del nome del gruppo e dell'utente relativo. Questo è
Una verifica chiarirà immediatamente queste impo
dovuto in primo luogo proprio a quella gabbia chrootO nella quale viene imprigionato ogni uten
stazioni, a prima vista un po' criptiche.
te anonimo alla sua login: per riuscire a tradurre i # echo #
ftp
"test
Connected 220
numeri in utenti o gruppi, infatti, c'è bisogno di
file* > testfite.dat
poter accedere ai file /etc/passwd e /etc/group,
127.6.G.1
to
ma questo non è possibile, altrimenti chiunque
127.9.8.1.
LanuxPratico
FTP Test
Name
(127.9.0.1:root):
ftp>
pot
potrebbe accedere al filesystem. uscire quindi dalla
Server
home riservata al servizio ftp, e addio sicurezza.
anonymous
Un modo molto semplice, quindi, per poter leggere
locai:
in chiaro queste informazioni è quello di copiare i
testfile.dat
testfile.dat
remote:
200 PORT command successful. 553
CouLd
ftp=
ed
not
create
due file che devono essere visibili all'interno della
testfile.Oat
home del servizio ftp anonimo.
Consider using PASV.
file. # rokdir
incoming
250 Direetory
# cp /etc/group /home/ftp/etc
ftp> put testfile.dat
locai:
testfile.dat
20S PORT command
remote:
testfile.dat
successful.
Consider using
A questo punto sarà sufficiente impostare la diretti
PASV.
va text userdb names a YES, visto che, per motivi
150 Ok to send data. 226 File
receive 0K.
10 bytes
sent
in
/hoine/ftp/etc
# cp /etc/passwd /home/ftp/etc
successfully changed.
prestazionali, è disattivata
0.0G secs
(29.1
kB/s)
text_userdb names=YES
11 file è stato creato nella directory incoming, ma non nella root, in quanto non vi erano sufficienti
Effettuando un rcloaci della configurazione
permessi per poterlo fare.
Ma con quali permessi è stato creato il nuovo file?
#
ftp> ls
si potrà verificare come gli ID numerici siano spariti
-la
20G PORT command
successful.
15G Here comes thè directory
Consider using
/etc/init.d/vsftpd
reload
PASV. ftp> ls
Usting.
drvxrwsrwx 2
9 65534
4096 Aug
21
16:34
.
200
PORT
drwxr-sr-x 4
9 65534
4996 Aug
21
15:3G
..
150 Here
3
161 6S534
-la command eomes
successful.
thè
Consider using
PASV.
directory listlng.
drwxr-sr-x 5
root
Aug
21
16:43
.
drwxr-sr-x 5
root nogroup 4996 Aug
21
16:43
..
■r--r-r-- 1
root
nogroup
21 98:49
.rressage
Questo perché abbiamo utilizzato un valore di
drwxr-sr-x 2
root
nogroup 4096
Aug
21
16:41
etc
nogroup 4096
Aug
21
08:59 prova
226
Directory
send
10 Aug 21 16:32
testfile.dat
0K.
nogroup JQ96
99 Aug
file open mode pari a 0777 e una anon umask pari
drwur-sr-x 2
root
a 9777. Se, ad esempio, avessimo cambiato la
drwxrwsrwx 2
root nogroup 4G96 Aug 21
anonumask pari a G333, il file sarebbe stato creato
226 Dlrectory send
con permessi
ftp> ed upload 250 Directory successfully
-r--r--r-- 1
Senza
open
19165534
fare
troppi
1G Aug
21
calcoli
16:32
testfile.dat
binari,
con
una
file mode pari a 777, potete vedere i permes-
INFORMAZIONE
ftp>
ls
16:34 upload
0K.
changed.
-la
203
PORT command
159
Here
Comes
successful.
Consider
thè directory
using
drwxrwsrwx 2
root nogroup -1G96 Aug 21
16:34
drwxr-sr-» 5
root
-r--r--r-226
1
Directory
PASV.
listing.
,
21
16:43
. .
nogroup
21
16:32
testfile.dat
ftp
nogroup '1096 Aug
send
1G Aug
0K.
Dove posizionare i file? Da notare come il file caricato dall'utente anonimo E' buona norma rendere un sito FTP ben navigabile, altri menti il visitatore occasionale potrebbe perdersi tra le miriadi di directory presenti.
Prima di tutto, è consigliabile inserire i file pubblici in una
sia stato mappato sull'utente ftp. E se queste informazioni fossero considerate confi
denziali? Intanto è possibile eliminare le voci dai file
directory /pub. dal quale si potrà accedere a tutto il conte
/home/ftp/etc/passwd e/home/ftp/etc/group che
nuto destinato agli utenti anonimi.
non fossero necessarie. Se si desidera nascondere
gli ID numerici, ma non si vogliono neppure mostra-
21
re i veri utenti, esiste un'altra direttiva che mostra,
rispettivamente per una login anonima e una login
per qualsiasi ID di utente e gruppo, la stringa ftp.
locale, proprio come desiderato e con una precisio
Per attivarla, è sufficiente inserire la voce
ne accettabile.
hide
ìds=YES
in coda al
file
di configura
zione (eliminando, nel caso, l'altra direttiva textuserdb
names
per evitare possibili incon
Controllo dei sistema: logging
gruenze): in questo caso, ovviamente, non importa
copiare né /etc/passwd né /etc/group.
Poter reperire le informazioni riguardo a chi ha usu fruito del servizio FTP può essere di un certo inte
ftp> ls
260
resse sia a fini prettamente statistici, sia in caso si
-la
PORT comnand
15G Here
comes
successful.
thè directory
Conslder
usìng PASV.
siano verificatì problemi. Un metodo semplice per tenere sotto controllo
listing.
l'operato, anche se poco incline al rispetto della 1
ftp
ftp
drwxr-sr-x 2
ftp
ftp
4096
drwxrwsrwx 2
ftp
ftp
4096
- r--r-- r- -
21
08:49
.message
privacy, specialmente in ambienti multiutente, è
Atig
21
08:5G
prova
abilitare l'opzione setproctitle enable=YES, che
Aug
21
16:34
upload
99 Aug
permette, semplicemente osservando l'output del comando ps
auxww, di conoscere le operazioni che
Altro aspetto fondamentale cui bisogna necessaria
sono in esecuzione (dopo l'attivazione di questa
mente fare attenzione è relativo alla velocità di tra
opzione, sarà necessario un restart del server).
sferimento: saturare la banda in uscita è un attimo, e anche se la navigazione è più che altro banda in
# ps
entrata, il ritardo nella conferma dell'avvenuta rice
roct
1123
0.8
1.3
3036
816
?
Ss
nobody
1141
0.2
1.6
3146
1064
7
Ss
auxww
|
grep
zione dei pacchetti potrebbe rallentare II tutto in maniera non tollerabile.
18:47
vsftpd:
Ecco quindi che conviene mettere un filtro alla velo
cità di download degli utenti, magari distinguendo
vsflpd: ftp
1163
~
vsftpd
0.1
1.7
gli utenti anonimi dagli utenti di sistema, che
3164 UBO
vsftpd:
USTEI1ER
19:15
127.9.8.1:
?
8:BB
S
0:86
connected
19:18
127.B.8.I/ftp:
B:BG
RETR test.dat
andranno trattati con un occhio di riguardo. E1 suffi
ciente l'inserimento di due nuove direttive
C'è un utente connesso da 127.G.0.1, che sta sca ricando il file test.dat, come evidenziato dalle
anon
max
localjnax
righe in grassetto.
rate=lS246
Oltre a setproctitle, è possibile ricorrere ai log su
rate=2Q480
file: di default sono disattivati, anche se il file di per impostare a lQKb/s per i client anonimi (i valori
configurazione di esempio che si sta modificando
indicati sono in byte. 1024 x 10) e 2QKb/s per gli
ha già inserita l'opzione per attivarli
utenti registrati. Per effettuare una prova, copiate un file abbastanza grande (basta qualche Mb) nella
xferlag_enable=YES
directory /home/ftp, oppure, se non sapete cosa copiare, generatelo a caso con
I
file
sono
normalmente
presenti
in
/var/log/vsftpd.log ma fate attenzione perché # dd if=/dev/urandom of=/bome/ftp/test-dat bs=lH count=2
vsftpd utilizza un suo formato di memorizzazione dei log, che non è comune agli altri demoni FTP. Ha
e provate ad effettuare il download loggandovi
la forma che segue:
~
prima come utente anonimo e poi come utente di sistema. I risultati saranno diversi, e restituiranno
Sat
Aug 21
qualcosa del tipo
16:56:26
Client
2BS4
[pid 744]
"127.G.0.1",
tftp]
OK DOWNLOAD:
"/test.dat",
2997152 bytes, 16.31Kbyte/sec
2097152 bytes
received
in
198.71
2097152 bytes
received
in 99.53
secs
secs
(10.3
kB/s)
(20.6
E' comunque possibile attivare il formato standard dei log attivando l'opzione xferlog_std_format=YES, modificando l'output come segue:
WEBOGRAFIA
Riferimenti web La homepage di vsFTPd: http://vsftpd.beasts.org
La pagina del manuale in linea: http://vsftpd.beast5.org/v5ftpd conf.html Gli esempi di configurazione presenti sulla homepage ftp://vsftpd.beasts.org/uEers/cevans/untar/vsftpd-2.0-l/DCWLE/ Informazioni sulla compilazione dei pacchetti e, in generale,
#
tail
/var/log/xferlog
Sat Aug 21
17:05:OB 2084 202 127.0.0.1 2097152 /test.dat h
o a
redaiione@linuxpratiCQ.com
ftp G
■
e
Adesso è possibile utilizzare i classici strumenti di analisi per le statistiche .del server FTP. Nel caso si vogliano entrambi i sistemi di logging
(quello nativo vsftp è decisamente più completo), è possibile abilitare nel file di configurazione l'opzione
sulla configurazione: http://www.vsftpd.org
tfual_log_enable=YES
~
Squid: un proxy per navigare veloci e sicuri Un proxy si pone al centro della connessione tra un client ed un server per memorizzare gii elementi ricorrenti e fornirli velocemente
a cura della Redazione <redazione@linuxpratico.cora>
Aprire un browser, connettersi ad un web
server, è un'operazione diventata ormai naturale: se il web server è affacciato su Internet, esso può essere anche raggiunto da chiun
del web server da contattare.
que disponga di una connessione.
Ecco che un eventuale oggetto presente nella
Quando il numero degli utenti cresce, è molto facile
cache del proxy, se riuscisse ad evitare un trasferi
che i siti visitati siano piuttosto comuni: in un ufficio
mento tramite una connessione lenta, renderebbe
dì persone appassionate di Linux saranno in molti a
più fluida, e non di poco, la navigazione.
tenersi aggiornati leggendo Siashdot, LinuxToday o
Tipicamente ii proxy è situato all'interno della rete
Linux Weekly News:
locale, o, al limite, presso il provider che fornisce
http://www.slashdot.org
connettivita (al quale siamo connessi direttamen
http://www.lìnuxtoday.com
te), mentre il web server da contattare può essere
http://www.lwn.net
anche molto distante dal browser, con tempi di
Ogni browser, quindi, si connette al web server, e
accesso che possono anche superare diversi
da esso scarica t testi e le immagini facenti parte
secondi.
degli articoli.
Squid non è solo un caching proxy: tale software
Quante volte? Una per ogni utente.
dispone di una serie di caratteristiche estremamen
Il vostro browser, dietro le quinte, cercherà di
te interessanti per quanto riguarda la sicurezza
ottimizzare quanto possibile: non effettuerà ad
degli accessi, con la possibilità di regolare l'utilizzo
ogni collegamento il download dei logo del porta
del web in base a fasce orarie, agli IP dì provenien
le preferito o delle icone presentì sulla homepage,
za delle connessioni, all'identità dell'utente. Grazie
ma memorizzerà tali file nella cache locale e utiliz
ad esso, sarà possibile inibire la navigazione in certi
zerà tale memoria per rendere la navigazione più
orari, bloccare alcuni siti, limitare il download di file
veloce e fluida.
con certe estensioni ecc.
La cache, però, è locale al singolo utente, mentre
Squid, inoltre, può essere esteso con software di
sarebbe opportuno disporre di una cache globale
terze parti: vedremo come sia possibile, utilizzando
per tutti gli utenti: se un utente visualizza un ogget
privoxy, bloccare banner pubblicitari, GIF animate,
to X (sia esso una immagine o un documento
cookies e quanto altro possa rendere la navigazione
HTML), tale oggetto dovrebbe essere immediata
lenta e caotica.
mente disponibile anche per gli altri utenti che ne
facciano richiesta.
Installazione
Fornire un servizio di caching globale è solo una
Con Debian l'installazione di Squid si riduce a pochi
delle funzioni dì SQUID, il proxy server più diffuso in
semplici passaggi: al solito sarà opportuno effettua
ambito Linux, argomento di queste pagine.
SQUID, il proxy
server più famosa
re un update delle sorgenti, in modo da verificare
che non vi siano nuove versioni, e successivamente digitare:
#
apt-get
instali
squid
Un proxy è un apparato che si posiziona tra i due attori della connessione: il browser non si connette
in pochi minuti sarà tutto installato sulla vostra
più direttamente al web server, ma al nuovo dispo
Linux Box. E' frequente che l'installazione termini
sitivo intermedio: quest'ultimo effettuerà la connes
subito dopo il download de! pacchetto .deb, con il
sione al web server, e restituirà i dati al browser in
seguente errore:
maniera più o meno trasparente. Sembrerebbe che il passaggio in più, anziché aiuta
Setting
re a velocizzare le operazioni, appesantisca inutil
Creating
mente la connessione, tuttavia vi sono molti van
FATAL:
up
squid
squid
(2.5.6-11)
Could not
determine
taggi in questo tipo di procedura: prima di tutto, la
velocità con la quale viene raggiunto il proxy è almeno di una grandezza superiore rispetto a quella
...
spool directory strutture fuUy quaUfied hostname. Please set
Squid
Cache
(Version
'visible liostnanre1
2.5.STABLE6):
Terminateli
abnormally.
Tale errore si riferisce al fatto che non è stato confi
richieste, gli errori, gli oggetti memorizzati, saranno
gurato un FQDN (Fully Qualified Domain Wame) per
tutti eventi che verranno scritti in questi file.
la vostra macchina. Le possibilità di risoluzione
Squid, come detto, dovrà memorizzare in cache gli
sono due, entrambe molto semplici: potete agire
oggetti di uso più frequente: in /var/spool/squid
sul file /etc/hosts, inserendo fé informazioni man
si potrà trovare la memoria del proxy, con una stra
canti, oppure editare il file /etc/squid/squid.conf
na disposizione:
e settare la direttiva visible hostname come indi
cato dal messaggio di errore. Optiamo per la
kabubi:/var/spool/squids
prima soluzione.
tot3l
Is
-l
64
Per verificare che veramente il vostro FQDN non è
drwxr-xr-x
258 proxy
proxy
4996
Oct
18
01:34
stato impostato, lanciate, da console:
drvxr-xr-x
25B proxy
proxy
4096
Oct
18
01:34 81
#
drwxr-xr-x
258 proxy proxy
4096 Oct
18 91:34 9E
drwxr-xr-x
258
4096
Oct
18
-rw-r
1
18
01:34
hostname
hostname:
--fqdn
Unknown
host
proxy
proxy
proxy
proxy
0
Oct
01:34
88
GF
swap.state
Proviamo a modificare il file /etc/hosts in questo modo:
Ben 16 directory {da GQ a 0F - da 0 a 15 in esadecimale). e all'interno di ognuna di esse altre 256 (da
kabubi:/» liead
00 a FF, da 0 a 255 in esadecimale) directory
-n 2 /etc/hosts
127.8.8.1
localhost
192.16B.0.2
kabubi.olt rei inux. Lari
kabubi:/var/spool/squid/B8* Is
kabubi
-l
tota! 1624
dove
e
drwxr-xr-x
2
proxy
proxy
4096 Oct
18 01:34 00
oltrelinux.lan è il nostro domino interno. A questo
kabubi
è
il
nome
del
server
proxy
drwxr-xr-x
2
proxy
proxy
4096 Oct
18 81:34 81
drwxr-xr-x
2
proxy
proxy
4096
Oct
18
01:34
FÉ
drwxr-xr-it
2
proxy
proxy
4Q96
Oet
1B
01:34
FF
punto il comando precedente non restituirà più errore: kabubi:/' hostname
--fqdn
kabubi.oltrelinux.lan
Questa è la struttura dove Squid memorizzerà gli oggetti in cache, seguendo le disposizioni impartite
kabubi:/# cinsdcmainname
nel file di configurazione: la strana disposizione
oltrelinux. lan
delle directory è stata studiata per minimizzare i A seguito degli errori, SQUID non era andato in ese
tempi di accesso alle informazioni.
cuzione. Per lanciarlo nuovamente è sufficiente il
Gli oggetti memorizzati in cache, infatti, potranno
comando
essere tantissimi, e la creazione di una, o poche directory, con migliaia di file in ognuna avrebbe
# /etc/init.d/squitl
Starting
proxy
reso troppo lento l'accesso ai singoli file.
start
server:
Creatmg
squid spool
2G04/10/18 01:3<l:3B|
Creating
Swap
directory
structure
Squid in esecuzione Squid è stato già lanciato ed è in esecuzione: se
Directories
non è stata variata la configurazione di default,
squid.
rimane in ascolto sulla porta 3128 TCP. Questa volta il server proxy si attiva senza ulteriori
messaggi di errore: vedremo successivamente il
# netstat
significato di quei Creating,,.
tcp
l'albero delle directary
-an
0
j
grep 0
3128 LISTEN
0.6.0.0:3128
Proviamo quindi ad utilizzarlo, visto che è in ascolto
ed i file di Squid
per tutti gli indirizzi: qualsiasi sia il nostro browser, sarà sufficiente inserire l'indirizzo IP del server
La configurazione di Squid non è considerata sem
proxy (nel nostro caso 192.168.0.2) e la porta. In
plicissima. Vedremo qua di seguito di analizzare i
Mozilla Firebird, ad esempio, è sufficiente andare in
principali file con i quali sarà necessario interagire.
Tools -> Options. Connection Setting (il pulsante in
In /etc esiste una directory, /etc/squid/, che com
fondo alla finestra), e da lì indicare IP e porta, pre
prende il file di configurazione squid.conf: è un file
mendo OK per confermare il tutto. A questo punto
lunghissimo (oltre llOKb) e lungamente commenta
siamo pronti per navigare tramite i! proxy: inserite
to. In /var/log/squid sono presenti tre file di log
l'uri nella barra del proxy, premete invio e...
kabubi:/var/log/squid# Is total
-l
ERROR
4
Thè
-rw-r
1
proxy oroxy
-rw-r
1
proxy
■rw-r
1
prony proxy
proxy
9
Oct
2162 Oct 8
Oct
18 91:34 18
81:34
access.log
requested URL could not be
While trying to retrieve
cache.log
18 81:34 store.log
http://www.oltrelinux.com/ Thè
following error was
Access
che andremo ad analizzare successivamente; le
retrieved
thè URL:
Denied.
encounteretì:
Errore. Il proxy ci avverte che la configurazione per gli accessi ci impedisce di visualizzare il sito richie sto: questo è dovuto al fatto che Squid, nella confi gurazione di default, nega a tutti l'utilizzo del proxy,
Proxy non attivo Collegamento dire Ito
per evitare spiacevoli inconvenienti (ad esempio, un
senza Proiy
utente esterno che, tramite il vostro proxy e quindi
con il nostro IP, faccia un po' di danni in giro).
Web Server
Ecco che, per poterlo utilizzare, sarà necessario modificare il file di configurazione, nella sezione relativa alle ACL, Access Control List, che controlla
Proxy attivo
no appunto gli accessi al proxy,
Le ACI di Squid Controllare chi possa utilizzare cosa è un ottimo vantaggio: senza invocare scenari di controllo glo
bale, regolamentare l'utilizzo del web è quantomai opportuno per evitare abusi, distrazioni o altro. Squid permette di raggruppare, con un nome mne
monico (detto aclname), alcune caratteristiche di connessione; successivamente, è possibile riferirsi a tale insieme di caratteristiche semplicemente con il nome ad esso assegnato.
Ad ogni aclname corrisponderà un comportamento ALLOW, se l'accesso al proxy è consentito, o DENY,
Col lega meni o lento
nel caso non lo sia. Se, ad esempio, volessi indicare
Collegamento veloce
la mia rete locale, potrei definire una ACL in questo modo
act
Nello schema sono rappresentati ì due
miarete src
scenari con e senza proxy attivo
192.168.0.9/24
che significa pressappoco: "crea una ACL (ad) dì nome miarete (miarete): tale ACL comprenderà tutte le connessioni provenienti da un IP sorgente
II file di configurazione è ben commentato, e pre
(src) proveniente dalla rete 192.168.0.x".
senta le varie forme utilizzabili per la configurazione.
Per abilitare l'uso del proxy per la mia rete locale,
Cerchiamo di capire il perché Turi richiesto sia stato
potrò semplicemente inserire una direttiva del tipo:
negato: appena installato nessuna ac\ che riguar
di la rete è attiva, tranne localhost, che identifica http access allow niarete
l'indirizzo di loopback:
che, banalmente, significa: abilita (allow,) l'uso del
ad
localhost
src
127.5.9. 1/255.255.255.255
proxy fhttp accessi per le connessioni provenienti dalla ACL miarete (miarete).
http access
allow localhost
Per negare l'utilizzo di Squid, invece: Se la connessione fosse stata generata proprio da http access
localhost, allora avrebbe avuto successo.
deny miarete
Una riprova è quello che serve per capire meglio:
Ma non è finita certo qui; si potrebbe considerare
aprite il vostro browser sulla Linux Box che ospita
tutte le connessioni che hanno per destinazione il
squid, configurate il proxy per http utilizzando
sito oltrelinux.com:
127.0.0.1 come indirizzo e porta 3128. Funziona!
Se non c'è il server grafico installato? Non ci sono acl miosite dstdomain
problemi, è sufficiente un browser testuale, ad
.oltre1.inux.com
esempio links; se non lo avete, è sufficiente un: oppure a tutte le connessioni effettuate
in orario di
ufficio {9-13, 14-18) nei giorni feriali:
0
act
A questo punto è sufficiente lanciare links:
orauff MTWHF 9:B6-13:Q6 14:00-18:00
dove MTWHF sono le iniziali dei giorni della settima
1
apt-get
links
instali
links
--http-proxy
127.0.0.1:3128 www.oltrelinux.com
na (M Monday. T Tuesday... F Friday) e, di seguito, gli orari all'intero dei vari giorni, negando o permet
E funziona! Ma siamo sicuri che links stia davvero
tendo l'accesso nello stesso modo visto sopra.
utilizzando il proxy? Proviamo a fermarlo
Editiamo con il nostro edìtor preferito il file /etc/squid/squid . conf e ricerchiamo la stringa ACCESS
C0NTR0L5, che delimita la sezione delle ACL
# /ctc/init.d/sqmd
stOD
INFORMAZIONI
Tempi di Benchmark Come si è visto, non tutti i contenuti vengono memorizzati in
S export http proxy="127.0.9.1:3128"
cache: in particolare i siti a contenuto dinamico non offriran no grandi risultati, perché saranno pochi gli oggetti "statici"
Per eliminare l'uso del proxy. basterà digitare il seguente
che potranno essere memorizzati da Squid.
comando:
Per dare una idea dei tempi, in maniera assolutamente indi
cativa, senza voler passare per rigorosi, è possibile effettua
$
unset
httpproxy
re una prova in pochi minuti.
Gli strumenti che ci serviranno saranno un programma per effettuare download automatici (wget), tre portali con carat teristiche diverse, ed una connessione ad Internet.
che, di fatto, cancella la variabile nell'ambiente di shell. Rilanciamo una seconda volta wget:
L'idea è di provare ad effettuare un mirror del sito - a scari care cioè tutto il contenuto dello stesso - per tre volte con
secutive: nella prima si scaricherà senza proxy attivo, nella seconda il sito verrà acceduto "caricando" la cache di Squid, nel terzo caso, invece, sarà possibile misurare l'incremento di prestazioni dovute al proxy. Con wget. un software disponibile su tutte le distribuzioni,
sarà possibile effettuare un semplice benchmark con la sin tassi che segue: S lime wget
-p
questa volta il tempo è leggermente. ma veramente di poco (si parla di decimi di secondo), superiore al collegamento diretto. Ovviamente il costo della memorizzazione di Squid si fa sentire un minimo. Rilanciamo un'altra volta wget, questa volta con il proxy che ha memorizzato...
real
http://www.oltrelinux.coni
In pratica si misura il tempo (time) impiegato per scaricare la homepage (p, senza muoversi da essa, ma scaricando i link contenuti all'interno): con il primo lancio del comando,
niente male, no? Siamo nell'ordine di 10 volte più veloce. Proviamo con un altro sito nostrano, estremamente dinamico, per il quale la cache del proxy, in teoria, non potrebbe molto:
senza proxy, il tempo impiegato è: $ time wget
-p http://www.repubblica.it
Senza proxy ci si assesta sugli 8.7 secondi. Durante la fase Per poter attivare Squid, è necessario definire una variabile
di memorizzazione della cache di Squid, il tempo sale a 8.8
di ambiente chiamata, senza troppa fantasia, http proxy:
secondi, per poi scendere a 2.6 secondi dopo aver memoriz
quando wget viene eseguito, se trova questa variabile con
zato in cache i contenuti. Ovviamente i dati sopra riportati
associato un valore, capisce che deve interrogare il proxy
cambieranno a seconda della connessione a vostra disposi
per ricercare le informazioni. Sarà sufficiente la seguente
zione. In ogni caso, più lenta sarà la connessione di cui dis
dichiarazione:
ponete, più utile vi sarà il proxy.
riprovando a lanciare il browser testuale: questa
e riproviamo a collegarci con il nostro browser dall'al
volta compare un errore di Connection Refused,
tra macchina: finalmente funziona senza problemi.
che indica proprio che links stava utilizzando
Proviamo a divertirci un po': ad esempio, commen
Squid che, non essendo più attivo, non può onorare
tiamo l'allow per miarete, e inseriamo, come visto
la richiesta.
sopra, l'ACL per oltrelinux.com:
Andiamo avanti: abbiamo visto che quella ACL per
localhost avrebbe funzionato, adesso è il momen
acl
to di abilitare la nostra rete locale.
acl myweO dstdomain
Come visto sopra, creiamo una ad, e inseriamola
chttp_acce5s allow nuarete
poco sotto la dicitura INSERT
httpaceess allow myweb
YOUR
OWN
RULE{S}
miarete
src
192.168.0.0/24
.oltrel.inux.com
NERE:
in questo primo caso in esame la navigazione per §
INSERT YOUR OWN RULE(S)
*
FROM YOUR CLIENTS
*
Example
HERE
TO ALLOW ACCESS
iwjw.oltrelinux.com continua a funzionare, mentre
www.linijxpratico.com, invece, riceve un errore. Proviamo adesso ad accettare di nuovo la rete
rule
4 networks. tt "from where uscì
acl
allowing
Adapt
miarete
http_access
to Ust your
browsing
our networks
src
aecess
src
should
be
from
your
(internai)
locai
aUowed
192.168.1.9/24
locale, e a voler escludere oltrelinux.com.
IP networks
192.168.2.0/24
192.168.0.9/24
acl.
miarete src
192.160.0.0/24
acl myweb dstdomain
.oltrelinux.com
http aecess
allow miarete
http aecess
deny
myweb
allow miarete
C'è qualcosa che non funziona come dovrebbe,
lanciamo un reload della configurazione, per cari
perché continuiamo a vedere oltrelinux.com.
care le nuove impostazioni:
Forse perché vi sono delle priorità: quando viene
#
viene interrotto il controllo nelle acl successive?
accettata la ACL di miarete, precedente a myweb,
Ote
/etc/imt.d/squid
reload
Proviamo ad invertire i due
E' sufficiente adesso creare una ACL come segue, e
httpaccess in questo
negare l'accesso nel caso in cui l'URL richiesto
modo:
appartiene ai file. http access deny
http access
myweb
acl porn urlregex
allow nisrete
http_access
deny
"/usr/local/squìd/porn"
porn
Era proprio la precedenza tra le ACL ad impedirci di La direttiva urlregex controlla se l'uri che viene pas
bloccare il dominio, che ora non viene più visualiz zato. Certo, se i domini da negare fossero centinaia
sato in richiesta dal browser è presente nell'elenco: se
(ad esempio, quelli dei siti per adulti), creare una
vi è una corrispondenza, viene negata la risorse,
ad per ogni sito diventerebbe ingestibile.
altrimenti viene permessa la navigazione. Non male, per appena due righe di configurazione!
Filtrare una lista di siti
Ovviamente è possibile creare un proprio file di
con un file esterno
indirizzi il cui accesso deve essere negato:
Quando il numero di siti da bloccare, o da accettare
/usr/local/squid, ad esempio myblacklist, e
(se la regola dì default è quella di negare tutto it
creare una nuova ACL
banalmente, è sufficiente creare un file in
traffico), diventa estremamente elevato, è difficile gestirlo con ACL singole. Ecco che, quindi, si posso
acl myblacklist
no creare una o più regole che vanno a ricercare
http access
uri
deny
regex
VusrAocal/squid/mybtacklist"
myblacklist
alcuni elementi in un file di testo esterno.
Ad esempio, una delle necessità più frequenti è
II funzionamento
quella di negare la visita ai siti che presentano
del Proxy
materiale per adulti: su Internet vi sono diversi file con liste indirizzi web, ad esempio qua:
http://members,lycos.co.uk
Come già ripetuto inizialmente, il
/njadmin/tìownload.php?id=l
componente che si pone tra il richiedente (tipica
proxy è un
Scaricate ii file e copiatelo in una directory
mente il browser) ed il fornitore della risorsa {tipica
che creerete all'occorrenza, assegnando t'owner
mente il web server).
all'utente proxy, quello con il quale è in esecuzione
Se il proxy ha nella propria cache locaie l'oggetto richiesto, contraila se è ancora valido rispetto alla
squid:
copia remota e, se risulta valido, lo invia diretta # mkdir
-p
#
proxy.proxy
ctiown
mente al browser, senza scaricarlo nuovamente dal
/usr/lccal/squid
web server remoto.
/usr/local/sQiud
Se. invece, quello nella cache è un oggetto ormai
INSTALLAZIONE
Installazione di Squid su Mandraice Linux L'installazione di SQUID sotto Linux Mandrake 10.1
Per evitare l'errore potete sistemare il file /etc/hosts come
Community segue l'iter classico per la distribuzione. Da
indicato nell'articolo, oppure potete seguire una seconda
utente root. è sufficiente lanciare il comando
strada: aprite il file /etc/squid/squid. conf e cercate la
M urpmi squid
Aggiungete una riga con tale voce
Dopo aver inserito i CDRom richiesto, oppure dopo aver
visible_hostname proxy
stringa visiblehostname nel file di configurazione.
effettuato il download dalla rete, a seconda della configura
zione di urpmi, Squid sarà caricato sulla vostra Linux Box.
e salvate. A questo punto lanciate nuovamente squid.
ma non sarà ancora attivo. Per attivarlo sarà sufficiente il comando solito
# service
# service
Verranno creati gli stessi file nelle stesse directory già evi
squid start
squid start
denziate nell'articolo. nel caso già evidenziato in Debian, se l'hostname non è cor
L'unica differenza riguarda il nome dell'utente e il gruppo:
rettamente configurato si ottiene un messaggio non proprio
anziché utente proxy e gruppo proxy come in Debian, in
beneaugurante:
Mandrake vengono utilizzati rispettivamente squid : squid
# servite
tt grep
squid start
irut_cache_dir /var/spool/sqiud... /etc/init.d/squid: icore
dumped)
SSQLJID
-z
-f
squid /etc/passwd
squid:x:76:76:system user line
162:
17831 Aborted
sqjid:/var/spool/squid:/bin/false
-d »
/varAog/squid/squid.out
2>&1
for
# grep
squid /etc/group
squid:x:76:
scaduto, scarica il nuovo, lo memorizza e poi lo for
download direttament dal sito. Il collegamento è
nisce al browser, il tutto in maniera trasparente.
avvenuto direttamente (DIRECT) al web server.
Cerchiamo di comprendere il funzionamento inter
Proviamo ad aprire un altro browser e a provare un
no, analizzando i log di sistema durante il funziona
nuovo collegamento alla homepage:
mento di Squid. Con il nostro browser preferito, confi
gurato per utilizzare il proxy, puntiamo la pagina su:
1098137039.233
1856
192.168.0.198 TCP MISS/2G9
http:// wwtf.linux.org
19843
GET http://www.linux.org/
All'interno del file /var/log/squid/access.log, tro
DIRECT/198.182.196.56
viamo come prima riga quanto segue
1098137039.244
1
-
text/htral
192.168.6.198 TCP MEM_HIT/2G0 6992
GET http://www.l.inu«.org/books/iniages/0764543733.jpg 1998136780.677
1892
192.168.Q.198 TCP_MISS/269 20126 GEI http://www.linux.org/
-
NONE/-
ìmage/jpeg
-
Ricaricando la pagina, come si vede dalla prima
DIRECT/19B.182.196.56 text/html
riga, viene caricato nuovamente l'indice della stes Con la prima riga viene richiesta (GET) la pagina
sa: non viene cache-ato (TCP
principale del sito http://www.linux.org/, dall'IP
potrebbe aspettare. Essendo il contenuto della
MISS), come ci si
192.168.0.198 di formato HTML (text/html). Sono
pagina dinamico, infatti, viene escluso tramite
stati necessari 1892 millisecondi per processare la
apposite direttive.
richiesta; l'esito nella ricerca della cache del proxy
L'immagine del libro, invece, è presente nella
è negativo (TCP MISS) e deve essere effettuato il
cache: addirittura non solo è disponibile sulla
download direttament dal sito. Il collegamento è
memoria su disco, ma anche in quella volatile
avvenuto direttamente (DIRECT) al web server.
(TCPMEM HIT). I tempi di caricamento, come si
Andiamo avanti nell'analisi: poco più sotto ecco
vede, sono passati da 1.139 del primo a 1 millise-
un'altra riga interessante:
condo: abbiamo velocizzato il caricamento di 1
1398136781.293
Cosa succede, però, nella cache?
secondo abbondante!
GET
1139
192.168.3.198 TCPMISS/2GG 5993
Nella directory /var/spool/squid
http://www.linux.org/books/images/076d543733. jpg -
DIRECT/198.182.196.56
le directory ini
ziano a popolarsi: lo fanno in ordine progressivo,
image/]peg
quindi i primi file li troveremo nella directory 00/00.
Questa volta viene richiesta (GET) una immagine (ìmage/jpeg) dall'IP 192.168.0.198. Sono stati
kabubi:/vai7spool/squid/G0/OO# U
necessari 1139 millisecondi per processare la
total
richiesta; l'esito nella ricerca della cache del proxy
drvxr-xr-x
2
proxy
proxy
4096
Oct
19
00:04
è negativo (TCP MISS} e deve essere effettuato il
flrwxr-xr-x
258
proxy
proxy
4096
Oct
18
23:59
..
-rw-r
1
proxy
proxy
6933
Oct
18
23:59
0G6QS0BG
-rw-r
1
proxy
proxy
5412
Oct
18
23:59
OOOBQOei
* * * * - '
-
•■-:■.
ni ui-òfs'tn M Ì7 dei UH 11 li 53 CIIT iM Sii. 1D Hi y 1003 09 II ?
mi,
i :s
txtm
il-I;
cerchiamo, tra questi file, l'immagine dei log:
kabubi:/var/spool/5quid/OG/G0# grep
1
!
Binary limp-Uin
■ tsd
V
:
' • t
1». • :«
■ (TI
jjJjjj .
•
•
i
E14II
.'9-Ul
JtJvO
*
■>i(-
HO
.
«h
G764543733.jpg
■
0GOQB6GO matches
A questo punto, proviamo ad aprire il file con un «mi
1
7'COk
file
-
'E IF • 1 A i ffl ' H * *irb 11 -
.
•
»™J ;;£
j.'.-.-a
-la
52
editor di testo (potete vedere in figura 2 il risulta
to): si tratta di un file binario, in testa al quale c'è
.
'tD
un
una intestazione comunque leggibile che identifica proprio la locazione della risorsa.
L'output ottenuto a terminale quando apriamo nel nostro editor preferito il file di log dell'immagine memorizzata
Quando Squid avrà raggiunto il numero massimo di file per una directory, immediatamente passerà alla directory successiva, fino al raggiungimento della
quantità massima di Storage che gli è stato asse gnato nel file di configurazione. WEBOGRAFIA
Riferimenti web Squid-Book oltre le FAQ - Stefano Tagliaferri:
Nelle prossime pagine— Nelle prossime pagine si vedrà come si possa utiliz zare al meglio Squid per una navigazione filtrata da
contenuti indesiderati, siano essi banner pubblicita-
http://merlino.merlinobbs.net/squid-book/HTH/
ri, animazioni in flash o semplici GIF animate.
Controllare gli accessi web con Squid - Peter Harrison:
Anche t log saranno di nostro interesse: tramite
http://wwri.siLiconvalleyccie.com/linux-adv/squid.htrn
essi, infatti, insieme con appositi tool di analisi, si
Squid: A User's Guide - Oskar Pearson:
potrà avere una situazione precisa di come si stia
http://squid-docs.sourceforge.net/latest/htrnl/bookl.html
utilizzando la banda per la navigazione.
Privoxy: bloccare le pubblicità indesiderate Vediamo in queste pagine come sia possibile, oltre a velocizzare la
navigazione, bloccare anche tutte le pubblicità indesiderate che spesso rallcniano il nostro browser
a cura della Redazione <redazione@linuxpratico.coni>
Abbiamo iniziato ad apprezzare l'utilizzo di un proxy server per velocizzare la navigazione non solo della nostra workstation ma di tutti
i client connessi alla rete locale. Serve a poco velo
privoxy:x:184:65534: :/etc/privoxy:/bin/fal.$e
cizzare il caricamento dei contenuti se a questi si
aggiungono documenti non necessari, estremamente
una directory in /etc/ con Privoxy all'interno della
pesanti nel download e, tra l'altro, fastidiosi.
quale copierà i file di configurazione:
Ecco quindi che può sorgere la necessità di filtrare quanto verrà visualizzato sul browser, utilizzando la
# ls
banda disponibile solo per quanto effettivamente
drwxr-xr-x
-lao /eic/pnvoxy
3
root
root
4096 Jan 31
12:51 /etc/privoxy
necessario: una delle possibili risposte a questo
nuovo bisogno si chiama Privoxy, un proxy server
e, al termine della configurazione, se non vi sono
che, tra le varie funzionalità a disposizione, permette
errori provvedere anche ad avviare il proxy.
di bloccare banner pubblicitari indesiderati e le ani mazioni flash, gestisce i cookie inviati dai vari web server e tante altre funzionalità che vedremo qua di
Setting
seguito. Il tutto sotto licenza GPL.
Starting
Un altro prony-server?
up
privoxy
filtering
(3.8.3-3) proxy
...
server:
privoxy.
Privoxy rimane in ascolto sulla porta 8118, ma, di
Privoxy nasce dalle ceneri di Junkbuster, uno dei
default, onora le richieste provenienti solo da localhost.
primi software disponibili per la tutela della privacy
cioè solo dalla macchina sulla quale è installato:
su Internet. Junkbuster non viene più sviluppato dal
appena installato, quindi, non può servire la nostra
1998 ma. grazie alla licenza GPL, Stefan Waldherr
rete locale.
ha potuto attingere a quei sorgenti e aggiungere funzionalità fino a raggiungere una nuova versione
# netstat
2.0 nel 2000. Da quel momento, altri programmatori
tep
-an
0
|
grep G
8118
127.0.0.1:8118
G.Q.6.0:"
U5TEN
si sono aggiunti fino a portare Privoxy a quello che
è attualmente.
Tra i file di configurazione presenti nella directory
Privoxy è un proxy server, orientato più alla gestione
quelli che maggiormente ci interesseranno sono
dei contenuti che al cache-ing puro come Squid, e
quello relativo alla configurazione del servizio
non a caso i due proxy vengono spesso integrati:
(config) e quelli relativi alla gestione dei filtri da
non si tratta, dunque, di una inutile duplicazione tra
applicare alla navigazione (■ .action e *. filler).
i due software, ma dì specializzazione delle mansioni ad essi affidate.
Prima configurazione Per sfruttare le potenzialità del servizio appena
installazione
installato è necessario impostare il browser perché
Privoxy è disponibile per moltissime piattaforme,
non contatti direttamente la risorsa su Internet ma
tra le quali Windows, Linux, Solaris, FreeBSD e altri
ne faccia richiesta al proxy server (traslasciamo,
Unix commerciali. Qua di seguito tratteremo l'instal
per adesso, la possibilità di renderlo trasparente
lazione su
riquadro, su
tramite iPTables): è sufficiente inserire l'indirizzo 1P
Mandrake: le differenze con altre distribuzioni
e la porta alla quale Privoxy, in questo caso, onora
Debian
Sarge
e,
nel
Linux, in ogni caso, saranno assai limitate.
le richieste nell'apposita sezione di configurazione
Dopo aver aggiornato le source di apt-get, è suffi
del browser.
ciente la classica istruzione:
Privoxy, una volta avviato, è raggiungìbile tramite una comoda interfaccia web, attivabile semplice
#
apt-get
instali
privoxy
mente digitando un uri particolare: http://config.privoxy.org
lo script di installazione del pacchetto andrà a creare
Oppure, più velocemente. http://p.p (Privoxy
un utente privoxy:
Proxy): se vi siete collegati direttamente dalla mac china dove avete installato il Privoxy comparirà una
fl grep
privoxy
/etc/posswrf
29
schermata simile alla figura 1, altrimenti sarete
avvertiti della mancanza di autorizzazioni per l'accesso.
Poiché vogliamo accedere anche dalla rete loca le editiamo il file /etc/privoxy/config e modifi chiamo la configurazione: cercate la direttiva
Thts Is Ptivoxy 3.0.J on gw.oBreKnux.lan {132.16a0.1), pori 8118, enabled
Pnvuiy Mni
listen-address che indica a quale indirizzo deve
i
. i
■
rimanere in ascolto il proxy (se tale direttiva manca,
Lm.jiv.tn 3.1 .• ■- eccito a -"- avi m,
rimane in ascolto su tutti gli IP presenti). Troverete
_. ". i
■ i.
.r
una riga simile a questa:
listen-address
L'output che si ottiene sul browser puntando
127.G.B.1:8118
su http://p.p dopo aver installato Privoxy e
averlo posto in ascolto sulla porta 8118
che dovrete sostituire con
Usten-oddress
dell'indirizzo IP 192.168.0.1
192.168.0.1:8118
a questo punto netstat ci potrà confermare che Privoxy è in ascolto sulla rete locale. Thfcl, Prl*
/etc/privoxy#
tcp
6
netstat
G
-an
|
grEp
192.168.0.1:8118
8118
0.8.6.6:*
LISTEN
Collegandosi da un altro computer all'indirizzo
rutto»
**>
•—
'v V—
http://p.p comparirà la schermata vista prima. Collegatevì ad un sito qualsìasi (noi abbiamo usato
http://vAvw.repubblica.it perle prove, ma utilizzate
-
tonar/ «IBI
~"«
quello che preferite), e osservate il risultato: i banner, le animazioni, i flash non ci sono più. Pare davvero che svolga egregiamente il suo compito.
Come funziona?
Privoxy is not being used
E' bastata una semplice prova (figura 2 e 3) per verificare come Privoxy realmente effettui il filtrag gio dei contenuti, e a questo punto c'è da capire come questo avvenga, o almeno la logica che viene seguita.
In alto: sempre dal web è possibile modificare le impostazioni di Privoxy utilizzando una semplice
Privoxy utilizza un insieme di regole che modifica
interfaccia grafica
no, a tutti gli effetti, il risultato finale: l'HTML che
In basso: questa è la finestra che viene visualizzato
viene inviato dal web server viene ricevuto dal
se Privoxy non è in ascolto e si richiede l'indirizzo
proxy che lo filtra e lo passa al browser.
http://config.privoxy.org (anziché http://p.p)
Queste regole sono dette action, cioè azioni da compiere: è una azione eliminare una gif animata, sostituendola con un pattern di riempimento oppure
con una gif bianca; è una azione eliminare un flash; è una azione eliminare del codice html che va a sfruttare dei bug di Internet Explorer. Apriamo i! file standard.action: sono elencati tutta la serie di controlli e filtri che verranno eseguiti: il
GLI HACKER POSSONO
ACCEDERE AL TUO COMPUTER
- davanti al nome indica che quel controllo è disat
tivato, mentre il + indica che è attivo. Quelle mostrate in standard .action sono delle
impostazioni di default. che è opportuno non modi ficare. E' possibile crearne di proprie utilizzando un altro file, user.action dove, se volete, potete speri mentare nuove configurazioni e definire le eccezioni alle regole generali (utili per quei siti un po' troppo delicati, come quelli dell'home-banking).
Amministrazione via web Come si è visto, tramite un URL è possibile accedere ad una semplice console di management: tramite
essa è possibile modificare le regole utilizzate nella selezione dei contenuti senza dover interagire con
II sito di http://www.repubblica.it prima e
dopo l'utilizzo di Privoxy: una bella ripulita. non c'è che dire
~
corrispondenza dì quello su default.action e si apre una nuova finestra in cui sono in evidenza quattro
nuovi pulsati: Edit, Set to Cautious, Set to Medium, Quando Privoxy e
Squid collaborano, l'utente si collega a Squid sulla porta 3128, che inoltra le richieste su Privoxy
Tramite gli ultimi tre è possibile scegliere un insie
me di regole di default che poi potranno essere per sonalizzate con la pressione del primo bottone, Edit, in modo assai semplice e veloce.
sulla porta 8118;
Se non ci sono particolari problemi, selezionate Set
sarà Privoxy a
to Cautious, un approccio cauto ma funzionale.
contattare il web server restituendo a Squid Browser
Set to Adventuresome.
l'informazione richiesta, oppurtunamente
ripulita
Integrare Privoxy con Squid Privoxy è orientato alla privacy, mentre Squid alla gestione della cache dei contenuti: sono in ascolto su due porte diverse. 8118 il primo e 3128 il secon do, ed è impossibile interrogarli contemporanea mente dal browser. Ecco, quindi, che i due server devono in qualche
modo interfacciarsi tra loro, permettendo al client MicroSucki Windows AnliSpyv.aie 'Belai
di vederli come un unico proxy. La configurazione che viene preferita, in questi casi,
è quella che vede il browser interrogare Squid che, a sua volta, interrogherà Privoxy per il reperimento delle risorse su Internet: è quindi necessario modifi care il file di configurazione di Squid per indicare allo stesso di effettuare un forward delle richieste. Nel file /etc/squid/squid.conf, subito dopo la
sezione delle ACL è possibile indicare le seguenti
■ i-m-ft M rmx- PC Wd b" dWcmd «nd rqrntvgd, "
direttive:
cache peer
Attivando l'opzione fun, automagicamente Microsoft cambia nome...
ad
127.0.9.1
always direct newer direct
la shell di sistema.
parent
B11B
7
no-query
ftp proto FTP allow ftp allow ali
con la prima riga si configura Squid per effettuare -
Con un click sulla prima voce "View & change thè
per gli oggetti non presenti nella cache - una richie
current configuration" si arriva ad una pagina che
sta all'indirizzo 127.0.0.1 alla porta 8118, proprio
permette di visualizzare e/o di editare alcuni file di
quella di Privoxy.
Privoxy {figura 2) e che mostra sia l'istruzione di
Squid, però, è anche un proxy FTP, e con la seconda
avvio del server stesso, sia un estratto dei valori
e terza riga si indica di non passare le richieste FTP
della variabile nel file di configurazione.
a Privoxy, in quanto non saprebbe come gestirle.
Selezionando Edit si apre una nuova pagina web
Per tutto il resto del traffico {quarta riga) è necessa
dove si possono modificare i filtri: di default un click
rio effettuare il forward e non accedere direttamente
su tale bottone restituisce un errore di accesso non
alla risorsa.
permesso, poiché tale funzionalità dovrà essere
A questo punto è necessario configurare i browser
attivata manualmente.
per accedere all'indirizzo di Squid, con la porta
Tornando in shell (per l'ultima volta!) è necessa
standard 3128 (Squid deve ovviamente essere in
rio editare il file config modificando le seguenti
esecuzione): al primo collegamento, però, avremo
direttive:
un errore di accesso non autorizzato, in quanto Privoxy era stato configurato per rimanere in ascolto
enable-edit-actìons: permette di editare i file
solo sull'indirizzo 192.168.0.1, e non su localhost: è
di configurazione tramite l'interfaccia via web. Va
sufficiente una modifica al file /etc/privoxy/conf ig
posto a 1.
inserendo nuovamente
toggle: indica se all'avvio di Privoxy debba effettuare o meno il filtraggio sui contenuti. Va
Usten-address
127.6.6.1:8118
posto a 1. ■ enable-remote-toggle: se posto ad 1 permette di disattivare e attivare Privoxy dall'interfaccia web.
per risolvere il problema. Riavvìando Privoxy con le nuove impostazioni tutto funziona a meraviglia, con
la navigazione "veloce" grazie a Squid e "pulita" Dopo aver riavviato il server proxy. l'accesso al
grazie a Privoxy.
bottone Edit è adesso concesso: cucchiamo in
n
Analisi dei log
* apt-get
L'uso dei proxy permette, oltre ad un utilizzo
perché, in pochi attimi, venga installato. Durante
instali
calamaris
migliore della banda disponibile, anche la possi
questa fase è possibile che compaiano una serie di
bilità di un maggiore controllo sulle risorse
finestre che richiedono di specificare alcune infor
richieste dal web. Di tutta la navigazione viene
mazioni relative alla modalità di generazione dei
tenuta
report giornalieri, settimanali e mensili e alla desti
traccia
nei
file
di
log
di
Squid,
nazione degli stessi (spedirli via web, scriverli sul
/var/log/squid/access.log che, se analizzati,
possono offrire un dettaglio sui contenuti scaricati
filesystem etc).
dal web per certi versi abbastanza inquietante.
Al momento potete scegliere come operazione
Monitorare l'attività del proxy server fa molto
"nothing", andando a gestire manualmente le varie
comodo all'amministratore del sistema, che riesce
possibilità già offerte dallo script di configurazione.
a verificare se l'attività di cache sta migliorando
L'utilizzo del tool è estremamente semplice: è suf
effettivamente le prestazioni del network, e l'im
ficiente ridirigere il contenuto di uno o più file di
portanza di tale compito viene dimostrata anche
log su calamaris, e immediatamente viene prodot
dalla presenza di un numero consistente di tool per
ta una analisi sui dati in ingresso.
compiere tale operazioni. #
Calamaris Tra tutte le utility adatte allo scopo, una menzione
cat
/var/log/squid/access.log
|
calamaris
-a
Proxy-Report
speciale merita Calamaris: http://cord.de/tools/squid
Repnrt
/calamaris/Welcome.html.en
Generateti at:
period:
3Q.Jan 05
21:22:00
31.Jan 05
21:24:55
-
31.Jan
05
17:23:37
un semplice programma in Peri che riceve in input un file di log e lo analizza generando, a video, su
#
un file html, nel corpo di una mail le informazioni
Unes parsed:
Stimma ry
468
richieste: tra queste si possono annoverare, gene ralmente, il numero degli HIT (quando, cioè, l'infor quello che segue è un report completo (opzione -a di
mazione cercata è già presente nella cache del proxy e non deve essere recuperata dal web) e dei
calamaris, ali cioè tutto) visualizzato direttamente in
MIS5 (le volte in cui la cache non è sufficiente ad
console. E' possibile passare più di un file a Calamaris:
evitare il download della risorsa), i siti maggior mente visitati, il tipo di contenuto richiesto (imma
t cat /var/log/squid/access.log
gini, testo, file . zip o che altro) ed altre ancora.
/var/log/squid/access.log.l
|
calamaris
-a
Il modo migliore per valutarne l'utilità è quello di Se non si è interessati a tutte le statistiche pro-
provarlo, è sufficiente un:
INSTALLAZIONE
Installazionc di Privoxy su Mandrahe Linux Su Mandrake la fase di installazione è diversa in alcuni punti,
http://cord.de/tools/squid/calaniaris/calaraaris-2.59.tar.gz
mentre la configurazione è pressoché identica. Le differenze
e scompattato nella propria home:
sono dovute al fatto che, nella installazione base, non sono
presenti i pacchetti relativi ai programmi citati, e quindi biso
M tar
xvfz
calarr.aris-2.59.tar.qi
gnerò reperirli da altre fonti. Prima di tutto una visita a http://easyurpni.zarb.org permet
Verrà creata una directory calamaris-2.59, all'interno della
terà di aggiornare i repository dei pacchetti: sarà sufficiente
quale ci saranno una serie di file: quelli che ci interessano
seguire le istruzioni e copiare la sene di comandi scritta a
sono calamaris, lo script vero e proprio, e calamaris.1, la pagi
video sulla console di root.
na di manuale.
Per installare Privoxy si opterà, al solito, per il comando:
Provvediamo a copiare calamaris.1 nel repository delle pagine delle manuale con:
8
urpmi
pnvoxy
tt
cp
calamaris.1
/tioine/share/man/manl
Qua non vi sarà alcun utente Privoxy ma il tutto verrà installa to con l'utente daemon. Path e file di configurazione rimango
Adesso, digitando
no gli stessi di quelli già visti con Debian. Nessun problema per sarg. disponibile direttamente dal
man
calamaris
repository ufficiale, mentre calamaris andrà installato dai sorgenti, poiché non vi sono pacchetti RPM già pronti per
si potrà accedere alla pagina del manuale relativa, calamaris,
Mandrake (per altre distribuzioni si. è sufficiente visitare
l'eseguibile, potrà essere copiato su /usr/locaL/sbin, dove
http://wnw.rpmfind.net e digitare calamaris nella form di
sarà immediatamente disponibile per l'amministratore
ricerca). Essendo uno script peri, la cosa si semplifica di molto (a patto che sia presente nel sistema peri, appunto): intanto
andrà scaricato il pacchetto dall'indirizzo:
# cp
calamaris
/usr/local/sbin
INFORMAZIONE
# cat /var/log/squid/access.log |
Quando un
calamari*
-a -F mail
|
mail noteof
assumendo che sia l'utente noteof a ricevere la
banner sopravvive
posta relativa alle statistiche di Squid. Queste ope
Nonostante Privoxy funzioni piuttosto bene, è possibile che
razioni ripetitive potranno essere inserite all'interno
qualche banner scappi alla sua rete: ecco come sistemare
del crontab per essere eseguite a cadenze partico
manualmente la configurazione.
lari (giornaliere, settimanali etc), ricevendo magari
In figura A è presente il banner da disattivare. E' sufficiente
per E-Maii tutto l'output.
cliccare con il tasto destro del mouse sull'immagine e visualiz
In tal caso è necessario che i log dì Squid siano di
zare le proprietà, ricavandone il percorso assoluto (Location,
sponibili sul filesystem, poiché dovranno essere
figura B): selezionate l'uri e copiatelo neìla clipboard
analizzati: ecco che è necessario fare attenzione
(CTRL+C).
Aprite un browser, digitate http://p.p per accedere all'interfac cia di Privoxy e eliceste sul tasto "Edit" di User.action: trova
te la sezione +block (e solo + block) e selezionate il tasto Add (figura C): incollate nella finestra che compare l'indirizzo che avete precedentemente copiato e che risiede nella cfipboard.
che software come logrotate o simili non spostino i log se non dopo averli analizzati.
Sarg Non solo gli amministratori sono interessati alle
Chiudete l'editor e provate ad effettuare un refresh della pagi
informazioni derivanti da Squid: magari, se siete
na col banner: come vedete, il banner è sparito (figura D). e
genitori, siete curiosi di sapere quali siti visita
non è stato per niente difficile!
vostro figlio, o se siete a capo di una azienda, la curiosità di sapere cosa fanno i vostri dipendenti potrebbe essere grande.
unani:
Ovviamente il fin di bene è scontato, chi siamo noi per pensar male?
ini. panimi:
Uno dei programmi sicuramente migliori da questo -
E
punto di vista è sarg:
hai imi VI:
http://sarg.sourceforge.net/sarg.php
scritto in C e rilasciato sotto licenza GPL Repubblic -scuola
■ II giornale sui banchi
L'installazione al solito non presenta alcuna difficoltà
tf apt-get
instali
sarg
e ci si troverà con un nuovo binario installato in /usr/bin.
# which
sarg
/usr/bin/sarg
dotte, è possibile limitarsi a generare le sezioni delie stesse di particolare importanza.
Sarg, come detto, permette una analisi estrema
Ad esempio, per conoscere soltanto lo stato delle
mente dettagliata dei contenuti visualizzati: si va
cache-hit e cache-miss, è sufficiente lanciare
dai siti maggiormente visitati, al traffico suddiviso
calamaris con l'opzione -S 0. come segue
per ore, all'analisi del comportamento dei singoli
indirizzi IP: volete sapere quali sono gli IP che # cat
/var/log/squid/access.log
|
calamaris
-S 0
hanno visitato www.microsoft.com? Oppure i! traffico
effettuato dall'lP a.b.c.d. durante la pausa pranzo? II report generato può essere esportato in un file
Bene, Sarg fa tutto questo, e anche di più, con la
testuale, ridiregendo l'output con le consuete
possibilità di essere utilizzato da chiunque senza
tecniche;
alcuna difficoltà, e generando ottimi report in html. L'utilizzo di base è quanto mai immediato: si vuole analizzare il file access.log di Squid, creando un
# cat /var/log/squid/access.log |
calamaris
-a
>
report.txt
report in html nella directory /var/www/sarg/
sarà
sufficiente il seguente comando:
L'esportazione può anche avvenire in formato html, specificando a riga di comando. # cat
# sarg
calamaris
-o /var/www/sarg/
-2
come è immaginabile, -l passa al programma il file
/var/log/squid/access.log |
-l /var/log/sqmd/access.log
a
-F html
>
report.html
di log da analizzare, mentre -o indica dove dovran no essere scrìtti i file html e le immagini relative.
Non solo: se si è configurato sulla propria macchina
L'opzione -z attiva semplicemente il debug, andando
un sistema di spedizione della posta locale (come
a stampare a video una serie di utili informazioni
normalmente fanno quasi tutte le distribuzioni), è
per controllare che tutto sia corretto.
possibile farsi recapitare via mail direttamente i
Se avete impostato Apache per servire l'indirizzo
report generati:
visto sopra, sarà possibile visualizzare con un
limiti temporali dell'analisi: sicuramente meglio
WEBOG RAFIA
riuscire a generarli automaticamente dalla data di
Riferimenti web
sistema, in modo da poterli inserire in qualche script. Facciamo qualche prova con alcune opzioni
Homepage del proxy server SQUID:
del comando date
http://whw.5quid-cache.or9/ Homepage del progetto Privoxy
# date
http://www.privoxy.org/
Tue
Feb
1
01:28:17
CET 2965
Homepage di Calamaris
http://cord.de/tools/squid/calamaris/Vtelcome.htmL.en Homepage di SARG
»
echo
Sitiate
+%d/WVr)
G1/D2/2005
http://sarg.sourceforge.net/sarg.php
decisamente quello che ci serve. Vediamo come si possa tornare indietro di un giorno: proviamo ad uti lizzare l'opzione ■ -date del comando date appunto.
(J Squid Analysis Roporl Generator
# echo
Sitiate
--date
"1
day ago"
31/01/2995 1
Ecco scoperto come ottenere, in maniera automa tica, la data di inizio e di fine delle statistiche; pro
viamo a realizzare un semplice script, che chiame remo stat •JJH
1MKI0
l'fcO
[ONMlt HItt->«rm
■
_^»O.-
■ ■
_s*O...r;.. 'i. i>
!»■
i«
I»IA1» fnir
ntM ;iijh
ni»
■ ■■ :-:
fi; <>im 12_55h
«.ii»
•■■■
■• ::»
■ :••
ti-n*
Jno*.
? J.O
squid.sh.
lunilIH pillili -vIIMl
tjii5i2i*_
j:«
1>W|»|
«lu
ut t'-.a:
i n»
1MH
■:■■■ n
;
2113*
j;>
:iim
Mji
'ii-
■■■
iao7.it
• •■'
li
iì;«
3sih
oim
un»
munii
nu
un »n
%-,.,..) K.r. Uni Hrf.rt
#!/bin/sh
OGGI=S(date +%d/%m/%Y)
IERI*S(date
--date "1
echo
"analizzo le
sarg
-l
day ago" *WWV0
statistiche tra
"SOGGI"
e
'SIERI
/var/log/squid/access.log -o
/var/hw/sarg/
-z
-t)
SOGGI-SIERI
tale script, per essere eseguito, dovrà avere il flag I
4M
0 10HI
OO.OOHi
00,01
+x, che possiamo impostare con il comando
chmod
*t
stat sqjid.sh
A questo punto lo script potrà essere inserito nella Sarg è un occhio non troppo discreto
coda del crontab. in modo da essere lanciato a
su tutto l'operato della rete, e
cadenze fissate in maniera totalmente automatica:
sufficiente non abusarne
se non siete pratici, è sufficiente dare uno sguardo alla pagina del manuale
#
man
crantab
qualsiasi browser le informazioni riportate: non
entriamo nei dettagli, essendo assai comprensibile
Diamo uno sguardo alle statistiche che si possono
il tutto.
ottenere: il report si presenta in forma tabellare
Può essere interessante generare una serie di
con. nella prima colonna, la lista dei periodi presi in
report giornalieri per valutare l'evolversi delie esi
esame. In alto, una serie di link portano a informa
genze degli utenti.
zioni generali per la rete, come i siti più visitati, gli
Poiché i log di Squid possono andare oltre la singo
utenti che sì sono connessi a tali siti, i download
la giornata, ecco che è necessario indicare preci
effettuati.
samente quali sono le date di inizio e fine di rac
Più in basso una tabella presenta una serie di righe,
colta delle informazioni: a questo proposito ci
una per ogni utente che ha usufruito dei servizi di
viene in aiuto l'opzione -d che necessita di due
cache-ìng: un piccolo grafico e un orologio rappre
date, quella di partenza e quella di arrivo, per com
sentano i link rispettivamente al grafico della banda
pletare la statistica.
utilizzata divisa per l'unità prescelta e ad una tabel
Ecco quindi che il comando visto sopra potrebbe
la numerica con le statistiche di traffico suddivise nelle 24 ore.
diventare:
Oltre alle informazioni di ogni utente presenti nelle # sarg
-l
colonne di questa prima tabella, come traffico, per
/var/log/sqmd/access.log -0
/var/vrfw/sarg/
-2
d
36/01/2605-31/01/2905
centuali di cache HIT e MISS, è possibile cliccare sull'indirizzo IP (o sul nome risolto dal DNS) per
E' sicuramente noioso scrivere di volta in volta i
26
ottenere la lista di indirizzi visitati.
'
MySQL: un database al
nostro servizio Quando le informazioni crescono e c'è bisogno di una organizzazione
ben fatta per evitare problemi legati alla duplicazione dei dati, utiliz zare un database diventa spesso l'unica strada possibile...
Patrizio Tassone <p.tassonefaiinuxpratico.com;>
Ci sono concetti, in informatica, la cui defini zione formale è assai complessa, ma il signi ficato alla base è un qualcosa di conosciuto per gli utenti, magari non perfettamente, talvolta
(mysqld) che rimane in ascolto sulla porta 3306 in
nella accezione più semplicistica, ma comunque
attesa di connessioni provenienti dai client, siano
noto. La parola database e il concetto di database
essi tool di amministrazione o programmi ad hoc:
relazionale non fanno eccezione a questo ragiona
queste richiedono, tramite un linguaggio apposito
mento: non ci serve sapere, per proseguire nella
noto come SQL, l'esecuzione dì apposite istruzioni
lettura di queste pagine, che il modello relazionale
(inserimento, modifica, selezione di record) che il
fu proposto da F. Codd in un famoso articolo nel
database esegue restituendo loro un output.
1970, né che si basa su solide basi teoriche che ne
Vediamo i passi necessari per l'installazione sotto
giustificano l'applicabilità nei più svariati campi.
Debian Sarge:
Quello che conta è capire che il database, in fin dei conti, immagazzina al proprio interno dati struttura
§
mysql
|
ti, e può essere interrogato in svariati modi, serven
nysql
c'.ient ■-!. 1
-
mysql
database
do informazioni a chi, con le giuste credenziali di
mysql -common-4.1
-
nysql.
database comtnon
upi-cache
search
grep 4.1 client
accesso, le richiede.
Certo, non è l'unica tecnica per memorizzare infor
binaries files
(e.g.
/etc/mysql/my.cnf) mysql-server-4.1
-
mysql
database server binaries
mazioni organizzate secondo una certa logica: chi non ha una grande esperienza di database inizia,
~
Vengono evidenziati solo tre pacchetti, che sono
normalmente, salvando dati sparsi in piccoli file di
proprio quelli di nostro interesse: mysql-serverè il
testo, fino a raggiungere il livello di confusione
vero e proprio demone del database, mysql-common
massima tollerabile. A questo punto effettua una
sono tutti i file aggiuntivi e di configurazione,
migrazione dei dati verso un foglio di calcolo che, in
mysql-client contiene il client testuale per l'ammi
genere, garantisce una migliore organizzazione.
nistrazione.
Anche in questo caso, però, si arriva alla crescita
Sarà sufficiente installare mysql-server-4.1, gli
smisurata del numero dei fogli di calcolo, alla dupli
altri due pacchetti verranno installati per soddisfare
cazione incontrollata dei dati, fino a quando il caos
le dipendenze, insieme con altre librerie:
torna a regnare sovrano: in questi casi c'è proprio bisogno di un database che permetta di mettere
» apt-get
instali
mysql-server-4.1
ordine in tutto.
Installazione di MySQl
Thè
following
extra packages will
libdbd-mysql-perl
be
Iibmysqlclientì2
I database a disposizione sul mercato sono svariati,
ìnstalled: Ubmysqlclientl4
raysql-client-4.1
mysql-common-4.1
e anche tra quelli a sorgente aperto sono un discre to numero. Tra tutti quelli presenti (Firebird,
Stopping
MySQL database server:
mysqld.
PostGreSQL. Ingres, SQLite) abbiamo scelto MySQL
Starting MySQL database server:
mysqld.
per una serie di motivi: è presente in tutte le distri
buzioni Linux, è di facile amministrazione, è estra-
MySQL è già attivo e funzionante: quando si dice la
memente diffuso, ha una buona documentazione
semplicità di installazione!
on-line, è il motore di riferimento per molti progetti OpenSource, è estremamente veloce ed è in una
ff ps
a*
fase di forte sviluppo.
9639
pts/1
Faremo qua di seguito riferimento alla versione 4.1,
|
grep mysql S
- -basedir=/usr
B:90
/usr/sbin/mysqld
-datadir=/war/lib/mysql
■ -i]5er=mysql
_
l'ultima stabile, ma se la vostra distribuzione doves
-
se includere ancora la 4.0 le differenze sarebbero
Verifichiamo cosa ha fatto dietro le quinte lo script
minime per quanto riguarda gli usi di queste pagi
di installazione.
ne, e quindi non dovrebbero esserci problemi
E' stato creato un utente nuovo nel sistema, di
aggiuntivi.
nome mysql, con home /var/lib/mysql senza alcu
II database MySQL altro non è che un demone
na shell interattiva:
»
grep
mysql
possa essere oggetto di attacchi (questo, almeno
/etc/passwd
mysql:x:lei:197:MySQL Server,,, :/var/lib/mysql:/bin/false
con la installazione effettuata tramite il pacchetto Debian). Verifichiamo che sìa davvero così:
Nella nostra installazione l'utente mysql ha uid 101 e gid 107, corrispondente ad un nuovo gruppo,
#
anch'esso di nome mysql..
tcp
# grep
1B7
netstat
6
|
grep 3366 127.0.0.1:3386
come si può vedere la porta 3306 è in ascolto solo
/etc/group
su 127.0.0.1, appunto la macchina locale. In effetti,
mysql:x:107:
se si da uno sguardo al file di configurazione, si
Diamo uno sguardo alla home dell'utente mysql: è
potrà trovare una direttiva bind-address che indica
qui che vengono conservati i dati del database, e
gli indirizzi per i quali rimanere in ascolto:
devono essere gelosamente custoditi. # grep # ls
-lad /var/lìb/mysql/
drwxr-xr-x
bind-address
bind-address
A mysql. mysql
/etc/mysql/my.tnf =
127.0.B.1
/var/Ub/mysql/
Per permettere l'accesso anche agli altri IP sarà suf La directory permette la lettura del contenuto, ma i
ficiente commentare tale direttiva.
singoli file contenenti i dati sono protetti, non leggi
Sempre osservando il file di configurazione si sco
bili da un utente generico (i diritti di tale utente
pre che i file di log di MySQL possono essere diver
- other - sono nulli sia in lettura, che in scrittura che
si: esiste un generai log, disattivato per default, che
in esecuzione, come testimoniato dai tre — finali):
tiene traccia di qualsiasi operazione avvenga sul
-
database, da un collegamento effettuato dal client a
ls
-la
all'aggiornamento di una tabella che, per sua natu
/var/Ub/mysql/
ra, tende a crescere in maniera spropositata se vi è -rw-rw
1 mysql mysql
18485760 May 23 16:41
drwxr-xr-x
2
mysql
root
4G96 May
drwxr-xr-x
7 mysql
root
4096 May 23
23
ibdatal
un po' di traffico.
16:41 mysql
C'è un altro file di log detto slow-query-log, che
16:49 test
viene utilizzato quando si devono effettuare delle analisi di prestazioni delle database: tutte le opera
# ls
zioni "lente", con un tempo di esecuzione superiore
-la /var/lib/mysql/mysql/
ad un valore impostato, vengono annotate su que -rw-rw----
-rw-rw
1 mysql
1
mysql
9 May
mysql mysql
1924
23
May 23
16:41
sto file per essere successivamente ottimizzate.
columns priv.MYO
Vi è ancora il file log-bìn, che mantiene le informa
16:41
zioni relative alle sole operazioni che alterano la
columns
-m-rw
1
mysqt mysql
8820 May 23
priv.MYI
columns
base di dati, che vanno quindi a modificare, nel loro complesso, i dati memorizzati nel database: un
16:41 pnv.frm
inserimento o una cancellazione saranno quindi annotate, mentre una selezione o, ad esempio, il
A seconda delle funzionalità scelte, MySQL può
conteggio del massimo di un certo campo non
memorizzare i dati in un unico file come ibdatal,
daranno luogo ad alcuna registrazione, non varian
oppure creare una directory per un particolare data
do in alcun modo il contenuto del db.
base e, all'interno, memorizzare una tripletta di file
Per ultimo, vi può essere un log degli errori, dove
per ogni singola tabella utilizzata, contenente indici
saranno scritti tutti eventuali problemi nella vita del
(MYI), dati (MYD) e struttura (frm).
database, solitamente con estensione
Esiste un file di configurazione creato nella direc
però !a pacchettizzazione di Debian fa confluire nel
tory /etc/mysql che prende il nome di my.cnf,
file generico /var/log/syslog.
all'interno del quale vi sono le impostazioni de!
Solo il log-bin è abilitato dì default, il general-log e
database e dei client, che possono riguardare le
10 slow-query-log devono essere abilitati manual
path dove andare a prendere i dati, la quantità di
mente andando a modificare il file my. cnf:
.err, che
memoria da utilizzare per le varie operazioni, fino a
impostazioni più avanzate per la realizzazione di
# grep W.log /etc/mysql/my.cnf
complesse infrastrutture.
«log
= /var/log/mysql.log
#log
= /var/log/mysql/mysql.Log
#
ls
-la
/etc/mysqL/my.cnf
-rw-r--r--
1
root
root
3315
May 23
ei:22
my.cnf
Le varie sezioni di configurazione sono identificabili
#log-slowqueries
= /var/loq/mysql/mysql-slow.log
log-bm
= /var/log/mysql/mysql-bin.log
dal nome del servizio tra parentesi quadre: quelle
Amministrare MySQt
sotto
Esistono diversi tool per amministrare MySQL, alcu
[mysqlfj] riguardano il server, quelle sotto
[mysql], ad esempio, riguardano il client di interro
ni grafici, alcuni vìa web, ma quello ufficiale che tro
gazione e così via.
verete in tutte le installazioni funziona a riga di
E' interessante notare come MySQL, appena instal
comando, ed è quello che andremo ad utilizzare per
lato, è già in esecuzione, ma non è in ascolto su
interagire con il database.
indirizzi IP diversi da localhost, per evitare che
11 client si chiama, con uno sforzo di fantasia non
~
w
database, ed eventualmente una password.
indifferente, mysql: l'utilizzo più semplice è lanciar lo senza alcun parametro:
» mysql ERROR
# mysql
Melarne to thè MySQL monitor. Your MySQL connection id Debian 4-tog.
Type
Comnands end with ;
is 6
'help:'
'\h'
(or help.
localhost i.'BOOOl
■«
root
-ppassword errata
Access denled
(or user
1root"g'localhost'
or \g.
to server version: or
-h
1945
# mysql
4,1.11-
Type
h
localhost
-u
root
(usìng
password:
YES)
-p
Enter password:
"\c'
to clear thè buffer. mysql»
mysql> quit; Bye
E' ora di iniziare a lavorare con il nostro nuovo ser ver database. Per prima cosa c'è da cambiare la
siamo collegati al database. Quella che si è aperta
password dell'utente root del database, perché per
è la shell interattiva che, al pari della bash per i!
default non è presente (è vuota).
sistema operativo, permette di eseguire (quasi)
Le parole chiave degli utenti sono memorizzate
tutte le operazioni sul database.
all'interno del database mysql, nella tabella user:
Digitando quit, seguito dal punto e virgola, delimi tatore dei vari comandi, si esce dalla shell di
nysql> show databases;
MySQL E' possibile passare una serie di parametri
I «ysql
I
al programma mysql: in particolare è possibile colle
I
|
test
garsi ad un database remoto, indicando l'indirizzo IP o il nome deil'host dopo la flag -h, è possibile
mysql» use mysql;
specificare un nome utente con il quale collegarsi al
Database
changed
■ysql> show
tablcs
+
INFORMAZIONE
[
"user"; ♦
Tables in mysql
(user)
J
♦
AIUTO! Ho perso la password di root !!!
1
♦
user
|
+
+
Se siete particolarmente distratti e avete perso la password
mysql> sulecl
deN'amministratore del database, niente paura: è sufficiente un
+
fermo del server di qualche istante, magari effettuato quando
|
sono in pochi ad accedervi, per riprendere in mano la situazio ne. Per prima cosa fermiamo l'esecuzione di MySQL: # /etc/init.d/mysql
llke
-
stop
Host,
User,
Password from user;
t
Host
+
|
+
User
*
|
*
Password
♦
| -
+
|
localliost
|
root
|
]
kabubi
|
root
|
| |
|
localhost
|
debian-sys-maint
|
1739Bb6a7eQ88e6a |
Riavviamo il server utilizzando lo script mysqld safe passando due parametri aggiuntivi: ■ -skip-grant-tables, per evitare che,
all'avvio, vengano caricate in memoria le tabelle dei permessi, e --skip-networking. per evitare che, nei pochi istanti di "buio istituzionale" qualcuno ne approfitti compiendo operazioni poco consone:
Come si vede, dopo l'installazione esiste l'utente
root che ha accesso da localhost e dall'host locale (la macchina di prova si chiama kabubi), e l'utente debian-sys-maint che viene creato dagli script di
# mysqld safe
--skip-grant-tables
installazione.
--skip-networking &
Modifichiamo la password per l'utente root, sia che a questo punto possiamo tornare a collegarci senza problemi
si connetta da localhost che dall'IP della macchina
come utente root, in quanto lo skip-grant-tables permette di
locale:
ignorare le necessarie autenticazioni
nysql>
# nysql
-u
root
Welcome
to
thè HySOL monitor.
Commands
end witn
;
or
set
password
for
root<alocalhost-password(
\g.
mysql> select
Host,
User,
Password
nuovapassword11 ;
from user where User="root";
E' il momento di resettare la password andando ad operare direttamente nella tabella User del database MySQL: nysql> update mysqt.user set
password=password{'new password") where
user="root";
User |
Password
<J94f2dl66e2de537
localhost
|
root
|
kabubi
|
root
|
■ysql> FLUSH PRIVILEGÉS;
A questo punto non resta che uscire e far ripartire il database normalmente, facendo più attenzione la prossima volta! # /etc/init.d/mysql
restart
Come si può vedere la password dell'utente root
con una connessione proveniente da localhost è modificata: uscendo dalla shell e riprovando ad entrare, questa
volta
se
non viene digitata
correttamente la password l'accesso verrà negato:
Andiamo adesso a verificare cosa contiene tale file:
# mysql
= file /var/log/mysql/mysql-bin.GOGGll
ERROR 1045
(28009):
Access denied
for
'root'@'localhost'
# mysql
-u root
user
(using
/var/log/mysql/mysql-bin.000011: password:
MySQL
replication log
NO)
II comando file riconosce il log di MySQL: provando
-pnuovapassword
a visualizzarlo con un editor si verifica come tale
contenga informazioni binarie insieme a stringhe
mysql>
ASCII. Il database dispone di un comando per convertire questo log in testo semplice:
Analisi dei log MySQL gestisce gii utenti all'interno di tabelle del
» mysqlbinlog /uar/log/mysql/mysql-bin.O90Gll
database stesso: ecco quindi che una modifica della password come quella appena effettuata
# at
dovrebbe lasciare tracce all'interno del log-bin
#050511
79
18:2-1:55 server
delle modifiche. Nella directory /var/log/mysql
id
thread id=13
saranno presenti una lista di file progressivi, dei
1
log pos
exec
79
time=8
use mysql;
quali ci interessa esclusivamente quello con l'indi
SET TIMESTAMP=11185e7fl95;
ce numerico più elevato:
5ET PA5SW0RD FOR
mysql> show binary
come si può vedere l'operazione di SET
+
|
Query error code-0
Logs:
TooC"@-localhQst"="494f2dl66e2de5371';
PASSWORD
è stata inserita in ta!e log, essendo appunto una
*
modifica dei dati del database.
Log risme
Proviamo ad abilitare anche il generai log, per veri I---
I
ficare come possano essere tracciate tutte le ope
|
|
razioni del database. E' sufficiente modificare la
mysql-bin.860011
direttiva vista in precedenza nel file my. cnf
INSTALLAZIONE
Installazione di MySQL su Mandrake Mnux L'installazione su Linux Mandrake non è dissimile da quella
configurazioni diverse a seconda della memoria RAM installa
già effettuata su Debian GNU/Linux anche se vi sono alcune
ta: per usi standard è consigliabile copiare il modello medium
differenze che è bene approfondire.
(64M) o (arge (512M) in /etc:
Fino alla versione 10.1 MySQL è disponibile solo la versione 4.0.20, mentre la versione 4.1 del database è disponibile con
# cp /usr/share/mysqt/iny-niedium.cnf
/etc/my.cnf
Linux Mandrake Limited Edition 2005: le differenze al momen to non sono fondamentali e quindi, qualsiasi sia la versione utilizzata, è possibile provvedere all'installazione con il seguente comando:
A differenza di Debian le impostazioni nel file di configurazio ne sono assai ridotte, privilegiando quindi le impostazioni standard: ia directory dei dati rimane /var/lib/mysql che con
tiene anche i file di log, sia quello degli errori (nomehost.err), #
urpmi
mysql
che quello del log-bin. Il comando per avviare/fermare il server cambia a seconda
Nel caso venga visualizzato un menu di scelta per una certa
della versione dei server installata: se, come suggerito, è
versione del pacchetto, come il seguente:
stata selezionata la Max, sarà necessario digitare
E' 1-
richiesto uno dei
seguenti pacchetti:
MySQL-4.9.2G-3.4.101mdk.ì586
reliable SOL database erigine 2-
(to
:
HySOL:
Innodb support
(to
:
MySQL
-
server with
instali)
optate per il 2, MySQL Max, che utilizza funzionalità aggiunti ve come l'integrità referenziale o le transazioni fornite dalle tabelle di tipo InnoDB.
Verrà creato un utente mysql e un gruppo mysql, come avvie ne anche in Debian, anche se con UiD e GID diversi: ff grep mysql
# grep
start
tuito mysql-max con mysql. Anche in questo caso l'installazione non imposta alcuna password di amministratore del database, che risulta essere vuota: sono ammessi, però, solo i collegamenti provenienti da localhost e dall'IP locale dell'host, per cui inizialmente la
situazione è sufficientemente sicura. Nell'installazione di Mandrake, infine, sono presenti gli utenti anonimi, che andrebbero eliminati come già visto per Debian: nysql> select host,user
/etc/passwd
rnysql:x:78:78:system user
mysql-max
nel caso, invece, di MySQL standard nel comando andrà sosti
instali)
MySQL-Max-4.G.2G-3.4.1Glmdk.i586
Berkeley DB and
# service
a very fast and
for MySQL:/var/lib/mysqWbm/bash
78 /etc/group
host
nysql:x:7B:
Mandrake non installa alcun file di configurazione my.cnf, ma
copia in /usr/share/mysql/ una serie di prototipi chiamati my-tìpo_di_memoria.cnf (small. medium, large, huge) con
locslhost
|
redabox
|
from mysql.user where user="";
Nel (ile /var/log/syslog possiamo trovare l'errore come appare anche a video: attenzione perché la causa con l'effetto non è sempre di facile correla zione, ed è necessaria un bel po' di esperienza per escludere casi come questo. Riportiamo l'utente e i permessi come erano inizial mente:
f chown mysql /var/Ub/mysql »
chmod 755
/war/lib/mysql
Gli utenti del database L'utente root non deve essere certo l'unico utente del database: come per il sistema Linux, è preferibi
le, quando possibile, utilizzare l'utente con i privile gi sufficienti per effettuare le operazioni sul db. Esistono anche ottimi tool di amministrazione
grafica di MySQL: in figura MySQL Administrator, in download sul sito di MySQL http://www.mysql.com
Ad esempio, tutte le volte che si deve operare su un certo database (uno script PHP oppure un link
OpenOffice...) può essere conveniente creare un utente e, ad esso, attribuire una serie di privilegi sufficienti (e solo quelli) ai compiti prestabiliti.
(log
L'installazione di Debian, come si è visto, crea
= /var/log/mysql/nysql.log
l'utente root e un altro utente di amministrazione cancellando il # iniziale, e riawiando il server:
che la distribuzione stessa utilizza per avviare e fer
# /etc/init.d/mysql
cellato.
mare il database, che quindi non potrà essere can restart
In altre installazione è possibile incontrare i cosid Proviamo ad effettuare una connessione al databa
detti "utenti anonimi", utenti che non hanno una
se indicando una password errata, e si avrà una
login e neppure una password, che hanno pochissi
riga come la seguente:
mi privilegi ma che possono collegarsi, in maniera anonima (quindi senza fornire credenziali) al
050511
19:08:45
5
user
Cnnnect
Access denied
' root '(a'Xocalhost '
for
(using password:
NO)
database: il perché della presenza di tali utenti si perde lontano nelle release, sta di fatto che è bene eliminare tali ospiti non graditi:
Questa volta indichiamo le credenziali esatte e, suc cessivamente, richiediamo la lista dei database
mysql> delete
presenti:
Query OK,
050511
19:11:37
6 Connect
rootijal.ocal.ho5t
056511
19:11:52
6
show databases
Query
on
2
from mysql.user where
rows
jffuet od
(6.00
user="";
sec)
In generale non si dovrebbe andare ad operare direttamente nella tabella degli utenti, ma si
dovrebbe utilizzare, come noto, il comando GRANT. w
Un occhio indiscreto niente male sull'attività di
Quando, per motivi di emergenza, questo viene
tutto il database! Attenzione che, se attivato, que
fatto, però, è necessario eseguire il comando FLUSH
sto file tende a crescere a dismisura, quindi dovrà
PRIVILEGES perché la tabella venga correttamente
essere ruotato periodicamente se non si vuole ter
aggiornata in memoria.
minare lo spazio su disco in tempi più rapidi del pre
E' possibile controllare l'accesso di un utente sia al
visto.
database, sia alla tabella del database, perfino ad
Nel caso vi siano errori nel database, viene utilizza
alcune colonne della tabella, oppure limitare l'ac
to un altro file per tener traccia dell'avvenuto, file
cesso ad uno specifico IP o ad una classe.
che in Debian viene dirottato sul log dì sistema
Se, ad esempio, disponessimo di un database
/var/iog/syslog: per simulare un errore grave,
Agenda, si potrebbe permettere ad un utente
proviamo ad impedire a MySQL di accedere alla
utente agenda di effettuare qualsiasi operazione
directory dei dati, cambiandone f'owner da mysql a
solo su tale database:
root e i permessi di accesso, come segue: mysql> grant »
/etc/init.d/mysql
Stopping MySQL #
cfiown
#
chnod 689
root
stop
database
ali
pnvlleges on agenda."
utente agendaalocalhost server:
mysqld.
Query OK,
Q
rows affected
(Q.GO
to
identified by
"password" ;
sec)
/var/Lib/mysql
Se
/var/Ub/mysql
# /ett/init.d/mysql
Starting MySQL database
server:
Please take a look at
avessimo
specificato
un
IP
al
posto
di
localhost, avrei permesso la connessione solo da
start mysqld...failed.
thè syslog.
queli'IP. Se non fosse stato indicato niente, ma solo il nome utente (senza la chiocciola), si sarebbe per
messo l'accesso da quaisiasi IR
~ Controlliamo che la modifica sìa avvenuta nella
Anche se abbiamo effettuato
tabella User di mysql:
mantiene comunque l'accesso:
mysql>
select host,
-» where
user from mysql.user
user lìke
mysql> show grants
"%agendaV ;
revoke, l'utente
for utenteagendaglocalhost;
Grants for utenteagendaglacalhost GRANT USflGE
ON
•."
TO
'utente agenda'ia'tocalhost '
IDENTIFIED BY PASSWQRD
'5d2el9393cc5ef67'
E' possibile, dopo aver eliminato tutti i grant, effet
utenteagenda
tuare la cancellazione dell'utente, con l'istruzione Controlliamo anche i permessi che sono stati asse
mysql> drop user
gnati a utente agenda:
Query
mysql> ERRQR
show grants 1141
(4236G):
far utente agenda; There
is
user
no
OK,
mysql>
such
grant
defined
'utenteagenda'
on
for
host
ERROR
G
utente agenda@localhost;
rows affected
show grants 1141
for
(42006):
'%'
sec)
utente agenda@local.host;
There
user
(O.OG
is
no
such grant defined
'utenteagenda'
on host
for
'localhost'
mysq1> show grants for utente agenda@tocalhost; Grants for utente agendaiBlocalhost
L'utente è stato definitivamente cancellato: questo,
GRANT USAGE ON '.■
però, è possibile solo con la versione 4.1 di MySQL
TO
'utente_agenda @'localhost'
IDENTIFIED BY
GRANT ALL PRIVILEGES ON
PAS5W0RD
'5d2el9393cc5ef67'
'utente agenda'@'l.ocalho5t'
Come
vedete,
l'utente
ha
In alternativa, è necessario cancellare direttamente dalla tabella User tutte le credenziali dell'utente
"agenda'." TO
privilegi
solo
da
come già visto per gli utenti anonimi.
Bacfcup e restare
localhost. Se volessi revocare i permessi all'utente
La gestione delle informazioni, oltre che essere effi
sopra definito, dovrei utilizzare l'istruzione REVOKE,
ciente, deve essere anche sicura: ecco che backup
in questo modo:
effettuati periodicamente, oppure non appena vi siano state modifiche di un certo rilievo alla base di
mysql>
revoke ali privileges on
agenda.*
from
utente agenda@localhost; Query OK,
G
rows
affected
(O.GG
dati, potrebbero evitare di perdere dati preziosi. MySQL mette a disposizione una serie di tool per
effettuare il backup, primo tra tutti l'utility
sec)
mysqldump, che effettua un export dei dati in forma to SQL: ad esempio per salvare tutti t dati del
TIPS'NTRiCKS
Inserire dati da file flSCii
database agenda utilizzando l'accesso dell'utente (-u) root, con password (-p) da inserire al prompt (per evitare che qualcuno possa visualizzarla sem
plicemente con un ps aux) è sufficiente il comando
Talvolta si ha la necessità di caricare nel database dati esporta ti da un foglio di calcolo: in questi casi può fare molto comodo
» mysqldjmp
-B
--opt
la funzione LOAD DATA INFILE di MySQL che permette il cari
agenda >
-u
root
-p
backup-agenda-
date +%F'.sql
camento di valori delimitati, ad esempio, da virgole o TAB.
http://dev.mysql.com/doc/mysql/en/load-data.html
che creerà un file in formato SQL con il nome backup-agenda-aaaa-mm-gg.sql, con all'interno tutte
le istruzioni per creare il database, selezionarlo, WEBOG RAFIA
Riferimenti web "IL" manuale
http://dev.rnysql.com/doc/n1y5ql/en/index.htnil Corso SQL in italiano
fittp : //www. html. it/sql/index. html Tutorial SQL in inglese
http://wtvw.w3schools.coin/sql/default.a5p Un po' di tutto sui database
http://vMv.soft- land.org/cgi-bin /doc.pl?doc=faq/icsdfaq&tpl=faq Magatine online
cancellare le tabelle (DROP TABLE), ricrearle e inserir
ci i dati attualmente presenti. In caso di necessità,
sarà possibile ripristinare tale file semplicemente passandolo al ciient mysql in questo modo:
# mysql
-u root
-p < backup-agenda-2G95-9S-ll.sql
E' anche possibile copiare i dati da un database
remoto ad uno locale, semplicemente unendo in pipe le due istruzioni appena viste: se si vuole aggiornare il database del nostro web provider copiando i dati dal notebook a casa è sufficiente digitare:
http://www.databasejournal.com/features/inysql/ http://www.devshed.com/c/b/MySQL/ http : //www.devarticles. com/c/b/MySQL/
# mysqldump -B |
mysql
-C
--opt agenda -u
root
-ppassworddblocale
-h
root
-ppassword db remota
IP REMOTO -u
La tana del guru
http://www.kitebird.com/
Con l'opzione -C viene anche attivata la compres sione per permettere un trasferimento più veloce.
~