Apache Chroot · 3 min read · Jan 02, 2026

Chrooting Apache2 Con mod_chroot Su Fedora 12

Chrooting Apache2 Con mod_chroot Su Fedora 12

Version 1.0
Autore: Falko Timme
Seguimi su Twitter

Questa guida spiega come impostare mod_chroot con Apache2 su un sistema Fedora 12. Con mod_chroot, puoi eseguire Apache2 in un ambiente chroot sicuro e rendere il tuo server meno vulnerabile a tentativi di intrusione che cercano di sfruttare vulnerabilità in Apache2 o nelle tue applicazioni web installate.

Non rilascio alcuna garanzia che questo funzionerà per te!

1 Nota Preliminare

Presumo che tu abbia un sistema Fedora 12 in esecuzione con un Apache2 funzionante, ad esempio come mostrato in questo tutorial: The Perfect Server - Fedora 12 x86_64 [ISPConfig 2]. Inoltre, presumo che tu abbia uno o più siti web configurati all’interno della directory /var/www (ad esempio, se usi ISPConfig).

2 Installazione di mod_chroot

Non esiste un pacchetto mod_chroot per Fedora 12, quindi dobbiamo compilarlo noi stessi. Prima installiamo i prerequisiti:

yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install httpd-devel

Ora costruiamo mod_chroot come segue:

cd /tmp  
wget http://core.segfault.pl/~hobbit/mod_chroot/dist/mod_chroot-0.5.tar.gz  
tar xvfz mod_chroot-0.5.tar.gz  
cd mod_chroot-0.5  
apxs -cia mod_chroot.c

Poi riavviamo Apache:

/etc/init.d/httpd restart

3 Configurazione di Apache

Voglio usare la directory /var/www come la directory contenente la prigione chroot. L’Apache di Fedora utilizza il file PID /var/run/httpd/httpd.pid; quando Apache è chrooted in /var/www, /var/run/httpd/httpd.pid si traduce in /var/www/var/run/httpd/httpd.pid. Pertanto, creiamo ora quella directory:

mkdir -p /var/www/var/run/httpd  
chown -R root:apache /var/www/var/run/httpd

Ora dobbiamo dire ad Apache che vogliamo usare /var/www come nostra directory chroot. Apriamo /etc/httpd/conf/httpd.conf, e subito sotto la riga PidFile, aggiungiamo la riga ChrootDir /var/www; commentiamo anche la riga PidFile run/httpd.pid e aggiungiamo la riga PidFile /var/run/httpd/httpd.pid:

vi /etc/httpd/conf/httpd.conf

| [...] # # PidFile: Il file in cui il server dovrebbe registrare il suo numero # di identificazione del processo quando si avvia. # #PidFile run/httpd.pid PidFile /var/run/httpd/httpd.pid ChrootDir /var/www [...] |

Successivamente dobbiamo dire ai nostri vhosts che la radice del documento è cambiata (ad esempio, un DocumentRoot /var/www si traduce ora in DocumentRoot /). Possiamo farlo cambiando la direttiva DocumentRoot di ogni vhost, oppure più facilmente, creando un symlink nel file system.


3.1 Primo Metodo: Cambiare Il DocumentRoot

Supponiamo di avere un vhost con DocumentRoot /var/www. Dobbiamo ora aprire la configurazione del vhost di quel vhost e cambiare DocumentRoot /var/www in DocumentRoot /. Di conseguenza, DocumentRoot /var/www/web1/web si tradurrebbe ora in DocumentRoot /web1/web, e così via. Se vuoi usare questo metodo, devi cambiare il DocumentRoot per ogni singolo vhost.

3.2 Secondo Metodo: Creare Un Symlink Nel File System

Questo metodo è più semplice, perché devi farlo solo una volta e non devi modificare alcuna configurazione vhost. Creiamo un symlink che punta da /var/www/var/www a /var/www:

mkdir -p /var/www/var  
cd /var/www/var  
ln -s ../../ www

Infine, dobbiamo fermare Apache, eliminare la directory /var/run/httpd, creare un symlink da /var/run/httpd a /var/www/var/run/httpd, e riavviarlo:

/etc/init.d/httpd stop
rm -fr /var/run/httpd  
ln -sf /var/www/var/run/httpd /var/run/httpd  
/etc/init.d/httpd start

Questo è tutto. Ora puoi chiamare le tue pagine web come prima, e dovrebbero essere servite senza problemi, purché siano file HTML statici o utilizzino mod_php.

Se stai usando CGI, ad esempio Perl, suPHP, Ruby, ecc., allora devi copiare l’interprete (ad esempio, /usr/bin/perl, /usr/sbin/suphp, ecc.) nella prigione chroot insieme a tutte le librerie necessarie per l’interprete. Puoi scoprire le librerie richieste con il comando ldd, ad esempio:

ldd /usr/sbin/suphp
[server2:/var/www/web1/log]# ldd /usr/sbin/suphp  
        linux-gate.so.1 =>  (0xffffe000)  
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e34000)  
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e0f000)  
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e03000)  
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7cd2000)  
        /lib/ld-linux.so.2 (0xb7f23000)  
[server2:/var/www/web1/log]#

Se hai copiato tutti i file richiesti, ma la pagina non funziona ancora, dovresti dare un’occhiata al log degli errori di Apache. Di solito ti dice dove si trova il problema. Leggi anche http://core.segfault.pl/~hobbit/mod_chroot/caveats.html per problemi noti e soluzioni.

4 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.