So verwenden Sie den chmod-Befehl unter Linux

Mit dem Linux-Befehl `chmod` können Sie präzise festlegen, wer auf Dateien zugreifen, Verzeichnisse durchsuchen und Skripte ausführen darf. Die Steuerung von Dateiberechtigungen unter Linux mag anfangs komplex erscheinen, doch mit dem nötigen Wissen wird sie recht übersichtlich.

`chmod` zur Anpassung von Dateiberechtigungen

Linux verwendet Berechtigungssätze, um zu definieren, welche Aktionen ein Nutzer oder eine Nutzergruppe an einer Datei oder einem Ordner vornehmen darf. Es gibt im Wesentlichen drei solcher Sätze: einen für den Dateieigentümer, einen für die Mitglieder der Dateigruppe und einen für alle übrigen Nutzer.

Diese Berechtigungen regeln, ob eine Datei gelesen, verändert oder als Skript ausgeführt werden kann. Bei Verzeichnissen bestimmen sie, wer in das Verzeichnis wechseln, Dateien anlegen oder bearbeiten darf.

Der Befehl `chmod` ist das Werkzeug, um jede dieser Berechtigungen zu setzen. Mit dem Befehl `ls` können Sie die aktuellen Berechtigungen einer Datei oder eines Verzeichnisses einsehen.

Dateiberechtigungen anzeigen und interpretieren

Die Option `-l` (langes Format) beim Befehl `ls` zeigt die Dateiberechtigungen für Dateien und Verzeichnisse an.

ls -l

Jede Zeile beginnt mit einem Zeichen, das die Art des aufgelisteten Eintrags kennzeichnet. Ein Minuszeichen (`-`) steht für eine Datei, der Buchstabe `d` für ein Verzeichnis.

Die folgenden neun Zeichen geben die Einstellungen der drei Berechtigungssätze wieder.

Die ersten drei Zeichen repräsentieren die Berechtigungen des Dateibesitzers (Benutzerberechtigungen). Die mittleren drei Zeichen zeigen die Berechtigungen der Mitglieder der Dateigruppe (Gruppenberechtigungen). Die letzten drei Zeichen zeigen die Berechtigungen für alle anderen Benutzer (andere Berechtigungen).

Jeder dieser Berechtigungssätze besteht aus drei Zeichen. Sie zeigen das Vorhandensein oder Fehlen einer bestimmten Berechtigung an. Ein Bindestrich (`-`) bedeutet, dass die entsprechende Berechtigung nicht vergeben wurde. Die Buchstaben `r`, `w` oder `x` zeigen an, dass die jeweilige Berechtigung erteilt wurde.

Die Buchstaben stehen für:

r: Leseberechtigung. Die Datei kann geöffnet und ihr Inhalt angezeigt werden.
w: Schreibberechtigung. Die Datei kann bearbeitet, verändert und gelöscht werden.
x: Ausführungsberechtigung. Wenn es sich um ein Skript oder Programm handelt, kann es ausgeführt werden.

Ein Beispiel:

`—` bedeutet, dass keine Berechtigungen vergeben wurden.
`rwx` bedeutet, dass alle Berechtigungen vorhanden sind. Die Lese-, Schreib- und Ausführungsindikatoren sind alle gesetzt.

In einem Beispiel Screenshot beginnt die erste Zeile mit einem `d`. Dies kennzeichnet ein Verzeichnis namens „Archiv“. Der Eigentümer ist „dave“, und der Gruppenname ist ebenfalls „dave“.

Die nachfolgenden drei Zeichen zeigen, dass der Eigentümer alle Rechte hat (`rwx`). Die nächsten drei Zeichen (`rx`) zeigen an, dass die Mitglieder der Gruppe „dave“ Lese- und Ausführungsrechte haben. Sie können also den Verzeichnisinhalt auflisten und in das Verzeichnis wechseln, aber keine Dateien anlegen, bearbeiten oder löschen.

Die letzten drei Zeichen (`rx`) gelten für alle anderen Nutzer und geben auch ihnen Lese- und Ausführungsrechte.

Zusammenfassend lässt sich sagen, dass Gruppenmitglieder und andere Lese- und Ausführungsrechte haben, während der Eigentümer (Benutzer dave) auch Schreibrechte besitzt.

Bei den anderen Dateien außer der Skriptdatei `mh.sh` haben dave und die Mitglieder der „dave“-Gruppe Lese- und Schreibrechte. Andere haben nur Leseberechtigungen. Die Skriptdatei `mh.sh` hat für dave und seine Gruppe volle Rechte (Lesen, Schreiben, Ausführen), während andere Lese- und Ausführungsrechte haben.

Die Syntax der Berechtigungsänderung verstehen

Um `chmod` zur Vergabe von Berechtigungen zu nutzen, muss angegeben werden:

Wer: Für wen werden Berechtigungen festgelegt?
Was: Was soll geändert werden? Soll die Berechtigung hinzugefügt oder entfernt werden?
Welche: Welche Berechtigungen werden vergeben?

Dafür verwenden wir Indikatoren, die zu kurzen „Berechtigungsanweisungen“ wie `u+x` kombiniert werden, wobei „u“ für „Benutzer“ steht, „+“ für das Hinzufügen und „x“ für die Ausführungsberechtigung.

Die Werte für „Wer“ sind:

u: Benutzer (Dateieigentümer).
g: Gruppe (Mitglieder der Dateigruppe).
o: Andere (Nutzer, die nicht unter `u` oder `g` fallen).
a: Alle (umfasst alle oben genannten).

Wenn keiner dieser Werte verwendet wird, verhält sich `chmod`, als wäre `a` angegeben worden.

Die „Was“-Werte sind:

-: Minuszeichen. Entfernt die Berechtigung.
+: Pluszeichen. Fügt die Berechtigung hinzu. Die Berechtigung wird den bereits vorhandenen Berechtigungen hinzugefügt. Wenn Sie nur diese Berechtigung wünschen, nutzen Sie den Operator `=`.
=: Gleichheitszeichen. Legt die Berechtigung fest und entfernt andere.

Die „Welche“-Werte sind:

r: Leseberechtigung.
w: Schreibberechtigung.
x: Ausführungsberechtigung.

Berechtigungen setzen und ändern

Nehmen wir an, wir haben eine Datei, für die jeder volle Berechtigungen besitzt.

ls -l new_file.txt

Wir möchten, dass der Benutzer dave Lese- und Schreibrechte hat und Gruppe und andere Benutzer nur Leseberechtigungen. Dazu verwenden wir den folgenden Befehl:

chmod u=rw,og=r new_file.txt

Der Operator „=“ löscht vorhandene Berechtigungen und setzt die angegebenen.

Überprüfen wir die neuen Berechtigungen der Datei:

ls -l new_file.txt

Die vorhandenen Berechtigungen wurden entfernt und die neuen gesetzt.

Was, wenn wir eine Berechtigung hinzufügen möchten, ohne andere zu entfernen? Auch das ist problemlos möglich.

Angenommen, wir haben ein Skript, das wir bearbeitet haben. Wir möchten, dass es für alle Benutzer ausführbar ist. Die aktuellen Berechtigungen sehen so aus:

ls -l new_script.sh

Wir können die Ausführungsberechtigung mit dem Befehl hinzufügen:

chmod a+x new_script.sh

Die Ausführungsberechtigung wurde allen hinzugefügt, und die bestehenden Berechtigungen blieben erhalten.

ls -l new_script.sh

Dasselbe Ergebnis hätten wir auch ohne das `a` in der Anweisung `a+x` erhalten. Der Befehl `chmod +x new_script.sh` hätte den gleichen Effekt gehabt.

Berechtigungen für mehrere Dateien setzen

Wir können Berechtigungen gleichzeitig auf mehrere Dateien anwenden.

Hier sind die Dateien im aktuellen Verzeichnis:

ls -l

Angenommen, wir möchten die Schreibrechte für „andere“ Benutzer von Dateien mit der Endung „.page“ entfernen. Das gelingt mit folgendem Befehl:

chmod o-r *.page

Schauen wir uns an, was das bewirkt hat:

ls -l

Die Leseberechtigung für die Kategorie „andere“ wurde aus den „.page“-Dateien entfernt. Andere Dateien sind nicht betroffen.

Um auch Dateien in Unterverzeichnissen zu berücksichtigen, verwenden wir die Option `-R` (rekursiv):

chmod -R o-r *.page

Numerische Kurzform

Eine weitere Möglichkeit, `chmod` zu nutzen, ist die Angabe der gewünschten Berechtigungen als dreistellige Zahl. Die Ziffer ganz links steht für die Berechtigungen des Eigentümers, die mittlere für die der Gruppenmitglieder, und die Ziffer rechts für die der übrigen Nutzer.

Die Ziffern, die Sie verwenden können und ihre Bedeutung, sind:

0: (000) Keine Berechtigung.
1: (001) Ausführungsberechtigung.
2: (010) Schreibberechtigung.
3: (011) Schreib- und Ausführungsberechtigung.
4: (100) Leseberechtigung.
5: (101) Lese- und Ausführungsberechtigung.
6: (110) Lese- und Schreibberechtigung.
7: (111) Lese-, Schreib- und Ausführungsberechtigung.

Jede Berechtigung wird durch ein Bit im binären Äquivalent der Dezimalzahl repräsentiert. 5, also 101 binär, bedeutet Lesen und Ausführen. 2, oder binär 010, steht für Schreibberechtigung.

Diese Methode setzt die gewünschten Berechtigungen direkt, anstatt sie zu den vorhandenen hinzuzufügen. Das heißt, wenn bereits Lese- und Schreibberechtigungen existieren, müssten Sie 7 (111) verwenden, um Ausführungsrechte hinzuzufügen. Die Verwendung von 1 (001) würde die Lese- und Schreibrechte entfernen und Ausführungsrechte hinzufügen.

Fügen wir die Leseberechtigung für die Kategorie „andere“ bei den Dateien mit der Endung „.page“ wieder hinzu. Die Benutzer- und Gruppenberechtigungen müssen wir auch wieder so setzen, wie sie waren. Sie hatten Lese- und Schreibrechte (6 oder 110). „Andere“ sollen nur Leseberechtigungen haben (4 oder 100).

Der Befehl dafür lautet:

chmod 664 *.page

Damit werden die Berechtigungen für Benutzer, Gruppenmitglieder und andere auf die gewünschten Werte gesetzt. Die Berechtigungen für Benutzer und Gruppen werden wiederhergestellt und die anderen haben wieder Leserechte.

ls -l

Erweiterte Optionen

Wenn Sie die Manpage zu `chmod` lesen, werden Sie erweiterte Optionen finden, die sich auf die SETUID- und SETGID-Bits sowie das eingeschränkte Lösch- oder „Sticky“-Bit beziehen.

In 99% der Fälle, in denen Sie `chmod` benötigen, reichen die hier beschriebenen Optionen vollkommen aus.