Vhosts mit separaten UIDs/GIDs mit Apache2-MPM-peruser auf Debian Etch nutzen - Seite 2


Nun installieren wir das Apache2-MPM-peruser Paket:

dpkg -i apache2-mpm-peruser_2.2.3-01-1_i386.deb

Wenn wir nun versuchen das Libapache2-mod-PHP5 Paket zu reinstallieren, wird apt verlangen Apache2-MPM-peruser zu entfernen und stattdessen Apache2-MPM-prefork wieder zu installieren, was wir aber nicht wollen. Daher brechen wie diesen Vorgang ab:

server1:/usr/src# apt-get install libapache2-mod-php5
Reading package lists... Done
Building dependency tree... Done
The following extra packages will be installed:
apache2-mpm-prefork Suggested packages:
php-pear
The following packages will be REMOVED:
apache2-mpm-peruser The following NEW packages will be installed:
apache2-mpm-prefork libapache2-mod-php5
0 upgraded, 2 newly installed, 1 to remove and 61 not upgraded.
Need to get 0B/2833kB of archives.
After unpacking 5681kB of additional disk space will be used.
Do you want to continue [Y/n]? 
<-- n Abort.
server1:/usr/src#

Als das Libapache2-mod-PHP5 Paket erstellt wurde, hat der Programmierer eine Abhängigkeit von Apache2-MPM-prefork oder Apache2-mpm-itk eingebaut. Für uns bedeutet das, dass wir Libapache2-mod-PHP5 anhand des Quelltextes wiederherstellen müssen und das Apache2-MPM-peruser Paket zu den Abhängigkeiten dieses Pakets hinzufügen müssen. Das gilt auch für alle anderen Pakete, bei denen solche Probleme auftreten, aber dazu werde ich gleich noch kommen.

3 Apache2-MPM-peruser konfigurieren

In diesem Beispiel benutze ich den standardmässigen Debian Apache Vhost, dessen Konfiguration unter /etc/apache2/sites-available/default liegt, mit dem Dokumentenroot /var/www (für andere Vhosts bitte gegebenenfalls anpassen), und der Vhost soll als Benutzer web1_admin und als Gruppe web1 laufen.

Falls es diesen Benutzer sowie die Gruppe nicht schon gibt, können wir sie folgendermassen erstellen:

groupadd web1
useradd -s /bin/false -d /home/web1_admin -m -g web1 web1_admin

Anschliessend öffnen wir die Hauptkonfigurationsdatei von Apache (/etc/apache2/apache2.conf) und suchen die Stelle wo die verschiedenen MPMs (prefork, worker, etc.) konfiguriert sind, um folgendes hinzuzufügen:

vi /etc/apache2/apache2.conf

[...]
<IfModule peruser.c> ServerLimit 256 MaxClients 256 MinSpareProcessors 2 MaxProcessors 10 MaxRequestsPerChild 1000 # kill idle processors after this many seconds (0 to disable) IdleTimeout 60 # kill hung processes after this many seconds (0 to disable) ExpireTimeout 300 # set up a few multiplexer processes running as nobody Multiplexer nobody nogroup Multiplexer nobody nogroup Multiplexer nobody nogroup # Processor <user> <group> <chroot> # chroot is optional Processor web1_admin web1 </IfModule> [...]
Die Processor Zeile ist wichtig! Es teilt Apache mit, welcher Benutzer/Gruppenpaar den Vhost betreiben darf. Wenn es einen zweiten Vhost gibt, der als Benutzer web2_admin und Gruppe web2 laufen soll, muss eine zweite Processor Zeile hinzugefügt werden. line. Man kann den Benutzer/die Gruppe sogar chrooten indem man ein optionalesVerzeichnis hinzufügt:
[...]
Processor web1_admin web1 /var/www [...]
Wir müssen dann die Vhosts anpassen, beispielsweise folgendermassen:

vi /etc/apache2/sites-available/default

[...]
<IfModule peruser.c> # this must match a Processor line ServerEnvironment web1_admin web1 # these are optional - defaults to the values specified above #MinSpareProcessors 4 #MaxProcessors 20 </IfModule> [...]
Das muss in einem <VirtualHost></VirtualHost> Container stehen. Die Zeile ServerEnvironment muss genau! einer der Processor Zeilen der MPM-peruser Konfiguration entsprechen . Wurde ein Chroot in der Processor Zeile definiert, muss das Chroot hier ebenfalls aufgeführt werden, z. B.:
[...]
ServerEnvironment web1_admin web1 /var/www [...]
Das gibt an unter welchem Benutzer und Gruppe der bestimmte Vhost läuft.

Danach starten wir Apache neu:

/etc/init.d/apache2 restart


4 Libapache2-mod-PHP5 wiederherstellen

Endlich stellen wir die Libapache2-mod-PHP5 wieder her. Zunächst installieren wir einige Grundvoraussetzungen:

