Montag, 20. August 2012Apache HTTPd + FastCGI + SuExec + PHPTrackbacks
Trackback-URL für diesen Eintrag
Keine Trackbacks
Kommentare
Ansicht der Kommentare:
(Linear | Verschachtelt)
Toller Artikel, danke. Hat Spaß gemacht ihn zu lesen. Grundsätzlich halte ich zwar eher wenig von Chrooted-Umgebungen, da oft nicht sicherer als "Standard" Unix/Linux-Rechte, dennoch schaue ich mir das irgendwann auch mal in Ruhe an
Apropo, warum eigentlich Chrooted-Umgebungen, was bringt das in deinen Augen?
Es kommt natürlich immer auf den Zweck des Einsatzes an...
Bei uns wird der chroot() natürlich primär zur Abschirmung zwischen den Kunden dienen. Bisher bedienen wir uns hier dem open_basedir von PHP und einer shared Library die wir selbst entwickelt haben und als Wrapper vor anderen Prozessen laden. Der chroot() entspannt das alles etwas. Im ersten (produktiven) Deployment räumen wir den Kunden sehr viel mehr Freiheiten ein, darunter z.B. ein voller Zugriff auf die php.ini, ein SSH-Zugang und die Möglichkeit eigene Programme auf dem Server auszuführen (also solche, die kein PHP-Skript sind) - selbstredend, dass dann auch so Funktionen wie exec() oder system() freigegeben sind. Als Nebeneffekt sind alle Pfade wie der Kunde sie sieht identisch - bisher lief nur der FTP-Server im chroot(). Das führte dazu, dass Pfade wie "/hosts/domain/datei.php" (FTP) in Wirklichkeit "/home/kunde/hosts/domain/datei.php" (HTTPD, PHP) waren, was mitunter zu Irritationen führte.
Das Problem bei dem Setup sind aber symbolische Links.
Der Webserver kann jede Datei lesen, also mache ich aus meinem chroot heraus einen symbolischen Link zum Nachbarkunden (man kann sicher erraten, welches Verzeichnis es ist) und kann dort seine Konfiguration auslesen, im dem ich sie mir im Webserver auslesen lasse. Symbolische Links kann man verbieten, aber dann gehen diverse Sachen nur noch umständlich, bzw. diverse PHP Anwendungen müssen manuell angepasst werden. Man kann Symbolische Links zulassen, wenn Quelle und Ziel dem gleichen Benutzer gehören, aber dann kann man keine globalen Pakete bereit stellen, z.B. Typo3 für alle Kunden. Weiterhin kann der APC Cache von PHP nicht mit mod_f*cgi umgehen. Damit verschenkt man Serverleistung. Und als Bonus wäre jetzt noch WebDAV interessant, so dass jeder Kunde seinen Webspace direkt einmounten kann. Man könnte zwar einen PHP WebDAV Server nehmen, aber dann sind Apple Kunden ausgesperrt, da die chunked Requests nicht mit mod_f*cgi gehen. Eine Lösung würde mich auch interessieren Aber bitte ohne Patches, das soll auch noch in 10 Jahren laufen.
Ich weiß gar nicht, was gegen Patches spricht - wir setzen heute noch welche ein, die schon einige Jahre alt sind. Gelegentlich muss zwischen den Versionen ein wenig angepasst werden, der Aufwand ist jedoch einmalig und würde entweder beim Patch oder bei regulären Anpassungen selbst anfallen. Ist von daher überhaupt kein Argument.
Das APC mit mod_fcgid den Cache nicht zwischen den Prozessen teilen kann ist ein alter Hut und das "Problem" existiert bei uns schon immer. Der Overhead ist aber minimal, da anstelle eines globalen Caches pro FastCGI-Server ein Cache existiert, der Worst-Case ist also, dass ein Skript 3-4x anstatt einmalig gecached wird, alle weiteren Anfragen profitieren von einem der Caches - die Frage ist dann nur, wie lange man die FastCGI-Server leben lässt (und natürlich ist der Verbrauch von Arbeitsspeicher höher - das ist mir aber lieber als mod_php einzusetzen) Mir ist btw. kein Kunde bei uns bekannt, der Symlinks einsetzt. Da FTP nach wie vor das Upload-Mittel der Wahl ist, ist das Anlegen auch hochkompliziert. Auch wir symlinken nicht, sondern setzen eher einen Alias im Webserver direkt. In einer chroot()-Umgebung entfällt der Alias natürlich wenn es um PHP-Skripte geht, aber genau so würde hier ein symlink nicht weiterhelfen, insofern verliere ich hier rein gar nichts. Genau so, wie wir im chroot() eine Laufzeit-Umgebung bereitstellen müssen, können wir dort auch zentral gemanagede PHP-Applikationen verwalten und an die Kunden verteilen. Das tut nur auf Storage-Ebene weh, ist mir aber fast lieber, wenn ich weiß, dass kein Code gemeinsam zwischen mehreren Kunden einsetzt. Was die Symlinks aus dem chroot() hinaus angeht: Das bekommt der Webserver dank Patch mit. Geht nicht! (Zumal man den Pfad vielleicht erraten kann, aber trivial ist das nicht mehr) |
SucheRead this blog!KategorienKommentare
zu Fr, 20.10.2017 13:09
Das heißt dann ja eindeutig, d
ass sie Dein Passwort in Klart
ext speichern.
Ist schon zu
lange her, dass ich mich mit
PPP(oE), CHAP und PAP auseinan
derg [...]
zu Fr, 20.10.2017 13:05
Ich hatte (Wochen) bevor ich m
einen DSL-Anschlussbrief von 1
&1 bekommen habe im Kundeninte
rface das DSL-Passwort geänder
t.
Im Anschlussbrief war st
and [...]
zu Mi, 28.06.2017 11:29
Diese Information ist für Inte
ressierte bereits in der Übers
chrift enthalten.
Ich glaub
e nicht, dass es mir obliegt d
en Marktbegleiter durch expliz
ite [...]
zu Mi, 12.04.2017 00:09
Klarer Fall von "Bootloader ve
rgessen". Oder, fast noch schl
immer: Bootloader so verkorkst
, dass das Update nicht funkti
oniert.
Aber das Ding ist o
hneh [...]
Notice this! |