chmod — Dateirechte verwalten

Praxis-Guide zu chmod: Dateirechte in oktaler und symbolischer Notation setzen, rekursiv arbeiten und 777 als Sicherheitsrisiko vermeiden.

chmod (change mode) steuert, wer eine Datei oder ein Verzeichnis lesen, schreiben und ausführen darf – getrennt für Eigentümer (u), Gruppe (g) und alle anderen (o). Im Alltag brauchst du es, um ein Skript ausführbar zu machen (chmod +x), einen privaten SSH-Schlüssel mit 600 abzusichern oder Webserver-Dateien auf 644/755 zu setzen. Du kannst Rechte oktal (chmod 755) oder symbolisch (chmod u+x) angeben: Oktal setzt alle Bits absolut, symbolisch verändert gezielt einzelne. Wichtig fürs Sicherheitsbewusstsein: chmod 777 öffnet eine Datei für jeden zum Schreiben und Ausführen – das ist fast nie nötig und ein echtes Risiko. Bei chmod -R gilt zudem Vorsicht, weil Rechte rekursiv über ganze Bäume verteilt werden.

Oktalmodus (numerisch)

chmod 755 <file> — Eigentümer: rwx, Gruppe: r-x, Andere: r-x. Standard für ausführbare Dateien und Verzeichnisse.

chmod 755 script.sh

chmod 644 <file> — Eigentümer: rw-, Gruppe: r--, Andere: r--. Standard für reguläre Dateien.

chmod 644 index.html

chmod 600 <file> — Eigentümer: rw-, Gruppe: ---, Andere: ---. Private Dateien, nur der Eigentümer kann lesen/schreiben.

chmod 600 ~/.ssh/id_ed25519

chmod 700 <directory> — Eigentümer: rwx, Gruppe: ---, Andere: ---. Privates Verzeichnis, nur der Eigentümer hat Zugriff.

chmod 700 ~/.ssh

chmod 664 <file> — Eigentümer: rw-, Gruppe: rw-, Andere: r--. Gemeinsame Dateien, bei denen auch die Gruppe schreiben darf.

chmod 664 shared-doc.txt

chmod 775 <directory> — Eigentümer: rwx, Gruppe: rwx, Andere: r-x. Gemeinsames Verzeichnis, in dem die Gruppe schreiben darf.

chmod 775 /var/www/shared/

chmod 400 <file> — Eigentümer: r--, Gruppe: ---, Andere: ---. Nur lesbar für den Eigentümer, kein Zugriff für andere.

chmod 400 secret.key

chmod 444 <file> — Eigentümer: r--, Gruppe: r--, Andere: r--. Nur lesbar für alle.

chmod 444 LICENSE

chmod 000 <file> — Keine Rechte für niemanden. Nur root kann die Datei weiterhin erreichen.

chmod 000 locked-file.txt

Oktal-Referenz

0 = --- (keine Rechte) — Kein Lese-, Schreib- oder Ausführungsrecht.

chmod 700 dir/  # Others get 0 = ---

1 = --x (nur ausführen) — Nur Ausführungsrecht. Bei Verzeichnissen: durchlaufen, aber nicht auflisten.

chmod 711 cgi-bin/  # Others get 1 = --x

2 = -w- (nur schreiben) — Nur Schreibrecht. Allein selten genutzt.

chmod 722 dropbox/  # Others get 2 = -w-

4 = r-- (nur lesen) — Nur Leserecht.

chmod 744 script.sh  # Others get 4 = r--

5 = r-x (lesen + ausführen) — Lesen und ausführen. Standard für Andere bei ausführbaren Dateien und Verzeichnissen.

chmod 755 app.bin  # Others get 5 = r-x

6 = rw- (lesen + schreiben) — Lesen und schreiben. Standard für den Eigentümer bei regulären Dateien.

chmod 644 data.txt  # Owner gets 6 = rw-

7 = rwx (lesen + schreiben + ausführen) — Volle Rechte. Standard für den Eigentümer bei ausführbaren Dateien und Verzeichnissen.

chmod 755 deploy.sh  # Owner gets 7 = rwx

Symbolischer Modus

chmod u+x <file> — Fügt dem Eigentümer Ausführungsrecht hinzu (u = user/Eigentümer).

chmod u+x script.sh

chmod g+w <file> — Fügt der Gruppe Schreibrecht hinzu (g = group/Gruppe).

