Dateiberechtigungen setzen

Korrekt gesetzte Zugriffsrechte sind ein wichtiger Bestandteil einer sicheren CMS-Installation . Diese definieren, wer Dateien und Verzeichnisse lesen und schreiben kann.

WordPress als Beispiel

Weil WordPress so beliebt ist, wähle ich es hier als Beispiel-CMS. Die grundlegenden Regeln sind aber unabhängig vom CMS, sie gelten für alle Webseiten die auf UNIX basierten Betriebsystemen laufen (wie auch Linux und Mac OS X).

Zugriffsrechte via SSH setzen

Damit kein Angreifer die Dateien deiner WordPress Webseite infiltrieren und damit zum Beispiel Spam verschicken kann, ist es wichtig, Zugriffsrechte möglichst streng einzustellen. Am schnellsten geht das, wenn du dich über SSH auf dem Server anmeldest und dann auf der Konsole die entsprechenden Berechtigungen setzt.

Den Benutzer und die Gruppe setzen

Zunächst solltest du sicherstellen, dass nur der passende Benutzer und die passende Gruppe Zugriff auf die Dateien hat. Normalerweise ist das www-data, je nach Setup und Hoster kann das aber variieren:

chown www-data:www-data -R /pfad/zu/wordpress/

Mit diesem Kommando ändern wir mit einem Schlag den Benutzer und die Gruppe auf www-data.

Der grundlegende Befehl heißt chown. Das Kürzel steht für change owner also Benutzer ändern. Als Parameter benötigt er den Benutzer, die Gruppe und das jeweilige Verzeichnis oder die Datei. Wie du siehst, werden Benutzer und Gruppe mit einem Doppelpunkt getrennt:

chown benutzer:gruppe Datei

In unserem Fall spielt der zusätzlich Parameter -R eine entscheidende Rolle (bitte unbedingt auf die Großschreibung achten). Er führt den Befehl rekursiv durch. Das bedeutet, dass die Änderung auf alle im Verzeichnis enthaltene Verzeichnisse und Dateien angewandt werden und zwar auch auf enthaltene Unterverzeichnisse.

Ließen wir den Parameter weg, würden die Änderungen nur auf das Hauptverzeichnis angewandt werden.

Berechtigungen für Verzeichnisse

Damit alle in WordPress enthaltenen Verzeichnisse (unter Windows auch Ordner genannt) die korrekten Berechtigungen haben, können wir folgenden Befehl nutzen:

find /pfad/zu/wordpress/ -type d -exec chmod 755 {}\;

Der Befehl sieht weitaus komplexer aus und besteht eigentlich auch aus zweien:

Mittels find suchen wir im angegebenen Pfad, also innerhalb der Verzeichnisse und Dateien von Wordpress. Der Parameter -type d legt das Suchmuster fest: alle Verzeichnisse (d = directories).

Für jedes Verzeichnis, das gefunden wird, wird chmod ausgeführt. Das funktioniert ähnlich wie das chown weiter oben und steht für change mode . Damit können wir festlegen, welche Zugriffsrechte gewährt werden.

Für die Wordpress-Verzeichnisse setzen wir einen Wert von 755. Das bedeutet der Benutzer darf lesen, schreiben und ausführen (die 7). Die Gruppe darf lesen und ausführen aber nicht schreiben. Alle anderen dürfen lesen und ausführen aber nicht schreiben. Das sind die beiden 5en am Ende.

Diese Methode nennt man oktal, weiter unten erkläre ich noch mal etwas genauer, was es damit auf sich hat und warum wir hier 755 gewählt haben.

Berechtigungen für Dateien

Die Dateien innerhalb unseres Wordpress Verzeichnisses brauchen andere Zugriffsrechte, der Befehl ist aber fast identisch:

find /pfad/zu/wordpress/ -type f -exec chmod 644 {}\;

Zunächst siehst du hier, dass der Type sich ändert. Da wir diesmal nur Dateien ansprechen wollen, lautet er: -type f. Das F steht in diesem Fall für files also Dateien.

Auch unser chmod-Befehl variiert leicht, diesmal setzen wir die Berechtigungen auf 644, das heißt: Der Benutzer darf lesen und schreiben, die Gruppe darf lesen, alle anderen dürfen auch nur lesen.

Mit diesen Berechtigungen haben wir den Zugriff strengstmöglich eingestellt, somit ist es nicht ohne Weiteres möglich, Manipulationen an Dateien vorzunehmen oder neue Dateien einzuschleusen.

Zugriffsrechte mittels FTP ändern

Höchstwahrscheinlich hast du einen Hoster, der dir den direkten Zugriff über SSH gar nicht erlaubt. Das tun nämlich nur wenige (wie z.b. all-inkl).

