PHP als Modul - Sicherheit

Apache, Lighttpd, nginx, Cherokee
hasch
Posts: 99
Joined: 2007-03-09 15:23

PHP als Modul - Sicherheit

Post by hasch » 2007-04-26 18:22

Nabend zusammen,
mich beschäftigt das Thema PHP als Apache Modul schon seit längerer Zeit. Es wird immer wieder, auch von zahlreichen Sicherheitsexperten, zu PHP als CGI/FCGI geraten. Vorteile sind klar, eigene User, die Skripte ausführen.

Wenn allerdings das Openbasedir, Tempdir, Uploaddir usw. für jeden einzelnen User beschränkt sind und nur für diesen eingerichtet dürfte doch ein PHP-Skript auf keinen anderen Ordner zum Lesen, Schreiben oder Ausführen kommen, oder sehe ich da etwas falsch?

Was spricht also dagegen PHP als Modul einzusetzen, da die Geschwindigkeit ja "phänomenal" ist.

Mich würde eure Ansicht und Beweggründe zu diesem Thema mal interessieren und lasse mich auch gerne belehren, falls es da "doch" Sicherheitslücken gibt :)

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: PHP als Modul - Sicherheit

Post by Roger Wilco » 2007-04-26 18:48

hasch wrote:Wenn allerdings das Openbasedir, Tempdir, Uploaddir usw. für jeden einzelnen User beschränkt sind und nur für diesen eingerichtet dürfte doch ein PHP-Skript auf keinen anderen Ordner zum Lesen, Schreiben oder Ausführen kommen, oder sehe ich da etwas falsch?
http://php-security.org/

'nuff said.
hasch wrote:Was spricht also dagegen PHP als Modul einzusetzen, da die Geschwindigkeit ja "phänomenal" ist.
Ein PHP-Skript kann auf alle Dateien zugreifen, auf die auch der Webserver Zugriff und alle anderen Skripte haben. Die open_basedir Restriktionen können mehr oder weniger trivial umgangen werden (siehe Link).

PHP als Apache-Modul geht bei ein oder zwei Benutzern mit "vertrauenswürdigen" Skripten gut. Bei mehr Benutzern hätte ich da schon große Bedenken. Davon abgesehen ist die Geschwindigkeit von zuvor erstellten PHP-Prozessen (mit FastCGI) in etwa mit der Geschwindigkeit von mod_php zu vergleichen. Benchmarks darfst du selbst erstellen.

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: PHP als Modul - Sicherheit

Post by hasch » 2007-04-30 21:53

Und bei PHP als CGI kann man das openbasedir nicht umgehen? Hab jetzt mal PHP als CGI mit Suexec eingerichtet und kann, wenn ich das openbasedir nicht setze auch auf fremde Ordner zugreifen... :)

juergen
Posts: 133
Joined: 2004-03-30 14:44

Re: PHP als Modul - Sicherheit

Post by juergen » 2007-04-30 22:12

hasch wrote:Und bei PHP als CGI kann man das openbasedir nicht umgehen? Hab jetzt mal PHP als CGI mit Suexec eingerichtet und kann, wenn ich das openbasedir nicht setze auch auf fremde Ordner zugreifen... :)
Dann stimmen die Permission nicht. Suexec bringt natürlich nichts, wenn die Dateien World-Readable sind....

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: PHP als Modul - Sicherheit

Post by hasch » 2007-04-30 22:35

Achso ok, d.h. wenn ich für "Fremde" Lesezugriff verweigere, dann ists ok :)

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-03 16:09

Sinnvoll wäre es etwa, alle "User" derselben Gruppe zuzuweisen und den DocumentRoots sämtlicher VHosts alle Gruppen-Permissions zu entziehen.

World executable müssen die Verzeichnisse sein, da ansonsten auch der Apache keinen Zugriff mehr hat. World readable ist möglicherweise nicht zwingend erforderlich, würde aber "sicherheitstechnisch" auch nur etwas mehr "Obscurity" bringen (wenn +x).

Für Dateien gilt das so ähnlich. Wenn es sich um über SuExec auszuführende Scripte handelt, spricht aber nichts dagegen, diese etwa nur für den "Owner" lesbar zu machen (bzw. auch ausführbar; dies ist aber nur erforderlich, wenn der Interpreter über eine Shebang ermittelt wird, also typischerweise nicht für PHP-Scripte). Statische Dateien müssen dagegen world readable sein.

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: PHP als Modul - Sicherheit

