de.comp.lang.php.* FAQ

13.7. Unix: Welche Zugriffsrechte brauche ich, um eine Datei anzulegen?

Keywords: Datei | Recht | neu | anlegen | Unix | Benutzer

Antwort von Kristian Köhntopp

Um in Unix eine Datei anlegen zu können, benötigt ein Programm x-Rechte an jedem Verzeichnis entlang des Pfadnamens sowie w-Recht an dem Verzeichnis, in dem die Datei angelegt werden soll.

w-Recht an einem Verzeichnis berechtigt nicht nur dazu, eine Datei neu anzulegen, sondern es berechtigt außerdem dazu, die Namen existierender Dateien aus dem Verzeichnis zu entfernen. Dies wird in Unix oft vereinfachend als "das Löschen einer Datei" bezeichnet. Beim Entfernen von Namen aus einem Verzeichnis werden die Rechte an der Datei und ihr Eigentümer nicht geprüft.

Dies ändert sich, setzt man an dem Verzeichnis, in dem sich die Datei befindet, zusätzlich das t-Recht. In diesem Fall können nur der Superuser (genauer: jeder Prozeß der CAP_FOWNER Capability hat), der Eigentümer des Verzeichnisses oder der Eigentümer der Datei noch den Namen aus dem Verzeichnis entfernen.

Um eine existierende Datei zu überschreiben, ist dagegen x-Recht an jedem Verzeichnis entlang des Pfadnamens notwendig, sowie w-Recht an der zu verändernden Datei (oder man hat CAP_FOWNER Capability).

In Apache mit suexec ist es so, dass CGI-Programme mit derjenigen User-ID und Group-ID ausgeführt werden, die für den virtuellen Webserver mit Hilfe der Direktiven User und Group definiert worden sind. CGI-PHP legt also Dateien mit diesen User- und Group-Rechten an und das Zielverzeichnis muss entsprechende Rechte besitzen, damit ein fopen() mit dem Anlegen einer Datei erfolgreich sein kann.

In Apache mit mod_php ist es so, dass der PHP-Interpreter als Bestandteil des Webservers läuft und mit den Rechten des Webservers Dateien anlegt oder löscht. In diesem Fall ist ausschlaggebend, was die globale (serverweite) User- und Group-Direktive für den Webserver festlegt. Das Zielverzeichnis muss für diesen Unix-Benutzer passende Rechte anbieten.

In PHP kann es sein, dass zusätzliche Beschränkungen gelten, die in Kraft treten, falls safe_mode aktiviert ist. Dies kann in CGI-PHP in der php.ini geschehen, in mod_php zusätzlich in <Directory>-Blöcken in der zentralen httpd.conf, jedoch nicht in .htaccess-Dateien.

Es ist empfehlenswert, für jeden virtuellen Webserver eine gesonderte CGI-Identität anzulegen und jedem virtuellen Webserver ein Verzeichnis einzuräumen, das keine URL hat (nicht unterhalb der Document Root liegt) und das nur durch diese CGI-Identität beschreibbar ist. Auf diese Weise kann jeder virtuelle Webserver anwendungsspezifische Daten auf eine Weise speichern, die nicht durch das http-Protokoll erreichbar ist und die nicht durch andere CGI-Programme anderer virtueller Webserver gelesen oder geschrieben werden koennen.

Wird mod_php verwendet, ist ein solcher Schutz nur mit safe_mode erreichbar. Dies birgt jedoch andere Nachteile.

Valid HTML 4.01! Valid CSS!

13.7. Unix: Welche Zugriffsrechte brauche ich, um eine Datei anzulegen?
http://www.php-faq.de/q/q-datei-rechte.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team