In den meisten Fällen bleibt dann noch der Weg über FTP. Leider variieren die FTP-Programme sehr stark. Bei manch einem kann man die Berechtigungen, wie oben beschrieben, als Zahlenwert eingeben, bei anderen muss man mühselig Häkchen anklicken.

Der Vorgang ist aber bei allen ähnlich:
Logge dich via FTP ein, wähle die entsprechenden Dateien und Verzeichnisse aus und setze die passenden Berechtigungen. Bei guten FTP-Programm kannst du dies auch rekursiv tun, das spart viel Arbeit.

Einige Hoster bieten zudem die Möglichkeit, Berechtigungen über deren Administrationsoberfläche zu ändern. Das ist meist eine gute Alternative, weil man hier oftmals besser zwischen Dateien und Verzeichnissen filtern kann.

chmod Zahlen und Symbole

Bei der Anzeige von Berechtigungen von Dateien und Verzeichnissen kann es zwei unterschiedliche Anzeigeformen geben. Zum einen die weiter oben verwendete oktale Anzeige oder die symbolische Anzeige, die auf dem ersten Blick etwas übersichtlicher wirkt und daher oft in FTP-Programm verwendet wird.

chmod - symbolische Anzeige

Ich fange mit der symbolischen Ansicht an, da diese für Einsteiger zunächst schneller zu verstehen ist. Wenn du dich via SSH oder FTP auf deinem Server oder beim Hoster anmeldest und dir die Zugriffsberechtigungen anschaust, siehst du etwas, dass dem hier ähnelt:

drwxr-xr-x Verzeichnis
-rw-r--r-- Datei

Die vier Symbole, die wir hier sehen sind:

  • - keine Berechtigung
  • r lesen (read)
  • w schreiben (write)
  • x ausführen (execute)
  • d Verzeichnis (directory)

Jede Datei und jedes Verzeichnis kann einen oder alle dieser Berechtigungen zugewiesen bekommen.

Wie du siehst, tauchen diese Symbole aber mehrfach auf. Die Erklärung hierfür ist ganz einfach: Jede Datei und jedes Verzeichnis hat drei unterschiedliche Zugriffsberechtigungen:

  • Der Inhaber/Benutzer
  • Die Gruppe
  • Alle anderen

In der Regel hat der Inhaber oder auch Benutzer genannt, die meisten Zugriffsrechte. Der Benutzer ist ein reeler Systembenutzer (oder wird als solcher „virtualisiert“). Bei Webseiten sind die Gruppe und alle anderen fast gleichzusetzen, deshalb haben sie in den meisten Fällen auch die selben Berechtigungen.

Die Gruppe ist eine Art Container. Mehrere Benutzer können der selben Gruppe angehören. Somit ist es möglich der Gruppe bestimmte Rechte zu geben, die dann automatisch für alle Mitglieder der Gruppe gelten.

Werfen wir noch mal einen Blick auf die Zugriffsrechte des Verzeichnisses und teilen sie diesmal in die drei Varianten auf:

d / rwx / r-x / r-x

Ignorieren wir zunächst mal den ersten Teil, das D. Und schauen uns den Rest an.

Der zweite Block, also rwx beschreibt die Zugriffsrechte des Inhabers/Benutzers. Er darf lesen, schreiben und ausführen.

Der dritte Block, also r-x zeigt die Zugriffsrechte der Gruppe an. Sie darf lesen und ausführen, nicht aber schreiben (deshalb das -).

Alle anderen dürfen ebenfalls nur lesen und ausführen.

Der ersten Block, hier also das d, zeigt besondere Typen von Objekten an. In diesem Fall handelt es sich um ein Verzeichnis, weshalb das D vorangestellt ist. Es kann sich aber auch um einen Link (eine Art Verknüpfung zu einer anderen Datei) handeln, dann stünde an dieser Stelle ein kleines L l.

Verzeichnisse haben zudem die Besonderheit, dass sie ausführbar sein müssen, obwohl sie ja eigentlich keine Programme oder Skripte sind. Damit aus ihnen aber gelesen werden kann, müssen sie ebenfalls mit Ausführrechten versehen werden.

Berechtigungen können nicht nur symbolisch dargestellt, sondern auch gesetzt werden. Wollen wir dem Benutzer zum Beispiel Schreibrechte geben, können wir das wie folgt tun:

chmod u+w Datei

Wieder kommt chmod zum Einsatz. Mit dem Parameter u sagen wir, dass wir dem Benutzer (user) eine Berechtigung gewähren oder entziehen wollen. Der Parameter +w legt fest, was wir tun, ihm nämlich Schreibrecht (write) geben.

Wir können den Benutzer auch vorhandene Schreibrecht entziehen:

chmod u-w Datei

Dafür haben wir einfach das Plus durch ein Minus ersetzt.

Die Symbole sind mit denen der Anzeige identisch, wem man die Berechtigung gibt, legen die vorangestellten Kürzel fest:

  • u Benutzer (user)
  • g Gruppe (group)
  • o Andere (others)
  • a Alle (all)

