Apache Configuration · 7 min read · Jan 02, 2026
Esecuzione di Vhosts Sotto UID/GID Separati Con Apache2 mpm-peruser Su Debian Etch
Esecuzione di Vhosts Sotto UID/GID Separati Con Apache2 mpm-peruser Su Debian Etch
Versione 1.0
Autore: Falko Timme
Questo articolo spiega come puoi installare e configurare apache2-mpm-peruser su un server Debian Etch. apache2-mpm-peruser è un MPM (Modulo di Multi-Processing) per il server web Apache 2, molto simile ad apache2-mpm-itk, ma più veloce (quasi veloce come apache2-mpm-prefork). mpm-peruser ti consente di eseguire ciascuno dei tuoi vhosts sotto un UID e un GID separati - in breve, gli script e i file di configurazione per un vhost non devono più essere leggibili per tutti gli altri vhosts. Si basa su metuxmpm, un’implementazione funzionante dell’MPM perchild. Il risultato è un ambiente di server web sano e sicuro per i tuoi utenti, senza soluzioni improvvisate come il safe_mode di PHP.
Questo documento viene fornito senza garanzia di alcun tipo! Non rilascio alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
Per considerazioni di velocità, dai un’occhiata a http://blog.stuartherbert.com/php/2008/03/20/using-mpm-peruser-to-secure-a-shared-server/.
Presumo che tu abbia un’installazione funzionante di Apache2 con mod_php sul tuo server Debian Etch, ad esempio installato in questo modo:
apt-get install apache2-mpm-prefork libapache2-mod-php5Quando crei un file PHP con la funzione phpinfo();, ad esempio in questo modo…
vi /var/www/info.php| |
… e lo chiami in un browser, vedrai che prefork è elencato nella riga dei Moduli Caricati sotto apache2handler:

