Der ultimative Leitfaden zu Linux-Dateiberechtigungen: chmod, chown und mehr

Linux-Dateiberechtigungen legen fest, wer Dateien und Verzeichnisse lesen, ändern, ausführen oder darauf zugreifen darf. Sie betreffen die tägliche Serverarbeit, darunter Deployments, SSH-Schlüssel, Skripte, Uploads, Backups, Logs und freigegebene Ordner.

Diese Anleitung richtet sich an Entwickler, Administratoren, DevOps-Einsteiger, Website-Betreiber und alle, die über das Terminal mit Linux arbeiten. Sie benötigen lediglich Zugriff auf die Kommandozeile und grundlegende Werkzeuge wie ls, chmod, chown, chgrp und find.

Wenn Sie Websites, Anwendungen, Skripte oder Datenbanken auf einem Linux-VPS-Server verwalten, hilft Ihnen das Verständnis von Dateiberechtigungen, die eigentliche Ursache von Zugriffsproblemen zu finden, statt auf unsichere Notlösungen wie chmod 777 zurückzugreifen.

Das Berechtigungsmodell von Linux verstehen

Linux-Berechtigungen basieren auf drei Zugriffsebenen: Benutzer, Gruppe und andere. Der Benutzer ist der Eigentümer der Datei oder des Verzeichnisses. Die Gruppe ermöglicht es mehreren Konten, einen kontrollierten Zugriff zu teilen. „Andere“ umfasst alle übrigen Benutzer des Systems.

Dieses Modell ist einfach, aber für die reale Serverarbeit praktisch. Ein Deployment-Benutzer kann Anwendungsdateien verwalten, eine Webserver-Gruppe kann lesen, was sie benötigt, und fremden Benutzern kann das Ändern sensibler Daten verwehrt werden.

Linux verwendet außerdem drei grundlegende Berechtigungsarten: Lesen, Schreiben und Ausführen. Sie wirken unkompliziert, verhalten sich bei Dateien und Verzeichnissen jedoch unterschiedlich, und genau hier beginnen viele Berechtigungsfehler.

Benutzer, Gruppen und andere, Lesen, Schreiben, Ausführen: Was jede Berechtigung bewirkt

Jede Datei und jedes Verzeichnis hat einen Eigentümer und eine Gruppe. Bei einer Zugriffsanfrage prüft Linux die Berechtigungen in dieser Reihenfolge: zuerst den Eigentümer, dann die Gruppe, dann die anderen. Es wird nur die erste zutreffende Kategorie verwendet, die Berechtigungen werden also nicht kombiniert.

Jede Kategorie kann Lese-, Schreib- und Ausführungsrechte haben. Bei Dateien bedeutet Lesen das Anzeigen des Inhalts, Schreiben das Bearbeiten und Ausführen das Starten der Datei als Skript oder Programm. Bei Verzeichnissen bedeutet Lesen das Auflisten der Einträge, Schreiben das Anlegen oder Löschen von Einträgen und Ausführen das Betreten des Verzeichnisses.

Dieser letzte Punkt ist sehr wichtig. Ohne Ausführungsrecht für ein Verzeichnis sieht ein Benutzer zwar möglicherweise dessen Namen, kann aber trotzdem nicht auf die darin enthaltenen Dateien zugreifen. Deshalb sollte die Prüfung von Berechtigungen den vollständigen Pfad umfassen und nicht nur die Zieldatei.

Dateiberechtigungen in Linux prüfen

Der gebräuchlichste Befehl zum Prüfen von Linux-Dateiberechtigungen lautet:

ls -l

Eine typische Ausgabezeile kann so aussehen:

-rwxr-xr-- 1 deploy www-data 2048 May 8 app.sh

Das erste Zeichen zeigt den Dateityp an. Eine reguläre Datei beginnt mit -, ein Verzeichnis mit d. Die nächsten neun Zeichen zeigen die Berechtigungen für Eigentümer, Gruppe und andere. In diesem Beispiel gehört rwx zum Eigentümer, r-x zur Gruppe und r-- zu den anderen.