apt-get install apache-dev bison chrpath firebird2-dev flex freetds-dev libbz2-dev libc-client-dev libcurl3-openssl-dev libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev libjpeg62-dev libmcrypt-dev libmhash-dev libmysqlclient15-dev libncurses5-dev libpam0g-dev libpng12-dev libpspell-dev librecode-dev libsnmp9-dev libsqlite0-dev libt1-dev libtidy-dev libwrap0-dev libxmltok1-dev libxml2-dev libxslt1-dev re2c unixodbc-dev automake1.4 libtool shtool

Dann holen wir uns das PHP5 Quelltextpaket...

cd /usr/src
apt-get source php5

... und gehen zum Quelltextverzeichnis :

cd php5-5.2.0

Nun müssen wir PHP5 beibringen, dass es entweder Apache2-MPM-prefork oder Apache2-MPM-itk oder Apache2-MPM-peruser als Abhängigkeit akzeptieren soll. Öffne debian/rules:

vi debian/rules

Zum Ende der Datei finden wir folgende Zeile:
[...]
echo "apache2:Depends=apache2-mpm-prefork (>> 2.0.52) | apache2-mpm-itk, apache2.2-common" >>debian/libapache2-mod-php5.substvars [...]
Ändere das zu :
[...]
echo "apache2:Depends=apache2-mpm-prefork (>> 2.0.52) | apache2-mpm-itk | apache2-mpm-peruser, apache2.2-common" >>debian/libapache2-mod-php5.substvars [...]
Dann gib ein:

dpkg-buildpackage

...um die PHP5 Pakete wiederherzustellen:

Prüfen wir nun das Ergebnis:

cd /usr/src
ls -l

server1:/usr/src# ls -l
total 28940
-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
-rw-r--r--  1 root src  2413278 2008-08-16 14:30 libapache2-mod-php5_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src  2412784 2008-08-16 14:30 libapache-mod-php5_5.2.0-8+etch11_i386.deb
drwxr-xr-x 20 root root    4096 2008-08-16 14:29 php5-5.2.0
-rw-r--r--  1 root src     1040 2008-08-16 14:30 php5_5.2.0-8+etch11_all.deb
-rw-r--r--  1 root src   914599 2008-08-16 13:55 php5_5.2.0-8+etch11.diff.gz
-rw-r--r--  1 root src     1741 2008-08-16 13:55 php5_5.2.0-8+etch11.dsc
-rw-r--r--  1 root src     4768 2008-08-16 14:30 php5_5.2.0-8+etch11_i386.changes
-rw-r--r--  1 root src  8583491 2006-11-07 13:34 php5_5.2.0.orig.tar.gz
-rw-r--r--  1 root src  4757790 2008-08-16 14:30 php5-cgi_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src  2397698 2008-08-16 14:30 php5-cli_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src   215284 2008-08-16 14:30 php5-common_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    24478 2008-08-16 14:30 php5-curl_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src   344780 2008-08-16 14:30 php5-dev_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    33426 2008-08-16 14:30 php5-gd_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    34508 2008-08-16 14:30 php5-imap_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    44362 2008-08-16 14:30 php5-interbase_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    17250 2008-08-16 14:30 php5-ldap_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    12844 2008-08-16 14:30 php5-mcrypt_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src     5052 2008-08-16 14:30 php5-mhash_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    64620 2008-08-16 14:30 php5-mysql_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    34060 2008-08-16 14:30 php5-odbc_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    50482 2008-08-16 14:30 php5-pgsql_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src     8632 2008-08-16 14:30 php5-pspell_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src     4774 2008-08-16 14:30 php5-recode_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    11308 2008-08-16 14:30 php5-snmp_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    34160 2008-08-16 14:30 php5-sqlite_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    18414 2008-08-16 14:30 php5-sybase_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    16482 2008-08-16 14:30 php5-tidy_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    36458 2008-08-16 14:30 php5-xmlrpc_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src    12258 2008-08-16 14:30 php5-xsl_5.2.0-8+etch11_i386.deb
-rw-r--r--  1 root src   311360 2008-08-16 14:30 php-pear_5.2.0-8+etch11_all.deb
server1:/usr/src#

Wir können das neue PHP5 Paket folgendermassen installieren:

dpkg -i php5*.deb
dpkg -i libapache2-mod-php5_5.2.0-8+etch11_i386.deb

Dieses Mal wird es sich nicht mehr über das fehlende Apache2-MPM-prefork Paket beschweren, da Apache2-MPM-peruser installiert wurde und das für das neue Paket ausreicht.

Wir müssen nur noch das PHP5 Modul aktivieren und Apache neu starten:

a2enmod php5
/etc/init.d/apache2 restart

Öffne die phpinfo(); Seite erneut im Browser - es sollte nun peruser anstatt prefork in der Loaded ModulesZeile unter apache2handler anzeigen:


5 Links

1 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: Grey

Gibt es Bestrebungen, dass "peruser" in Zukunft ein eigenständiges Debian Paket wird und von den anderen Paketen entsprechend erkannt wird?
Wie verhält es sich denn um Stabilität und Performance?
Und kann man somit bspw. SuPHP umgehen?