Zum Inhalt springen
Techlogia — KI- und Web-Dienstleister Berlin

Linux-Dateirechte: chmod & chown üben

Dateirechte entscheiden, wer was darf – und sind eine der häufigsten Fehlerquellen auf Servern. Wer <code>chmod</code> und <code>chown</code> wirklich versteht, vermeidet sowohl „Permission denied“ als auch gefährlich offene Dateien. Hier übst du es konkret.

Lesen, Schreiben, Ausführen

Jede Datei hat drei Rechte-Gruppen: Besitzer, Gruppe, alle anderen – jeweils mit Lesen (r), Schreiben (w) und Ausführen (x). ls -l zeigt sie an. Das zu lesen ist der erste Schritt.

chmod – Rechte ändern

Mit chmod setzt du Rechte, entweder symbolisch (chmod u+x datei) oder numerisch (chmod 644 datei). Die Zahlen wirken kryptisch, folgen aber einer einfachen Logik, die du an Beispielen schnell verinnerlichst.

chown – Besitzer ändern

Mit chown überträgst du eine Datei an einen anderen Benutzer oder eine Gruppe. Auf Servern ist die richtige Kombination aus Besitzer und Rechten oft der Unterschied zwischen „funktioniert sicher“ und „offen für alle“.

Die drei Ziffern lesen lernen

chmod 640 sind drei Gruppen: Eigentümer, Gruppe, alle anderen. Jede Ziffer ist die Summe aus Lesen (4), Schreiben (2) und Ausführen (1). 6 heißt also lesen und schreiben, 4 nur lesen, 0 gar nichts. Wer die Zahlen einmal als Summe begriffen hat, muss sie nie wieder nachschlagen – und erkennt sofort, dass 777 „jeder darf alles“ bedeutet.

Bei Verzeichnissen bedeutet x etwas anderes

Auf einer Datei erlaubt das Ausführungsrecht, sie zu starten. Auf einem Verzeichnis erlaubt es, hineinzuwechseln und auf die enthaltenen Dateien zuzugreifen. Ein Ordner mit r, aber ohne x lässt dich die Namen sehen und sonst nichts – eine Unterscheidung, die in Prüfungen gern gefragt und im Betrieb gern übersehen wird.

umask: warum neue Dateien nie 777 sind

Wenn du eine Datei anlegst, bekommt sie nicht die vollen Rechte, sondern das, was die umask übrig lässt. Bei der üblichen 022 entstehen Dateien mit 644 und Verzeichnisse mit 755. Die Maske zieht ab, sie setzt nicht. Wer sich wundert, warum eine frisch erzeugte Datei nicht gruppenschreibbar ist, findet die Antwort hier und nicht in chmod.

Sonderbits: setuid, setgid und das Sticky Bit

Über die drei Ziffern hinaus gibt es eine vierte. setgid auf einem Verzeichnis sorgt dafür, dass neue Dateien darin die Gruppe des Ordners erben – der übliche Griff für gemeinsam genutzte Projektverzeichnisse. Das Sticky Bit auf /tmp erlaubt jedem das Schreiben, aber nur dem Eigentümer das Löschen. setuid auf ausführbaren Dateien ist mächtig und entsprechend gefährlich.

Was oft schiefgeht

chmod 777 ist die verbreitetste Fehlreaktion: Es beseitigt jede Fehlermeldung und macht die Datei für jeden Benutzer und jeden Prozess auf dem System beschreibbar. Der zweite Fehler ist chmod -R auf einem Verzeichnisbaum, das damit auch jede Textdatei ausführbar macht. Der dritte ist, die Rechte zu ändern, obwohl der Eigentümer das Problem war – ls -l zeigt beides nebeneinander, und meistens genügt ein chown.

Gruppen sind das Werkzeug fuer gemeinsame Arbeit

Rechte für einzelne Benutzer zu vergeben skaliert nicht. Der übliche Weg ist eine Gruppe je Aufgabe: Das Verzeichnis gehört der Gruppe, die Mitglieder werden mit usermod -aG gruppe benutzer aufgenommen, und das setgid-Bit sorgt dafür, dass neue Dateien die Gruppe erben. Wichtig ist das -a in usermod: Ohne dieses Zeichen ersetzt der Befehl alle bisherigen Gruppen des Benutzers, statt eine hinzuzufügen – ein Tippfehler mit unangenehmen Folgen, der sich erst beim nächsten Anmelden zeigt.

Befehle zum Ausprobieren

Rechte ansehen und verstehen

$ ls -l /etc/shadow$ stat -c '%a %U:%G %n' /etc/shadow$ id

stat zeigt die Rechte als Zahl statt als Buchstabenkette – bequemer, wenn du sie gleich mit chmod setzen willst. id sagt dir, in welchen Gruppen du selbst bist.

Rechte und Eigentümer setzen

$ sudo chown www-data:www-data /var/www/app$ sudo chmod 750 /var/www/app$ sudo chmod 640 /var/www/app/config.env

Der Dienst gehört dem Verzeichnis, nicht dein Benutzer. 750 lässt die Gruppe hineinsehen, alle anderen nicht; die Konfigurationsdatei mit den Zugangsdaten bekommt kein Ausführungsrecht.

Rekursiv, aber getrennt für Dateien und Ordner

$ find /var/www/app -type d -exec chmod 750 {} +$ find /var/www/app -type f -exec chmod 640 {} +

chmod -R 750 gäbe auch jeder Datei das Ausführungsrecht. Die Trennung nach Typ ist der Grund, warum diese zwei Zeilen in fast jedem Härtungs-Ablauf stehen.

umask und Sonderbits ansehen

$ umask$ touch neu.txt && ls -l neu.txt$ ls -ld /tmp$ sudo chmod g+s /srv/projekt

Das t in drwxrwxrwt bei /tmp ist das Sticky Bit, das s nach chmod g+s das setgid – beide stehen an der Stelle, an der sonst x steht.

Häufige Fehlermeldungen

-bash: ./start.sh: Permission denied
Ursache: Der Datei fehlt das Ausführungsrecht, oder sie liegt in einem Verzeichnis ohne x.
Lösung: chmod +x start.sh und mit ls -ld . prüfen, ob das Verzeichnis selbst betretbar ist.
chown: changing ownership of 'datei': Operation not permitted
Ursache: Den Eigentümer einer Datei darf nur root ändern – auch dann, wenn die Datei dir gehört.
Lösung: Mit sudo chown … arbeiten. Die Gruppe darfst du ohne sudo ändern, solange du Mitglied der Zielgruppe bist.
Permissions 0644 for 'id_ed25519' are too open.
Ursache: SSH weigert sich, einen privaten Schlüssel zu benutzen, den auch andere lesen dürfen – die Datei wäre auf einem geteilten System kompromittiert.
Lösung: chmod 600 ~/.ssh/id_ed25519. Der private Schlüssel gehört niemandem außer dir.
cp: cannot create regular file 'ziel/datei': Permission denied
Ursache: Nicht die Datei ist das Problem, sondern das ZIELVERZEICHNIS: Zum Anlegen brauchst du dort Schreib- UND Ausfuehrungsrecht.
Lösung: Mit ls -ld ziel die Rechte des Ordners ansehen – nicht die der Datei, die du kopieren willst.

In fünf Schritten

  1. 01Mit ls -l und stat -c '%a %U:%G %n' den Ist-Zustand einer Datei ablesen.
  2. 02Mit id klären, welcher Benutzer und welche Gruppe du überhaupt bist.
  3. 03Eigentümer setzen, bevor du Rechte setzt – chown vor chmod, sonst arbeitest du zweimal.
  4. 04Verzeichnisse auf 750, Dateien auf 640 setzen; getrennt über find … -type d und -type f.
  5. 05Gegenprobe aus der Sicht eines anderen Benutzers: sudo -u www-data cat datei muss gelingen oder scheitern wie beabsichtigt.

Was du übst

rwx, ls -lchmod (symbolisch & numerisch)chown Besitzer/Gruppe

Haben Sie ein Projekt?

Lassen Sie uns gemeinsam Ihre Idee in die Tat umsetzen. Wir beraten Sie gerne unverbindlich.

Kontakt aufnehmen

Wie gefällt dir diese Seite?