GNU/LINUX - ferrazzi.info · Linux Apache Mysql Php V1.1 del 18/02/2013 ... document under the...

45
Dott.Ing.Ivan Ferrazzi GNU/LINUX LAMP Linux Apache Mysql Php V1.1 del 18/02/2013 1/45

Transcript of GNU/LINUX - ferrazzi.info · Linux Apache Mysql Php V1.1 del 18/02/2013 ... document under the...

Dott.Ing.Ivan Ferrazzi

GNU/LINUX

LAMPLinux Apache Mysql Php

V1.1 del 18/02/2013

1/45

Dott.Ing.Ivan Ferrazzi

Copyright 2013 Dott.Ing. Ivan FerrazziPermission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

2/45

Dott.Ing.Ivan Ferrazzi

Indice generaleINTRODUZIONE AL WWW....................................................................................5

Il World Wide Web (WWW)...............................................................................5Il protocollo HTTP (Hyper Text Transfer Protocol)............................................5I metodi del protocollo HTTP............................................................................6Gli header del protocollo HTTP.........................................................................8

L'INSTALLAZIONE...............................................................................................11Introduzione...................................................................................................11Installazione di Apache2................................................................................12Installazione di Php5......................................................................................13Installazione di MySql5..................................................................................14Test per verificare l'installazione...................................................................15

LA CONFIGURAZIONE........................................................................................17La struttura della cartella base......................................................................17Sintassi e direttive del file di configurazione.................................................18Le direttive di configurazione generale.........................................................20Le direttive di identificazione.........................................................................21Le direttive per il comportamento delle connessioni.....................................21Le direttive di limitazione..............................................................................22Le direttive per la configurazione dei processi..............................................23I moduli e la loro gestione.............................................................................24La sequenza di elaborazione delle direttive...................................................25Attivare/disattivare le opzioni........................................................................27Diritti di accesso............................................................................................29Personalizzare i logfile...................................................................................30

HOST VIRTUALI..................................................................................................32Introduzione...................................................................................................32Virtual Host su indirizzi IP..............................................................................32Virtual Host utilizzando i nomi di dominio......................................................33Cartelle protette da username e password....................................................33

SECURE SOCKETS LAYER (SSL)..........................................................................35Introduzione...................................................................................................35Chiave e certificato SSL.................................................................................35Configurazione del server..............................................................................36

WEBALIZER........................................................................................................38Introduzione...................................................................................................38Configurazione di Webalizer..........................................................................38

Webmail con Squirrelmail..................................................................................40Introduzione...................................................................................................40Installazione...................................................................................................40Configurazione di Squirrelmail.......................................................................41

Modulo mod_rewrite..........................................................................................42Introduzione...................................................................................................42Configurazione del server..............................................................................42Le regole........................................................................................................43Le opzioni.......................................................................................................44Le variabili.....................................................................................................44

3/45

Dott.Ing.Ivan Ferrazzi

Le condizioni..................................................................................................45

4/45

Dott.Ing.Ivan Ferrazzi

INTRODUZIONE AL WWW

Il World Wide Web (WWW)

Il World Wide Web il servizio presente su Internet per l'invio di pagine ipertestuali (con tutti i loro contenuti) da un computer che mette a disposizione il servizio (detto Webserver) ad un computer che ne richiede l'utilizzo (detto client).Per poter richiamare, e quindi visualizzare, il contenuto di pagine presenti nel World Wide Web abbiamo bisogno di un apposito programma chiamato Webbrowser, o semplicemente Browser.Per l'invio dei contenuti di queste pagine il WWW si basa sul protocollo HTTP (Hyper Text Transfer Protocol) che mette a disposizione uno standard non dipendente dal sistema operativo utilizzato. Questo garantisce la corretta visualizzazione del contenuto delle pagine indipendentemente dal sistema operativo installato sul nostro computer.

Il protocollo HTTP (Hyper Text Transfer Protocol)

Come precedentemente accennato il protocollo HTTP mette a disposizione delle direttive che permette il trasferimento (e la corretta visualizzazione) di pagine internet (pagine di ipertesto scritte con il linguaggio HTML) su un qualsiasi sistema operativo. La prima versione del protocollo la 0.9, identificata all'interno delle richieste al server con la sigla HTTP/0.9. Questa versione era stata concepita per effettuare un semplice trasferimento di un file dal server al client. Alla fine del trasferimento del file la connessione veniva terminata.

5/45

Dott.Ing.Ivan Ferrazzi

Pagine internet, come le conosciamo oggi giorno, hanno come contenuto un numero molto alto di tanti piccoli file che devono essere scaricati per visualizzare la pagina correttamente. Basta pensare alle varie immagini utilizzate per la creazione dell'interfacciamento grafico con l'utente all'interno del Browser. Ben presto si dovette, quindi, cercare nuove soluzione.Si arriv quindi alla versione 1.0, ossia HTTP/1.0, che aggiunse al protocollo precedente la possibilit di utilizzare degli standard di riconoscimento per i file da scaricare (MIME) e la possibilit di inviare solamente l'intestazione della pagina con relative informazioni.Il problema legato alla gestione dei Proxy e alle cache rese necessaria la standardizzazione della nuova versione 1.1, ossia HTTP/1.1. Le principali funzionalit della nuova versione sono:

Persistent connections: La connessione non viene chiusa subito dopo il trasferimento del file, ma rimane aperta per permettere l'invio di eventuali altre richieste.

Chunked transfers: Nelle versioni precedenti era indispensabile conoscere inizialmente la dimensione del file da trasmettere per ottimizzare il traffico sulla rete. Questo divenne problematico con l'invio di pagine dinamiche per le quali non era possibile definire la dimensione prima dell'elaborazione. Per questo motivo si pass alla possibilit di inviare una pagina mediante pi pacchetti spezzati per evitare di tenere occupata la rete per troppo tempo.

Byte ranges: Il file non deve pi essere trasferito per intero, ma si pu trasferire anche solo una parte del file. Con questo sistema , infatti, possibile definire l'intervallo di byte (da qui il nome byte ranges) da trasferire. Questo permette di iniziare il trasferimento (precedentemente interrotto) di un file da dove si era interrotto.

Hostname identification: Questo permette di inviare all'interno della richiesta al Webserver anche il nome del dominio che ci interessa. Il Webserver pu quindi gestire pi nomi di dominio (chiamati dominio virtuali) su un'unica interfaccia di rete con il medesimo indirizzo IP.

Proxy support: Vengono messe a disposizione delle informazioni all'interno dell'intestazione che permettono ai sistemi proxy e cache di verificare l'attualit delle pagine memorizzate per sincronizzare eventuali aggiornamenti delle medesime.

Content negotiation: Questo permette di gestire pi versioni della medesima pagina o del medesimo documento. Il browser (oppure il cliente stesso) pu mettere a disposizione una piuttosto che un'altra versione (ad esempio sui siti multilingua) della pagina richiesta.

I metodi del protocollo HTTP

Prima di iniziare a spiegare i metodi della versione HTTP/1.1 vediamo

6/45

Dott.Ing.Ivan Ferrazzi

l'utilizzo in base alla versione HTTP/1.0. Per effettuare una richiesta ad un webserver utilizziamo una URL (Uniform Resource Location) come la seguente:

http://www.ferrazzi.info/index.html

