ispCP mit libapache2-mod-php5 betreiben

(3.11.2008)

Das Vorspiel

Ich benutze sehr viel und auch eigentlich sehr gerne den ispCP. Er ermöglicht es mir ganz einfach auf einem Webserver eine Domain anzulegen, FTP-Konten einzurichten und auch mal eben schnell eine Mail-Adresse zu generieren. Während er auf meinen dezidierten Server seit langer Zeit keinerlei Probleme macht, zickt er auf zwei virtuellen Servern ganz enorm herum: Es blieben Fastcgi-Prozesse übrig obwohl ich den Apache ´gestoppt hatte. Das ganze ging soweit das nicht nur das virtuelle System eine hohe Load hatte, sondern das ganze komplette System also benachbarte Kunden des Systems wurden auch lahm gelegt. Das Fastcgi schaffte es wohl nicht diese Prozesse zu beenden! Zwar ist dieses Problem im ispCP-Forum bekannt, aber keines der dort angebrachten Lösungsvorschläge half - leider! Ich musste mir da was einfallen lassen.

Ich entschloss mich daher dazu PHP als Modul im Apache zu verwenden aber ansonsten bei ispCP zu bleiben. Mir ist zwar klar das ich so einiges an Sicherheit aufgeben, da ich den Apache nun mit den www-data account laufen lasse aber auf der anderen Seite war es nun mal wichtig das die Server über eine Längere Zeit stabil liefen. Zudem war ich der einzige der auf diesem System Arbeitetet, weitere Endkunden gab es nicht.

Um ein kleines Protokoll für mich zu haben und gleichzeitig anderen Usern mit ähnlichen Problemen einen eventuellen Lösungsweg anbieten zu können habe ich das mal hier in meinen Blog gesetzt.

Die Situation vor dem Spiel

Ich gehe von einer Installation aus so wie sie auf den Wiki-Seiten hier von ispCP Omega beschrieben worden ist. Natürlich kann ich keinerlei Gewährleistung für diesen Text geben. Ebenso sollte man wissen was man tut wenn man sich auf einen solchen Umbau einlässt.

Das Spiel kann beginnen

Zunächst stoppen wir den Apache da die Datei apache2 im Ordner /usr/bin/ ausgetauscht wird:

shell> /etc/init.d/apache2 stop

Um uns aber die Möglichkeit für den Einsatz von fastcgi_ispcp zu erhalten benennen wir den alten apache2 um:

shell> mv /usr/sbin/apache2 /usr/sbin/apache2.mpm_worker.disabled

Nun installieren wir den Apache als mpm_prefork und den mod_php. Dabei wird das Paket apache2-mpm-worker entfernt.

Das Paket apache2-mpm-prefork wird automatisch mit installiert:

shell> apt-get install libapache2-mod-php5

Jetzt wird das Modul fastcgi_ispcp deaktiviert und das Modul mod_php aktiviert:

shell> a2dismod fastcgi_ispcp && a2enmod php5

Der Apache kann nun gestartet werden:

shell> /etc/init.d/apache2 stop

Rechtespiele

Nun sollte der Apache laufen allerdings läuft er nur noch als User www-data der Gruppe www-data. Daher müssen wir die ispCP-Verzeichnissen entsprechend anpassen, um dem ispCP erstmal wieder nutzbar zu machen. Alte Sessions können wir in dem zuge weglöschen:

shell> chmod g+w /var/www/ispcp/gui/phptmp
shell> rm /var/www/ispcp/gui/phptmp/sess*

Ein ähnliches Spiel wiederholen wir mit den anderen Webseiten auf unseren Rechner. Allerdings greifen hier weitere skripte, nicht zuletzt auch die der Kunden mit dem User und der Gruppe www-data zu. Entsprechend müssen wir das berücksichtigen:

shell> chown -R :www-data -R /var/www/virtual/*/htdocs
shell> chmod g+w -R /var/www/virtual/*/htdoc*
shell> chown -R :www-data -R /var/www/virtual/*/phptmp
shell> chmod g+w -R /var/www/virtual/*/phptmp
shell> chown -R :www-data -R /var/www/virtual/*/statistics
shell> chmod g+w -R /var/www/virtual/*/statistics

