Der Befehl chmod ändert die Zugriffsrechte von Dateien und Ordnern auf POSIX-konformen Systemen wie Linux. Die Abkürzung steht für „change file mode bits“. Jede Datei und jedes Verzeichnis verfügt über Berechtigungen, die festlegen, wer Inhalte lesen, schreiben oder ausführen darf.
chmod unter Linux: Dateirechte verstehen und setzen
In Unix-Urzeiten der 1970er Jahre entstanden, ist chmod heute Teil der GNU coreutils, betreut von David MacKenzie und Jim Meyering. Auf Linux-Distributionen wie Ubuntu, Debian, RHEL, Fedora oder Arch arbeitet das Programm mit identischer Syntax und gleichem Funktionsumfang. Das Rechtemodell teilt Berechtigungen in drei Benutzerklassen ein:
- u (User): Der Besitzer der Datei oder des Verzeichnisses.
- g (Group): Die zugeordnete Gruppe.
- o (Other): Alle anderen Benutzer.
- a (All): Steht als Kürzel für alle drei Klassen (ugo) gleichzeitig.
Die Grundrechte und Berechtigungen anzeigen
Das System unterscheidet drei Grundrechte für Dateien und Verzeichnisse:
- r (Read): Erlaubt das Lesen einer Datei oder das Auflisten eines Verzeichnisinhalts.
- w (Write): Erlaubt das Ändern einer Datei oder das Hinzufügen und Entfernen von Dateien in einem Verzeichnis.
- x (Execute): Erlaubt das Ausführen einer Datei als Programm oder Skript sowie das Betreten eines Verzeichnisses mit
cd.
Der Befehl ls -l zeigt die Zugriffsrechte in einer 10-stelligen Zeichenkette an. Das erste Zeichen kennzeichnet den Dateityp (- für eine reguläre Datei, d für ein Verzeichnis, l für einen Link). Es folgen jeweils drei Zeichen für Besitzer, Gruppe und Andere.
ls -l file.txt
-rwxr-xr-x 1 user group 1024 Jan 1 12:00 file.txt
In diesem Beispiel besitzt der Besitzer volle Zugriffsrechte (rwx), während Gruppe und Andere Inhalte lesen und ausführen dürfen (r-x). Spalte 3 und 4 weisen Besitzer und Gruppe aus, beispielsweise root root.
Symbolische Notation: Rechte relativ anpassen
Die symbolische Notation verwendet Buchstaben und Operatoren nach dem Schema chmod [ugoa...][-+=][perms...] Datei. Der Operator + fügt Rechte hinzu, - entfernt diese und = setzt Rechte explizit unter Überschreiben aller vorhandenen Rechte:
chmod u+x datei.txt– Fügt das Ausführungsrecht für den Besitzer hinzu, ohne bestehende Rechte zu ändern.chmod g-w datei.txt– Entfernt das Schreibrecht für die Gruppe.chmod o+r datei.txt– Fügt das Leserecht für Andere hinzu.chmod a+r datei.txt– Gibt allen Benutzern (User, Gruppe, Andere) das Leserecht.chmod u+rwx,g+w,o+x file.txt– Setzt unterschiedliche Rechte für mehrere Klassen in einem einzigen Befehl.
Wird eine Datei ohne Angabe einer Klasse angepasst, wie bei chmod +x script.sh, wird das Ausführungsrecht für alle Klassen (a) hinzugefügt.
Oktale Notation: Zugriffsrechte numerisch berechnen
In der oktalen Notation bildet eine Ziffer von 0 bis 7 die Berechtigung pro Benutzerklasse ab. Jedes Grundrecht besitzt einen festen Wert: r = 4, w = 2 und x = 1.
| Oktalwert | Symbolisch | Bedeutung | Zusammensetzung |
|---|---|---|---|
| 0 | — | Keine Rechte | 0 |
| 1 | –x | Nur ausführen | 1 |
| 2 | -w- | Nur schreiben | 2 |
| 3 | -wx | Schreiben und ausführen | 2 + 1 |
| 4 | r– | Nur lesen | 4 |
| 5 | r-x | Lesen und ausführen | 4 + 1 |
| 6 | rw- | Lesen und schreiben | 4 + 2 |
| 7 | rwx | Lesen, schreiben und ausführen | 4 + 2 + 1 |
Eine dreistellige Ziffernkombination beschreibt die Rechte einer Datei: Die erste Ziffer gilt für den Besitzer, die zweite für die Gruppe und die dritte für Andere. Der Befehl chmod 755 datei.txt bewirkt dasselbe wie chmod u=rwx,go=rx: Der Besitzer erhält den Wert 7 (rwx), Gruppe und Andere jeweils 5 (r-x). Die oktale Notation setzt alle Rechte absolut fest.
Wichtige Standardprofile in der Praxis
Typische Berechtigungsprofile für die Praxis sind:
- chmod 755 (rwxr-xr-x): Standardberechtigung für ausführbare Skripte und die meisten Verzeichnisse wie
/var/www/html. Der Besitzer besitzt alle Rechte (7), Gruppe und Andere dürfen lesen und ausführen (5). - chmod 644 (rw-r–r–): Standardberechtigung für normale Text- und Datendateien, die nicht ausführbar sein sollen. Der Besitzer liest und schreibt (6), Gruppe und Andere lesen nur (4).
- chmod 600 (rw——-): Nur der Besitzer darf lesen und schreiben, alle anderen haben keinen Zugriff – typisch für SSH-Private-Keys (
~/.ssh/id_rsa). - chmod 700 (rwx——): Nur der Besitzer hat alle Rechte (Lesen, Schreiben, Ausführen), ideal für private Verzeichnisse wie
~/.ssh. - chmod 777 (rwxrwxrwx): Jeder Benutzer besitzt volle Lese-, Schreib- und Ausführungsrechte. Dies stellt ein erhebliches Sicherheitsrisiko dar.
Dateien und Ordner rekursiv konfigurieren
Mit dem Parameter -R setzt chmod Berechtigungen rekursiv für alle Dateien und Unterverzeichnisse:
chmod -R 755 /var/www/html
Ein falscher rekursiver Befehl kann tausende Dateien ungewollt freigeben. Vor der Ausführung empfiehlt sich die Prüfung mit ls -l oder find. Für gemischte Umgebungen aus Dateien und Ordnern eignet sich das große X in der symbolischen Notation:
chmod -R u+rwX,g+rX,o+rX /verzeichnis
Das große X setzt das Ausführungsrecht nur für Verzeichnisse, nicht für reguläre Dateien.
Sonderrechte: SUID, SGID und Sticky Bit
Über die regulären Zugriffsrechte hinaus existieren drei Sonderrechte, die über eine vierte Ziffer im Oktalsystem definiert werden:
- SUID (Set User ID, oktal 4xxx): Bei ausführbaren Dateien läuft der Prozess mit den Rechten des Dateibesitzers statt des aufrufenden Benutzers. Dies ist am
san der Ausführungsposition des Besitzers erkennbar. Ein typisches Beispiel ist/usr/bin/passwd(rwsr-xr-x), womit auch reguläre Benutzer die geschützte Datei/etc/shadowändern können. - SGID (Set Group ID, oktal 2xxx): Bei Verzeichnissen erben neu erstellte Dateien automatisch die Gruppe des Verzeichnisses; erkennbar am
san der Ausführungsposition der Gruppe. Gesetzt wird SGID überchmod g+s /verzeichnisoderchmod 2775 /verzeichnis. - Sticky Bit (oktal 1xxx): In einem Verzeichnis mit gesetztem Sticky Bit können Dateien nur vom Dateieigentümer, vom Verzeichniseigentümer oder von root gelöscht werden; erkennbar am
tan der Ausführungsposition für Andere. Bekanntestes Beispiel ist/tmp(drwxrwxrwt). Gesetzt wird es mitchmod +t /verzeichnisoderchmod 1777 /verzeichnis.
Sonderbits lassen sich in einer vierstelligen Zahl kombinieren: chmod 6755 datei aktiviert SUID (4) und SGID (2) zusammen mit rwxr-xr-x.
Zusammenspiel: umask und chown
Die umask (user file-creation mode mask) legt fest, welche Berechtigungen bei neu erstellten Dateien nicht gesetzt werden. Auf den meisten Linux-Distributionen liegt der Standardwert bei 0022 (kurz 022). Für Dateien ergibt sich aus 666 abzüglich umask 022 die Standardberechtigung 644 (rw-r--r--), da normale Dateien standardmäßig kein Ausführungsrecht erhalten. Für Verzeichnisse ergibt 777 abzüglich 022 die Berechtigung 755 (rwxr-xr-x). Technisch erfolgt die Berechnung bitweise über final_mode = requested_mode & ~umask. Ein Wert von 077 erzeugt Rechte von 600 für Dateien und 700 für Ordner, während 002 typisch für Team-Umgebungen ist (664 für Dateien, 775 für Verzeichnisse).
Während chmod Zugriffsrechte anpasst, ändert der Befehl chown den Besitzer oder die Gruppe einer Datei oder eines Verzeichnisses. Das Ändern des Besitzers erfordert administrative Privilegien mit sudo:
sudo chown linuxuser datei.txt
sudo chown :www-data datei.txt
sudo chown -R www-data:www-data /var/www/html
Typische Fehler und Sicherheitsrisiken
Typische Fehlerquellen bei der Vergabe von Dateirechten sind:
- chmod 777 als Universallösung: Gewährt jedem Benutzer volle Lese-, Schreib- und Ausführungsrechte und stellt ein erhebliches Sicherheitsrisiko dar.
- Verwechslung von relativer und absoluter Notation: Die oktale Notation wie
chmod 755setzt Rechte absolut fest, während symbolische Befehle wiechmod +xRechte relativ anpassen und bestehende Einstellungen unberührt lassen. - Fehlendes Sticky Bit in Gemeinschaftsordnern: Ohne Sticky Bit kann in Verzeichnissen mit Schreibrechten jeder Benutzer fremde Dateien löschen.
- Ungeprüfte rekursive Änderungen: Rekursive Änderungen mit
chmod -Rsollten vorab mitls -loderfindkontrolliert werden. Bei symbolischen Links ändert chmod zudem nicht die Rechte des Links, sondern die der Zieldatei.
Häufige Fragen
Was bedeutet chmod 777?
chmod 777 verleiht dem Besitzer, der Gruppe und allen anderen Benutzern volle Lese-, Schreib- und Ausführungsrechte (rwxrwxrwx). Dies stellt ein erhebliches Sicherheitsrisiko dar und gilt als unsichere Praxis.
Für was steht chmod?
chmod steht für „change file mode bits“. Der Befehl stammt aus den Unix-Urzeiten der 1970er Jahre und ändert die Zugriffsrechte von Dateien und Ordnern auf POSIX-konformen Systemen.
Was bedeutet chmod 755?
chmod 755 entspricht den Rechten rwxr-xr-x. Der Besitzer erhält volle Zugriffsrechte (7), während Gruppe und Andere Dateien nur lesen und ausführen dürfen (5). Dies ist die Standardberechtigung für ausführbare Skripte und Verzeichnisse.
Wie mache ich eine Datei mit chmod ausführbar?
Mit chmod +x script.sh wird eine Datei für alle Benutzer ausführbar. Soll nur der Besitzer das Recht erhalten, lautet der Befehl chmod u+x datei.
Was ist der Unterschied zwischen symbolischer und numerischer Notation bei chmod?
Die numerische (oktale) Notation setzt Dateirechte über Ziffernkombinationen wie 755 absolut fest. Die symbolische Notation arbeitet relativ mit Operatoren wie +, - oder =, ohne andere Rechte zwingend zu verändern.
Was bedeuten die Sonderrechte SUID, SGID und Sticky Bit?
SUID lässt ein Programm mit den Rechten des Dateibesitzers laufen. SGID vererbt die Gruppenidentität eines Verzeichnisses an neu erstellte Dateien. Das Sticky Bit verhindert in Verzeichnissen wie /tmp das Löschen von Dateien durch Nicht-Eigentümer.