2 Installazione di apache2-mpm-peruser
A differenza di apache2-mpm-itk, apache2-mpm-peruser non è disponibile come pacchetto Debian, quindi costruirò il mio pacchetto Debian (userò il pacchetto sorgente apache2-mpm-itk come base per costruire il mio pacchetto Debian apache2-mpm-peruser poiché sono molto simili).
Prima di iniziare a costruire il pacchetto, installo alcuni prerequisiti:
apt-get install build-essential dpkg-dev fakeroot debhelper dpatch apache2-prefork-dev libcap-dev apache2-src autoconfPoi vado in /usr/src e scarico il pacchetto sorgente apache2-mpm-itk:
cd /usr/src
apt-get source apache2-mpm-itkls -lserver1:/usr/src# ls -l
total 52
drwxr-xr-x 3 root root 4096 2008-08-16 13:29 apache2-mpm-itk-2.2.3-01
-rw-r--r-- 1 root src 11392 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.diff.gz
-rw-r--r-- 1 root src 664 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.dsc
-rw-r--r-- 1 root src 29071 2006-10-31 00:04 apache2-mpm-itk_2.2.3-01.orig.tar.gz
server1:/usr/src#Successivamente rinomino la directory apache2-mpm-itk in apache2-mpm-peruser:
mv apache2-mpm-itk-2.2.3-01 apache2-mpm-peruser-2.2.3-01Poi vado in quella directory, scarico la patch mpm-peruser e elimino la patch mpm-itk che è già nella directory:
cd apache2-mpm-peruser-2.2.3-01/
wget http://www.telana.com/files/httpd-2.2.3-peruser-0.3.0.patch
rm -f apache2.2-mpm-itk.patchOra andiamo nella sottodirectory debian/:
cd debian/
ls -lserver1:/usr/src/apache2-mpm-peruser-2.2.3-01/debian# ls -l
total 64
-rw-r--r-- 1 root root 10 2008-08-15 16:21 apache2-mpm-itk.dirs
-rw-r--r-- 1 root root 633 2008-08-15 16:21 apache2-mpm-itk.postinst
-rw-r--r-- 1 root root 561 2008-08-15 16:21 apache2-mpm-itk.preinst
-rw-r--r-- 1 root root 342 2008-08-15 16:21 apache2-mpm-itk.prerm
-rw-r--r-- 1 root root 438 2008-08-15 16:21 changelog
-rw-r--r-- 1 root root 2 2008-08-15 16:21 compat
-rw-r--r-- 1 root root 980 2008-08-15 16:21 control
-rw-r--r-- 1 root root 31777 2008-08-15 16:21 copyright
-rwxr-xr-x 1 root root 1328 2008-08-15 16:21 rules
server1:/usr/src/apache2-mpm-peruser-2.2.3-01/debian#Rinominiamo tutti i file che contengono itk nel nome del file:
mv apache2-mpm-itk.dirs apache2-mpm-peruser.dirs
mv apache2-mpm-itk.postinst apache2-mpm-peruser.postinst
mv apache2-mpm-itk.preinst apache2-mpm-peruser.preinst
mv apache2-mpm-itk.prerm apache2-mpm-peruser.prermSuccessivamente dobbiamo modificare il file changelog, ad esempio in questo modo:
cat /dev/null > changelog
vi changelog| apache2-mpm-peruser (2.2.3-01-1) stable; urgency=low * Port iniziale ad Apache 2.2. -- Falko Timme <[email protected]> Ven, 15 Ago 2008 14:29:36 +0100 |
Assicurati che l’ultima riga abbia esattamente uno spazio all’inizio (prima di –) e due spazi tra l’indirizzo email e la data!
Ora apriamo il file di controllo e sostituiamo tutte le occorrenze di apache2-mpm-itk con apache2-mpm-peruser. Lascio la Descrizione così com’è, ma sostituisco ITK con Peruser. Nella riga dei Conflitti, aggiungo apache2-mpm-itk:
vi control| Source: apache2-mpm-peruser Section: net Priority: extra Build-Depends: apache2-src, apache2-prefork-dev, libcap-dev, autoconf, debhelper (>> 5.0.0) Maintainer: Falko Timme <[email protected]> Standards-Version: 3.7.2 Package: apache2-mpm-peruser Provides: apache2-modules, apache2, httpd, httpd-cgi Conflicts: apache2-mpm-prefork, apache2-mpm-itk, apache2-mpm-worker, apache2-mpm-perchild, apache2-mpm-event, apache2-common Depends: ${apache:Depends}, ${shlibs:Depends} Architecture: any Description: MPM multiutente per Apache 2.2 Il Modulo di Multi-Processing (MPM) Peruser funziona in modo simile al classico modulo "prefork" (cioè, senza thread), eccetto che ti consente di vincolare ciascun vhost individuale a un particolare utente di sistema. Questo ti consente di eseguire diversi siti web su un singolo server senza preoccuparti che possano leggere i file degli altri. . Si prega di notare che questo MPM è altamente sperimentale e non proviene dallo stesso albero degli altri MPM. |
Successivamente modifichiamo il file delle regole:
vi rulesSostituisci
| cd apache2.2/ && patch -p1 < ../apache2.2-mpm-itk.patch |
con
| cd apache2.2/ && patch -p1 < ../httpd-2.2.3-peruser-0.3.0.patch |
Sostituisci
| sed 's,prefork,itk,;s,^".*/configure",../apache2.2/configure,;s,^"--srcdir=.*",--srcdir=../apache2.2/,' < /usr/share/apache2/build/config.nice > build-tree/config.nice |
con
| sed 's,prefork,peruser,;s,^".*/configure",../apache2.2/configure,;s,^"--srcdir=.*",--srcdir=../apache2.2/,' < /usr/share/apache2/build/config.nice > build-tree/config.nice |
Sostituisci
| install -m 0755 build-tree/apache2 debian/apache2-mpm-itk/usr/sbin/ |
con
| install -m 0755 build-tree/apache2 debian/apache2-mpm-peruser/usr/sbin/ |
Sostituisci
| echo "apache:Depends=apache2.2-common (= `dpkg -s apache2.2-common | grep ^Version: | cut -d" " -f2`)" >> debian/apache2-mpm-itk.substvars |
con
| echo "apache:Depends=apache2.2-common (= `dpkg -s apache2.2-common | grep ^Version: | cut -d" " -f2`)" >> debian/apache2-mpm-peruser.substvars |
Il file completo appare come segue:
| #! /usr/bin/make -f clean: dh_testdir dh_testroot dh_clean $(RM) -r build-tree/ $(RM) -r apache2.2/ $(RM) build-stamp build: build-stamp build-arch: build-stamp build-stamp: dh_testdir mkdir build-tree/ mkdir apache2.2/ cd apache2.2/ && tar zxf /usr/src/apache2.tar.gz # workaround per apache2-src 2.2.3-3 if [ -d apache2.2/apache2 ]; then \ mv apache2.2/apache2/* apache2.2/; \ rmdir apache2.2/apache2/; \ fi cd apache2.2/ && patch -p1 < ../httpd-2.2.3-peruser-0.3.0.patch cd apache2.2/ && autoconf sed 's,prefork,peruser,;s,^".*/configure",../apache2.2/configure,;s,^"--srcdir=.*",--srcdir=../apache2.2/,' < /usr/share/apache2/build/config.nice > build-tree/config.nice chmod +x build-tree/config.nice cd build-tree/ && ./config.nice cd build-tree/ && $(MAKE) touch build-stamp binary: binary-arch binary-indep: binary-arch: build-arch dh_testdir dh_testroot dh_installdirs install -m 0755 build-tree/apache2 debian/apache2-mpm-peruser/usr/sbin/ dh_fixperms dh_strip dh_installdocs README dh_installchangelogs dh_installdeb dh_compress dh_shlibdeps echo "apache:Depends=apache2.2-common (= `dpkg -s apache2.2-common | grep ^Version: | cut -d" " -f2`)" >> debian/apache2-mpm-peruser.substvars dh_gencontrol dh_md5sums dh_builddeb .PHONY: clean build build-arch binary binary-arch binary-indep |
Queste sono tutte le modifiche che dobbiamo fare - ora possiamo costruire il pacchetto:
cd ..
dpkg-buildpackageIl pacchetto sarà disponibile nella directory /usr/src:
cd /usr/src
ls -lserver1:/usr/src# ls -l
total 6512
-rw-r--r-- 1 root src 11392 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.diff.gz
-rw-r--r-- 1 root src 664 2007-10-03 19:02 apache2-mpm-itk_2.2.3-01-2.dsc
-rw-r--r-- 1 root src 29071 2006-10-31 00:04 apache2-mpm-itk_2.2.3-01.orig.tar.gz
drwxr-xr-x 5 root root 4096 2008-08-16 13:40 apache2-mpm-peruser-2.2.3-01
-rw-r--r-- 1 root src 353 2008-08-16 13:36 apache2-mpm-peruser_2.2.3-01-1.dsc
-rw-r--r-- 1 root src 710 2008-08-16 13:40 apache2-mpm-peruser_2.2.3-01-1_i386.changes
-rw-r--r-- 1 root src 165438 2008-08-16 13:40 apache2-mpm-peruser_2.2.3-01-1_i386.deb
-rw-r--r-- 1 root src 50282 2008-08-16 13:36 apache2-mpm-peruser_2.2.3-01-1.tar.gz
-rw-r--r-- 1 root root 6364431 2008-03-22 10:35 apache2.tar.gz
server1:/usr/src#Il pacchetto mpm-peruser che abbiamo appena costruito si chiama apache2-mpm-peruser_2.2.3-01-1_i386.deb. Prima di poterlo installare, dobbiamo disinstallare apache2-mpm-prefork poiché è in conflitto con apache2-mpm-peruser (ricorda il file di controllo):
apt-get remove apache2-mpm-preforkserver1:/usr/src# apt-get remove apache2-mpm-prefork
Lettura delle liste dei pacchetti… Fatto
Costruzione dell’albero delle dipendenze… Fatto
I seguenti pacchetti saranno RIMOSSI:
apache2-mpm-prefork libapache2-mod-php5
0 aggiornati, 0 nuovi installati, 2 da rimuovere e 68 non aggiornati.
Necessita di 0B di archivi.
Dopo aver estratto 6115kB di spazio su disco sarà liberato.
Vuoi continuare [Y/n]? <– Y
(Lettura del database … 29620 file e directory attualmente installati.)
Rimozione di libapache2-mod-php5 …
Modulo php5 disabilitato; eseguire /etc/init.d/apache2 force-reload per disabilitare completamente.
Rimozione di apache2-mpm-prefork …
Arresto del server web (apache2)….
server1:/usr/src#
Sfortunatamente, questo rimuove anche il pacchetto libapache2-mod-php5 in modo che PHP non funzioni più. Affronteremo questo tra un momento.
Ora possiamo installare il pacchetto apache2-mpm-peruser:
dpkg -i apache2-mpm-peruser_2.2.3-01-1_i386.debOra, se provi a reinstallare il pacchetto libapache2-mod-php5, vedrai che apt insiste nel rimuovere apache2-mpm-peruser e reinstallare apache2-mpm-prefork, il che non è ciò che vogliamo - quindi abortiamo questo:
server1:/usr/src# apt-get install libapache2-mod-php5
Lettura delle liste dei pacchetti… Fatto
Costruzione dell’albero delle dipendenze… Fatto
I seguenti pacchetti extra saranno installati:
apache2-mpm-prefork
Pacchetti suggeriti:
php-pear
I seguenti pacchetti saranno RIMOSSI:
apache2-mpm-peruser
I seguenti nuovi pacchetti saranno installati:
apache2-mpm-prefork libapache2-mod-php5
0 aggiornati, 2 nuovi installati, 1 da rimuovere e 61 non aggiornati.
Necessita di 0B/2833kB di archivi.
Dopo aver estratto 5681kB di spazio su disco aggiuntivo sarà utilizzato.
Vuoi continuare [Y/n]? <– n
Abort.
server1:/usr/src#
Questo accade perché quando il pacchetto libapache2-mod-php5 è stato costruito, il manutentore gli ha detto che dipende da apache2-mpm-prefork o apache2-mpm-itk. Questo significa che dovremo ricostruire libapache2-mod-php5 dai sorgenti e aggiungere il pacchetto apache2-mpm-peruser alle dipendenze di quel pacchetto (puoi farlo anche con qualsiasi altro pacchetto se hai lo stesso problema con altri pacchetti). Ci arriverò tra un momento.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.