Apache Chroot · 3 min read · Dec 30, 2025
Chrooting Apache2 Con mod_chroot Su OpenSUSE 12.2
Chrooting Apache2 Con mod_chroot Su OpenSUSE 12.2
Version 1.0
Autore: Falko Timme
Seguimi su Twitter
Questa guida spiega come impostare mod_chroot con Apache2 su un sistema OpenSUSE 12.2. Con mod_chroot, puoi eseguire Apache2 in un ambiente chroot sicuro e rendere il tuo server meno vulnerabile ai tentativi di intrusione che cercano di sfruttare vulnerabilità in Apache2 o nelle tue applicazioni web installate.
Non fornisco alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
Presumo che tu abbia un sistema OpenSUSE 12.2 in esecuzione con un Apache2 funzionante. Inoltre, presumo che tu abbia uno o più siti web configurati all’interno della directory /srv/www (ad esempio, se utilizzi ISPConfig).
2 Installazione di mod_chroot
Non esiste un pacchetto mod_chroot per OpenSUSE 12.2, quindi dobbiamo costruirlo noi stessi. Prima installiamo i prerequisiti:
zypper install libgcc glibc-devel gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim apache2-develOra 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
apxs2 -cia mod_chroot.cPoi riavviamo Apache:
systemctl restart apache2.service3 Configurazione di Apache
Voglio usare la directory /srv/www come la directory contenente la prigione chroot. L’Apache di OpenSUSE utilizza il file PID /var/run/httpd2.pid; quando Apache è chrooted in /srv/www, /var/run/httpd2.pid si traduce in /srv/www/var/run/httpd2.pid. Pertanto, creiamo ora quella directory:
mkdir -p /srv/www/var/run
chown -R root:www /srv/www/var/runOra dobbiamo dire ad Apache che vogliamo usare /srv/www come nostra directory chroot. Apriamo /etc/apache2/httpd.conf, e subito sotto la riga Include /etc/apache2/sysconfig.d/loadmodule.conf, aggiungiamo la riga ChrootDir /srv/www; nella stanzetta
vi /etc/apache2/httpd.conf| [...] # generato da APACHE_MODULES in /etc/sysconfig/apache2 Include /etc/apache2/sysconfig.d/loadmodule.conf ChrootDir /srv/www [...] # vieta l'accesso all'intero filesystem per impostazione predefinita |
Successivamente dobbiamo dire ai nostri vhosts che la root del documento è cambiata (ad esempio, un DocumentRoot /srv/www si traduce ora in DocumentRoot /). Possiamo farlo cambiando la direttiva DocumentRoot di ogni vhost, oppure più facilmente, creando un symlink nel filesystem.
3.1 Primo Metodo: Cambiare Il DocumentRoot
Supponiamo di avere un vhost con DocumentRoot /srv/www. Dobbiamo ora aprire la configurazione del vhost di quel vhost e cambiare DocumentRoot /srv/www in DocumentRoot /. Di conseguenza, DocumentRoot /srv/www/web1/web si tradurrebbe ora in DocumentRoot /web1/web, e così via. Se vuoi utilizzare 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 del vhost. Creiamo un symlink che punta da /srv/www/srv/www a /srv/www:
mkdir -p /srv/www/srv
cd /srv/www/srv
ln -s ../ wwwInfine, dobbiamo fermare Apache, creare un symlink da /var/run/httpd2.pid a /srv/www/var/run/httpd2.pid e riavviarlo:
systemctl stop apache2.serviceln -sf /srv/www/var/run/httpd2.pid /var/run/httpd2.pid
systemctl start apache2.serviceQuesto è 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 utilizzando 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/suphpserver2:/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
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- OpenSUSE: http://www.opensuse.org/
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.