Der Eigentümer ist deploy, die Gruppe ist www-data. Das bedeutet, dass der Benutzer deploy die Eigentümerrechte erhält, während Benutzer der Gruppe www-data die Gruppenrechte erhalten. Alle anderen erhalten die Rechte für andere.

Die Ausgabe von ls -l lesen, oktale und symbolische Notation

Die Berechtigungszeichenfolge folgt immer derselben Struktur. Das erste Zeichen kennzeichnet den Objekttyp. Die nächsten drei Zeichen gehören zum Eigentümer. Die nächsten drei gehören zur Gruppe. Die letzten drei gehören zu den anderen.

Zum Beispiel:

drwxr-xr-x

Es handelt sich um ein Verzeichnis, da die Zeichenfolge mit d beginnt. Der Eigentümer kann es lesen, beschreiben und betreten. Die Gruppe kann es lesen und betreten. Andere können es ebenfalls lesen und betreten, darin aber keine Dateien anlegen oder löschen.

Bei einer regulären Datei sehen Sie möglicherweise:

-rw-r--r--

Das bedeutet, dass der Eigentümer lesen und schreiben kann, während Gruppe und andere nur lesen können. Dies ist ein gängiges Berechtigungsmuster für öffentliche Website-Dateien, statische Assets und Dokumente, die sichtbar, aber nicht für jeden bearbeitbar sein sollen.

Linux-Berechtigungen können in symbolischer oder oktaler Notation geschrieben werden. Die symbolische Notation verwendet Buchstaben wie r, w und x. Die oktale Notation verwendet Zahlen, wobei Lesen 4, Schreiben 2 und Ausführen 1 entspricht.

Die Zahlen werden für jede Identitätsebene addiert. Lesen und Schreiben ergeben 6. Lesen und Ausführen ergeben 5. Lesen, Schreiben und Ausführen ergeben 7. Keine Berechtigungen ergeben 0. Ein Wert wie 755 bedeutet, dass der Eigentümer 7, die Gruppe 5 und andere 5 erhalten. In symbolischer Form wird daraus rwxr-xr-x. Ein Wert wie 644 bedeutet, dass der Eigentümer lesen und schreiben kann, während Gruppe und andere nur lesen können.

Dateiberechtigungen mit chmod ändern

Der Befehl chmod ändert die Berechtigungen von Dateien und Verzeichnissen. Er unterstützt zwei Formate: den symbolischen und den numerischen Modus.

Der symbolische Modus eignet sich am besten für kleine Änderungen, etwa um einem Skript das Ausführungsrecht hinzuzufügen, ohne etwas anderes zu verändern. Der numerische Modus ist schneller, wenn Sie den genauen Berechtigungswert bereits kennen, zum Beispiel 755 für Verzeichnisse oder 644 für reguläre Dateien.

Gängige Berechtigungswerte erklärt: symbolischer Modus (chmod u+x, chmod go-w), numerischer Modus (chmod 755, chmod 644)

Der symbolische Modus verwendet Identitätsbuchstaben, Operatoren und Berechtigungsbuchstaben. Die Identitätsbuchstaben sind u für Benutzer (user), g für Gruppe (group), o für andere (others) und a für alle (all). Die Operatoren sind + zum Hinzufügen einer Berechtigung, - zum Entfernen einer Berechtigung und = zum exakten Festlegen von Berechtigungen.

Zum Beispiel:

chmod u+x script.sh

Damit wird dem Eigentümer das Ausführungsrecht hinzugefügt. Dies wird häufig verwendet, wenn ein Shell-Skript zwar existiert, aber nicht direkt ausgeführt werden kann.

Ein weiterer nützlicher Befehl ist:

chmod go-w file.txt

Damit wird der Gruppe und den anderen das Schreibrecht entzogen. Das ist nützlich, wenn eine Datei lesbar bleiben, aber nur von ihrem Eigentümer bearbeitet werden soll.

