Datei- und Verzeichnisberechtigungen auf dem Webserver

Was muss für wen lesbar sein?

Der Webserver läuft unter dem Benutzernamen und der Gruppe "www-data". Daraus ergibt sich, dass Webseiten und Verzeichnisse für diesen Benutzer zugänglich sein müssen. Für Dateien: lesbar (r), für Verzeichnisse: (r-x) oder (x), siehe unten.

suPHP-Scripts und CGI-Scripts laufen unter dem Account des Teilnehmers ($sitename). Dadurch ergeben sich auch keine Probleme mit Rechten der von Scripts angelegten Dateien bzw. Verzeichnisse, da der Besitzer solcher Dateien immer der Teilnehmer selbst ist und nicht der Webserver.

empfohlene Rechte für Dateien und Verzeichnisse

Hier ist eine kleine Übersicht, welche Rechte wie für welche Dateitypen empfehlen und unter welcher Benutzerkennung darauf zugegriffen wird.

Typ Benutzerkennung des Webservers empfohlene Rechte
HTML-Seiten www-data 644, rw-r--r-- $sitename $sitename
Verzeichnisse (mit autoindex) www-data 755, rwxr-xr-x $sitename $sitename
Verzeichnisse (ohne autoindex) * www-data 751, rwxr-x--x $sitename $sitename
.htaccess-Dateien www-data 644, rw-r--r-- $sitename $sitename
PHP-Script (suPHP) $sitename 640, rw-r----- $sitename $sitename
PHP-Script (modPHP) * www-data 644, rw-r--r-- $sitename $sitename
CGI-Script $sitename 750, rwxr-x--- $sitename $sitename

Die mit * gekennzeichneten Varianten werden standardmäßig nicht verwendet

Für CGI-Scripte ist es wichtig, dass das Verzeichnis, in dem sie liegen
  • für niemand anders als den Besitzer schreibbar ist
  • der Gruppe $sitename (und nicht z.B. wwwuser) gehört.

Was bedeuten die Rechte und wie setzt man sie?

Die Rechte können in der Shell (SSH-Login auf kudu.in-berlin.de) mit dem Befehl chmod und mit vielen Clients direkt gesetzt werden. Dabei ist es wichtig zu wissen, wie sich die Rechte zusammensetzen und was beispielsweise die Angabe 750 bedeutet (manchmal auch 0750 geschrieben, bedeutet genau dasselbe).

Die Gruppenzugehörigkeit einer Datei oder eines Verzeichnisses kann in der Shell mit dem Befehl chgrp gesetzt werden, sofern man diese "besitzt" (der angemeldete Benutzer Eigentümer ist) und Mitglied der "neuen" Gruppe ist (der sie zugeordnet werden sollen).

An dieser Stelle wollen wir auf die (letzten) 3 Ziffern der Rechteangabe eingehen. Es gibt noch eine vierte Ziffer, die hier aber nicht relevant ist. Die 3 Ziffern stellen die Rechte für die Personengruppen Besitzer der Datei bzw. des Verzeichnisses, Gruppe der die Datei bzw. das Verzeichnis gehört und den Rest der Welt (der Webserver) dar. Neu angelegte Dateien und Verzeichnisse gehören (Besitzer) standardmäßig dem Teilnehmer ($sitename) und der Gruppe des Teilnehmers ($sitename), in der alle SSH-Accounts der Site Mitglied sind. Bei Projekten, an deren mehrere Leute mit mehreren Accounts arbeiten, kann man dies über die Gruppenmitgliedschaft realisieren.

Die Ziffern stellen die Wertigkeit der Attribute wie folgt dar:

Attribut Wertigkeit
lesen (r) 4
schreiben (w) 2
ausführen (x) 1

Damit jemand eine Datei lesen darf, braucht die Datei für seine Personengruppe mindestens die Wertigkeit 4. Soll er sie zusätzlich verändern können, muss die 2 addiert werden, so dass wir bereits bei 6 sind. Handelt es sich um ein Programm bzw. CGI-Script und soll es ausgeführt werden dürfen, muss die 1 addiert werden. Daraus ergeben sie die max. Rechte von 7, damit man eine Datei bzw. ein Verzeichnis lesen, schreiben und ausführen darf. Bei einem Verzeichnis bedeutet "ausführen", dass man in dieses Verzeichnis wechseln darf.

Beispiel an den Rechten 751:

Rechte für: Besitzer Gruppe andere
Attribute: rwx r-x r--
Oktal: 7 5 1

Als Grundsatz sollte man sich merken, dass man so wenig Rechte wie möglich, aber so viele Rechte wie nötig vergibt. Wenn man für CGI- oder PHP-Scripts zu viele Rechte vergibt (z.B. schreibbar für die Welt), dann weigert sich der Webserver diese Scripts zu starten. Man würde ausserdem anderen Benutzern auf dem Server die Möglichkeit eröffnen, die eigenen Scripts zu editieren. Dies sollte man sich bei der Vergabe von Rechten immer vor Augen führen.

-- Main.ChriS - 08 Mar 2008
Topic revision: 2009-05-08, OlAf

  • QuickFind



 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding IN-Berlin Public Wiki? Send feedback