VMware ESXi and vSphere Cluster Management

Linux-Dateiberechtigungen mit chmod ändern

Linux-Dateirechte mit chmod verstehen und sicher ändern: ls -l, Oktalmodus, symbolische Rechte, Verzeichnisse, Rekursion und typische Fehler.

chmod ist das Linux-Werkzeug, um Zugriffsrechte von Dateien und Verzeichnissen zu setzen, zu ergänzen oder zu entziehen. Dieser Artikel erklärt das Berechtigungsmodell, die numerische und symbolische Schreibweise sowie sichere Vorgehensweisen im Terminal.

Was macht chmod?

Der Befehl chmod ändert den Dateimodus eines Objekts. Zum Dateimodus gehören unter anderem die Unix-Zugriffsrechte. Die Grundsyntax lautet:

chmod RECHTE DATEINAME

Beispielsweise setzt der folgende Befehl einen bestimmten Modus für eine Datei:

chmod 644 dokument.txt

Bei einer einzelnen Datei änderst du nur diese Datei. Bei einem Verzeichnis änderst du mit einer normalen Angabe nur die Rechte des Verzeichnisses selbst. Die enthaltenen Dateien und Unterverzeichnisse werden nicht automatisch geändert. Für eine Änderung in einem ganzen Verzeichnisbaum wird die Option -R verwendet. Diese Option sollte besonders sorgfältig eingesetzt werden.

Das Linux-Berechtigungsmodell

Linux unterscheidet drei Berechtigungsklassen:

SymbolKlasseBedeutungPosition in der Rechteanzeige
uuser beziehungsweise ownerDateieigentümererste Dreiergruppe
ggroupMitglieder der zugeordneten Dateigruppezweite Dreiergruppe
oothersAlle anderen Benutzerdritte Dreiergruppe
aallAlle drei Klassen zusammenalle Dreiergruppen

Jede Klasse kann drei Basisrechte erhalten: Lesen (r), Schreiben (w) und Ausführen beziehungsweise Durchsuchen (x). Eine typische Anzeige von ls -l sieht so aus:

-rwxr-xr-- 1 anna entwickler 1200 Mär 12 10:30 script.sh

Das erste Zeichen beschreibt den Dateityp. Ein Bindestrich steht typischerweise für eine reguläre Datei, d für ein Verzeichnis. Danach folgen neun Rechtezeichen in dieser Reihenfolge:

  1. Positionen 2 bis 4: Rechte des Eigentümers
  2. Positionen 5 bis 7: Rechte der Gruppe
  3. Positionen 8 bis 10: Rechte anderer Benutzer

Die Folge rwxr-xr-- bedeutet daher: Der Eigentümer darf lesen, schreiben und ausführen; die Gruppe darf lesen und ausführen; andere Benutzer dürfen nur lesen.

Rechte von Dateien und Verzeichnissen

Die gleiche Buchstabenfolge hat bei Dateien und Verzeichnissen teilweise unterschiedliche praktische Bedeutungen.

RechtSymbolOktalwertBedeutung bei einer DateiBedeutung bei einem Verzeichnis
Lesenr4Dateiinhalt lesenInhalt beziehungsweise Dateinamen auflisten
Schreibenw2Dateiinhalt verändernEinträge anlegen, löschen oder umbenennen, sofern das Suchrecht ebenfalls vorhanden ist
Ausführenx1Datei als Programm oder Skript ausführenVerzeichnis betreten und darin nach bekannten Namen suchen

Bei einem Verzeichnis bedeutet x deshalb nicht, dass das Verzeichnis selbst „ausgeführt“ wird. Es ist das Such- oder Durchsuchungsrecht. Ohne dieses Recht kann ein Benutzer trotz vorhandener Leseberechtigung den Inhalt oft nicht sinnvoll verwenden.

Das Schreibrecht einer Datei ist außerdem nicht dasselbe wie das Recht, diese Datei zu löschen. Das Löschen oder Umbenennen eines Eintrags hängt hauptsächlich von den Schreib- und Suchrechten des übergeordneten Verzeichnisses ab. Ein Sticky Bit kann diese Aktionen zusätzlich einschränken.

Bei Skripten muss neben einem passenden Interpreter oder einer Shebang-Zeile meist auch das x-Recht vorhanden sein. Ein Skript wird zum Beispiel mit chmod u+x script.sh für den Eigentümer ausführbar gemacht.

Aktuelle Berechtigungen mit ls -l prüfen

Vor jeder Änderung solltest du den aktuellen Zustand ermitteln:

ls -l DATEINAME

Für ein konkretes Beispiel:

ls -l bobs_file.txt

Prüfe dabei nicht nur die Rechtefolge, sondern auch Eigentümer und Gruppe. Eine Ausgabe wie -rw-r----- 1 bob projekt ... bedeutet: Eigentümer bob, Gruppe projekt, Eigentümerrechte rw-, Gruppenrechte r-- und keine Rechte für andere Benutzer. Nach jeder Änderung sollte dieselbe Kontrolle erneut erfolgen.

chmod im Oktalmodus

Im Oktalmodus wird eine Ziffer für jede der drei Berechtigungsklassen angegeben: zuerst der Eigentümer, dann die Gruppe und zuletzt andere Benutzer. Die Werte der Rechte werden innerhalb einer Klasse addiert:

  • Lesen: r = 4
  • Schreiben: w = 2
  • Ausführen: x = 1
WertSymbolische FormEnthaltene Rechte
0---keine Rechte
1--xAusführen
2-w-Schreiben
3-wxSchreiben und Ausführen
4r--Lesen
5r-xLesen und Ausführen
6rw-Lesen und Schreiben
7rwxLesen, Schreiben und Ausführen

Oktalwerte berechnen und lesen

Soll der Eigentümer lesen, schreiben und ausführen dürfen, ergibt sich 4 + 2 + 1 = 7. Für eine Gruppe mit Lesen und Schreiben ergibt sich 4 + 2 = 6. Für andere Benutzer mit Leserecht genügt 4. Der vollständige Modus lautet dann 764:

chmod 764 bobs_file.txt

Das Ergebnis ist -rwxrw-r--. Eine andere Aufteilung ist 645: Der Eigentümer erhält rw-, die Gruppe r-- und andere Benutzer r-x.

chmod 645 bobs_file.txt

Eine vollständige dreistellige oktale Angabe ersetzt die bisherigen normalen Rechte aller drei Klassen. Deshalb ist sie nicht geeignet, wenn du nur eine einzelne vorhandene Berechtigung verändern möchtest.

Häufige chmod-Modi

ModusSymbolische RechteTypischer EinsatzzweckSicherheitshinweis
600rw-------Private Datei mit Zugriff nur für den EigentümerGeeignet für vertrauliche Dateien
644rw-r--r--Normale Datei, Eigentümer darf schreibenAndere können nur lesen
664rw-rw-r--Datei für Zusammenarbeit von Eigentümer und GruppeGruppen- und Dateikontext prüfen
700rwx------Privates Verzeichnis oder privates SkriptNur der Eigentümer hat Zugriff
755rwxr-xr-xSkript oder Verzeichnis mit Les-/Suchzugriff für andereAndere dürfen nicht schreiben
775rwxrwxr-xGemeinsam genutztes VerzeichnisGruppenmitgliedschaft und Gruppenzuordnung prüfen
777rwxrwxrwxNur in seltenen, klar begründeten FällenFür Dateien und Verzeichnisse meist ein erhebliches Risiko

Der symbolische Modus

Der symbolische Modus beschreibt gezielt, welche Klasse geändert wird und welche Aktion erfolgen soll. Die Klassen heißen u für Eigentümer, g für Gruppe, o für andere und optional a für alle. Die Rechtebuchstaben sind r, w und x.

OperatorWirkungBeispiel
+Recht hinzufügenchmod o+w datei.txt
-Recht entfernenchmod o-w datei.txt
=Rechte dieser Klasse exakt festlegenchmod u=rw datei.txt

Mit + und - bleiben nicht genannte Rechte und andere Klassen unverändert. Das ist praktisch, wenn du eine vorhandene Rechteverteilung gezielt anpassen willst:

chmod o+w bobs_file.txt
chmod o-w bobs_file.txt
chmod uo+x bobs_file.txt

Der erste Befehl ergänzt nur das Schreibrecht für andere Benutzer. Der zweite entfernt es wieder. Der dritte ergänzt das Ausführrecht für Eigentümer und andere.

Mit = legst du die Rechte einer oder mehrerer Klassen vollständig fest. Eine leere Rechteangabe bedeutet keine Rechte:

chmod u=rw,g=r,o= datei.txt

Mehrere Klassen und Änderungen lassen sich mit Kommas verbinden:

chmod u=rw,g=r,o= datei.txt
chmod ug+rw,o-rwx projektdatei

Der symbolische Modus ist hier nachvollziehbarer als ein vollständiger Oktalwert, weil jede Änderung direkt einer Klasse zugeordnet ist.

Änderungen planen und sicher anwenden

  1. Aktuelle Rechte, Eigentümer und Gruppe mit ls -l prüfen.
  2. Festlegen, welche Klasse welche konkrete Aktion benötigt.
  3. Nach dem Minimalprinzip nur die notwendigen Rechte vergeben.
  4. Bei einer vollständigen Zielverteilung einen passenden Oktalwert oder mehrere =-Angaben verwenden.
  5. Das Ergebnis erneut prüfen und den tatsächlichen Zugriff testen.

Übermäßig offene Rechte vergrößern die Angriffs- und Fehlerfläche. Besonders 777 erlaubt allen Benutzern Lesen, Schreiben und Ausführen. Ein world-writable Objekt, also ein für andere Benutzer beschreibbares Objekt, sollte nur mit einer klaren Begründung existieren. Häufig lässt sich das Problem durch eine passende Eigentümerschaft, Dateigruppe oder ein engeres Verzeichnisrecht lösen.

chmod, chown und Gruppenmitgliedschaft unterscheiden

chmod ändert die Rechte, aber nicht den Eigentümer und nicht die Dateigruppe. Für den Eigentümerwechsel ist typischerweise chown zuständig. Die Gruppenmitgliedschaft eines Benutzers wird ebenfalls nicht mit chmod verwaltet. Ein Benutzer erhält die Gruppenrechte nur, wenn er tatsächlich Mitglied der zugeordneten Gruppe ist.

Für eine funktionierende Gruppenfreigabe müssen daher drei Dinge zusammenpassen: die Gruppenmitgliedschaft des Benutzers, die Gruppe des Objekts und die Gruppenrechte des Objekts.

Wer darf chmod ausführen?

In der Regel darf der Dateieigentümer den Modus ändern. Auch root oder ein entsprechend privilegierter Prozess darf dies normalerweise. Schreibrechte auf den Inhalt einer Datei geben jedoch nicht automatisch das Recht, ihren Modus zu verändern. Diese beiden Aktionen werden getrennt kontrolliert.

Bei fehlender Berechtigung kann eine Meldung wie Operation not permitted oder Permission denied erscheinen. Prüfe dann den Kontext:

ls -l DATEINAME
id
stat DATEINAME

Nur bei einer legitimen administrativen Aufgabe und nach Prüfung des Zielpfads kann sudo angemessen sein:

sudo chmod 755 DATEINAME

Wenn der Eigentümer nicht passt, sollte die Eigentümerschaft nach dem zuständigen Verfahren korrigiert werden. Auch Dateisystemoptionen oder zusätzliche Schutzmechanismen können eine Änderung verhindern.

Rekursive Änderungen mit -R

chmod -R wendet eine Änderung auf das angegebene Verzeichnis und seine enthaltenen Unterobjekte an. Ein einheitlicher numerischer Modus ist dabei oft problematisch: Dateien benötigen normalerweise andere Rechte als Verzeichnisse. Ein pauschales chmod -R 755 projekt macht beispielsweise viele Dateien ausführbar.

Ein vorsichtigerer symbolischer Ansatz kann X verwenden. Großes X setzt das Ausführrecht nur für Verzeichnisse und für Dateien, die bereits ein Ausführrecht besitzen:

chmod -R u=rwX,g=rX,o= verzeichnis

Auch dieser Befehl muss zum Projekt passen. Prüfe vor einer rekursiven Änderung den vollständigen Pfad, sichere wichtige Daten und kontrolliere anschließend verschiedene Dateien und Unterverzeichnisse. In System-, Web- oder Projektverzeichnissen können pauschale Änderungen Dienste unterbrechen oder vertrauliche Daten freigeben.

Sonderrechte als Einordnung

