Configurare Apache in un ambiente Chroot

Guida da adottare! Bannermv.png


Edit-clear-history.png 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.


Debian-swirl.png 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