LinuxPratico - Server

Page 1

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

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

~


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.