chmod - oktale Anzeige

Kommen wir zurück zur oktalen Ansicht, die wir jetzt mal etwas entschlüsseln wollen, denn so kompliziert ist sie gar nicht.

Schnappen wir uns unseren chmod von oben und zwar das 755. Ähnlich wie bei der symbolischen Ansicht, sind hier drei Blöcke enthalten: Der Benutzer, die Gruppe, alle anderen.

Eigentlich sind es auch hier vier Blöcke, den ersten schreiben wir aber einfach nicht mit, er entspricht im Normalfall einer 0.

Anders als bei der symbolischen Ansicht, werden pro Block nicht drei Berechtigungen (r,w,x) ausgewiesen, sondern nur eine Zahl festgelegt. Diese entsteht durch Addition der einzelnen Berechtigungen:

  • *0**: Keine Berechtigung
  • 1: Ausführen
  • 2: Schreiben
  • 4: Lesen

Der Benutzer hat von uns die Berechtigung 7 bekommen, somit hat er vollen Zugriff:

7 = 1 + 2 + 4

Die Gruppe und der Rest, hat die Berechtigung 5 bekommen, also lesen und ausführen:

5 = 1 + 4

Wenn man diese vier Werte im Kopf hat und weiß, dass sie durch Addition kombiniert werden, ist es relativ einfach zu erkennen, welche Berechtigungen für eine Datei oder ein Verzeichnis vergeben sind.

Unser zweites Beispiel von oben, für die Dateien, lautete: 644 und entspricht also:

Eigentümer/Benutzer darf lesen und schreiben

6 = 2 + 4

Die Gruppe und alle anderen dürfen nur lesen:

4 = 4

Warum genau diese Zahlen?

Vielleicht wirst du dich jetzt fragen, warum man ausgerechnet diese vier Zahlen gewählt hat. Wenn du mal herum probierst, wirst du feststellen, dass durch die Addition der Zahlen keine Dopplungen zustande kommen können. Hätte man die Zahlen einfach fortlaufend gewählt, also 0,1,2,3 wären sie uneindeutig:

3 = 3
3 = 1 + 2

Natürlich steckt noch ein bisschen mehr dahinter und theoretisch kann man auch die Berechtigung 3 geben. Die Tabelle der möglichen Rechte ist binär aufgebaut:

Dezimal Berechtigung rwx (binär)
0 Keine 000
1 Ausführen 001
2 Schreiben 010
3 Schreiben und Ausführen 011
4 Lesen 100
5 Lesen und Ausführen 101
6 Lesen und Schreiben 110
7 Alle 111

Crashkurs Zahlentheorie

Für all jene, die nicht so fit im Umrechnen sind, ein kleiner Crashkurs:

Binäre Zahlen ließt man quasi von rechts nach links. Wie bei jedem Zahlensystem kann jede Stelle einen gewissen Bereich erfassen. Bei unseren Standardzahlen, den Dezimalzahlen liegt der Bereich zwischen 0 und 9. Überschreitet die gewünschte Zahl den Bereich, wird vorne eine weitere Stelle ergänzt.
Unsere 10 entspricht dem. Wenn ich zu einer 9 eine 1 addiere, dann überschreitet das Resultat unseren Zahlenbereich, denn wir haben keine einzelne Zahl, die der 10 entspricht. Unsere 10 setzt sich also aus zwei Zahlen zusammen, der 0 in der ersten Stelle und der 1 in der zweiten.

Binärzahlen funktionieren genauso, nur dass der Zahlenbereich stark eingeschränkt ist. Er besteht nur aus der 0 und der 1.
Rechne ich also 1+1, ergäbe das dezimal die 2. Aber im Dualsystem (binär) gibt es diese Zahl nicht, es gibt keine 2. Wie oben mit 9+1 beschrieben, wird also eine neue Stelle vorangestellt und die Zahl lautet: 10.

Binär lautet es also:

1 + 1 = 10 // dezimal: 1 + 1 = 2
10 + 1 = 11 // dezimal: 2 + 1 = 3
11 + 1 = 100 // dezimal: 3 + 1 = 4

Na, raucht der Kopf? Es ist ein bisschen schwierig zu erklären, aber - wie Mathematik eben ist - eigentlich ganz logisch. Lass es dir einfach ein bisschen durch den Kopf gehen, dann sollte auch die obige Tabelle auf einmal logisch und nachvollziehbar sein.

Grundwissen

Jetzt hast du also das nötige Grundwissen, um Berechtigungen und Benutzer für Dateien und Verzeichnisse zu setzen. Alles basiert auf dieser Logik. Wenn du etwas tiefer in die Materie einsteigen möchtest, kannst du dir folgende Links ansehen.

Quellen und weiterführende Informationen