MWCodebymw.de ↗
Terminal

Dateirechte verstehen – was 755 und 644 wirklich bedeuten

chmod 777 löst jedes Rechteproblem – und schafft ein größeres. Die drei Ziffern sind kein Zauberspruch, sondern eine simple Addition. Wer sie einmal verstanden hat, rät nie wieder.

„Permission denied." Und dann googelt man, findet chmod 777 und es funktioniert. Das ist ungefähr so, wie eine klemmende Tür dadurch zu lösen, dass man sie aushängt.

Dabei ist das System dahinter erfreulich simpel.

Drei Gruppen, drei Rechte

ls -l zeigt links etwas wie -rwxr-xr--. Nach dem ersten Zeichen (Dateityp) kommen drei Dreierblöcke:

 rwx  r-x  r--
  │    │    │
  │    │    └─ alle anderen
  │    └────── Gruppe
  └─────────── Eigentümer

Und jedes Recht hat einen Zahlenwert:

| Recht | Zeichen | Wert | |---|---|---| | Lesen | r | 4 | | Schreiben | w | 2 | | Ausführen | x | 1 |

Eine Ziffer ist einfach die Summe der Rechte dieser Gruppe:

  • 7 = 4 + 2 + 1 = lesen, schreiben, ausführen
  • 6 = 4 + 2 = lesen, schreiben
  • 5 = 4 + 1 = lesen, ausführen
  • 4 = nur lesen

755 heißt also: Der Eigentümer darf alles, alle anderen dürfen lesen und ausführen.

Die zwei Werte, die man im Alltag braucht

chmod 644 datei.php      # Dateien:  Eigentümer schreibt, Rest liest
chmod 755 ordner/        # Ordner:   zusätzlich "betreten"
chmod 755 skript.sh      # ausführbare Skripte

Bei Ordnern bedeutet x nicht „ausführen", sondern hineinwechseln. Ein Ordner mit 644 ist deshalb praktisch unbrauchbar: Man sieht die Namen darin, kommt aber an keine Datei heran. Das ist der häufigste Grund für rätselhafte Fehler nach einem Massen-chmod.

Warum 777 falsch ist

777 heißt: Jeder Benutzer auf diesem System darf diese Datei verändern. Auf einem Shared-Hosting-Paket ist „jeder" auch der Nachbar. Und bei einer PHP-Datei heißt „verändern" faktisch „beliebigen Code auf deinem Server ausführen".

Wenn chmod 777 ein Problem löst, ist die eigentliche Ursache fast immer der Eigentümer:

ls -l datei.php
# -rw-r--r-- 1 root root ...    ← gehört root, aber der Webserver ist www-data

sudo chown www-data:www-data datei.php

Das ist die richtige Lösung. chown ändert, wem etwas gehört; chmod, was man damit darf.

Die Buchstaben-Schreibweise

Für kleine Änderungen ist sie oft klarer als das Rechnen:

chmod +x skript.sh          # ausführbar machen
chmod u+w datei.txt         # Eigentümer darf schreiben
chmod go-w datei.txt        # Gruppe und andere dürfen NICHT schreiben
chmod -R o-rwx geheim/      # für alle anderen komplett sperren, rekursiv

u = user (Eigentümer), g = group, o = others, a = all.

Ordner und Dateien getrennt behandeln

Ein rekursives chmod -R 755 macht auch jede Textdatei ausführbar. Sauberer ist:

find . -type d -exec chmod 755 {} +      # Ordner
find . -type f -exec chmod 644 {} +      # Dateien

Das ist der Befehl, den ich nach jedem Upload auf einen neuen Server einmal laufen lasse.

Und was ist mit Uploads?

Ein Ordner, in den dein PHP-Skript Dateien schreibt, braucht Schreibrecht für den Webserver-Nutzer — aber nicht für alle. Der richtige Weg ist chown auf den Webserver-Nutzer und 755, nicht 777. Und hochgeladene Dateien sollten nie ausführbar sein: Ein .php im Upload-Ordner, das ausgeführt werden kann, ist die klassische Übernahme eines Servers.

Du bist unsicher, ob die Rechte auf deinem Webspace richtig gesetzt sind? Das ist eine der Stellen, an denen sich ein kurzer Blick von außen lohnt. Schreib mir.

Quellen

#Terminal#Linux#chmod#Dateirechte#Sicherheit

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →