PHP Rechte einschränken

casper99

New Member
Hi Leute,

ich habe einen Webserver mit mehreren Kunden.
Ich möchte gerne erreichen, daß nur PHP-Scripts vom Kunden ausgeführt werden können, die im jeweiligen Kundenunterverzeichnis liegen.

z.b.
/srv/www/web1/html/php/zulassen.php -> zulassen
/srv/www/web2/html/php/zulassen.php -> zulassen

/srv/www/web1/html/vom_kunden.php -> blocken


Optional zusätzlich:
Ausserdem wäre es sehr schön wenn ich die Datei, die eigentlich geblockt werden sollte, so einstellen könnte, dass nur eine best. PHP Funktion funktioniert. (die ich selbst zur Verfügung stelle und scripts aus dem zugelassenen Verzeichnis aufruft).

Der Webserver läuft im safe_mode mit suexec
 
casper99 said:
Der Webserver läuft im safe_mode mit suexec

Wenn dein Server mit suexec rennt, dann sollte es den Kunden nicht möglich sein, auf die Daten anderer Kunden zuzugreifen. Sicher das die Rechte vergeben sind?
 
@Spin-Doc: Das funzt auch. Auf Daten anderer Kunden kann man auch nicht zugreifen. Ich möchte allerdings ein Unterverzeichnis jedes Kunden selbst erstellen, auf die der Kunde auch keinen FTP Zugriff hat. Dafür habe ich einfach das Verzeichnis mit einem anderen User erstellt, der in der Gruppe vom Webserver ist, damit nur dieser dort lesen kann. Auch nicht schreiben!!!

@Sandmann: Ja, sowas in etwa suche ich! Leider ist das bei php.net nur sehr kurz im safe_mode abschnitt formuliert.
Frage 1) Kann ich für jeden virtuellen Host ein eigenes open_base dir angeben?
Frage 2) Ich möchte quasi alles disablen, und nur eine selbst geschriebene Funktion aufrufen dürfen. (die im zugelassenen Unterverzeichnis sitzt).

Leider sagt php.net
You can also disable individual functions. Note that the disable_functions directive can not be used outside of the php.ini file which means that you cannot disable functions on a per-virtualhost or per-directory basis in your httpd.conf file.

Zur genauerern Erklärung:
Im geschützten Verzeichnis liegt ein CMS.
Damit die Daten ausgelesen werden können auf den Seiten des users, muss eine Funktion aufgerufen werden, die den Inhalt aus der DB liest.
Diese Datei wollte ich halt in das geschützte Verzeichnis legen.
Der User soll sonst nicht das Recht haben PHP auszuführen. Er muss allerdings irgendwie die Content-auslese Funktion nutzen können.
 
Last edited by a moderator:
Frage 1) Kann ich für jeden virtuellen Host ein eigenes open_base dir angeben?
Ja das geht.
php_admin_value open_basedir "/pfad1:/pfad2"

Frage 2) Ich möchte quasi alles disablen, und nur eine selbst geschriebene Funktion aufrufen dürfen. (die im zugelassenen Unterverzeichnis sitzt).
Das ist generell nicht moeglich. Man muesste dann alle Funktionen, die PHP hat, verbieten. Aber dann wuerde man PHP nicht mehr nutzen koennen, denn auch eigene Funktionen, die auf die Standartfunktionen zugreiffen, wuerden nicht mehr funktionieren.
Wie du schon von php.net zitiert hast, kann man "disable_functions" nur in der php.ini verwenden (es gilt also fuer Alle und ueberall).

Ich glaube, damit ist dein "Zur genauerern Erklärung:" schon teilweise abgehakt.
Wenn der Kunde fuer das geschuetzte Verzeichnis keine Schreibrechte hat, kann er auch keine eigenen PHP Datein ablegen und somit kein eigenes PHP nutzen.
 
ok. also mit dem disable Functions kann ich das wohl abhaken.

Mein Plan wäre jetzt für den VirtualHost des Kunden generell mit
"php_admin_flag engine off" PHP auszuschalten,
und nur für 1 zugelassenes Unterverzeichnis die engine einzuschalten?!
oder würdet Ihr hierfür "open_basedir" vorziehen.
Was ist sicherer?

Nur wie kann ich dann ein script, das Content-Management-System Daten ausliest, in die Kundenseiten einbinden?
Könnte man per SSI die PHP-Datei includen?? oder ist das unschön?
 
Wenn ich falsch liege, dann bitte korrigieren, aber suexec setzt doch meines Wissens nach php als CGI oder FastCGI voraus.
Aber bei CGI oder FastCGI werden Parameter wie php_admin_value in der VHost Config ignoriert.
Oder gibts es da was neues?
 
Aber man kann jedem User seine eigene php.ini geben. Nur weiss ich grad nicht mehr wie. Muss mal nachschauen...
 
Hi Leute,

ich habe jetzt einen neuen Debian Server installiert.
PHP läuft als FastCGI mit suexec unter Apache 2.
So kann ich auch jedem user eine eigene php.ini geben (wie von Sandman angesprochen).

Suexec läuft auch einigermaßen, d.h. wenn ich per PHP script eine Datei anlege, dann wird sie auch unter dem Benutzer z.b. web1:ftponly gespeichert.

Soweit - so gut.

Laut suexec-manual werden allerdings noch folgende Abfragen zur Sicherheit gemacht, bis suexec ein script aufruft:
# Is the target user/group the same as the program's user/group?

Is the user the owner of the file?

# Is the target CGI/SSI program NOT writable by anyone else?

We don't want to give anyone other than the owner the ability to change the CGI/SSI program.

Leider wird mein script auch dann noch aufgerufen, wenn nich das PHP SCript einem anderen user übereigne und die Permissions auf 777 stelle.

Woran kann das liegen?
 
Leider wird mein script auch dann noch aufgerufen, wenn ich das PHP SCript einem anderen user übereigne und die Permissions auf 777 stelle.

Woran kann das liegen?

thread exhumierung extraordinaire :D

Aber wer kennt die Antwort? Stehe gerade vor dem gleichen Problem.
apache-2.2.6, php-5.2.4, mod_fcgid-1.10
 
Back
Top