Der numerische Modus legt den vollständigen Berechtigungswert mit einem einzigen Befehl fest. Zum Beispiel:

chmod 755 script.sh

Damit kann der Eigentümer die Datei lesen, schreiben und ausführen, während Gruppe und andere sie lesen und ausführen können.

Ein weiterer gängiger Befehl ist:

chmod 644 index.html

Damit kann der Eigentümer die Datei bearbeiten, während Gruppe und andere sie nur lesen können. Dies ist eine gängige Einstellung für Website-Dateien.

Berechtigungswert

Typische Verwendung

Bedeutung

Sicherheitshinweis

755

Verzeichnisse und ausführbare Skripte

Der Eigentümer kann lesen, schreiben und ausführen. Gruppe und andere können lesen und ausführen

Gut für Verzeichnisse, die zugänglich, aber nicht für jeden beschreibbar sein müssen

644

Reguläre Website-Dateien, Dokumente, öffentlich lesbare Dateien

Der Eigentümer kann lesen und schreiben. Gruppe und andere können nur lesen

Guter Standard für viele Web-Dateien und statische Assets

777

Für Produktivsysteme fast nie geeignet

Jeder kann lesen, schreiben und ausführen

Gefährlich, da jeder Benutzer und jeder Prozess das Element ändern kann

Vor dem Wert 777 muss ausdrücklich gewarnt werden. Er gewährt allen Benutzern des Systems vollständigen Zugriff. Auf einem öffentlichen Server, in einer gemeinsam genutzten Umgebung oder auf einem Rocky Linux VPS kann dies dazu führen, dass anfällige Skripte, kompromittierte Benutzer oder bösartige Prozesse Dateien ändern, die geschützt sein sollten. In den meisten Fällen löst chmod 777 das eigentliche Problem nicht. Es verdeckt nur ein tiefer liegendes Problem mit Eigentümerschaft, Gruppenmitgliedschaft, Dienstbenutzern oder der Anwendungskonfiguration.

Dateieigentümer mit chown und chgrp ändern

Berechtigungen legen fest, was Eigentümer, Gruppe und andere tun dürfen. Die Eigentümerschaft legt fest, wer Eigentümer und Gruppe tatsächlich sind. Deshalb lösen chmod und chown unterschiedliche Probleme.

Die grundlegende Syntax zum Ändern des Eigentümers lautet:

chown user file

Um Eigentümer und Gruppe gleichzeitig zu ändern, verwenden Sie:

chown user:group file

Um nur die Gruppe zu ändern, verwenden Sie:

chown :group file

Alternativ können Sie nur die Gruppe auch mit folgendem Befehl ändern:

chgrp group file

Zum Beispiel:

chown deploy:www-data /var/www/example.com

Damit wird deploy zum Eigentümer und www-data zur Gruppe. In einem Webprojekt kann so der Deployment-Benutzer die Dateien verwalten, während der Webserver einen kontrollierten Gruppenzugriff erhält.

Rekursive Änderungen der Eigentümerschaft sind möglich mit:

chown -R user:group directory

Rekursion sollte mit Vorsicht eingesetzt werden, da sie die Eigentümerschaft jedes Elements im Zielverzeichnis ändert. Bevor Sie rekursive Änderungen der Eigentümerschaft ausführen, bestätigen Sie den Pfad mit pwd, prüfen Sie das Ziel mit ls und stellen Sie sicher, dass Sie die Änderungen nicht versehentlich auf ein umfangreiches Systemverzeichnis anwenden.

Der praktische Unterschied ist einfach. Verwenden Sie chmod, wenn die Datei dem richtigen Benutzer gehört, die Zugriffsebene aber falsch ist. Verwenden Sie chown oder chgrp, wenn die Datei dem falschen Benutzer oder der falschen Gruppe gehört.

Rekursive Änderungen von Berechtigungen