Post by djcrackman » 2007-05-03 20:34

Die open_basedir Restriktionen können mehr oder weniger trivial umgangen werden (siehe Link).
Wer keine Updates einspielt, den beißen die Hunde.
PHP als Apache-Modul geht bei ein oder zwei Benutzern mit "vertrauenswürdigen" Skripten gut. Bei mehr Benutzern hätte ich da schon große Bedenken.
Bin im letzten Jahr mit weit mehr als 10.000 Usern so gefahren und es ist um ca 15% performanter als mit CGI ;). Wer allerdings mit solchen Dimensionen zu tun hat, der sollte sich über mehrere [apache/lighty]-instanzen gedanken machen ... alles andere ist sinnlos.

hasch
Posts: 99
Joined: 2007-03-09 15:23

Re: PHP als Modul - Sicherheit

Post by hasch » 2007-05-03 21:28

Sollte "Suhosin" nicht aber vor solchen Fehlern wie openbasedir schützen!?

@djcrackman
Was meinst du mit Apache Instanzen?

dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: PHP als Modul - Sicherheit

Post by dtdesign » 2007-05-04 08:23

Eine Instanz beschreibt nichts anderes als ein Prozess von einem Programm. Wenn ich Apache starte, kann ich zusätzliche Prozesse spawnen lassen, die - ähnlich wie PHP via FastCGI - fest im Speicher bleiben. Hierbei spricht man von Instanzen, da ein identischer Prozess mehrfach im Speicher residiert.

Gruß
dtdesign

gierig
Posts: 292
Joined: 2002-10-15 16:59
Location: WHV

Re: PHP als Modul - Sicherheit

Post by gierig » 2007-05-04 10:23

Sinnvoll wäre es etwa, alle "User" derselben Gruppe zuzuweisen und den DocumentRoots sämtlicher VHosts alle Gruppen-Permissions zu entziehen.

World executable müssen die Verzeichnisse sein, da ansonsten auch der Apache keinen Zugriff mehr hat.
Nö, alle meine Vhosts sind 750 (files dann halt 640)
Jeder User in seine eignen Gruppe, der Apache ist dann Mitglied in der
jeweiligen Gruppe. Klar kann mann alle in die gleiche Gruppe stopfen
aber dann kann mal auch gleich die rechte auf 777 (sollte mall lieber 3 zitronen nennenm statt 777).

cirox
Posts: 212
Joined: 2006-05-08 23:20
Location: Berlin

Re: PHP als Modul - Sicherheit

Post by cirox » 2007-05-05 22:50

hasch wrote:Sollte "Suhosin" nicht aber vor solchen Fehlern wie openbasedir schützen!?
sushosin Feature List

Was mir dazu einfällt: suhosin schützt nicht beim Zugriff auf Programme, die z. Bsp. unter /usr/bin liegen, sofern Du exec freigegeben hast. In dem Fall ist open_basedir/suhosin sinnlos. Das einzige was Du machen kannst ist jeden vhost in ein Chroot stecken, bzw. entsprechende PHP Funktionen sperren. Leider sperrst Du damit auch z. Bsp. imagemagick aus (falls Du es brauchst). Variante: safe_mode (exec_dir). Fällt aber ab 6.0 eh flach und ist auch nicht so sicher.

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-06 15:02

gierig wrote:
Sinnvoll wäre es etwa, alle "User" derselben Gruppe zuzuweisen und den DocumentRoots sämtlicher VHosts alle Gruppen-Permissions zu entziehen.

World executable müssen die Verzeichnisse sein, da ansonsten auch der Apache keinen Zugriff mehr hat.
Nö, alle meine Vhosts sind 750 (files dann halt 640)
Das skaliert dann halt möglicherweise nicht so toll:
gierig wrote:Jeder User in seine eignen Gruppe, der Apache ist dann Mitglied in der jeweiligen Gruppe. Klar kann mann alle in die gleiche Gruppe stopfen aber dann kann mal auch gleich die rechte auf 777 (sollte mall lieber 3 zitronen nennenm statt 777).
Nicht wirklich. Ich persönlich empfinde es auch als deutlich unästhetischer, den Apache in einen Stall voller Gruppen zu stopfen, auch das Konzept halte ich nicht für besonders ansprechend (Herumbasteln am Apache-Benutzer bei "Standard-Tasks") ;-).

