PHP als CGI mit suPHP - Maßnahmen für mehr Sicherheit
Posted: 2005-03-03 09:39
Bei der Vergabe der Benutzerberechtigungen bin ich nun folgendermassen vorgegangen:
jeder Benutzer ist (alleiniges) Mitglied einer gleichlautenden Gruppe, als auch der Gruppe "ftpuser". Die Mitgliedschaft bei ftpuser erlaubt ihm, sich mit proftpd einloggen zu können (hier wurde eingestellt, dass allen anderen der Zugriff verwehrt bleibt). Alle Files die der Benutzer nun via FTP oder via PHP-Skript anlegt, sollten nun eine eindeutige UID und GID tragen, d.h. kein anderer User sollte diese Dateien anrühren können. Seht ihr das auch so?
Im Gegensatz zur Modul-Variante sind nun offensichtlich folgende Direktiven in der vhost.conf nicht mehr korrekt:
php_admin_value open_basedir /var/www/user1/user1-1.tld/
php_admin_value upload_tmp_dir /var/www/user1/user1-1.tld/temp
php_admin_value session.save_path /var/www/user1/user1-1.tld/temp/
Mein Wunsch wäre für jeden Benutzer ein eigenes temp-Verzeichnis zu haben, eben für Dateiuploads und Sessions. Lässt sich das nun bei der CGI-Variante von PHP nicht mehr realisieren?
Ich steh dann noch vor einem weiteren Problem: meine Kollegen (als auch ich selbst) wünschen sich am Server Webapplikationen wie z.B. gallery. Zur Erkärung, wer gallery nicht kennt: das ist eine IMHO recht gut gemachte PHP-Applikation für den Betrieb von Online-Bildgalerien. Nun erfordert eine gallery-Installation ImageMagick, was wiederum die exec() - Methode von PHP erfordert - und genau die sollte ja (u.a.) gesperrt werden! Mist. Kann mir jemand verraten, wie ich verhindern kann, dass PHP zwar Binaries aus einem bin-Verzeichnis (das natürlich unter /var/www/user1/user1-1.tld/ liegen müsste) ausführt, jedoch nicht über eine Code Injection andere Dateien, auf die Leserechte bestehen, ausgelesen werden können? Naja zu allem Ã?berfluss noch kann ich den safe_mode nicht auf On stellen, da sonst gallery (und ich vermute das wird auch auf andere Applikationen zutreffen) nicht mehr funktionieren wird. safe_mode_exec_dir scheidet also aus.
Gibt es dafür eine Lösung, oder muss ich mich (auf Kosten von ImageMagick) damit begnügen?
jeder Benutzer ist (alleiniges) Mitglied einer gleichlautenden Gruppe, als auch der Gruppe "ftpuser". Die Mitgliedschaft bei ftpuser erlaubt ihm, sich mit proftpd einloggen zu können (hier wurde eingestellt, dass allen anderen der Zugriff verwehrt bleibt). Alle Files die der Benutzer nun via FTP oder via PHP-Skript anlegt, sollten nun eine eindeutige UID und GID tragen, d.h. kein anderer User sollte diese Dateien anrühren können. Seht ihr das auch so?
Im Gegensatz zur Modul-Variante sind nun offensichtlich folgende Direktiven in der vhost.conf nicht mehr korrekt:
php_admin_value open_basedir /var/www/user1/user1-1.tld/
php_admin_value upload_tmp_dir /var/www/user1/user1-1.tld/temp
php_admin_value session.save_path /var/www/user1/user1-1.tld/temp/
Mein Wunsch wäre für jeden Benutzer ein eigenes temp-Verzeichnis zu haben, eben für Dateiuploads und Sessions. Lässt sich das nun bei der CGI-Variante von PHP nicht mehr realisieren?
Ich steh dann noch vor einem weiteren Problem: meine Kollegen (als auch ich selbst) wünschen sich am Server Webapplikationen wie z.B. gallery. Zur Erkärung, wer gallery nicht kennt: das ist eine IMHO recht gut gemachte PHP-Applikation für den Betrieb von Online-Bildgalerien. Nun erfordert eine gallery-Installation ImageMagick, was wiederum die exec() - Methode von PHP erfordert - und genau die sollte ja (u.a.) gesperrt werden! Mist. Kann mir jemand verraten, wie ich verhindern kann, dass PHP zwar Binaries aus einem bin-Verzeichnis (das natürlich unter /var/www/user1/user1-1.tld/ liegen müsste) ausführt, jedoch nicht über eine Code Injection andere Dateien, auf die Leserechte bestehen, ausgelesen werden können? Naja zu allem Ã?berfluss noch kann ich den safe_mode nicht auf On stellen, da sonst gallery (und ich vermute das wird auch auf andere Applikationen zutreffen) nicht mehr funktionieren wird. safe_mode_exec_dir scheidet also aus.
Gibt es dafür eine Lösung, oder muss ich mich (auf Kosten von ImageMagick) damit begnügen?