Rekursive Berechtigungsänderungen wenden eine Regel auf einen gesamten Verzeichnisbaum an. Sie sind bei Deployments, Migrationen, Backups und Aufräumarbeiten nützlich, gehören aber auch zu den schnellsten Wegen, Berechtigungsprobleme zu verursachen.

Ein riskanter Befehl sieht so aus:

chmod -R 755 /var/www/example.com

Damit wird 755 auf jede Datei und jedes Verzeichnis angewendet. Verzeichnisse benötigen oft das Ausführungsrecht, da Benutzer und Dienste sie betreten müssen, gewöhnliche Dateien benötigen es in der Regel jedoch nicht. Wenn Sie denselben Wert auf alles anwenden, können reguläre Dateien ohne Grund ausführbar werden.

Ein sichererer Ansatz ist, find zu verwenden und getrennte Berechtigungen für Verzeichnisse und Dateien anzuwenden:

find /var/www/example.com -type d -exec chmod 755 {} \;

find /var/www/example.com -type f -exec chmod 644 {} \;

Dieses Muster ist bei Webprojekten verbreitet. Verzeichnisse bleiben zugänglich, reguläre Dateien bleiben lesbar, und nur der Eigentümer kann Inhalte ändern. Wenn Anwendungen auf BlueVPS-Servern laufen, erleichtert diese vorhersehbare Struktur auch die Fehlersuche, da für Dateien und Verzeichnisse aus einem klaren Grund unterschiedliche Regeln gelten.

Rekursive Befehle sollten vor der Ausführung immer überprüft werden. Ein kleiner Tippfehler in einem Pfad kann Tausende von Dateien verändern. Auf Produktivsystemen ist es besser, das Ziel vor dem Anwenden der Änderungen mit find path -type f | head oder find path -type d | head zu testen.

Spezielle Berechtigungen: SUID, SGID und Sticky Bit

Linux unterstützt außerdem spezielle Berechtigungsbits, die das normale Zugriffsverhalten verändern. Sie sind in bestimmten Fällen nützlich, sollten aber mit Bedacht eingesetzt werden, insbesondere auf Produktivsystemen.

SUID lässt eine ausführbare Datei mit den Rechten des Dateieigentümers laufen. Das kann sehr mächtig sein, da das Programm möglicherweise Aktionen ausführt, die der aktuelle Benutzer normalerweise nicht ausführen darf. SUID sollte daher nur verwendet werden, wenn es einen klaren Grund dafür gibt.

SGID funktioniert bei Dateien und Verzeichnissen. Bei Dateien wird eine ausführbare Datei mit den Rechten der Dateigruppe ausgeführt. Bei Verzeichnissen erben neue Dateien die Gruppe des Verzeichnisses, was für gemeinsam genutzte Projektordner hilfreich ist.

Das Sticky Bit wird häufig für gemeinsam genutzte, beschreibbare Verzeichnisse wie /tmp verwendet. Es erlaubt Benutzern, Dateien anzulegen, verhindert aber, dass sie Dateien löschen, die anderen gehören.

Typische Beispiele sind:

chmod u+s file

chmod g+s directory

chmod +t directory

Spezielle Berechtigungen sind für die meisten Website-Dateien keine alltäglichen Einstellungen. Sie werden am besten eingesetzt, wenn eine bestimmte Anforderung an die Zugriffskontrolle besteht, insbesondere auf Produktivsystemen.

Fehlerbehebung bei Berechtigungsfehlern

Berechtigungsfehler werden nicht immer durch die Zieldatei verursacht. Eigentümerschaft, übergeordnete Verzeichnisse, Dienstbenutzer, Regeln für SSH-Schlüssel, Mount-Optionen des Dateisystems sowie Sicherheitssysteme wie SELinux oder AppArmor können beteiligt sein.

Eine gute Fehlersuche beginnt mit dem aktiven Benutzer, prüft dann die Zieldatei und anschließend jedes übergeordnete Verzeichnis im Pfad. Das ist wichtig, weil eine Datei korrekte Berechtigungen haben kann, während ein übergeordnetes Verzeichnis den Zugriff dennoch blockiert.