Wenn alle Benutzer in derselben Gruppe sind, ist es wie gesagt zweckmäßig, den Gruppenmitgliedern sämtliche Permissions zu entziehen und selbstverfreilich keine "world writable"-Permissions zu verteilen; 705 bzw. 1705 eben.

Sicherlich mögen da Probleme in inhomogenen Umgebungen auftauchen.

gierig
Posts: 292
Joined: 2002-10-15 16:59
Location: WHV

Re: PHP als Modul - Sicherheit

Post by gierig » 2007-05-06 19:34

Wenn alle Benutzer in derselben Gruppe sind, ist es wie gesagt zweckmäßig, den Gruppenmitgliedern sämtliche Permissions zu entziehen und selbstverfreilich keine "world writable"-Permissions zu verteilen; 705 bzw. 1705 eben.


Wie is eigentlich egal, wenn "others" rechte hat darf da JEDER drauf
zugreifen auch wenns dann nur lesend ist. Schön das dann der Apache user darf,
aber August und Nicole dürfen es genauso wie nobody auch. Halte ich ob in "gleichartiger" oder "ungleichartiger" ungebung für nicht wirklich gut.

Aber gerne seine Lösung die er benötigt :-)

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-07 12:47

Es darf nur jeder (lesend) darauf zugreifen, der nicht Mitglied der Gruppe, der das Verzeichnis "gehört", ist. Die Gruppen-Permissions haben Vorrang vor den "World"-Permissions. Wie ich schrub, in "inhomogenen" Umgebungen kann das ein (lösbares) Problem darstellen; ich halte es aber für die sauberste Lösung. Aber wie du schreibst, jeder so wie er mag :-).

gierig
Posts: 292
Joined: 2002-10-15 16:59
Location: WHV

Re: PHP als Modul - Sicherheit

Post by gierig » 2007-05-07 13:19

jetzt wird Offtoic :-)

Ja stimmt, an die Prio der Gruppen Rechte habe ich nicht gedacht.
Punkt für dich.

Aber denoch kann dann jeder der nicht der gruppe angehört die
Files einsehen. Das mag für den Apachen Ok sein, aber meinen
nobody User würde ich ungerne in die gruppe packen nur damit er
nicht drauf zugreifen kann.

Aber ich denke das scheiden sich die Geister was sinnvoller ist.
Wobei mir dabei nicht wohl in der magen gegend ist.

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-07 14:04

gierig wrote:Das mag für den Apachen Ok sein, aber meinen
nobody User würde ich ungerne in die gruppe packen nur damit er
nicht drauf zugreifen kann.
Damit hätte ich bspw. gar keine Schmerzen; es sollte natürlich außerdem feststehen, dass die betreffende Gruppe nur für einen vorher definierten Zweck zum Einsatz kommt. Ich bin kein großer Freund des "USERGROUPS"-Modells, da man sich hier an allen möglichen Stellen zusätzlichen Overhead einfängt, allein etwa schon für die Definition von einheitlichen Prozess- / CPU- / Speicherlimits etc. Aber jetzt ist's wirklich OT ;-).

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: PHP als Modul - Sicherheit

Post by djcrackman » 2007-05-08 07:46

dtdesign wrote:Eine Instanz beschreibt nichts anderes als ein Prozess von einem Programm. Wenn ich Apache starte, kann ich zusätzliche Prozesse spawnen lassen, die - ähnlich wie PHP via FastCGI - fest im Speicher bleiben. Hierbei spricht man von Instanzen, da ein identischer Prozess mehrfach im Speicher residiert.

Gruß
dtdesign
Da hast du micht aber falsch verstanden ;). Ab einer gewissen Anzahl von Vhosts skaliert der Apache extrem bescheiden (wobei das mitunter von der Last abhängt). Eine Instanz ist in meiner Erläuterung ein weitere Apache-Server der auf einer anderen IP lauscht (und wenns nur 127.0.0.2 ist ;)). Ein Frontend Proxy (lighty, Apache, Pond, etc) holt sich dann die Seiten aus dem Backend. Läuft um einiges Performanter (auf einer Maschine !) als ein großer Apache der zig File-Handles und Vhosts durch die Gegen schupfen muss ;).

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-08 09:32

