Felix Riesterer: sinnvolle Rechtevergabe

Beitrag lesen

Lieber Matthias,

mit PHP geschriebene Dateien gehören dem User, unter dem der Webserver den PHP-Prozess ausführt. Wenn PHP die Datei sowohl lesen als auch schreiben können soll, sonst aber niemand, dann benötigt sie diese UNIX-Dateirechte:

rw- --- --- (600)

Mit den Verzeichnissen ist es im Grunde ebenso, nur dass noch das "ausführen"-Bit notwendig ist, wenn Du Unterverzeichnisse anlegen möchtest.

rwx --- --- (700)

Solltest Du jetzt mit FTP an diesen Verzeichnissen oder Dateien etwas ändern wollen, dann geht das nur, wenn der FTP-User mit dem User des Webservers identisch ist. Und das ist natürlich Unsinn und wird von daher scheitern. In einem solchen Falle würdest Du diese Dinge über eine gemeinsame Gruppe lösen, in der sich sowohl der FTP-User, als auch der Webserver-Prozess (www-data oder www-run) befinden. Die Rechte sähen dann so aus:

--- rw- --- (060)
--- rwx --- (070)

zum lesen geöffnet werden brauchen sie nicht.

Wenn PHP die Dateien ausliefern soll (also der Link nicht an PHP vorbei vom Webserver über das Dateisystem ausgeliefert wird), dann müssen sie gelesen werden können.

Wie kann ich die Dateirechte beim Erzeugen der Dateien angeben?

chmod($dir_path_existing, 0070); // --- rwx ---
mkdir($dir_path_new, 0070);

touch($file_path);
chmod($file_path, 0060); // --- rw- ---

Wenn PHP die Zahlenwerte als Oktalzahlen verstehen soll, musst Du sie vierstellig angeben - daher die jeweils zusätzliche führende null. Siehe auch PHP-Doku zu chmod.

Liebe Grüße

Felix Riesterer