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 |
|
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