Fehler oder Symptom

Wahrscheinliche Ursache

Praktische Lösung

Permission denied

Dem aktiven Benutzer fehlt das erforderliche Lese-, Schreib- oder Ausführungsrecht

Prüfen Sie whoami, führen Sie ls -l aus und passen Sie dann den kleinsten notwendigen Berechtigungs- oder Eigentümerwert an

Skript lässt sich nicht ausführen

Der Datei fehlt das Ausführungsrecht

Führen Sie chmod u+x script.sh aus und starten Sie das Skript dann mit ./script.sh

Verzeichnis lässt sich nicht betreten

Dem Verzeichnis fehlt das Ausführungsrecht

Fügen Sie dem richtigen Benutzer oder der richtigen Gruppe das Ausführungsrecht hinzu

403 Forbidden im Webserver

Der Webserver-Benutzer kann nicht auf Dateien oder übergeordnete Verzeichnisse zugreifen

Prüfen Sie Eigentümerschaft, Gruppenzugriff und Verzeichnisberechtigungen entlang des gesamten Pfads

Privater SSH-Schlüssel wird abgelehnt

Die Berechtigungen des privaten Schlüssels sind zu offen

Führen Sie chmod 600 ~/.ssh/id_rsa aus und prüfen Sie die Eigentümerschaft des Verzeichnisses .ssh

Anwendung kann keine Dateien hochladen

Dem Dienstbenutzer fehlt das Schreibrecht für das Upload-Verzeichnis

Ändern Sie Eigentümer oder Gruppe des Upload-Verzeichnisses und gewähren Sie Schreibrechte nur dort, wo sie benötigt werden

chmod-Änderungen helfen nicht

Falscher Eigentümer, Problem mit einem übergeordneten Verzeichnis, SELinux, AppArmor oder Mount-Einschränkungen

Verwenden Sie namei -l path, prüfen Sie den Dienstbenutzer und kontrollieren Sie dann die Sicherheitsrichtlinie, falls aktiviert


Auf einem VPS in den USA erfolgt diese Art der Fehlersuche in der Regel aus der Ferne über SSH, daher spart eine sorgfältige Reihenfolge Zeit. Bestätigen Sie den Benutzer, prüfen Sie die Zieldatei, kontrollieren Sie die übergeordneten Verzeichnisse, überprüfen Sie die Eigentümerschaft und nehmen Sie dann die kleinstmögliche sichere Änderung vor.

Kurzreferenz: chmod-Spickzettel

Nutzen Sie diese Kurzreferenz, wenn Sie schnell einen Befehl für alltägliche Aufgaben rund um Linux-Berechtigungen nachschlagen möchten, von der Prüfung der Zugriffsrechte über die Korrektur der Eigentümerschaft bis zum Setzen sicherer Standardwerte für Dateien und Verzeichnisse.

Aufgabe

Befehl

Dateiberechtigungen anzeigen

ls -l file

Berechtigungen entlang eines vollständigen Pfads anzeigen

namei -l /path/to/file

Skript für den Eigentümer ausführbar machen

chmod u+x script.sh

Schreibrecht für Gruppe und andere entfernen

chmod go-w file

Standard-Dateiberechtigungen setzen

chmod 644 file

Standard-Verzeichnisberechtigungen setzen

chmod 755 directory

Privaten SSH-Schlüssel absichern

chmod 600 ~/.ssh/id_rsa

Dateieigentümer ändern

chown user file

Eigentümer und Gruppe ändern

chown user:group file

Nur die Gruppe ändern

chgrp group file

755 nur auf Verzeichnisse anwenden

find path -type d -exec chmod 755 {} \;

644 nur auf Dateien anwenden

find path -type f -exec chmod 644 {} \;

Sticky Bit für ein gemeinsames Verzeichnis setzen

chmod +t directory

SGID für ein gemeinsames Projektverzeichnis setzen

chmod g+s directory

 

Blog

FAQ