Configurare Apache in un ambiente Chroot
Guida da adottare! |
Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.
Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione. |
Versioni Compatibili Debian 3.1 "sarge" Debian 4 "etch" Debian 5 "lenny" Debian 6 "squeeze" |
Introduzione
Chroot, contrazione di change root, è un metodo di sicurezza usato per isolare i limiti operativi di una applicazione. Il nome deriva dal termine informatico root, che indica la directory principale del sistema operativo in cui sono contenute tutte le altre directory.
Normalmente un software può accedere a tutti i dischi e le risorse del sistema operativo, compatibilmente con i permessi di cui gode; l'operazione di chroot consiste nell'eseguire il programma bloccato dentro una sottodirectory, permettendogli di accedere solo alle risorse di cui ha strettamente bisogno. La sottodirectory in questione viene anch'essa denominata chroot o gabbia chroot (in inglese chroot jail) e deve contenere una copia (di solito un hard link) di tutti i file di sistema richiesti dal software. Nel caso di sistemi Unix è necessaria anche un copia dei device file a cui il programma deve accedere.
Normalmente se un cracker riesce a prendere il controllo di una applicazione, avrà tutti i privilegi associati all'applicazione e potrebbe essere in grado di compromettere la sicurezza dell'intero sistema, ad esempio installando un rootkit. Al contrario se il programma compromesso si trova in un chroot, il malintenzionato non potrà uscire dal perimetro; potrà cambiare il contenuto di file del programma stesso, ma senza poter accedere ad altre risorse.
(Fonte: Wikipedia)
Installazione
In questa breve guida vediamo come configurare Apache2 in un ambiente chroot utilizzando il modulo mod_chroot di Debian.
Come prerequisito è necessario che sul sistema sia già installato e funzionante un server web Apache2, con DocumentRoot impostata nella directory /var/www
. Per l'installazione di Apache si veda ad esempio la guida: Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5.
Installazione di mod_chroot
La prima operazione consiste nell’installare il modulo mod_chroot:
# aptitude install libapache2-mod-chroot
A questo punto è possibile abilitare mod_chroot e riavviare Apache:
# a2enmod mod_chroot # /etc/init.d/apache2 restart
Configurazione di Apache
Come detto, la directory utilizzata per l’ambiente chroot sarà /var/www
.
Apache2 di Debian utilizza il file /var/run/apache2.pid
come file PID; il PID (acronimo di Process Identifier) è un numero che viene assegnato ad ogni processo alla sua nascita, che lo accompagna durante tutta la sua esistenza e che lo identifica univocamente nel sistema.
Dopo aver eseguito il chroot di Apache il file PID sarà creato in /var/www/var/run/apache2.pid
e quindi è necessario creare questa directory:
# mkdir -p /var/www/var/run # chown -R root:root /var/www/var/run
A questo punto è possibile istruire Apache per utilizzare la directory /var/www/
come gabbia chroot, aggiungendo la riga ChrootDir
nel file di configurazione /etc/apache2/apache2.conf
:
# nano /etc/apache2/apache2.conf
ad esempio in questo punto:
# # PidFile: The file in which the server should record its process # identification number when it starts. # This needs to be set in /etc/apache2/envvars # PidFile ${APACHE_PID_FILE} ChrootDir /var/www
Configurazione dei Virtual Host
A questo punto dobbiamo informare tutti i virtual host di Apache che la DocumentRoot
è cambiata.
Occorre perciò aprire tutti i file di configurazione dei nostri virtual hosts presenti nella directory /etc/apache2/sites-available
, modificando la direttiva DocumentRoot
e sostituendo il path /var/www
con /
.
Ad esempio un virtual host con DocumentRoot
pari a:
DocumentRoot /var/www/sito1/www
andrà modificato in:
DocumentRoot /sito1/www
Un metodo alternativo, suggerito in diversi howto, è quello di creare un symbolic link per la DocumentRoot, visto che /var/www
corrisponde a /
nell’ambiente chroot:
# mkdir -p /var/www/var # cd /var/www/var # ln -s ../../ www
In diversi testi sulla sicurezza è sconsigliato utilizzare dei symlink che entrino o escano da una gabbia chroot; per questo motivo consiglio caldamente il primo metodo e invito a modificare a mano le direttive DocumentRoot
dei vari virtual host.
Conclusione
Una volta fatto tutto questo, è possibile fermare Apache, creare un symbolic link in /var/run/apache2.pid
per /var/www/var/run/apache2.pid
e riavviare il server web:
# /etc/init.d/apache2 stop # ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid # /etc/init.d/apache2 start
Se tutto è andato per il verso giusto, collegandovi all'indirizzo IP del vostro server dovreste vedere i siti ospitati proprio come prima della costruzione della gabbia chroot.
Guida scritta da: Ferdybassi 00:45, 7 nov 2010 (CET) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |