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:
| Symbol | Klasse | Bedeutung | Position in der Rechteanzeige |
|---|---|---|---|
u | user beziehungsweise owner | Dateieigentümer | erste Dreiergruppe |
g | group | Mitglieder der zugeordneten Dateigruppe | zweite Dreiergruppe |
o | others | Alle anderen Benutzer | dritte Dreiergruppe |
a | all | Alle drei Klassen zusammen | alle 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:
- Positionen 2 bis 4: Rechte des Eigentümers
- Positionen 5 bis 7: Rechte der Gruppe
- 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.
| Recht | Symbol | Oktalwert | Bedeutung bei einer Datei | Bedeutung bei einem Verzeichnis |
|---|---|---|---|---|
| Lesen | r | 4 | Dateiinhalt lesen | Inhalt beziehungsweise Dateinamen auflisten |
| Schreiben | w | 2 | Dateiinhalt verändern | Einträge anlegen, löschen oder umbenennen, sofern das Suchrecht ebenfalls vorhanden ist |
| Ausführen | x | 1 | Datei als Programm oder Skript ausführen | Verzeichnis 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
| Wert | Symbolische Form | Enthaltene Rechte |
|---|---|---|
| 0 | --- | keine Rechte |
| 1 | --x | Ausführen |
| 2 | -w- | Schreiben |
| 3 | -wx | Schreiben und Ausführen |
| 4 | r-- | Lesen |
| 5 | r-x | Lesen und Ausführen |
| 6 | rw- | Lesen und Schreiben |
| 7 | rwx | Lesen, 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
| Modus | Symbolische Rechte | Typischer Einsatzzweck | Sicherheitshinweis |
|---|---|---|---|
600 | rw------- | Private Datei mit Zugriff nur für den Eigentümer | Geeignet für vertrauliche Dateien |
644 | rw-r--r-- | Normale Datei, Eigentümer darf schreiben | Andere können nur lesen |
664 | rw-rw-r-- | Datei für Zusammenarbeit von Eigentümer und Gruppe | Gruppen- und Dateikontext prüfen |
700 | rwx------ | Privates Verzeichnis oder privates Skript | Nur der Eigentümer hat Zugriff |
755 | rwxr-xr-x | Skript oder Verzeichnis mit Les-/Suchzugriff für andere | Andere dürfen nicht schreiben |
775 | rwxrwxr-x | Gemeinsam genutztes Verzeichnis | Gruppenmitgliedschaft und Gruppenzuordnung prüfen |
777 | rwxrwxrwx | Nur in seltenen, klar begründeten Fällen | Fü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.
| Operator | Wirkung | Beispiel |
|---|---|---|
+ | Recht hinzufügen | chmod o+w datei.txt |
- | Recht entfernen | chmod o-w datei.txt |
= | Rechte dieser Klasse exakt festlegen | chmod 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
- Aktuelle Rechte, Eigentümer und Gruppe mit
ls -lprüfen. - Festlegen, welche Klasse welche konkrete Aktion benötigt.
- Nach dem Minimalprinzip nur die notwendigen Rechte vergeben.
- Bei einer vollständigen Zielverteilung einen passenden Oktalwert oder mehrere
=-Angaben verwenden. - 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
| Ziel | Befehl |
|---|---|
| Aktuelle Rechte anzeigen | ls -l DATEINAME |
| Eigentümer rwx, Gruppe rw, andere r | chmod 764 bobs_file.txt |
| Eigentümer rw, Gruppe r, andere rx | chmod 645 bobs_file.txt |
| Anderen Schreibrecht geben | chmod o+w bobs_file.txt |
| Anderen Schreibrecht entziehen | chmod o-w bobs_file.txt |
| Eigentümer und andere ausführbar machen | chmod uo+x bobs_file.txt |
| Normale Datei setzen | chmod 644 dokument.txt |
| Skript mit üblichen Rechten setzen | chmod 755 backup.sh |
| Privates Verzeichnis setzen | chmod 700 privat |
| Symbolisch jede Klasse festlegen | chmod u=rw,g=r,o= datei.txt |
Prüfungsrelevante Merksätze
- Die Reihenfolge der drei Rechteklassen ist Eigentümer, Gruppe, andere Benutzer.
rsteht für Lesen und hat den Oktalwert 4,wfür Schreiben und 2,xfür Ausführen oder Durchsuchen und 1.- Bei Verzeichnissen betrifft
wvor allem das Verwalten von Einträgen;xerlaubt 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.-Rwirkt auf den gesamten Verzeichnisbaum und muss wegen unterschiedlicher Datei- und Verzeichnisrechte mit Bedacht verwendet werden.777ist keine allgemeine Fehlerbehebung, sondern kann ein erhebliches Sicherheitsproblem darstellen.
Weiterführend: Linux-Dateiberechtigungen mit chmod ändern.