PHP+Apache2 Wieviel Sicherheit ist nötig?
PHP+Apache2 Wieviel Sicherheit ist nötig?
Hallo zusammen,
ich richte gerade meinem Server von Grund auf neu ein. Zweck des Servers ist es unter anderem ca 10 verschiedenen Benutzern die Verwendung von Apache und PHP zu ermöglichen.
Die simple Verwendung von mod_php hat ja bekanntlich den Nachteil, dass die PHP Scripts somit mit den Benutzerrechten des Webservers ausgeführt werden, was ein Sicherheitsrisiko darstellen kann.
Das Problem ist weniger dass ich den Benutzern des Servers nicht traue (Es handelt sich dabei um Bekannte und Freunde) sondern eher dass Sicherheitslücken in deren Anwendungen dem ganzen Server Schaden könnten.
Ich habe lange nach Möglichkeiten gesucht und folgende Alternativen gefunden:
CGI/suexec:
Soweit ich das sehe eigentlich eine sehr sichere Methode, aber soll ~10 mal langsamer sein als mod_php, da das laden der PHP Binary oft schon länger dauert als das Ausführen des Scripts selbst (Performance ist mir schon relativ wichtig, da neben Apache auch diverse andere Services angeboten werden wie Tomcat, Continuum, Subversion, CVS, IRC, etc)
mod_suphp:
Führt php scripts unter anderen Benutzernamen aus, aber ich habe kaum Dokumentation dazu gefunden und es nicht mit der gewünschten Apache Konfiguration ans laufen bekommen. (Ich verwende VirtualDocumentRoot um Unterordner automatisch als Subdomains zu verwenden womit suphp wohl nicht klar kommt).
Verwendet die php cgi binary hat also vermutlich die selben performance probleme wie oben.
FastCGI/suexec:
Behebt die Performanceprobleme größtenteils, ist aber sehr Aufwändig zu konfigurieren. (Für jeden Benutzer eine PHP binary, etc (hätte natürlich auch Vorteile)).
Nun, bevor ich mich weiter mit FastCGI rumschlage würde ich gerne wissen inwieweit das überhaupt notwendig ist.
PHP selbst bietet ja noch Einstellungsmöglichkeiten wie SafeMode etc, würden die eventuell ausreichen?
Gruß
Dennis
PS: Ich habe gerade in den Kommentaren zum PHP Manual gelesen, dass man per "php_admin_value" php.ini Werte für jeden Virtual Host speziell anpassen kann. Somit könnte man ja z.B. open_base_dir für jeden Virtual Host festlegen und damit einen Großteil der Sichterheitsprobleme beseitigen. Wäre das ausreichend?
ich richte gerade meinem Server von Grund auf neu ein. Zweck des Servers ist es unter anderem ca 10 verschiedenen Benutzern die Verwendung von Apache und PHP zu ermöglichen.
Die simple Verwendung von mod_php hat ja bekanntlich den Nachteil, dass die PHP Scripts somit mit den Benutzerrechten des Webservers ausgeführt werden, was ein Sicherheitsrisiko darstellen kann.
Das Problem ist weniger dass ich den Benutzern des Servers nicht traue (Es handelt sich dabei um Bekannte und Freunde) sondern eher dass Sicherheitslücken in deren Anwendungen dem ganzen Server Schaden könnten.
Ich habe lange nach Möglichkeiten gesucht und folgende Alternativen gefunden:
CGI/suexec:
Soweit ich das sehe eigentlich eine sehr sichere Methode, aber soll ~10 mal langsamer sein als mod_php, da das laden der PHP Binary oft schon länger dauert als das Ausführen des Scripts selbst (Performance ist mir schon relativ wichtig, da neben Apache auch diverse andere Services angeboten werden wie Tomcat, Continuum, Subversion, CVS, IRC, etc)
mod_suphp:
Führt php scripts unter anderen Benutzernamen aus, aber ich habe kaum Dokumentation dazu gefunden und es nicht mit der gewünschten Apache Konfiguration ans laufen bekommen. (Ich verwende VirtualDocumentRoot um Unterordner automatisch als Subdomains zu verwenden womit suphp wohl nicht klar kommt).
Verwendet die php cgi binary hat also vermutlich die selben performance probleme wie oben.
FastCGI/suexec:
Behebt die Performanceprobleme größtenteils, ist aber sehr Aufwändig zu konfigurieren. (Für jeden Benutzer eine PHP binary, etc (hätte natürlich auch Vorteile)).
Nun, bevor ich mich weiter mit FastCGI rumschlage würde ich gerne wissen inwieweit das überhaupt notwendig ist.
PHP selbst bietet ja noch Einstellungsmöglichkeiten wie SafeMode etc, würden die eventuell ausreichen?
Gruß
Dennis
PS: Ich habe gerade in den Kommentaren zum PHP Manual gelesen, dass man per "php_admin_value" php.ini Werte für jeden Virtual Host speziell anpassen kann. Somit könnte man ja z.B. open_base_dir für jeden Virtual Host festlegen und damit einen Großteil der Sichterheitsprobleme beseitigen. Wäre das ausreichend?
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Ich habe FCGI + suPHP laufen, damit ist die Performance für meine Ansprüche absolut akzeptabel und für mehrere Nutzer ist das einfach "am schönsten" (tm). suPHP läuft übrigens nicht unter Apache 2.2 und ich weiß auch nicht, ob es mit reinen virtualDocumentRoots läuft, hier ist das alles über eigene vhosts geregelt.
Was die Sicherheit angeht: OpenBasedir ist IMHO eine der effektivsten Maßnahmen, muss bei (F)CGI jedoch jeweils in einer eigenen PHP.ini gesetzt werden. Ansonsten wirst du hier im Forum einiges über das Absichern von (Web)Servern finden, Patentregeln gibt es nicht und auch die verschiedenen PHP-Varianten sind bei richtiger Konfiguration jeweils sicher.
Was die Sicherheit angeht: OpenBasedir ist IMHO eine der effektivsten Maßnahmen, muss bei (F)CGI jedoch jeweils in einer eigenen PHP.ini gesetzt werden. Ansonsten wirst du hier im Forum einiges über das Absichern von (Web)Servern finden, Patentregeln gibt es nicht und auch die verschiedenen PHP-Varianten sind bei richtiger Konfiguration jeweils sicher.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Hy,
funktioniert SUPHP jetzt mit der normalen CGI-Version (Also wo für jeden Request die Anwendung komplett gestartet wird) oder mit der FCGI-Version (Anwendung wird einmal gestartet).
Muss ich bei beiden für jeden Benutzer eine eigene Konfiguration verwenden? Ich möchte zum Beispiel für jeden Benutzer ein anderes tmp-verzeichniss setzten oder ein anderes memory-limit. Wie sieht das aus? Kann eigentlich PHP in den Konfigurations-Dateien andere Configs "inkludieren", dass man also alle globalen Werte in eine einheitlichen Konfiguration vorgibt und diese dann in den User-Einstellungen inkludiert?
Gruß
TO
funktioniert SUPHP jetzt mit der normalen CGI-Version (Also wo für jeden Request die Anwendung komplett gestartet wird) oder mit der FCGI-Version (Anwendung wird einmal gestartet).
Muss ich bei beiden für jeden Benutzer eine eigene Konfiguration verwenden? Ich möchte zum Beispiel für jeden Benutzer ein anderes tmp-verzeichniss setzten oder ein anderes memory-limit. Wie sieht das aus? Kann eigentlich PHP in den Konfigurations-Dateien andere Configs "inkludieren", dass man also alle globalen Werte in eine einheitlichen Konfiguration vorgibt und diese dann in den User-Einstellungen inkludiert?
Gruß
TO
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Nein das geht nicht. Aber das ist doch alles kein Problem. Erstell eine Template Datei und lass ein Script dann die paar Werte setzen die du unterschiedlich haben willst.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Also ich werde jetzt letztenendes weder suexec noch suphp verwenden. Also nehme ich mod_php, und da gibt es eine ganz nette funktion. Man kann per php_admin_value in einem Virtual Host Variablen der php Config anpassen, wäre also auch eine Lösung für dein Problem.theomega wrote:Hy,
funktioniert SUPHP jetzt mit der normalen CGI-Version (Also wo für jeden Request die Anwendung komplett gestartet wird) oder mit der FCGI-Version (Anwendung wird einmal gestartet).
Muss ich bei beiden für jeden Benutzer eine eigene Konfiguration verwenden? Ich möchte zum Beispiel für jeden Benutzer ein anderes tmp-verzeichniss setzten oder ein anderes memory-limit. Wie sieht das aus? Kann eigentlich PHP in den Konfigurations-Dateien andere Configs "inkludieren", dass man also alle globalen Werte in eine einheitlichen Konfiguration vorgibt und diese dann in den User-Einstellungen inkludiert?
Gruß
TO
So kann man für jeden Virtual Host die Zugriffe auf das jeweilige Document root beschränken. Und eventuell per Safe Mode (oder disable functions) das ausführen bestimmter Binaries untersagen.
Sicher nicht die sicherste Methode, aber ich denke es sollte reichen. (Apache rennt natürlich in eine chroot Umgebung)
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
safe_mode ist IMHO nur Augenwischerrei und wird auch in PHP6 nicht mehr verfügbar sein.
open_basedir ist zwar auch eine schöne Sache aber leider auch nicht hinreichend sicher, da sich manche Extensions (AFAIR z.B. auch MySQL) nicht daran halten.
open_basedir ist zwar auch eine schöne Sache aber leider auch nicht hinreichend sicher, da sich manche Extensions (AFAIR z.B. auch MySQL) nicht daran halten.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Hy,
eben weil der SafeMode und OpenBasedir keinen guten Ruf haben und wegfallen werden frag ich hier was es für parktikabel Alternativen gibt.
Gruß
TO
eben weil der SafeMode und OpenBasedir keinen guten Ruf haben und wegfallen werden frag ich hier was es für parktikabel Alternativen gibt.
Gruß
TO
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Ich würde zu suExec und FastCGI raten.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Zugriffsrechte sinnvoll setzen reicht völlig aus...
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Ich hab die Proxy-Lösung jetzt durchgezogen und gestern meine Kunden migriert - bei 15 virtuellen Hosts läuft die Kiste stabil und doch relativ flott.
Nachdem die eigentlichen Instanzen des Apache unter eigenem User und eigener Gruppe laufen und die Homeverzeichnisse 770 als permissions haben, dürfte das nun relativ dicht sein - zumindest gegen die üblichen Sachen - und wenig Einschränkungen im laufenden Betrieb geben. Sogar WebEdition läuft noch, wie ich gestern gesehen habe.
flo.
Nachdem die eigentlichen Instanzen des Apache unter eigenem User und eigener Gruppe laufen und die Homeverzeichnisse 770 als permissions haben, dürfte das nun relativ dicht sein - zumindest gegen die üblichen Sachen - und wenig Einschränkungen im laufenden Betrieb geben. Sogar WebEdition läuft noch, wie ich gestern gesehen habe.
flo.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Hast du evtl. eine kleine 'Anleitung' mit den wichtigsten Punkten und/oder Stolpersteinen? Wäre denke ich für viele interessant.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Hy,
jauh, zumindest ein Paar Stichworter wären nicht schlecht: Was hast du hinter dem Proxy laufen, wer liefert die eigentlichen Daten aus?
Danke
TO
jauh, zumindest ein Paar Stichworter wären nicht schlecht: Was hast du hinter dem Proxy laufen, wer liefert die eigentlichen Daten aus?
Danke
TO
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
nun:
1) ich habe den Apache ganz normal installiert, externe Module gleich mit (mod_security)
2) die httpd.conf aufgeteilt in das, was ich für proxy und/oder Haupthost brauche
3) mir dann ein Startscript gebastelt, das den Proxy mit definiertem Port startet und dazu noch die virtuellen Hosts des Hauptservers schreibt.
4) Probleme war, das ganze so zu definieren, daß der Restart einwandfrei funktioniert - da ist momentan das Problem, denn der Start der Apache-Instanzen dauert fast fünf Minuten und aufgrund des Gefüges, das die einzelnen Posts bilden, ist das leider auch notwendig, da der User domainx.de nur die Site domainx.de sehen soll.
Der Aufruf der einzelnen Instanzen erfolgt analog der üblichen Syntax:
Die jeweiligen Hosts werden bei der Einrichtung vergeben und als statische Dateien geschrieben - hat den Vorteil, daß ich beliebig Konfigurationsänderungen in den Hosts machen kann, ohne damit den Betrieb der anderen vhosts zu beeinflussen.
Und jetzt muß ich mal sehen, wie sich das ganze im Betrieb bewährt - Einfallstor wäre noch, den Port für den Proxy zu ändern, aber da innerhalb der Proxies kein php/cgi zur Verfügung steht, ist das eigentlich auch dicht - werde aber selber noch ein bißchen hacken, sobald ich den Kernel noch dichter gezogen habe.
Ach ja, als Feature läuft noch DAV für jeden Host, das wollte ich meinen Kunden schon lange bieten, sah aber nur Probleme aufgrund der Rechteproblematik.
flo.
1) ich habe den Apache ganz normal installiert, externe Module gleich mit (mod_security)
2) die httpd.conf aufgeteilt in das, was ich für proxy und/oder Haupthost brauche
3) mir dann ein Startscript gebastelt, das den Proxy mit definiertem Port startet und dazu noch die virtuellen Hosts des Hauptservers schreibt.
4) Probleme war, das ganze so zu definieren, daß der Restart einwandfrei funktioniert - da ist momentan das Problem, denn der Start der Apache-Instanzen dauert fast fünf Minuten und aufgrund des Gefüges, das die einzelnen Posts bilden, ist das leider auch notwendig, da der User domainx.de nur die Site domainx.de sehen soll.
Der Aufruf der einzelnen Instanzen erfolgt analog der üblichen Syntax:
Code: Select all
/usr/local/apache2/bin/httpd
-f /usr/local/conf/proxyhosts/domain.de.conf
-c User user
-c Group group
-c PidFile /usr/local/conf/proxyhosts/domain.de.conf.pid
-c Listen 127.0.0.1:8081 -k startUnd jetzt muß ich mal sehen, wie sich das ganze im Betrieb bewährt - Einfallstor wäre noch, den Port für den Proxy zu ändern, aber da innerhalb der Proxies kein php/cgi zur Verfügung steht, ist das eigentlich auch dicht - werde aber selber noch ein bißchen hacken, sobald ich den Kernel noch dichter gezogen habe.
Ach ja, als Feature läuft noch DAV für jeden Host, das wollte ich meinen Kunden schon lange bieten, sah aber nur Probleme aufgrund der Rechteproblematik.
flo.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Alles Apache - man gönnt sich ja sonst nichts :-) Ich gebe zu, daß gerader der "vordere" Host per lighthttp wesentlich flotter werden könnte, aber da ich im Zeitdruck war - zum ersten Mai stirbt mein jetziger 1und1-Webserver - ging das nciht anders, weil mir für den lighthttp oder ähnliches einfach die Erfahrung fehlt.theomega wrote:Was hast du hinter dem Proxy laufen, wer liefert die eigentlichen Daten aus?
flo.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Hy,
oki, danke, hört sich nicht schlecht an, evt könnte man statt den unzählingen Apache-Instanzen auch ein Lighttpd o.ä. einsetzten. Wundert mich eigentlich das sowas performant ist, wenn da soviele Instanzen laufen, aber gut, wenns geht. Hat auch den vorteil das man es nacher ganz einfach auf mehrere Systeme verteilen kann wenn die Last zu groß wird.
Mal ne andere Frage, ist vermutlich ziemlich einfach, aber ich steig da nicht so recht durch: Wie setzt man die Permissions richtig? Ich mein, wem muss was gehören? Und vor allem mit welcher Gruppe.
Ich hätte gerne folgende Situation:
Apache läuft als wwwrun:wwwrun
Jeder Benutzer hat einen User userx:domainusers
Es existiert eine Verzeichnissstruktur in der Art:
/var/www/user1/html (html-Dateien, webroot)
/var/www/user1/logs (Apache-Logs, lesender Zugriff für den Benutzer)
und das für jeden Benutzer.
Mein Problem ist: Eigentlich müsste der user1-order ja x00 als Permission haben damit die anderen Benutzer die Daten nicht auslesen können. Das Problem ist jedoch dann: Der Apache kann seine Log-Dateien nichtmehr schreiben. Wie hast du es bei dir gemacht flo? Ich mein da muss es doch eine Art Standart-Lösung für geben!
Danke
TO
oki, danke, hört sich nicht schlecht an, evt könnte man statt den unzählingen Apache-Instanzen auch ein Lighttpd o.ä. einsetzten. Wundert mich eigentlich das sowas performant ist, wenn da soviele Instanzen laufen, aber gut, wenns geht. Hat auch den vorteil das man es nacher ganz einfach auf mehrere Systeme verteilen kann wenn die Last zu groß wird.
Mal ne andere Frage, ist vermutlich ziemlich einfach, aber ich steig da nicht so recht durch: Wie setzt man die Permissions richtig? Ich mein, wem muss was gehören? Und vor allem mit welcher Gruppe.
Ich hätte gerne folgende Situation:
Apache läuft als wwwrun:wwwrun
Jeder Benutzer hat einen User userx:domainusers
Es existiert eine Verzeichnissstruktur in der Art:
/var/www/user1/html (html-Dateien, webroot)
/var/www/user1/logs (Apache-Logs, lesender Zugriff für den Benutzer)
und das für jeden Benutzer.
Mein Problem ist: Eigentlich müsste der user1-order ja x00 als Permission haben damit die anderen Benutzer die Daten nicht auslesen können. Das Problem ist jedoch dann: Der Apache kann seine Log-Dateien nichtmehr schreiben. Wie hast du es bei dir gemacht flo? Ich mein da muss es doch eine Art Standart-Lösung für geben!
Danke
TO
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Genau das hätte ich eigentlich auch gern. Das ist auf der Grund weswegen ich scho länger überlege, mir das mal anzutun. Das Problem ist nur, dass das leider derzeit noch nicht mir meinem SysCP halbwegs sinnvoll zusammenarbeitet. Die Lösung wäre ja eigentlich mpm_perchild wenn es denn weiterentwickelt werden würde.flo wrote:Ach ja, als Feature läuft noch DAV für jeden Host, das wollte ich meinen Kunden schon lange bieten, sah aber nur Probleme aufgrund der Rechteproblematik.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
Der Proxy läuft als www-data - der braucht auch nicht mehr. Die letztendlichen virtuellen Hosts laufen direkt unter dem Benutzer und einer Gruppe, in der sich nur noch dessen andere FTP-Accounts befinden und schreiben die Logs auch in dessen Homeverzeichnis. Die Rechteprobleme sind damit minimiert, alle Permissions in den Homes habe ich jetzt auf 770 gesetzt, 750 ist das Default des FTP-Servers.theomega wrote:Mal ne andere Frage, ist vermutlich ziemlich einfach, aber ich steig da nicht so recht durch: Wie setzt man die Permissions richtig? Ich mein, wem muss was gehören? Und vor allem mit welcher Gruppe.
Die Performance haut einen nicht vom Hocker - aber derzeit läuft es, so richtig kann ich es erst beurteilen, wenn die Datenbanken auf MySQL5 umgestellt sind und der Umweg zu 1und1 wegfällt. Aber nach dem Start - der ist absolut träge - läuft es rund. "graceful" kannst Du halt vergessen, er fährt 35 Hosts runter und startet die auch wieder - ingesamt minimal 200 Prozesse, maximal ca. 500.
flo.
Re: PHP+Apache2 Wieviel Sicherheit ist nötig?
theomega wrote:Ich hätte gerne folgende Situation:
Apache läuft als wwwrun:wwwrun
Jeder Benutzer hat einen User userx:domainusers
Es existiert eine Verzeichnissstruktur in der Art:
/var/www/user1/html (html-Dateien, webroot)
/var/www/user1/logs (Apache-Logs, lesender Zugriff für den Benutzer)
und das für jeden Benutzer.
Mein Problem ist: Eigentlich müsste der user1-order ja x00 als Permission haben damit die anderen Benutzer die Daten nicht auslesen können. Das Problem ist jedoch dann: Der Apache kann seine Log-Dateien nichtmehr schreiben. Wie hast du es bei dir gemacht flo? Ich mein da muss es doch eine Art Standart-Lösung für geben!
Code: Select all
chown userX:domainusers /var/www/userX && chmod 0705 /var/www/userX
chown userX:domainusers /var/www/userX/html && chmod 0705 /var/www/userX/html
chown userX:wwwrun /var/www/userX/logs && chmod 0570 /var/www/userX/logs
PayPal.Me/JoeUser ● FreeBSD Remote Installation
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
Wings for Life ● Wings for Life World Run
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