chmod g+w shared.txt

chmod o-rwx <file> — Entzieht allen anderen sämtliche Rechte (o = others/Andere).

chmod o-rwx private.conf

chmod a+r <file> — Fügt allen Leserecht hinzu (a = all: Eigentümer + Gruppe + Andere).

chmod a+r README.md

chmod u+rwx,g+rx,o+rx <file> — Setzt mehrere Rechte auf einmal über kommagetrennte Ausdrücke.

chmod u+rwx,g+rx,o+rx deploy.sh

chmod u=rwx,g=rx,o=rx <file> — Setzt exakte Rechte mit = (ersetzt Bestehendes). Entspricht 755.

chmod u=rwx,g=rx,o=rx script.sh

chmod u=rw,go=r <file> — Setzt den Eigentümer auf rw, Gruppe und Andere auf nur lesen. Entspricht 644.

chmod u=rw,go=r config.yml

chmod +x <file> — Fügt allen Ausführungsrecht hinzu (Kurzform, ohne 'a').

chmod +x install.sh

chmod -w <file> — Entzieht allen das Schreibrecht. Macht die Datei schreibgeschützt.

chmod -w important.conf

chmod u+s <file> — Setzt das setuid-Bit. Die Datei läuft mit den Rechten des Eigentümers, egal wer sie ausführt.

chmod u+s /usr/local/bin/my-tool

chmod g+s <directory> — Setzt das setgid-Bit. Neue Dateien im Verzeichnis erben dessen Gruppe.

chmod g+s /var/www/shared/

chmod +t <directory> — Setzt das Sticky-Bit. Nur die jeweiligen Eigentümer dürfen ihre Dateien in diesem Verzeichnis löschen.

chmod +t /tmp/

Rekursive & Verzeichnisoperationen

chmod -R 755 <directory> — Setzt Rechte rekursiv auf ein Verzeichnis und seinen gesamten Inhalt.

chmod -R 755 /var/www/html/

chmod -R u+rwX,go+rX,go-w <directory> — Setzt Rechte rekursiv. Das große X vergibt das Ausführungsrecht nur für Verzeichnisse und bereits ausführbare Dateien.

chmod -R u+rwX,go+rX,go-w /var/www/html/

find <directory> -type f -exec chmod 644 {} + — Setzt Rechte nur auf Dateien (nicht Verzeichnisse) innerhalb eines Baums.

find /var/www/html/ -type f -exec chmod 644 {} +

find <directory> -type d -exec chmod 755 {} + — Setzt Rechte nur auf Verzeichnisse (nicht Dateien) innerhalb eines Baums.

find /var/www/html/ -type d -exec chmod 755 {} +

find <directory> -type f -name '*.sh' -exec chmod +x {} + — Macht alle Shell-Skripte innerhalb eines Verzeichnisbaums ausführbar.

find ./scripts/ -type f -name '*.sh' -exec chmod +x {} +

Spezialbits (oktal)

chmod 4755 <file> — Setzt setuid (4) + Eigentümer rwx, Gruppe r-x, Andere r-x. Die Datei läuft mit den Rechten des Eigentümers.

chmod 4755 /usr/local/bin/my-tool

chmod 2755 <directory> — Setzt setgid (2) + Standard-Verzeichnisrechte. Neue Dateien erben die Gruppe.

chmod 2755 /var/www/shared/

chmod 1777 <directory> — Setzt das Sticky-Bit (1) + volle Rechte für alle. Nutzer dürfen nur eigene Dateien löschen.

chmod 1777 /tmp/

chmod 6755 <file> — Setzt setuid- (4) und setgid-Bit (2) zugleich. 4+2=6.

chmod 6755 /usr/local/bin/special-tool

Rechte anzeigen

ls -l <file> — Zeigt die Dateirechte in symbolischer Form (z. B. -rwxr-xr-x).

ls -l script.sh

ls -la <directory> — Zeigt die Rechte aller Dateien, auch der versteckten.

ls -la ~/.ssh/

stat <file> — Zeigt ausführlichen Dateistatus inklusive Rechten in oktaler und symbolischer Form.

stat script.sh

stat -c '%a %n' <file> — Zeigt nur die oktalen Rechte und den Dateinamen (Linux).

stat -c '%a %n' *.sh

stat -c '%A %a %n' <file> — Zeigt symbolische Rechte, oktale Rechte und den Dateinamen.