Die Rechte der neuen Spieler

Die Rechte der vorhandenen Website für den Apache sind nun angepasst, aber wie sieht es aus wenn wir mit dem ispCP eine neue Domain anlegen?
Da der ispCP ja für den Betrieb mit dem fastcgi ausgelegt worden ist, legt er immer schön brav die neuen Verzeichnisse und Dateien mit dem User vu2xxx der Gruppe vu2xxx mit den rechten 770 bzw. 660 an.

Dazu muss in der Datei /var/www/ispcp/engine/ispcp-dmn-mngr bearbeitet werden. Zuvor sollte aber noch ein backup dieser datei erfolgen:

shell> cp /var/www/ispcp/engine/ispcp-dmn-mngr /var/www/ispcp/engine/ispcp-dmn-mngr.orig

Der Code wird dann mit dem Editor wie folgt geändert:

Aus (etwa Zeile 1946)

$rs = make_dir(
"$www_dir/$dmn_name/cgi-bin",
$sys_user,
$sys_group,
0755
);
return $rs if ($rs != 0);

wird

$rs = make_dir(
"$www_dir/$dmn_name/cgi-bin",
$sys_user,
# $sys_group,
$httpd_gid,
0755
);
return $rs if ($rs != 0);

Aus (etwa Zeile 1982)

$rs = make_dir(
"$www_dir/$dmn_name/errors",
$sys_user,
$sys_group,
0775
);
return $rs if ($rs != 0);

wird

$rs = make_dir(
"$www_dir/$dmn_name/errors",
$sys_user,
# $sys_group,
$httpd_gid,
0775
);
return $rs if ($rs != 0);

Aus (etwa Zeile 1991)

$rs = make_dir(
"$www_dir/$dmn_name/errors/inc",
$sys_user,
$sys_group,
0775
);
return $rs if ($rs != 0);

wird

$rs = make_dir(
"$www_dir/$dmn_name/errors/inc",
$sys_user,
# $sys_group,
$httpd_gid,
0775
);
return $rs if ($rs != 0);

Aus (etwa Zeile 2071)

$rs = make_dir(
"$www_dir/$dmn_name/htdocs",
$sys_user,
$sys_group,
0775
);
return $rs if ($rs != 0);

wird

$rs = make_dir(
"$www_dir/$dmn_name/htdocs",
$sys_user,
# $sys_group,
$httpd_gid,
0775
);
return $rs if ($rs != 0);

Aus (etwa Zeile 2096)

$rs = make_dir(
"$www_dir/$dmn_name/htdocs/index.html",
$cfg,
$sys_user,
$sys_group,
0644
);
return $rs if ($rs != 0);

wird

$rs = make_dir(
"$www_dir/$dmn_name/htdocs/index.html",
$cfg,
$sys_user,
$httpd_gid,
0644
);
return $rs if ($rs != 0);

Leserkommentare

Markus P.:

by giving www-data write access to the users htdocs you get your self a garantee of a server whide defacement the next time one of your customers php scripts is hacked.

The recomended approach is to only give www-data read+eXecute permission to htdocs and only write permissions to special folders where the user wishes to upload images/files or so.

Even if you think this can’t happen because of open_basedir restriction: just disable safe_mode for one customer and he can use system() or exec() to write in any other customers webroot. this is a serious problem! 11.07.2010 22:38


malte (ephigenie):

Nice Howto.

But keep in mind, that ftp uploaded data is still owned by the user – so you might want to change those useracount uids, as well. 26.04.2009 21:18


lalo :

nice solution, but is need too edit /etc/ispcp/apache/parts/* for a complete solution, if you dont need anymore php5-cgi

cheers from chile 02.12.2008 07:43


Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
RDGBM
 
blog/2011/09/09-28_ispcp_mit_libapache2-mod-php5_betreiben.txt · Zuletzt geändert: 2011/11/04 15:58 von belba
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0