Page 1 of 1

suexec+php-fcgi+chroot möglich?

Posted: 2005-04-24 07:28
by dems
Hallo,

Ich bin nach kase's (Danke an dieser Stelle nochmal!) wunderbarem Howto vorgegangen zum einrichten eines Apaches mit php5-fcgi und mod_fastcgi.

Jetzt möchte ich eine Kleinigkeit ändern und stosse dabei auf ein Problem. Also fange ich mal an zu erklären...

Ich würde gerne php-fcgi in einem chroot laufen zu lassen. Ist das möglich?

Hintergund des ganzen ist dass ich meine User über ssh in Ihren Home-Verzeichnissen eingesperrt habe. Um Sie nicht zu verwirren würde ich gerne die gleiche Umgebung auch auf PHP-Ebene wiedergeben.

Ich habe versucht den php-fcgi-Aufruf im starter-script ein chroot zu verpassen, was aber nicht funktioniert:

Code: Select all

exec chroot  /home/vhosttester /etc/php-fcgi
Die Pfade stimmen, keine Sorge. ;)

Ein

Code: Select all

exec /home/vhosttester/etc/php-fcgi
funktioniert problemlos. Auch über die shell gibt es keine Probleme. Ein

Code: Select all

chroot /home/vhosttester /etc/php-fcgi /home/vhosttester/www/test.php
gibt das gewüschte Ergebnis zurück.

Das suexec.log bleibt komplett leer. Im error.log stehen nur nichtssagende Meldungen:
[Sun Apr 24 05:59:21 2005] [error] [client xx.xx.xxx.xxx] FastCGI: comm with (dynamic) server "/var/www/php-fcgi-scripts/test/php-fcgi-starter" aborted: (first read) idle timeout (30 sec), referer: http://localhost/test.php
[Sun Apr 24 05:59:21 2005] [error] [client xx.xx.xxx.xxx] FastCGI: incomplete headers (0 bytes) received from server "/var//www/php-fcgi-scripts/test/php-fcgi-starter", referer: http://localhost/test.php
Eigentlich hätte ich wenigstens eine Meldung erwartet dass chroot nicht im doc_root von suexec liegt. Ich habe auch chroot in den doc_root kopiert und absolut referenziert, jedoch mit gleichem Ergebnis: 500er Fehler und nichts in den Logs.

Der Nutzer vhosttester war auch der Eigentümer von chroot. Aber selbst wenn nicht, steht in suexec.log kein Wort darüber. Was ja bei einem "normalen" Aufruf von php-fcgi der Fall ist.

Hat da vielleicht jemand einen Tip? Oder gibt es eine Alternative? Die open_basedir-Direktive in der php.ini ist mir bekannt, löst aber leider nicht mein Problem. Damit wird leider nur unterbunden dass die Nutzer unterhalb des angegebenen Pfades etwas öffnen/schreiben/suchen können.

Innerhalb von PHP scheint es anscheinend keine Möglichkeit zu geben. Die doc_root-Direktive scheint nutzlos in dieser Situation.
Eine Möglichkeit wäre es vlt. die PHP-Sourcen zu ändern und die PHP-Funktion chroot für alle Nutzer zugänglich zu machen. Dann einen chroot-Aufruf in eine PHP-Datei stecken und diese in der auto_prepend_file-Direktive referenzieren. Aber das muss doch auch schöner gehen, oder?

Ich bin für jeden Tip extrem dankbar! :)

Gruss,
Daniel

Re: suexec+php-fcgi+chroot möglich?

Posted: 2005-04-24 10:45
by dems
dems wrote:Eine Möglichkeit wäre es vlt. die PHP-Sourcen zu ändern und die PHP-Funktion chroot für alle Nutzer zugänglich zu machen. Dann einen chroot-Aufruf in eine PHP-Datei stecken und diese in der auto_prepend_file-Direktive referenzieren.
Nein, das geht natürlich nicht. Wie ich gerade festgestellt habe ist chroot grundsätzlich nur für root zu haben. Liegt also nicht am PHP.
Ich könnte den Apache als root .... ähm ne...lieber nicht. ;)

Hat irgendjemand einen Tip wie ich die einzelnen VHOST's in Ihrem doc_root chrooten kann? Oder wieso das nicht mit dem php-fcgi-starter funktioniert?

Vielen Dank im Voraus.

Gruss,
Daniel

Re: suexec+php-fcgi+chroot möglich?

Posted: 2005-06-30 20:56
by mydani
Sollte open_basedir das nicht beschränken?
Gruß

Re: suexec+php-fcgi+chroot möglich?

Posted: 2005-07-01 08:33
by captaincrunch
Unter Umständen hilft dir mod_security weiter.