La URL in questione composta da protocollo (http://), indirizzo di dominio (www.ferrazzi.info) e URI (/index.html) che sta per Uniform Resource Indicator.La prima operazione che viene eseguita dal browser quando confermiamo la richiesta alla specifica URL la risoluzione dell'indirizzo di dominio mediante server DNS (Domain Name System), che ha il compito di restituire l'indirizzo IP del nome di dominio desiderato.Il browser tenta poi di effettuare la connessione al webserver inviando, a connessione stabilita, una riga di comando composta da

METODO URI PROTOCOLLO

spazi vuoti

Possiamo provare ad effettuare una connessione ad un webserver utilizzando il programma telnet come segue:

telnet www.ferrazzi.info 80

Il webserver risponder con le seguenti righe:

Trying 62.149.140.19... Connected to www.ferrazzi.info. Escape character is '^]'.

A questo punto il webserver rimane in attesa della nostra richiesta. Possiamo quindi digitare

HEAD /index.php HTTP/1.0

e confermare premendo due volte il tasto INVIO, per richiedere il trasferimento delle informazioni relative alla risorsa inserita. Il risultato sar il seguente:

Date: Mon, 12 Jan 2009 13:40:16 GMT Server: Apache/2.2 Connection: close Content-Type: text/html Connection closed by foreign host.

Il metodo HTTP permette di definire il tipo di richiesta da effettuare al webserver. Il protocollo HTTP/1.0 mette a disposizione i seguenti metodi:

HEAD: per ricevere informazioni relative alla pagina desiderata.

7/45

http://www.ferrazzi.info/index.htmlhttp://www.ferrazzi.info/http://www.ferrazzi.info/

Dott.Ing.Ivan Ferrazzi

GET: per ricevere il contenuto della pagina desiderata. POST: per inviare informazioni (definite nel corpo della richiesta

stessa) al server, come utilizzato per l'invio da pagine HTML mediante form.

Per quanto riguarda il protocollo HTTP/1.1 la richiesta diventa un po' pi complessa. Il nuovo protocollo mette a disposizione dei metodi in pi e diventa indispensabile fornire al server informazioni aggiuntive sotto forma di intestazioni. I nuovi metodi che si aggiungono a quelli della versione precedente sono:

PUT: per permettere al client di inviare file sul server. DELETE: per eliminare risorse dal server. OPTIONS: permette di determinare le opzioni di comunicazione da

parte del client per determinare le capacit del server. CONNECT: per i proxy che possono essere trasformati in maniera

dinamica in tunnel. TRACE: permette al client di effettuare un controllo delle

informazioni ricevute sul server durante la transazione.

Gli header del protocollo HTTP

Per poter usufruire delle funzionalit aggiuntive del protocollo HTTP/1.1 necessario l'invio di informazioni aggiuntive al webserver sotto forma di header. Gli header hanno la struttura

nome header: valore header

Gli header vengono raggruppati in quattro categorie: general, request, response e entity.

La categoria general contiene gli header utilizzati sia per le richieste che le risposte. Fanno parte di questa categoria tutti gli header legati all'utilizzo della cache, delle date, oppure della modalit di utilizzo del protocollo stesso. I principali header di questa categoria sono:

Connection: con la quale si chiude immediatamente (close) o si tiene aperta (keep-alive) una connessione.

Date: per definire la data e l'ora di quando stato generato il codice Cache-Control: per definire le modalit di utilizzo della cache delle

pagine

La categoria request contiene gli header utilizzati per le richieste al webserver. Questi vengono utilizzati per inviare informazioni relative al client che effettua la richiesta, come la lingua desiderata, la codifica delle pagine e i tipi di file accettati. Gli header principali di questa categoria

8/45

Dott.Ing.Ivan Ferrazzi

sono:

Accept: per definire l'elenco dei tipi di documenti accettati dal client Accept-Encoding: per definire l'elenco delle codifiche utilizzate per i

file compressi accettati dal client Accept-Language: per definire l'elenco delle lingue accettate dal

client Host: per definire l'indirizzo internet con eventuale porta del

webserver al quale si effettua la richiesta (obbligatorio per HTTP/1.1)

If-Modified-Since: la pagina richiesta viene inviata solamente se stata modificata dopo la data indicata, altrimenti viene inviata solamente una conferma

Range: per definire la parte della pagina che si vuole ricevere (indicato come intervallo in byte)

User-Agent: per definire il client (o meglio il browser del client) che ha generato la richiesta

La categoria response contiene gli header utilizzati per le risposte. Questi header vengono utilizzati per inviare informazioni relative al webserver. Gli header principali sono:

Age: stima da parte del server dell'et della transazione, ossia il tempo trascorso dalla creazione della risposta

Location: per inviare al cliente un'eventuale posizione alternativa delle informazioni richieste

Retry-After: per indicare dopo quanto tempo il client dovr tentare una nuova richiesta (in caso di indisponibilit del servizio)

Server: per inviare informazioni relative al software del server ETag: una sorta di identificatore ai fini di gestione cache

La categoria entity contiene gli header utilizzati sia per le risposte che per le richieste. Questi vengono utilizzati per inviare informazioni relative all'entit in questione (ossia la pagina stessa), come la lingua della pagina, la codifica del testo, la lunghezza oppure il tipo di formato utilizzato. Gli header principali sono:

Content-Encoding: indica il tipo di codifica utilizzata per file compressi

Content-Language: indica le lingue supportate Content-Length: indica la lunghezza del file Content-Type: indica il formato del file Expires: indica il termine di validit della risposta (utilizzato per la

gestione della cache) Last-Modified: indica la data dell'ultima modifica

9/45

Dott.Ing.Ivan Ferrazzi

A questo punto possiamo ripetere il precedente esempio utilizzando la versione di protocollo HTTP/1.1. Effettuiamo la connessione al webserver con il comando telnet e digitiamo la seguente riga

HEAD /index.php HTTP/1.1Host: www.ferrazzi.info

Vediamo apparire sullo schermo le nuove informazioni relative al protocollo HTTP/1.1. Nella prima riga della risposta riusciamo ad identificare il codice 200 con la scritta OK che indicano l'esito positivo della richiesta.

I codici che restituiscono lo stato della transazione si dividono in cinque categorie identificate dal primo numero del codice stesso:

1xx: codici informativi 2xx: codici di successo 3xx: codici di redirezione 4xx: codici per errore del client 5xx: codici per errori del server

10/45

Dott.Ing.Ivan Ferrazzi

L'INSTALLAZIONE

Introduzione

Apache2, Php5 e MySql5 rappresentano probabilmente le migliori alternative OpenSource nei rispettivi campi. Installati poi su una Debian, si ottiene un sistema decisamente stabile e adatto a qualsiasi applicazione, dal webserver professionale all'OS da casa su cui testare i propri siti web.

La versione 2.0 di Apache ha introdotto il sistema MPM (Multi-Processing Modules), che consiste nella modularizzazione del sistema fino alle funzionalit pi elementari. Il vantaggio di questo sistema la possibilit di ottimizzazione delle funzionalit del server in base all'utilizzo o al sistema operativo desiderato. A differenza dei moduli delle estensioni gli MPM vanno definiti alla compilazione di Apache. Dobbiamo quindi gi inizialmente sapere per che cosa, e come dovr funzionare il nostro webserver. I moduli MPM disponibili per Apache2.0 sono:

prefork: realizza il modello classico di Apache1.3 basato sull'uso dei processi

worker: nuovo modulo basato sui thread che permettono di ottimizzare le prestazioni

perchild: per assegnare a utenti diversi vari processi del server threadpool: variante sperimentale del modulo worker leader: altra variante sperimentale del modulo worker mpm_winnt: modulo ottimizzato per WindowsNT

11/45

Dott.Ing.Ivan Ferrazzi

Se non specificato diversamente verr utilizzato prefork, che realizza il modello classico di Apache1.3.

In questa sezione del manuale vedremo quindi come installare il cosiddetto LAMP server su Debian. Come suggerisce l'acronimo LAMP (Linux Apache MySql Php), verr descritta una procedura molto semplice per una perfetta installazione di Apache2, Php5 e MySql5.

La configurazione di ogni singolo componente del LAMP server che andremo ad installare sulla vostra Debian, sar quella minima richiesta per rendere il sistema perfettamente funzionante, lasciando quindi ogni personalizzazione alle particolari esigenze di ognuno di voi.

N.B. Prima di partire con l'installazione, assicuratevi che la vostra linuxbox sia aggiornata e sistemate le repository ufficiali della vostra Debian.

Installazione di Apache2

Installare Apache 2 con il supporto per Php su Debian molto semplice. Loggatevi da terminal e digitate:

apt-get install apache2 apache2-mpm-prefork

Digitato questo comando, vi verr chiesto di confermare l'operazione. Rispondete s (Yes), ed installate tutte le dipendenze necessarie che vi verranno suggerite da apt. Completata l'installazione, il vostro webserver Apache sar gi perfettamente funzionante con le impostazioni di default, e pronto per ogni vostra personalizzazione. In questo momento non ci interessa vedere come configurare ogni singolo aspetto di Apache, i virtual hosts e tutto il resto, ma soltanto installare il sistema base. E' comunque utile indicare quali sono le cartelle e i files di configurazione principali di Apache. In particolare:

/var/www/ la root folder del vostro webserver, ossia la cartella in cui verranno inseriti tutti i vostri siti web e i files che li compongono;

/etc/apache2/ la cartella in cui troverete tutti i files di configurazione relativi ad Apache;

/etc/apache2/mods-available/ la cartella in cui vengono inseriti i files di configurazione di tutti i moduli installati;

/etc/apache2/mods-enabled/ la cartella che contiene dei link simbolici ad ogni file presente nella cartella /etc/apache2/mods-available/. Ognuno di questi link simbolici, ha la facolt di abilitare ognuno dei moduli presenti nella cartella mods-available;

12/45

Dott.Ing.Ivan Ferrazzi

/etc/apache2/sites-available/ la cartella in cui inserire il file di configurazione per ogni virtual host che verr creato. Di predefinito, presente unicamente il file default;

/etc/apache2/sites-enabled/ la cartella che contiene dei link simbolici ad ogni file presente nella cartella /etc/apache2/sites-available/. Come si pu facilmente dedurre da questa struttura, ognuno di questi link simbolici, ha la facolt di abilitare ognuno dei virtual host definiti nella cartella sites-available.

Fatte queste semplici precisazioni, potete gi testare il funzionamento del vostro webserver, digitando nel vostro browser l'indirizzo di rete della macchina su cui avete installato Apache (es. http://192.168.XXX.XXX), oppure se siete in locale digitando http://localhost/ nel vostro browser. Se tutto funziona correttamente, visualizzerete la scritta It Works che vi confermer l'avvenuta installazione di Apache sulla vostra Debian. A questo punto, osservando l'url nel vostro browser, potete subito notare che la "cartella" principale del webserver apache2-default. Ci definito nel file default di cui si parlato brevemente in precedenza. Dategli un'occhiata per prendere un p di confidenza su come Apache2 gestisce la configurazioni. Per ora sufficiente sapere che se nel browser viene visualizzata correttamente la scritta It Works, Apache2 installato correttamente e potete proseguire.

Installazione di Php5

Installato Apache, ora il momento di installare Php 5 e alcune delle sue componenti fondamentali. Per fare ci, da terminal digitate molto semplicemente:

apt-get install php5 libapache2-mod-php5 php5-cgi php5-gd php5-cli

Dopo aver completato l'installazione, troverete il file di configurazione php.ini di php5 in /etc/php5/apache2/: nano /etc/php5/apache2/php.ini

Abilitate sin da subito il supporto per MySql e per le gd libraries decommentando queste due linee nella sezione Dynamic Extensions:

;extension=mysql.so;extension=gd.so

Togliete i punti e virgola davanti di modo che risultino cos (se non dovessero essere presenti, aggiungetele senza problemi):

13/45

Dott.Ing.Ivan Ferrazzi

extension=mysql.soextension=gd.so

Assicuratevi che il modulo per php5 sia abilitato utilizzando il programma a2enmod di apache che permette di verificare (o di attivare) moduli per apache:

a2enmod php5

Ora riavviate la configurazione di Apache:

/etc/init.d/apache2 reload

Dopo questi piccoli accorgimenti, php5 correttamente installato sulla vostra Debian, ma prima di testarne il funzionamento, sar preferibile riavviare il sistema (poi non lo farete mai pi) per rendere effettive le configurazioni fatte. Provvederemo a riavviare la macchina tra pochissimo, non appena verr installato e configurato anche MySql5.

Installazione di MySql5

Per installare il server MySql 5.0, digitate da terminal:

apt-get install mysql-server-5.0 php5-mysql

Completata l'installazione, ricordate che di default MySql viene installato senza password per l'utente root. Ovviamente questo non un bene per la sicurezza del vostro sistema, ed opportuno settare subito una password per l'utente root. Per fare ci, entrate in MySql da linea di comando digitando:

mysql -u root

ed eseguite i "comandi" seguenti:

DELETE FROM mysql.user WHERE User = '';

e

FLUSH PRIVILEGES;

per eliminare eventuali account anonimi da MySql. Infine, settate la password per l'utente root digitando: SET PASSWORD FOR 'root'@'localhost' = PASSWORD('tuapassword');

e

14/45

Dott.Ing.Ivan Ferrazzi

SET PASSWORD FOR 'root'@'HOSTNAME' = PASSWORD('tuapassword');

sostituendo ovviamente tuapassword, con la password che avete scelto e HOSTNAME con l'hostname della vostra Debian. Utile inoltre ricordare che sar preferibile impostare un utente non-root per ogni altra operazione che richieder l'interazione tra webserver e sqlserver. Per ogni altra particolare configurazione di cui necessitate, il file su cui operare : /etc/mysql/my.cnf Come ultima cosa, se lo desiderate, installate anche phpMyAdmin, molto ultile per amministrare via browser i vostri databases. Per installare phpMyAdmin, da terminal digitate:

apt-get install phpmyadmin

Dopo l'installazione potete trovare l'intero sistema nella cartella /usr/share/phpmyadmin. Per renderlo attivo entrate nella cartella del vostro dominio, ad esempio direttamente in /var/www/ e create un link simbolico come segue

ln -s /usr/share/phpmyadmin phpmyadmin

Test per verificare l'installazione

A questo punto, tutto il necessario per un corretto funzionamento del nostro LAMP Server su Debian stato installato, e per sicurezza riavviate la vostra macchina (facoltativo). Digitate:

shutdown -r now

e una volta riavviato il sistema, effettuate il login e testiamo le installazioni e le configurazioni fatte.

Per testare Apache2, come stato detto anche in precedenza, digitate nel vostro browser l'indirizzo di rete della macchina su cui avete installato Apache (es. http://192.168.XXX.XXX), oppure se siete in locale digitando http://localhost/ nel vostro browser. Se tutto funziona correttamente, visualizzerete la scritta It Works che vi confermer l'avvenuta installazione del vostro webserver Apache.

Per testare php5, da terminal create un file che chiameremo test.php nella root folder del vostro webserver. Muovetevi quindi nella cartella principale di Apache digitando:

cd /var/www/

create il file test.php digitando:

15/45

Dott.Ing.Ivan Ferrazzi

nano test.php

e inserite quanto segue nel suddetto file:

Salvate, chiudete il file, e richiamatelo con il vostro browser (es. http://192.168.10.X/test.php oppure http://localhost/test.php). Fatto ci, se l'installazione avvenuta con successo, visualizzerete tutte le informazioni relative alla versione di php appena installata.

Per testare MySql5 e phpMyAdmin, il metodo pi semplice quello di utilizzare phpMyAdmin per creare un database e confermare dunque il corretto funzionamento di entrambi. Per fare ci, digitate nel vostro browser

http://192.168.10.X/phpmyadmin

oppure

http://localhost/phpmyadmin.

Vi troverete di fronte la schermata di login di phpMyAdmin, inserite root come utente e la password che avete settato prima, ed effettuate il login. A questo punto create un database di prova chiamandolo come volete, e se tale operazione va a buon fine, anche MySql stato correttamente installato.

16/45

Dott.Ing.Ivan Ferrazzi

LA CONFIGURAZIONE

La struttura della cartella base

La cartella base di configurazione per apache2 che viene creata dopo l'installazione /etc/apache2. Qui troviamo le seguenti parti:

apache2.confQuesto il file di configurazione standard del sistema. Nei sistemi pi datati troviamo il file httpd.conf. Qui presente, ma solamente per questioni di compatibilit con i sistemi pi vecchi.

ports.confQuesto file contiene la configurazione delle porte da utilizzare per il sistema di webserver.

mods-availableQuesta cartella contiene i moduli presenti all'interno del sistema di apache2.

mods-enabledQuesta cartella contiene un link ai moduli presenti in mods-available per attivare i moduli da utilizzare con apache2. Questo permette di attivare o disattivare dei moduli senza doverli per forza eliminare dal sistema.

sites-availableQuesta cartella contiene i file di configurazione per ogni sito che viene creato all'interno del nostro sistema web.

sites-enabledQuesta cartella permette di attivare i siti creando un link simbolico ai file presenti nella cartella sites-available. Questo permette di

17/45

Dott.Ing.Ivan Ferrazzi

spegnere momentaneamente dei siti senza doverli per forza eliminare dal sistema.

Dopo ogni modifica a questi file consigliabile mandare un segnale di HUP al processo di apache2. Questo si ottiene con il seguente comando

apache2ctl reload

Sintassi e direttive del file di configurazione

Il file di configurazione di apache2 permette di definire due tipi di direttive, quelle semplici e i cosiddetti container. Le direttive semplici hanno la forma

direttiva1 valore1direttiva2 valore1 valore2

mentre i container hanno una forma simile ai tag del linguaggio HTML

direttiva1 valore1 direttiva2 valore1 valore2

Inoltre utilizziamo il # all'inizio delle righe per inserire eventuali commenti.

Le direttive semplici possono essere suddivise nuovamente in tre categorie: locali, globali e locali e globali. Le direttive locali permettono di definire il comportamento del server stesso e non possono essere utilizzate all'interno dei container. Quelle globali vengono utilizzate solamente all'interno dei container, perch ne modificano il comportamento. Le direttive locali e globali permettono di modificare il comportamento del server se utilizzate localmente, definiscono invece il comportamento di una rispettiva direttiva container se specificate all'interno di essa.

Per quanto riguarda i container le direttive standard che si possono utilizzare sono le seguenti:

Directory: Per definire una cartella e le relative sottocartelle alle quali applicare le direttive di questo container. All'interno del nome della cartella possono essere utilizzati anche i caratteri jolly (filename globbing).

DirectoryMatch: Questa identica alla precedente, ma permette di definire il nome della cartella utilizzando le espressioni regolari (regular expression).

18/45

Dott.Ing.Ivan Ferrazzi

Files: Questa simile a Directory solo che permette di indicare il nome di un file (o di un gruppo di file utilizzando i caratteri jolly) al quale verranno applicate le direttive.

FilesMatch: Questa identica alla precedente, ma permette di definire il nome del file utilizzando le espressioni regolari.

Location: Questa simile a Directory solo che permette di indicare la URL (o parte di essa) presente nella richiesta del client alla quale verranno applicate le direttive indicate.

LocationMatch: Questa identica alla precedente, ma permette di definire il nome del file utilizzando le espressioni regolari.

VirtualHost: Questa viene utilizzata per definire un dominio virtuale (trattato in seguito).

Limit: Questa permette di definire le restrizioni da utilizzare su determinati metodi HTTP come GET, PUT, POST, DELETE, ecc.

LimitExcept: Questa permette di definire le restrizioni da utilizzare per tutti i metodi HTTP non elencati come argomento.

Oltre ai container appena elencati che permettono di definire il lavoro continuo del nostro webserver abbiamo a disposizione anche delle direttive che vengono lette solamente all'avvio del server stesso.

Il primo container in questione IfModule che permette di verificare la presenza di un'eventuale modulo attivo e di reagire in tal caso con una adeguata configurazione alternativa. In caso di modulo inattivo l'avvio del webserver non restituir degli errori. Questa direttiva viene utilizzata come segue:

ExtendedStatus On

Il secondo container in questione IfDefine che permette di interagire con l'eventuale valore definito con il parametro -D passato al server da riga di comando. Passando al server il parametro -D DEBUG possiamo utilizzare nel file di configurazione:

LogLevel debug

Questa direttiva pu quindi essere utilizzata per definire comportamenti alternativi in caso di necessit.

Infine abbiamo la direttiva Include che permette, con l'utilizzo di caratteri jolly, di definire i file di configurazione secondari da includere all'interno del file di configurazione principale, ad esempio

Include /etc/apache2/mods-enabled/*.load

19/45

Dott.Ing.Ivan Ferrazzi

Include /etc/apache2/mods-enabled/*.conf

Le direttive di configurazione generale

Come accennato precedentemente abbiamo delle direttive locali che consentono di effettuare una configurazione a livello server. La configurazione base di un webserver comprende le direttive

Listen indirizzo:portaPermette di identificare a quale indirizzo (nel caso in cui ci fossere pi indirizzi IP disponibili) e su quale porta del relativo indirizzo rimanere in ascolto per eventuali richieste. Questa direttiva (nel caso di Debian) si trova nel file /etc/apache2/ports.conf incluso poi nel file di configurazione generale.

User usernameDirettiva che permette di definire l'utente con il quale verranno effettuate le varie operazioni. Apache viene inizialmente inizializzato e fatto partire da root, ma tutte le operazioni successive verranno eseguite dall'utente definito all'interno di questa direttiva.

Group groupnameAnaloga alla precedente, ma definisce il gruppo proprietario delle varie operazioni.

ServerRoot directoryQuesta direttiva permette di definire la cartella di lavoro del server, ossia la cartella all'interno della quale si trovano tutti i file di configurazione. Nel caso di Debian per Apache2.0 la cartella di lavoro /etc/apache2. Tutte i percorsi relativi (quindi quelli che non iniziano con /) utilizzati all'interno del file di configurazione si relazionano in base a questa cartella.

LockFile filenameQuesta direttiva permette di definire il nome del file (completo di percorso) utilizzato come file di lock del server. Debian utilizza il file /var/lock/apache2/apache.lock come definito dal Filesystem Hyrarchy Standard che stabilisce l'utilizzo della cartella /var/lock.

PidFile filenameQuesta direttiva permette di definire il file all'interno del quale verr memorizzato il PID del processo principale di Apache. Debian ha preimpostato nel file di configurazione il file /var/run/apache.pid.

20/45

Dott.Ing.Ivan Ferrazzi

Le direttive di identificazione

Le seguenti direttive possono essere utilizzate sia a livello globale che all'interno dei domini virtuali di cui parleremo pi avanti. Le direttive sono:

ServerName domainnameQuesta direttiva permette di impostare il nome di dominio per il quale viene messo a disposizione il relativo servizio. Il nome di dominio quello presente all'interno della URL di richiesta e inviato mediante header HTTP Host.Questa direttiva pu trovarsi anche all'interno di un container VirtualHost e permette di identificare la giusta allocazione nonostante venga utilizzato sempre lo stesso indirizzo IP.

ServerAdmin emailaddressQuesta direttiva permette di impostare l'indirizzo email dell'amministratore responsabile. L'indirizzo verr visualizzato all'interno delle varie pagine di errore del webserver.Anche questa direttiva pu essere inserita all'interno di un container VirtualHost per differenziare i vari amministratori responsabili.

Le direttive per il comportamento delle connessioni

Le principali direttive che possono essere utilizzate per definire il comportamento delle connessioni del server sono le seguenti.

KeepAlive On|OffQuesta direttiva permette di mantenere attive o meno le connessioni TCP con il server. Mantenere attiva la connessione pu aumentare notevolmente le prestazioni, soprattutto per pagine che al loro interno hanno molte immagini. Questo il motivo per il quale questa direttiva viene attivata di default.

KeepAliveTimeout secondsCon questa direttiva si pu definire il numero di secondi che il server mantiene intatta una connessione prima di chiuderla. Si consiglia di non utilizzare un numero troppo elevato perch potrebbe mantenere aperte delle connessioni inutilizzate per troppo tempo. Avremmo un notevole calo di prestazione in caso di traffico elevato.

MaxKeepAliveRequests numberQuesta direttiva permette di definire il numero massimo di richieste che possono essere fatte all'interno di una connessione. E' consigliabile utilizzare un numero elevato (Debian utilizza 150).

21/45

Dott.Ing.Ivan Ferrazzi

TimeOut secondsQuesta direttiva permette di definire il tempo di attesa del server, per il tempo che trascorre nella ricezione di richieste GET, per il tempo che trascorre tra la ricezione di pacchetti TCP nelle richieste PUT oppure POST e per il tempo che trascorre tra i pacchetti di conferma di ricezione TCP nelle risposte.

Tutte queste direttive possono essere inserite, oltre che a livello globale, anche all'interno dei container VirtualHost.

Le direttive di limitazione

Le principali direttive sono:

LimitRequestBody bytesQuesta direttiva permette di definire il limitare massimo consentito della dimensione (espressa in byte) complessiva di una richiesta. Il valore default pari a 0 che non pone limiti.

LimitRequestFields numberQuesta direttiva permette di definire il limite massimo consentito di headers all'interno di una richiesta. 0 significa illimitato, mentre il default pari a 100.

LimitRequestFieldSize bytesQuesta direttiva permette di definire il limite massimo in byte utilizzato per gli headers. Il default pari a 8190.

LimitRequestLine bytesQuesta direttiva permette di definire il limite massimo in byte utilizzato per le richieste HTTP e quindi di filtrare richieste anomale con le quali si possono effettuare attacchi DOS (Denial Of Service).

RLimitCPU secondsQuesta direttiva permette di definire il limite massimo del tempo della CPU in secondi messo a disposizione per ogni processo creato da uno dei processi Apache nel soddisfare una richiesta.

RLimitMEM bytesQuesta direttiva permette di definire il limite massimo espresso in byte di memoria messa a disposizione per ogni processo creato da uno dei processi Apache nel soddisfare una richiesta.

RLimitNPROC numberQuesta direttiva permette di definire il limite massimo dei processi creati da uno dei processi Apache nel soddisfare una richiesta.

22/45

Dott.Ing.Ivan Ferrazzi

Le direttive per la configurazione dei processi

Il comportamento del MPM prefork di Apache2.0 viene appunto chiamato pre-forking, perch non crea i processi nel momento in cui vengono effettivamente utilizzati, ma li crea preventivamente in maniera tale da essere gi pronti quando questi vengono richiesti.Visto che a livello di Apache2.0 l'utilizzo del MPM prefork facoltativo possiamo incapsulare la relativa configurazione all'interno della direttiva IfModule per evitare la segnalazione di errori in caso contrario.Le principali direttive sono:

MaxClients numberQuesta direttiva permette di definire il numero massimo di processi che possono essere in esecuzione contemporaneamente. Tutte le eventuali richieste aggiuntive che eccedono questo numero verranno messe in coda fino a quando uno dei processi non si libera.

StartServers numberCon questa direttiva si pu definire il numero dei processi figli che Apache deve far partire all'avvio, che di default pari a 5. Siccome il numero dei processi viene adattato dinamicamente in base alle esigenze di solito si lascia invariato.

MinSpareServers numberQuesta direttiva permette di definire il numero minimo dei processi che devono rimanere attivi in attesa di connessione oltre a quelli attualmente utilizzati. Questo permette una immediata elaborazione di eventuali richieste in entrata senza dover attendere la creazione di nuovi processi. Il sistema crea immediatamente il numero dei processi necessari in caso di superamento del limite. Il valore di default di questa direttiva pari a 5.

MaxSpareServers numberQuesta direttiva permette di definire il numero massimo di processi che possono rimanere attivi in attesa di connessione oltre a quelli attualmente utilizzati. Nel caso in qui, dopo la chiusura di varie connessioni, fossero attivi pi processi di quelli definiti all'interno di questa direttiva Apache provvederebbe a chiude quelli in eccesso. Il valore di default di questa direttiva pari a 15.

MaxRequestsPerChild numberQuesta direttiva permette di definire il numero di richieste che ogni processo deve elaborare. Raggiunto questo limite il processo verr chiuso. Il valore di default di questa direttiva 0 che significa un numero illimitato di richieste.

23/45

Dott.Ing.Ivan Ferrazzi

I moduli e la loro gestione

Apache si basa su un sistema modulare. Questo vuol dire che possibile aggiungere delle funzionalit (mediante dei moduli appunto) al server in fase di esecuzione. Non quindi indispensabile la ricompilazione di Apache per aggiungere nuovi moduli, e quindi, nuove funzionalit al server.Con il comando

apache2 -l

possibile visualizzare la lista dei moduli con i quali stato compilato Apache2.0. La presenza di un modulo all'interno di questa lista non implica automaticamente la sua attivazione. Abbiamo la possibilit di utilizzare la direttiva AddModule con il nome del modulo (come riportato nella lista dei moduli con il comando apache2 -l) per attivarne le sue funzionalit. Ad esempio:

AddModule mod_so.c

Se vogliamo caricare dei moduli messi a disposizione come shared objects, e quindi non integrati in fase di compilazione, dobbiamo utilizzare la direttiva LoadModule seguito da un nome identificativo del modulo ed il file .so con la sua posizione assoluta. Nella prassi si utilizza mod_NOME.c come nome del file sorgente, NOME_module come nome identificativo del modulo e mod_NAME.so per il nome del file codice.Esempio:

LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so

Nella versione 2.0 di Apache le direttive per il caricamento dei moduli non si trovano direttamente all'interno del file di configurazione principale, ma come Include come segue:

Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf

I file *.load contengono la direttiva LoadModule ed i file *.conf la specifica configurazione del rispettivo modulo all'interno del container IfModule. I file contenuti all'interno della cartella /etc/apache2/mods-enabled/ non sono altro che dei link simbolici che puntano sui rispettivi file presenti all'interno della cartella /etc/apache2/mods-available/. Questo permette di evitare il caricamento di moduli specifici eliminando solamente il link simbolico lasciando invariata la posizione dei file originali.Per attivare un modulo all'interno di mod-enabled (quindi per creare i link simbolici necessari) possiamo utilizzare il comando a2enmod con il relativo nome del modulo senza estensione, ad esempio:

24/45

Dott.Ing.Ivan Ferrazzi

a2enmod ssl

Dopodich appariranno i relativi link simbolici all'interno della cartella mod-enabled. Per disattivarli possiamo utilizzare il comando a2dismod con il nome del modulo senza estensione.

La sequenza di elaborazione delle direttive

Abbiamo visto nelle sezioni precedenti che una delle possibilit che mette a disposizione Apache per gestire le risorse quella di utilizzare dei container come Directory per la gestione di cartelle, Files per la gestione di singoli file, oppure Location per gestire le risorse in base al contenuto espresso nella URL.Le direttive sopra citate hanno lo svantaggio che non possono essere modificate da terze pari senza dare accesso al o ai file di configurazione del server. Per questo motivo troviamo all'interno di Apache un meccanismo che permette di decentralizzare la configurazione delle risorse. In questo caso utilizziamo un file (normalmente .htaccess) all'interno della cartella stessa che pu contenere le direttive che influenzano le propriet della cartella principale e di tutte quelle presenti in essa.Il nome del file da utilizzare viene indicato dalla direttiva AccessFileName che possiamo trovare sia come direttiva del server che come direttiva all'interno di un container. Dato che le direttive inserite nel file di accesso potrebbero, in alcuni casi, soprassedere la configurazione del server consigliabile utilizzare questo meccanismo solamente se non diversamente possibile.L'utilizzo del file di accesso ha come conseguenza, oltre la scarsa sicurezza, anche un peggioramento delle prestazioni. Apache deve, infatti, effettuare il controllo della presenza del file di accesso all'interno della cartella in cui si trova la risorsa desiderata, e non solo. Vista la possibilit di eredit delle direttive dovr, per ogni singola risorsa, effettuare lo stesso controllo anche nelle cartelle di livello superiore.Questo meccanismo viene quindi utilizzato solamente se vogliamo dare all'utente la possibilit di effettuare la configurazione delle proprie cartelle senza dover per forza ogni volta modificare la configurazione base.Data la possibilit di utilizzo contemporaneo sia di vari container che dei file di accesso .htaccess diventa vantaggioso conoscere la sequenza con la quale Apache legge le varie direttive presenti:

Apache inizia con i container Directory definiti al di fuori dei container VirtualHost, che non fanno utilizzo di regular expressions iniziando dal percorso, assegnato come argomento, pi breve. Allo stesso tempo vengono presi in considerazione i relativi file di

25/45

Dott.Ing.Ivan Ferrazzi

accesso (se cos definito con la direttiva AllowOverride). Nel caso in cui ci fossero due o pi container per lo stesso percorso verranno elaborati in base alla loro posizione all'interno del file principale di configurazione.

Con gli stessi criteri precedentemente accennati passa poi ai container Directory che si trovano all'interno dei container VirtualHost.

Poi prosegue con i container Directory ~ e DirectoryMatch, ossia quelli che utilizzano le regular expressions, presenti al di fuori dei container VirtualHost. Nel caso in cui ci fossero due o pi container per lo stesso percorso verranno elaborati in base alla loro posizione all'interno del file principale di configurazione.

Con gli stessi criteri del punto precedente passa poi ai container Directory ~ e DirectoryMatch all'interno dei container VirtualHost.

Si arriva poi ai container File e FileMatch dove anche qui prevale la posizione all'interno del file di configurazione principale in caso di sovrapposizioni.

Poi ai container File e FileMatch dei VirtualHost. E si conclude con i container Location. In caso di sovrapposizioni

prevale la posizione all'interno del file di configurazione principale. Passando poi ai relativi container Location dei VirtualHost.

Se durante l'elaborazione Apache trova le stesse direttive con valori diversi tiene l'ultimo valore assegnato. Data la sequenza di elaborazione precedente (prima le direttive al di fuori dei VirtualHost, poi quelle all'interno) prevalgono le direttive definite all'interno dei container VirtualHost. Vediamo il seguente esempio

Direttiva5 Direttiva6 Direttiva3 Direttiva4 Direttiva2 Direttiva1

Direttiva1 la prima direttiva che viene presa in considerazione perch

26/45

Dott.Ing.Ivan Ferrazzi

presente all'interno del container Directory (al di fuori di un VirtualHost) e perch con il percorso (/var/www) pi breve. Poi passa alla Direttiva2 perch sempre all'interno di un container Directory, ma con percorso (/var/www/pippo/pluto) pi lungo. Ora tocca alla Direttiva3 perch l'unica all'interno del container VirtualHost.Arriviamo poi alla Direttiva4 perch all'interno di un container DirectoryMatch, alla Direttiva5 che all'interno di un container Files ed infine alla Direttiva6 che si trova all'interno di un container Location.

Attivare/disattivare le opzioni

Con la direttiva Options possiamo attivare e/o disattivare determinate opzioni per modificare le funzionalit del nostro server. Se definita al di fuori di un container modifica le funzionalit dell'intero webserver; utilizzata all'interno di un container modifica solo le funzionalit delle risorse legate ad esso.Le opzioni definite all'interno di un container Directory verranno applicate a tutte le sottocartelle se non esplicitamente definito come nel seguente esempio:

Options MultiViews AllowOverride None Options Indexes FollowSymLinks AllowOverride None

In questo caso verr attivata l'opzione MultiViews per la cartella /var/www, mentre per la cartella /var/www/pluto verranno attivate le opzioni Indexes e FollowSymLinks. Utilizzando la direttiva Options come nell'esempio attiviamo solamente le opzioni specificate all'interno della direttiva stessa, per questo motivo non viene ereditata l'opzione MultiViews.Per evitare che opzioni definite in livelli superiori vengano eliminate all'interno di altre direttive possiamo utilizzare i simboli + e/o -. Modifichiamo il precedente esempio come segue:

Options MultiViews AllowOverride None Options +Indexes +FollowSymLinks AllowOverride None Options -MultiViews AllowOverride None

27/45

Dott.Ing.Ivan Ferrazzi

In questo caso abbiamo attivato l'opzione MultiViews per /var/www, le opzioni MultiViews, Indexes, FollowSymLinks per /var/www/pluto e le opzioni Indexes e FollowSymLinks per /var/www/pluto/pippo.

Vediamo ora in dettaglio le varie opzioni che si possono utilizzare con la direttiva Options:Options AllAll il valore di default che attiva tutte le opzioni, tranne MultiViews.

Options ExecCGIQuesta opzione permette l'esecuzione di script CGI mediante il modulo mod_cgi.

Options FollowSymLinksIn questo caso sar possibile seguire percorsi definiti da link simbolici. Anche se seguiti i link simbolici il percorso a tale risorsa rimane invariato quando confrontato con l'argomento del container Directory. Questa opzione verr ignorata se utilizzata all'interno di un container Location.

Options IncludeCon questa opzione vengono permessi gli include lato server mediante modulo mod_include.

Options IncludeNOEXECCon questa opzione vengono permessi gli include tranne gli #exec cmd e gli #exec cgi. Rimane per la possibilit di includere script CGI virtuali dalle cartelle con la direttiva ScriptAliased.

Options IndexesSe la URL fa riferimento ad una cartella priva della direttiva DirectoryIndex (es. index.html) il webserver restituir una lista formattata del contenuto della cartella utilizzando il modulo mod_autoindex.

Options MultiViewsQuesta opzione permette di costringere Apache a trovare file alternativi per risorse non definite in maniera precisa. Poniamo il seguente esempio: Attiviamo l'opzione MultiViews per il container Directory che ha come argomento la cartella /pluto/pippo. Al server Apache viene richiesto di restituire la risorsa identificata dal file /pluto/pippo/paperino che per non esiste. In questo caso Apache inizia ad utilizzare il modulo mod_negotiation che gli permette di estrarre tutti i file /pluto/pippo/paperino.* e di paragonarne le estensioni con un elenco di estensioni conosciute.

28/45

Dott.Ing.Ivan Ferrazzi

Mediante determinati criteri proporr il file che pi rispecchia il tipo di risorsa richiesta inizialmente.MultiViews pu incidere anche sul comportamento della direttiva DirectoryIndex. Poniamo il seguente esempio:

DirectoryIndex index

Nel caso in cui arrivasse al server una richiesta priva di file questo inizierebbe a verificare la presenza di tutti i file index.* scegliendo il primo che pi rispecchia il criterio di contenuto HTML.L'opzione MultiViews pu essere utilizzata all'interno di un container Directory, File, Location, oppure, se AllowOverride lo permette, anche all'interno del file .htaccess.

Options SymLinksIfOwnerMatchIl server segue i link simbolici solamente se l'id dell'utente proprietario corrisponde all'id dell'utente proprietario del link. Questa opzione viene ignorata all'interno del container Location.

Diritti di accesso

I diritti di accesso all'interno di un container Directory possono essere definiti mediante la direttiva Order con i criteri Allow e Deny. Questa direttiva valida anche per le sottocartelle, a meno che non siano stati definiti altri diritti di accesso.

Order Deny,AllowIn questo caso vengono controllate prima le regole Deny, poi le regole Allow. Nel caso in cui non ci fosse una regola corrispondente alla pagina richiesta la pagina verrebbe visualizzata.

Order Allow,DenyIn questo caso vengono controllate prima le regole Allow, poi le regole Deny. Nel caso in cui non ci fosse una regola corrispondente alla pagina richiesta la pagine NON verrebbe visualizzata.

Allow from [indirizzo ip|hostname|area di indirizzi|all]Questa direttiva ci permette di definire chi ha il permesso di visualizzare le pagine interessate. Possiamo inserire un indirizzo ip (es. 1.2.3.4), un hostname (es. test.it), oppure un'area di indirizzo (es. 1.2 per gli indirizzi 1.2.*.*). La direttiva Allow from all permette a chiunque di avere accesso.

Deny from [indirizzo ip|hostname|area di indirizzi|all]Questa direttiva ci permette di definire chi NON ha il permesso di

29/45

Dott.Ing.Ivan Ferrazzi

visualizzare le pagine interessate. Possiamo inserire un indirizzo ip (es. 1.2.3.4), un hostname (es. test.it), oppure un'area di indirizzo (es. 1.2 per gli indirizzi 1.2.*.*). La direttiva Deny from all blocca l'accesso a chiunque cerchi di visualizzare le nostre pagine.

Vediamo ora un esempio che permette di limitare la visualizzazione delle nostre pagine solamente all'interno della nostra rete (192.168.0.*) e all'interno del nostro dominio aziendale (es. .test):

Order Allow,Deny Allow from 192.168.0 Allow from localhost Allow from .test

Nel caso in cui non ci fosse una corrispondenza tra le regole Allow from l'accesso verrebbe direttamente negato (Order Allow,Deny).

Personalizzare i logfile

Apache mette a disposizione delle direttive che permettono di personalizzare i formatti da utilizzare per la registrazione dei logfile contrassegnandoli con un nome identificativo. Possiamo creare vari formati ed utilizzarli poi a piacere all'interno di configurazioni di domini diversi. Le direttive che si possono utilizzare sono

LogFormat stringa_formato nome_identificativocon questa direttiva possiamo definire con stringa_formato il formato da utilizzare e con nome_identificativo il nome da poter poi utilizzare all'interno della direttiva CustomLog.La stringa da utilizzare per il formato pu comprendere una serie di codici di formato che identificano un determinato dato che si vuole visualizzare all'interno della registrazione. Nella seguente tabella vediamo i codici di formato che possiamo utilizzare:

%% inserisce il simbolo %%a Indirizzo IP remoto%A Indirizzo IP locale%B Byte della risposta senza HTTP%b Byte della risposta senza HTTP (nel formato CLF)%{foobar}C Il contenuto del cookie foobar nelle richieste al server%D Il tempo necessario per la richiesta in microsecondi%{foobar}e Il contenuto della variabile d'ambiente foobar%f Il nome del file%h Il host remoto%H Il protocollo della richiesta

30/45

Dott.Ing.Ivan Ferrazzi

%{foobar}i Le righe foobar estratte dal header della richiesta%l Il logname da remoto se inviato (identd)%m Il metodo utilizzato per richiesta%{foobar}n Il contenuto della nota foobar all'interno di un altro

modulo%{foobar}o foobar righe estratte dal header della risposta%p La porta canonica del servizio che ha elaborato la

richiesta%P L'ID del processo figlio che ha elaborato la richiesta%{format}P L'ID del processo o thread figlio che ha elaborato la

richiesta. Come format possiamo utilizzare pid oppure tid.

%q La stringa utilizzata come query%r La prima riga della richiesta%s Lo stato della richiesta originale (%>s per visualizzare lo

stato dell'ultima richiesta)%t Tempo necessario a ricevere la richiesta%{format}t Tempo necessario a ricevere la richiesta in base al

formato format desiderato (vedi strftime(3))%T Tempo necessario ad elaborare la richiesta in secondi%u User remoto restituito da auth%U L'URL della richiesta, senza eventuale stringa query%v Il nome canonico del server che ha elaborato la

richiesta%V Il nome definito dall'eventuale direttiva

UseCanonicalName%X Lo stato della connessione dopo aver completato la

risposta: (X) connessione interrotta prima del completamento della risposta; (+) connessione potrebbe essere rimasta in vita dopo l'invio della risposta; (-) connessione viene chiusa dopo l'invio della risposta.

%I Byte ricevuti, inclusi la richiesta ed gli header%O Byte inviati, inclusi gli header

Vediamo ora un semplice esempio:

LogFormat %h %l %u %t \%r\ %>s %b personal

CustomLog percorso_file nome_identificativoQuesta direttiva la utilizziamo per definire il logfile ed il formato con il quale effettuare le registrazioni.

CustomLog /var/www/dominio1 personal

31/45

Dott.Ing.Ivan Ferrazzi

HOST VIRTUALI

Introduzione

Un webserver potr essere utilizzato per la presentazione via Internet di un solo sito. Questo per di solito non avviene. In pratica pi probabile dover configurare un server per la presentazione di diversi siti. Per questo motivo apache2 ci mette a disposizione il sistema dei virtual host, ossia host virtuali. Questo sistema permette di identificare un sito, e quindi il proprio contenuto, mediante l'indirizzo IP al quale viene effettuata la richiesta alla porta 80 o mediante il nome di dominio inviato all'interno degli header di richiesta direttamente dal browser dell'utente. Nel caso in cui si volessero gestire pi di quattro siti sul nostro server consigliabile utilizzare il NameVirtualHost, ossia la seconda possibilit.

Virtual Host su indirizzi IP

Nel caso in cui volessimo utilizzare indirizzi IP diversi la configurazione dei relativi file di configurazione da posizionare all'interno della cartella /etc/apache2/sites-available verrebbe effettuata come segue:

ServerAdmin [email protected] /www1

Questa la configurazione base dove IP_server l'indirizzo IP della

32/45

mailto:[email protected]

Dott.Ing.Ivan Ferrazzi

scheda di rete da utilizzare per il sito presente all'interno della cartella /www1 sul filesystem del webserver.Ricordiamoci di creare il link simbolico all'interno della cartella /etc/apache2/sites-enabled/ verso il file di configurazione all'interno di /etc/apache2/sites-available/ appena creato.Mandiamo poi un segnale di HUP ad Apache per attivare le modifiche effettuate.

Virtual Host utilizzando i nomi di dominio

Nel caso in cui volessimo utilizzare i nomi di dominio trasferiti negli header direttamente dal browser dell'utente la configurazione dovr essere la seguente.:

NameVirtualHost IP_server

ServerAdmin [email protected] /var/www/test1.com

ServerName www.test1.com

In questo caso diventa indispensabile l'utilizzo del parametro NameVirtualHost con il quale si definisce il gruppo di appartenenza di tutti i siti da riconoscere mediante nome di dominio definito con ServerName.Attenzione! Il parametro NameVirtualHost viene utilizzato solamente all'interno del primo file di configurazione caricato da apache2.

Cartelle protette da username e password

Per proteggere delle cartelle all'interno di un sito mediante nome utente e password bisogna, come prima cosa, creare il file che contiene i dati degli utenti che avranno i permessi. Il file viene creato utilizzando il comando

htpasswd -c /etc/apache2/users.pwd user

dove -c viene utilizzato per creare il nuovo file (quindi da utilizzare solamente con la creazione del primo utente) /etc/apache2/users.pwd e user identifica il nome dell'utente da creare.

Questo file viene utilizzato all'interno del file di configurazione del sito quando si definisce la cartella protetta.

ServerAdmin [email protected]

33/45

mailto:[email protected]:[email protected]

Dott.Ing.Ivan Ferrazzi

DocumentRoot /var/test1.com ServerName www.test1.com

AuthName Zona protettaAuthType BasicAuthUserFile /etc/apache2/users.pwdrequire valid-user

In questo file la parte pi importante il blocco . Qui definiamo il nome da visualizzare quando appare la finestra di pop-up per la richiesta del nome utente e la password (AuthName), il tipo di autenticazione da utilizzare (AuthType), il file da utilizzare per verificare le autenticazioni (AuthUserFile) e l'impostazione base di sicurezza (require).

Nel caso in cui si volesse testare i siti con domini non riconosciuti bisogna ricordarsi di andare a configurare il file /etc/hosts.

34/45

http://www.test1.com/

Dott.Ing.Ivan Ferrazzi

SECURE SOCKETS LAYER (SSL)

Introduzione

Transport Layer Security (TLS) e il suo predecessore Secure Sockets Layer (SSL) sono dei protocolli crittografici utilizzati spesso e volentieri per garantire la sicurezza e l'integrit di dati trasferiti su reti classificate non sicure come ad esempio l'internet. Stabilire connessioni sicure con il webserver desiderato di fondamentale importanza data spesso la necessit di invio di dati personali, privati o addirittura sensibili (es. online banking). Vediamo quindi in questo capitolo come abilitare il modulo SSL sul nostro webserver.

Chiave e certificato SSL

Per dare la possibilit al nostro server di effettuare connessione su protocollo SSL abbiamo bisogno di due cose fondamentali: una chiave e un certificato SSL. Nel momento in cui un browser si collega al nostro sito gli verr inviato dal server il certificato SSL. In questo caso il client pu essere sicuro di essersi collegato con il server desiderato. A verifica terminata si passa al passaggio dei dati su canale criptato. Il canale viene criptato con l'apposita chiave SSL.Un certificato, con relativa chiave SSL, deve essere richiesta ad un TrustCenter. Un TrustCenter deve verificare la correttezza dei dati inseriti nel certificato e siglarlo per renderlo efficace a tutti gli effetti.Effettuare la richiesta dei parametri SSL necessari pu essere molto dispendioso sia da un punto di vista di tempo che di denaro. Per il nostro

35/45

Dott.Ing.Ivan Ferrazzi

esempio possiamo creare un nostro certificato (naturalmente non utilizzabile su Internet) utilizzando il software OpenSSL (www.openssl.org) che dobbiamo eventualmente installare

apt-get install openssl

Come prima cosa dobbiamo generare una chiave RSA. Nel nostro caso generiamo una chiave con lunghezza 1024 bit che verr copiata all'interno del file server.key. Utilizziamo il seguente comandoopenssl genrsa -out server.key 1024

Il file con la chiave viene generata all'interno dell'attuale cartella (pwd). Dalla chiave generiamo ora il certificato dandogli una validit pari a 4 anni (ossia 1460 giorni).

openssl req -new -x509 -days 1460 -key server.key -out server.crt

Verranno poste una serie di domande alla quale rispondiamo di dovere. La domanda sul Common Name molto importante e dovrebbe contenere il nome DNS del nostro server. Il certificato si trova ora all'interno del file server.crt.

Configurazione del server

Prima di poter utilizzare il modulo SSL dobbiamo attivarlo con il comando:

a2enmod ssl

Prendiamo poi i due file creati precedentemente server.key e server.crt e copiamoli all'interno della cartella /etc/apache2.

cp server.crt server.key /etc/apache2

Ora ne modifichiamo l'utente proprietario ed i diritti di accesso per evitare che qualche utente vada a dare una sbirciatina.

chown www-data server.*chmod 600 server.*

Apriamo ora il file /etc/apache2/ports.conf ed aggiungiamo la riga

listen 443

Dovrebbe gi essere presente la riga listen 80. Nel file di configurazione del dominio web che stiamo creando e che inseriremo nella cartella /etc/apache2/sites-available inseriamo le seguenti righe:

36/45

http://www.openssl.org/

Dott.Ing.Ivan Ferrazzi

SSLCertificateFile /etc/apache2/server.crtSSLCertificateKeyFile /etc/apache2/server.key

Nel blocco VirtualHost dobbiamo solamente attivare il motore SSL con la seguente riga

SSLEngine On

Le opzioni pi importanti, oltre a quelle appena viste, che possiamo utilizzare nella configurazione SSL sono:

SSLProtocol Le versioni SSL che possiamo utilizzare sono SSLv2, SSLv3 e TLSv1. Utilizzando questa direttiva possiamo definire quale versione SSL utilizzare e quale no. Con la voceSSLProtocol -SSLv2 +SSLv3 +TLSv1 attiviamo tutte le versioni tranne la SSLv2.

SSLCipherSuite Con questa direttiva definiamo quali algoritmi SSL vogliamo permettere. Con la voceSSLCipherSuite HIGH:MEDIUM permettiamo una connessione solo dai browser che utilizzano algoritmi sicuri.

SSLRequireSSL Un server configurato per SSL risponde automaticamente anche a richieste su HTTP. Per rifiutare HTTP ed accettare solamente HTTPS inseriamo questa voce.

Vediamo ora un semplice esempio:

SSLCertificateFile /etc/apache2/server.crtSSLCertificateKeyFile /etc/apache2/server.keySSLProtocol AllSSLCipherSuite HIGH:MEDIUM

ServerAdmin [email protected] /var/www/test1.com

ServerName www.test1.comSSLEngine On

SSLRequireSSL

Nel caso di siti che permettono l'accesso sia tramite HTTPS (quindi alla porta 443) che HTTP (alla porta 80) la configurazione deve essere fatte per entrambe le situazioni. Rimane quindi il blocco per definire il comportamento di accessi HTTPS, ma va aggiunto anche un blocco per definire il comportamento di collegamenti HTTP.

37/45

mailto:[email protected]

Dott.Ing.Ivan Ferrazzi

WEBALIZER

Introduzione

Webalizer un sistema che pu essere abbinato al webserver per creare delle statistiche relativi ai vari domini che abbiamo configurato. Installiamo il pacchetto come segue

apt-get install webalizer

Configurazione di Webalizer

Dopo l'installazione troviamo all'interno della cartella per i documenti in linea del nostro webserver la seguente cartella vuota

/var/www/webalizer

Questa infatti la cartella che webalizer utilizza come posizione di destinazione delle statistiche di default. Il file di riferimento lo troviamo all'interno della cartella /etc/webalizer e si chiama webalizer.conf

/etc/webalizer/webalizer.conf

I parametri pi importanti all'interno di questo file di configurazione sono

LogFile percorso_logfileQuesto parametro definisce il logfile dal quale recuperare le informazioni

38/45

Dott.Ing.Ivan Ferrazzi

necessarie per la creazione della statistica di webalizer.

OutputDir percorso_cartellaQuesto parametro definisce la cartella all'interno della quale verr creata la situazione di statistica in formato HTML. La cartella definita mediante questo parametro deve esistere, altrimenti non verr creata in automatico.

Ogni configurazione si basa quindi su logfile diversi. Per questo motivo diventa importantissimo creare un logfile diverso per ogni dominio per il quale si vuole creare una statistica.La relativa statistica viene creata passando il file di configurazione come parametro al comando webalizer come segue

webalizer /etc/webalizer/dominio1.conf

Questo comando, eseguito per ogni file di configurazione presente all'interno della cartella /etc/webalizer/, viene inserito all'interno del crontab per essere eseguito quotidianamente (/etc/cron.daily/webalizer).Se creiamo quindi una cartella webalizer per ogni dominio che abbiamo in gestione e ne configuriamo l'esecuzione all'interno della cartella /etc/webalizer potremmo visualizzare i risultati della statistica con

http://www.dominio.it/webalizer

39/45

http://www.dominio.it/webalizer

Dott.Ing.Ivan Ferrazzi

Webmail con Squirrelmail

Introduzione

Squirrelmail un webmail server scritto in PHP che supporta i protocolli IMAP e SMTP.

Installazione

Per installare il sistema digitiamo

apt-get install squirrelmail

Dopo l'installazione possiamo trovare l'intero sistema all'interno della cartella

/usr/share/squirrelmail

mentre come cartella per i file di configurazione troviamo

/etc/squirrelmail

Qui dentro troviamo il file apache.conf che contiene tutte le direttive di apache per il corretto funzionamento. Possiamo integrare la configurazione con un semplice

Include /etc/squirrelmail/apache.conf

40/45

Dott.Ing.Ivan Ferrazzi

oppure creando un link simbolico all'interno della cartella /etc/apache2/conf.d come segue

cd /etc/apache2/conf.dln -s /etc/squirrelmail/apache.conf squirrelmail

Facciamo poi ripartire apache con

/etc/init.d/apache2 restart

Configurazione di Squirrelmail

Questo sistema viene fornito con il comando di configurazione squirrelmail-configure che mette a disposizione un tool interattivo per la configurazione del sistema stesso. Dopo aver fatto partire questo tool ci troviamo a disposizione un menu dal quale scegliamo il secondo punto

2. Server Settings

per controllare le impostazioni del server. Avendo installato il nostro IMAP e SMTP server in locale possiamo lasciare la situazione invariata. Altrimenti possiamo modificare a piacere scegliendo i punti A oppure B.

Per creare ora un dominio dedicato al nostro webmail possiamo creare un nuovo file di configurazione di apache all'interno del quale definiamo un nuovo punto di accesso.

DocumentRoot /usr/share/squirrelmail ServerName webmail.example.com

41/45

Dott.Ing.Ivan Ferrazzi

Modulo mod_rewriteIntroduzione

Questo modulo uno dei moduli presenti all'interno del sistema Apache e permette di riscrivere (rewrite) la richiesta URL fatta da parte dell'utente utilizzando delle regole ben precise prima che questa giunga e venga elaborata come richiesta ad una risorsa di Apache.La seguente richiesta

http://www.nostrosito.it/chisiamo.html

potrebbe puntare internamente alla pagina

http://www.nostrosito.it/pages.php?page=chisiamo

Configurazione del server

Essendo questo modulo gi presente all'interno di Apache l'unica cosa che dobbiamo fare attivarlo con il seguente comando:

a2enmod rewrite

Da ora in poi il modulo sar attivo. Possiamo verificare l'attivazione controllando la presenza dei file mod_rewrite.load direttamente nella cartella /etc/apache2/mods-enabled/.Per poter utilizzare questo modulo all'interno di un nostro dominio

42/45

http://www.nostrosito.it/pages.php?page=chisiamohttp://www.nostrosito.it/chisiamo.html

Dott.Ing.Ivan Ferrazzi

indispensabile far capire ad Apache che vogliamo rendere disponibile il motore mod_rewrite per il dominio desiderato. La direttiva per l'attivazione del motore in questione cos come le regole necessarie alla sostituzione vanno inserite direttamente all'interno della configurazione del dominio, oppure nel file .htaccess.Per attivare il motore del modulo rewrite scriviamo

RewriteEngine on

nella direttiva directory principale del nostro sito. Le regole verranno spiegate nelle sezioni seguenti.

Le regole

Una regola viene identificata da Apache grazie alla parola RewriteRule. Questa direttiva ha la seguente sintassi

RewriteRule {pattern} {sostituzione} [opzioni]

dove i parametri utilizzabili hanno il seguente segnificato

{pattern} Qui inseriamo una regular expression che viene utilizzata sulla URL di richiesta fatta direttamente dall'utente.

{sostituzione} Questa la risorsa interna che Apache dovr far vedere in base alla URL di richiesta identificata da {pattern}

[opzioni] Questo parametro non indispensabile per il corretto funzionamento della regola, ma permette di gestirne il comportamento.

Un semplice esempio in grado di indirizzare tutte le richieste fatta alla pagina prova.html alla pagina test.html il seguente:

RewriteEngine onRewriteRule ^prova.html$ test.html

Dopo aver attivato il motore di rewrite definiamo la regola che riconosce la richiesta fatta grazie a

^prova.html$

e ne definisce la risorsa effettiva con test.html. Nelle regular expressions il ^ identifica l'inizio della riga (o stringa di richiesta), mentre $ ne identifica la fine.

43/45

Dott.Ing.Ivan Ferrazzi

Le opzioni

Possiamo definire il comportamento delle regole in base a dei flag posti tra parentesi quadre [...]. Alcuni dei flag pi importanti sono:

C Questo flag permette di concatenare (chain) una regola con quella successiva. Se la regola corrisponde si passa direttamente alla prossima, altrimenti la procedura di elaborazione salter tutte quelle collegate fra loro

F Permette di negare (forbidden) l'accesso alla risorsa definita dalla regola

L Definisce la regola come ultima (last) regola da elaborare. Questo evita che la richiesta possa subire ulteriori variazioni da parte di altre regole sottostanti.

NC Questo flag rende case-insenitive il blocco pattern durante l'elaborazione della regola

NE Normalmente i caratteri speciali ('%', '$', ';' ecc.) presenti all'interno del blocco di sostituzione vengono rimpiazzati dagli equivalenti valori esadecimali ('%25', '%24', '%3B', ecc.). Questo flag disattiva questa funzione lasciando i caratteri speciali invariati.

Il seguente esempio

RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]

trasforma la richiesta /foo/zed in /bar?arg=P1=zed.

Le variabili

Abbiamo la possibilit di registrare dei valori di variabili recuperati dalla sezione {pattern} per riutilizzarli nel blocco {sostituzione}. Per far capire qual' il valore della variabile utilizziamo le parentesi tonde (...) mentre riutilizziamo questi valori con la forma ${numero}. {numero} il numero di blocco a partire da sinistra verso destra dove il primo blocco identificato dal numero 1.Per esempio possiamo utilizzare la seguente regola

RewriteRule ^page/([^/\.]+)/?$ pages.php?page=$1

per prendere tutto quello che si trova dopo page/ ed inserirlo come parametro del blocco in sostituzione al posto di $1. La richiesta a

http://www.miosito.it/page/chisiamo

viene interpretato da Apache come

44/45

http://www.miosito.it/page/chisiamo

Dott.Ing.Ivan Ferrazzi

http://www.miosito.it/pages.php?page=chisiamo

La sequenza di caratteri /?$ identifica tutte le richieste che terminano con o senza slash (/).

Le condizioni

La validit di una regola pu essere definita da una o pi condizioni che la precedono. La sintassi con la quale viene definita una condizione la seguente

RewriteCond {test} {pattern} [opzioni]

dove test pu contenere un blocco di raggruppamento presente all'interno del blocco pattern dell'ultima regola ($N: 0