Neben den neun normalen Rechten gibt es setuid, setgid und das Sticky Bit. Sie verändern das Ausführungs-, Gruppen- oder Löschverhalten eines Objekts und haben besondere Sicherheitswirkungen. Dafür kann eine vierstellige Oktalnotation verwendet werden; die zusätzliche führende Stelle beschreibt die Sonderrechte, die drei folgenden Stellen die normalen Klassenrechte.

Sonderrechte sollten nur mit klarer technischer und sicherheitsbezogener Begründung gesetzt werden. Für alltägliche Datei- und Verzeichnisrechte reichen meist die drei normalen Oktalziffern oder der symbolische Modus.

Typische Fehler beheben

Ein Skript startet nicht

Prüfe zunächst das Ausführrecht:

ls -l script.sh

Fehlt das x-Recht, kann es bei passendem Kontext ergänzt werden. Unabhängig davon müssen Pfad, Shebang und Interpreter stimmen. Ist das Dateisystem mit noexec eingebunden, verhindert diese Einhängeoption die direkte Ausführung:

mount | grep noexec

Eine Datei lässt sich nicht löschen

Prüfe die Rechte des übergeordneten Verzeichnisses. Für das Löschen ist primär dessen Schreib- und Suchrecht entscheidend, nicht das Schreibrecht der Datei. Ein gesetztes Sticky Bit kann zusätzlich verhindern, dass Benutzer fremde Einträge löschen.

Eine Gruppenfreigabe funktioniert nicht

Prüfe sowohl die Benutzergruppen als auch die Objektgruppe und die Gruppenrechte:

id BENUTZER
ls -l DATEINAME

chmod allein fügt keinen Benutzer zu einer Gruppe hinzu und ändert auch nicht die Gruppenzuordnung der Datei.

Nach chmod 777 ist alles zugänglich

Das ist kein sicherer Reparaturweg, sondern häufig ein Zeichen dafür, dass die benötigte Zugriffsklasse nicht analysiert wurde. Ermittle den tatsächlichen Zugriffspfad, prüfe Eigentümer und Gruppe und setze anschließend einen möglichst engen Modus.

Eine rekursive Änderung hat falsche Ergebnisse erzeugt

Wahrscheinlich wurde derselbe Modus auf Dateien und Verzeichnisse angewendet. Behandle beide Objekttypen getrennt oder nutze einen sorgfältig geprüften symbolischen Ansatz mit X. Kontrolliere das Ergebnis stichprobenartig mit ls -l.

Praktische Kurzreferenz

ZielBefehl
Aktuelle Rechte anzeigenls -l DATEINAME
Eigentümer rwx, Gruppe rw, andere rchmod 764 bobs_file.txt
Eigentümer rw, Gruppe r, andere rxchmod 645 bobs_file.txt
Anderen Schreibrecht gebenchmod o+w bobs_file.txt
Anderen Schreibrecht entziehenchmod o-w bobs_file.txt
Eigentümer und andere ausführbar machenchmod uo+x bobs_file.txt
Normale Datei setzenchmod 644 dokument.txt
Skript mit üblichen Rechten setzenchmod 755 backup.sh
Privates Verzeichnis setzenchmod 700 privat
Symbolisch jede Klasse festlegenchmod u=rw,g=r,o= datei.txt

Prüfungsrelevante Merksätze

  • Die Reihenfolge der drei Rechteklassen ist Eigentümer, Gruppe, andere Benutzer.
  • r steht für Lesen und hat den Oktalwert 4, w für Schreiben und 2, x für Ausführen oder Durchsuchen und 1.
  • Bei Verzeichnissen betrifft w vor allem das Verwalten von Einträgen; x erlaubt das Betreten und Durchsuchen.
  • Ein vollständiger Oktalmodus ersetzt die normalen Rechte aller drei Klassen.
  • Symbolische Angaben eignen sich für gezielte Änderungen, etwa o+w.
  • chmod ändert weder Eigentümer noch Gruppenmitgliedschaften.
  • -R wirkt auf den gesamten Verzeichnisbaum und muss wegen unterschiedlicher Datei- und Verzeichnisrechte mit Bedacht verwendet werden.
  • 777 ist keine allgemeine Fehlerbehebung, sondern kann ein erhebliches Sicherheitsproblem darstellen.

Weiterführend: Linux-Dateiberechtigungen mit chmod ändern.