Laboratorio Di Basi Di Dati 08 Il Web Server Apache
1. Corso di Basi di Dati e Laboratorio
Apache
Alfio Ferrara - Stefano Montanelli
A.A. 2005/2006 Basi di Dati e Laboratorio 1
Apache
• Server Web open source
• Il progetto ha origine nel 1995
• Apache ha un’architettura modulare e
altamente configurabile
• http://www.apache.org
A.A. 2005/2006 Basi di Dati e Laboratorio 2
Diffusione sul mercato
Dicembre 2005 - http://news.netcraft.com
69.97 %
(52.025.380)
20.92 %
(15.557.786)
2.53 %
(1.881.861)
0.79 % (577.384 )
APACHE MICROSOFT JAVA ZEUS
A.A. 2005/2006 Basi di Dati e Laboratorio 3
1
2. Architettura
• Componenti principali
– Inizializzazione e configurazione
– Parser delle richieste HTTP
– Allocazione della memoria
• Moduli
– Autentificazione e sicurezza
– Redirezione
– Estensioni (supporto ai linguaggi di scripting)
A.A. 2005/2006 Basi di Dati e Laboratorio 4
Installazione
• In breve…
–$ ./configure --prefix=PREFIX
–$ make
–$ make install
–$ PREFIX/bin/apachectl start
• Due opzioni importanti:
– Perl 5 è richiesto per l’esecuzione di diversi
script (apxs). È consigliata l’opzione --with-perl
– DSO per il supporto al caricamento dinamico
dei moduli
A.A. 2005/2006 Basi di Dati e Laboratorio 5
Avvio del server
• Il server viene avviato sulla porta
specificata (assieme alle altre opzioni di
configurazione) nel file httpd.conf
• In ambiente UNIX Apache può essere
avviato tramite inetd oppure:
– /usr/local/apache/bin/httpd, oppure
attraverso lo script apachectl
• In ambiente Windows l’avvio è analogo a
quello degli altri servizi NT
A.A. 2005/2006 Basi di Dati e Laboratorio 6
2
3. Configurazione
• Avviene editando il file httpd.conf
• Le opzioni di configurazione sono definite
tramite direttive
• Principali elementi della configurazione:
– Variabili d’ambiente
– Gestione degli accessi
– Comportamento a seguito di specifiche
richieste
A.A. 2005/2006 Basi di Dati e Laboratorio 7
DSO e moduli
• DSO (Dynamic Shared Objects)
– Consentono il caricamento dei moduli di Apache a
run-time
• Sono supportati tramite il modulo mod_so.c che
deve essere compilato staticamente con Apache
• Il modulo mod_so consente l’uso della direttiva
LoadModule nel file di configurazione per il
caricamento dei moduli richiesti
A.A. 2005/2006 Basi di Dati e Laboratorio 8
Apxs
• La gestione dei moduli è stata semplificata
attraverso l’utility apxs che permette di
generare i DSO
• Vantaggi di DSO:
– Flessibilità
– Estendibilità (ad esempio l’aggiunta del
modulo di supporto per PHP)
• Svantaggi:
– Prestazioni inferiori rispetto alla compilazione
statica dei moduli
A.A. 2005/2006 Basi di Dati e Laboratorio 9
3
4. Moduli
Direttive per la gestione dei moduli:
• LoadModule nomemodulo nomefile
– Carica il modulo nomemodulo istituendo un
link con il nomefile ad esso associato
• E.g., LoadModule dir_module modules/mod_dir.so
• <IfModule [!]nomemodulo> … </IfModule>
– Esegue un’insieme di direttive solo nel caso
che nomemodulo sia caricato (o non caricato)
• E.g., <IfModule mod_ssl.c>
Include conf/ssl.conf
</IfModule>
A.A. 2005/2006 Basi di Dati e Laboratorio 10
Direttive
• Le direttive istruiscono Apache sulle azioni da
intraprendere in risposta ad una richiesta per una
specifica risorsa
• Vengono utilizzati dei marcatori per definire lo scope di
una direttiva
• Esempi di direttive:
– <Directory>
– <DirectoryMatch>
– <Files>
– <FilesMatch>
– <Location>
– <LocationMatch>
– <VirtualHost>
A.A. 2005/2006 Basi di Dati e Laboratorio 11
Direttive
• <Directory dirpath> … </Directory>
– Specifica un insieme di direttive da applicare alla cartella indicata
in dirpath e alle sottocartelle in essa contenute
• E.g., <Directory “/var/www/site/unimi/quot;>
Allow from dico.unimi.it
Options Indexes
</Directory>
• <DirectoryMatch regexpr> … </ DirectoryMatch>
– Specifica un insieme di direttive da applicare alle cartelle che
soddisfano l’espressione regolare regexpr
• E.g., <DirectoryMatch “^/www/[0-9]{3}quot;>
Order allow, deny
Allow from dico.unimi.it
</DirectoryMatch>
A.A. 2005/2006 Basi di Dati e Laboratorio 12
4
5. Direttive
• <Files filename> … </Files>
– Specifica un insieme di direttive da applicare al file
filename
• <FilesMatch regexpr> … </FilesMatch>
– Specifica un insieme di direttive da applicare ai files
che soddisfano l’espressione regolare regexpr
• <Location url> … </Location>
– Specifica un insieme di direttive da applicare alle
risorse specificate in url
• <LocationMatch regexpr> … </LocationMatch>
– Specifica un insieme di direttive da applicare alle
risorse che soddisfano l’espressione regolare regexpr
A.A. 2005/2006 Basi di Dati e Laboratorio 13
Direttive
• <VirtualHost addr[:port]> … </ VirtualHost>
– Configura un host-virtuale
• E.g., <VirtualHost 192.168.0.7:8081>
ServerAdmin webmaster@dico.unimi.it
DocumentRoot “C:/docs”
ServerName webdico:8081
</VirtualHost>
A.A. 2005/2006 Basi di Dati e Laboratorio 14
Variabili d’ambiente
• Sono utilizzate dal server per registrare
informazioni e per condividerle con altre
applicazioni (ad esempio con applicazioni CGI)
• Le principali direttive per manipolare le variabili
d’ambiente sono:
– BrowserMatch
– PassEnv
– RewriteRule
– SetEnv
– SetEnvIf
– UnsetEnv
A.A. 2005/2006 Basi di Dati e Laboratorio 15
5
6. BrowserMatch
• BrowserMatch riconosce il client che
effettua la chiamata sulla base del campo
user-agent della richiesta HTTP
– BrowserMatch “Mozilla/2 nokeepalive”
– BrowserMatch “RealPlayer 4.0”
force-response-1.0
A.A. 2005/2006 Basi di Dati e Laboratorio 16
PassEnv, SetEnv, e UnSetEnv
• PassEnv passa ad uno script CGI il valore
di una delle variabili d’ambiente
– PassEnv SPECIAL_PATH
• SetEnv definisce il valore di assegnazione
di una variabile d’ambiente
– SetEnv SPECIAL_PATH /bin
• UnSetEnv rimuove una variabile di
ambiente:
– UnSetEnv SPECIAL_PATH
A.A. 2005/2006 Basi di Dati e Laboratorio 17
SetEnvIf
• SetEnvIf definisce il valore di una variabile
sulla base degli attributi della richiesta
HTTP:
– Remote_Host
– Remote_Addr
– Server_Addr
– Request_Method
– Request_Protocol
– Request_URI
A.A. 2005/2006 Basi di Dati e Laboratorio 18
6
7. Esempio
• SetEnvIf Request_URI ^/manual/(de|en|it)/ prefLang=$1
• SetEnvIf Request_URI quot;.gif$quot; object_is_image=gif
• SetEnvIf Request_URI quot;.jpg$quot; object_is_image=jpg
• SetEnvIf Request_URI quot;.xbm$quot; object_is_image=xbm
• Il valore delle variabili prefLang e
object_is_image viene definito sulla base
della risorsa richiesta tramite HTTP
A.A. 2005/2006 Basi di Dati e Laboratorio 19
Controllo dell’accesso
• L’accesso alle risorse viene definito sulla
base di tre principali criteri:
– Authorization
– Authentication
– Access control
A.A. 2005/2006 Basi di Dati e Laboratorio 20
Criteri di accesso
• Authentication
– Verifica dell’identità del richiedente
• Authorization
– Verifica dei permessi associati ad un utente
autenticato
• Access control
– Definizione di criteri di accesso generici (ad
esempio sulla base dell’IP di provenienza
della richiesta)
A.A. 2005/2006 Basi di Dati e Laboratorio 21
7
8. Autenticazione
• Meccanismo base per l’autenticazione:
– Il server riceve una richiesta per una risorsa
protetta
– Invia una risposta con header 401
(Authentication required)
– Il browser si occupa di chiedere all’utente i dati
di autentifica e di memorizzarli per le
successive transazioni
A.A. 2005/2006 Basi di Dati e Laboratorio 22
Protezione delle risorse
• Per creare un semplice meccanismo di
protezione delle risorse occorre:
– Creare un file contenente una password
– Definire una configurazione che utilizzi la
password definita
A.A. 2005/2006 Basi di Dati e Laboratorio 23
Creazione di una password
• htpasswd -c /percorso_accessibile_ad_apache/file username
• La password viene crittata e associata ad
uno o più utenti attraverso una direttiva
• La direttiva specifica la directory o la
risorsa a cui si applica la restrizione
d’accesso
A.A. 2005/2006 Basi di Dati e Laboratorio 24
8
9. Direttiva
• La direttiva (directory) che specifica
l’accesso per una data cartella è composta
dagli elementi seguenti:
– AuthType - tipo di identificazione (basic)
– AuthName - nome dell’autentificazione
– AuthUserFile - locazione del file delle
password
– AuthGroupFile - file delle password di un
gruppo
– Require - caratteristiche richieste per
l’autentificazione
A.A. 2005/2006 Basi di Dati e Laboratorio 25
Esempio
• AuthType Basic
• AuthName ”Area ristrettaquot;
• AuthUserFile /usr/…passwords
• Require user tizio caio
• Per applicare un’autentifica ad un ramo del
file system visibile al server Web senza
modificarne la configurazione è possibile
ricorrere al file .htaccess collocato nella
directory protetta e contenente la direttiva
A.A. 2005/2006 Basi di Dati e Laboratorio 26
Controllo dell’accesso
• Le direttive Allow e Deny sono utilizzate
per vincolare l’accesso sulla base delle
caratteristiche della richiesta
• Esempi:
– deny from 159.149
– deny from www.dominio.esempio
– deny from .com
– allow from 127.0.0.1
– allow from islab.dico.unimi.it
– allow from unimi.it
A.A. 2005/2006 Basi di Dati e Laboratorio 27
9
10. Combinare le direttive
• L’istruzione order permette di definire un
ordine di precedenza nell’esaudire le
direttive specificate
• Esempio:
– Order Deny,Allow
Deny from all
Allow from 127.0.0.1
• Consente solo un accesso locale
A.A. 2005/2006 Basi di Dati e Laboratorio 28
Completezza
• La direttiva satisfy permette di stabilire se tutte le restrizioni
(all) o solo alcune (any) devono essere rispettate
• Esempio:
– <Directory /usr/local/apache/htdocs/commerce>
– AuthType Basic
– AuthName intranet
– AuthUserFile /www/passwd/users
– Require user customer
– Allow from internal.com
– Satisfy any
– </Directory>
• Alla cartellla commerce accedono gli utenti in possesso di
password o quelli del dominio internal.com
A.A. 2005/2006 Basi di Dati e Laboratorio 29
10