Das hört sich aber sehr abenteuerlich an :-). Was spricht denn konkret gegen http://httpd.apache.org/docs/2.0/vhosts/mass.html bzw. http://httpd.apache.org/docs/1.3/vhosts/mass.html?

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: PHP als Modul - Sicherheit

Post by Joe User » 2007-05-08 12:17

aldee wrote:Das hört sich aber sehr abenteuerlich an :-). Was spricht denn konkret gegen http://httpd.apache.org/docs/2.0/vhosts/mass.html bzw. http://httpd.apache.org/docs/1.3/vhosts/mass.html?
Die Sicherheitsprobleme mit mod_$interpreter und die bereits genannten Performanceprobleme bei vielen vHosts...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings 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.

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-08 12:29

Joe User wrote:
aldee wrote:Das hört sich aber sehr abenteuerlich an :-). Was spricht denn konkret gegen http://httpd.apache.org/docs/2.0/vhosts/mass.html bzw. http://httpd.apache.org/docs/1.3/vhosts/mass.html?
Die Sicherheitsprobleme mit mod_$interpreter
Mir erschließt sich nicht, was das damit zu tun hat.
Joe User wrote:und die bereits genannten Performanceprobleme bei vielen vHosts...
Die dort beschriebenen Ansätze haben das Ziel, dass der Apache eben nicht mehr die Konfiguration sämtlicher VHosts im Speicher vorhalten muss. Abhängig von den konkreten Gegebenheiten kann man diese natürlich nicht 1:1 übernehmen; ggf. müssen auch anderweitige Anpassungen vorgenommen werden (etwa im suexec).

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: PHP als Modul - Sicherheit

Post by djcrackman » 2007-05-08 13:21

Konfiguration sämtlicher VHosts im Speicher vorhalten muss.
Dafür dann $DB-Storage im Backend, ergo beißt sich der Hund in den Schwanz und die hast immer Last X.
Zu unflexibel.

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-08 15:02

djcrackman wrote:
Konfiguration sämtlicher VHosts im Speicher vorhalten muss.
Dafür dann $DB-Storage im Backend, ergo beißt sich der Hund in den Schwanz und die hast immer Last X.
Mit mod_rewrite in Verbindung mit Umgebungsvariablen lässt sich einiges anstellen, das nicht zu Lasten der Flexibilität geht. Komplette VHost-Konfigurationen vorzuhalten ist dabei nicht notwendig. Aber lassen wir das ;-).

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: PHP als Modul - Sicherheit

Post by djcrackman » 2007-05-08 16:13

Das will ich sehen, dass du mit so einer Lösung mir nichts dir nichts einen Vhost raus nimmst, neue optionale (mit alternativen (keinem Schema entsprechenden) Domainnamen) Vhost hinzufügst etc ;).

aldee
Posts: 93
Joined: 2002-10-03 16:45

Re: PHP als Modul - Sicherheit

Post by aldee » 2007-05-08 16:20

Dafür reicht eine simple RewriteMap (der Einfachheit halber bspw. als dbm-File; wer's aufgebohrter will, kann das ganze natürlich auch etwa per "prg" an ein SQL-Backend hängen) ohne irgendwelche Verrenkungen. Bis das an Performance-Grenzen stößt, dürften mutmaßlich einige Zehnerpotenzen mehr als 10^4 VHosts nötig sein ;-).

djcrackman
Posts: 207
Joined: 2005-06-02 11:58

Re: PHP als Modul - Sicherheit

Post by djcrackman » 2007-05-08 16:44

ohne irgendwelche Verrenkungen.
Wer sprach von Verrenkungen? Ich aktiviere und deaktiviere Vhosts per 1/0-Flag ;). Weiters kann ich mit [0-9] entscheiden, über welchen Server der Vhost publiziert werden soll etc - über weitere Schalter kann ich PHP-Version, safe_mode, register_globals, magic_quotes etc verwalten. Ergo: Soll die Kiste doch 150MB für das DBS verbrauchen, wem tut das weh, wenn 4GB Ram drin stecken?

Das Alles bequem verpackt in ein Webinterface und meine User verwalten sich selbst.

Sieht dann mitunter so aus (klick mich hart)