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-php5

Quando 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 autoconf

Poi vado in /usr/src e scarico il pacchetto sorgente apache2-mpm-itk:

cd /usr/src  
apt-get source apache2-mpm-itk
ls -l
server1:/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-01

Poi 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.patch

Ora andiamo nella sottodirectory debian/:

cd debian/  
ls -l
server1:/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.prerm

Successivamente 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 rules

Sostituisci

| 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-buildpackage

Il pacchetto sarà disponibile nella directory /usr/src:

cd /usr/src  
ls -l
server1:/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-prefork

server1:/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.deb

Ora, 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.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.