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-fcgiEin
Code: Select all
exec /home/vhosttester/etc/php-fcgiCode: Select all
chroot /home/vhosttester /etc/php-fcgi /home/vhosttester/www/test.phpDas suexec.log bleibt komplett leer. Im error.log stehen nur nichtssagende Meldungen:
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.[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
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