stat -c '%A %a %n' /var/www/html/*

namei -l <path> — Zeigt die Rechte jeder Komponente entlang eines Dateipfads. Hilfreich beim Debuggen von Zugriffsproblemen.

namei -l /var/www/html/index.php

Häufige Rechte-Muster

chmod 644 <file> — Standard für Web-Dateien (HTML, CSS, JS, Bilder). Eigentümer kann bearbeiten, alle können lesen.

chmod 644 style.css

chmod 755 <directory> — Standard für Web-Verzeichnisse. Eigentümer voller Zugriff, Andere dürfen auflisten und durchlaufen.

chmod 755 /var/www/html/

chmod 600 <file> — Private SSH-Schlüssel, Zugangsdaten, .env-Dateien. Nur der Eigentümer kann lesen/schreiben.

chmod 600 .env

chmod 700 <directory> — SSH-Verzeichnis, private Konfigurationsverzeichnisse. Nur der Eigentümer hat Zugriff.

chmod 700 ~/.gnupg

chmod 644 ~/.ssh/authorized_keys — authorized_keys muss vom Eigentümer und von sshd lesbar sein.

chmod 644 ~/.ssh/authorized_keys

chmod 600 ~/.ssh/config — SSH-Konfigurationsdatei. Muss privat sein, um korrekt zu funktionieren.

chmod 600 ~/.ssh/config

chmod 755 <script> — Ausführbare Skripte und Binärdateien. Eigentümer voller Zugriff, Andere dürfen lesen und ausführen.

chmod 755 deploy.sh

chmod 640 <file> — Log- und Konfigurationsdateien. Eigentümer liest/schreibt, Gruppe liest, Andere kein Zugriff.

chmod 640 /etc/app/database.conf

Optionen & Flags

chmod -v <mode> <file> — Ausführlicher Modus. Gibt für jede verarbeitete Datei eine Meldung aus.

chmod -v 644 *.html

chmod -c <mode> <file> — Wie ausführlich, meldet aber nur, wenn tatsächlich eine Änderung erfolgt.

chmod -c 755 scripts/*.sh

chmod --reference=<ref_file> <file> — Setzt die Rechte auf die einer Referenzdatei.

chmod --reference=template.conf new.conf

chmod -R --preserve-root <mode> <directory> — Verhindert versehentliche rekursive Änderungen am Wurzeldateisystem.

chmod -R --preserve-root 755 /var/www/

Eigentümer & umask

chown <user>:<group> <file> — Ändert Eigentümer und Gruppe einer Datei.

chown www-data:www-data index.php

chown -R <user>:<group> <directory> — Ändert Eigentümer und Gruppe rekursiv für einen Verzeichnisbaum.

chown -R www-data:www-data /var/www/html/

chgrp <group> <file> — Ändert nur die Gruppe einer Datei.

chgrp developers project.conf

umask — Zeigt die aktuelle Dateierstellungsmaske. Sie bestimmt die Standardrechte neuer Dateien.

umask

umask 022 — Setzt die umask so, dass neue Dateien 644 und neue Verzeichnisse 755 erhalten.

umask 022

umask 077 — Setzt eine restriktive umask. Neue Dateien erhalten 600, neue Verzeichnisse 700.

umask 077

Fazit

chmod ist das zentrale Werkzeug, um Zugriffsrechte präzise zu steuern – im Alltag reichen meist eine Handvoll Muster: 644 für Dateien, 755 für Verzeichnisse und ausführbare Skripte, 600/700 für private SSH- und Zugangsdaten. Greife zu symbolischer Notation (u+x, go-w), wenn du nur einzelne Bits ändern willst, und zu oktaler, wenn du den Zustand komplett festlegst. Aus Sicherheitssicht zwei Faustregeln: Vergib 777 praktisch nie – es erlaubt jedem Schreiben und Ausführen –, und sei bei chmod -R vorsichtig, weil es Rechte über ganze Bäume verteilt; nutze das große X oder getrennte find-Läufe, um Dateien und Verzeichnisse unterschiedlich zu behandeln. Rechte regeln nur den Zugriff – wem etwas gehört, bestimmst du mit chown.

Verwandte Kommandos

  • chown – Eigentümer und Gruppe einer Datei ändern
  • ls – Rechte mit ls -l anzeigen
  • stat – Rechte detailliert in oktaler und symbolischer Form anzeigen