ToolPal
Sicherheitsschloss und Schild als Symbol für Linux-Dateiberechtigungen und Systemschutz

Linux chmod erklärt: Dateiberechtigungen ohne Kopfschmerzen

📷 Pixabay / Pexels

Linux chmod erklärt: Dateiberechtigungen ohne Kopfschmerzen

Oktalnotation (755, 644) und symbolischer Modus (u+x) endlich verständlich erklärt. Mit häufigen Berechtigungsmustern und Sicherheitshinweisen.

DVon Daniel Park22. März 202613 Min. Lesezeit

Einführung

Jede Datei und jedes Verzeichnis auf einem Linux-System verfügt über einen Satz Berechtigungen, der festlegt, wer sie lesen, schreiben oder ausführen darf. Das Verständnis dieser Berechtigungen ist grundlegend für die Arbeit mit Linux – ob Sie einen Webserver verwalten, Anwendungen bereitstellen oder einfach Dateien auf Ihrem Entwicklungsrechner organisieren.

Der Befehl chmod ist das primäre Werkzeug zur Änderung dieser Berechtigungen. Trotz seiner scheinbaren Einfachheit hat chmod genug Tiefe, dass selbst erfahrene Entwickler gelegentlich eine Referenz benötigen. Dieser Leitfaden behandelt alles Wissenswerte über Linux-Dateiberechtigungen und den chmod-Befehl – von grundlegenden Konzepten bis hin zu erweiterten Sonderberechtigungen.

Linux-Dateiberechtigungen verstehen

Linux-Dateiberechtigungen basieren auf drei Zugriffsarten und drei Benutzerkategorien.

Die drei Berechtigungstypen

  • Lesen (r): Den Inhalt einer Datei anzeigen oder den Inhalt eines Verzeichnisses auflisten.
  • Schreiben (w): Eine Datei ändern oder löschen, oder Dateien in einem Verzeichnis hinzufügen und entfernen.
  • Ausführen (x): Eine Datei als Programm oder Skript ausführen, oder mit cd in ein Verzeichnis wechseln.

Die drei Benutzerkategorien

  • Eigentümer (u): Der Benutzer, dem die Datei gehört. Standardmäßig ist das der Benutzer, der sie erstellt hat.
  • Gruppe (g): Die der Datei zugeordnete Gruppe. Alle Benutzer dieser Gruppe teilen sich die Gruppenberechtigungen.
  • Andere (o): Alle anderen Benutzer auf dem System, die weder Eigentümer sind noch zur Dateigruppe gehören.

Jede Datei auf einem Linux-System hat genau einen Eigentümer, gehört genau einer Gruppe an und hat einen definierten Berechtigungssatz für jede dieser drei Kategorien.

Berechtigungszeichenketten lesen

Wenn Sie ls -l in einem Terminal ausführen, sehen Sie eine Ausgabe wie diese:

ls -l
-rwxr-xr-- 1 alice developers 4096 Mar 22 10:30 deploy.sh
drwxr-x--- 2 alice developers 4096 Mar 22 10:30 config/

Die erste Spalte ist die Berechtigungszeichenkette. Sie ist zehn Zeichen lang und gliedert sich wie folgt:

d rwx r-x r--
|  |   |   |
|  |   |   +-- Berechtigungen für Andere (nur Lesen)
|  |   +------ Gruppenberechtigungen (Lesen + Ausführen)
|  +---------- Eigentümerberechtigungen (Lesen + Schreiben + Ausführen)
+------------- Dateityp (d = Verzeichnis, - = reguläre Datei, l = Symlink)

Jede Position ist entweder der Berechtigungsbuchstabe oder ein Bindestrich (-), der anzeigt, dass diese Berechtigung nicht gewährt wird. Hier einige Beispiele:

BerechtigungszeichenketteBedeutung
-rw-r--r--Eigentümer kann lesen/schreiben. Gruppe und andere können nur lesen.
-rwxr-xr-xEigentümer hat vollen Zugriff. Gruppe und andere können lesen und ausführen.
drwx------Verzeichnis. Nur der Eigentümer kann lesen, schreiben und hineingehen.
-rw-------Nur der Eigentümer kann lesen und schreiben. Kein Zugriff für andere.
-rwxrwxrwxVoller Zugriff für alle. Generell ein Sicherheitsrisiko.

Oktal-Notation (numerisch)

Die Oktal-Notation stellt Berechtigungen als dreistellige Zahl dar, wobei jede Ziffer dem Eigentümer, der Gruppe und anderen entspricht. Jede Ziffer ist die Summe der Berechtigungswerte:

WertBerechtigung
4Lesen (r)
2Schreiben (w)
1Ausführen (x)
0Keine Berechtigung

Sie addieren diese Werte für jede Benutzerkategorie. Zum Beispiel:

  • 7 = 4 + 2 + 1 = Lesen + Schreiben + Ausführen (rwx)
  • 6 = 4 + 2 = Lesen + Schreiben (rw-)
  • 5 = 4 + 1 = Lesen + Ausführen (r-x)
  • 4 = 4 = Nur Lesen (r--)
  • 0 = Keine Berechtigungen (---)

Wenn Sie also chmod 755 sehen, bedeutet das:

7 = rwx (Eigentümer: Lesen + Schreiben + Ausführen)
5 = r-x (Gruppe: Lesen + Ausführen)
5 = r-x (Andere: Lesen + Ausführen)

Hier eine Kurzübersicht aller möglichen Ziffernwerte:

0 = ---   (keine Berechtigungen)
1 = --x   (nur Ausführen)
2 = -w-   (nur Schreiben)
3 = -wx   (Schreiben + Ausführen)
4 = r--   (nur Lesen)
5 = r-x   (Lesen + Ausführen)
6 = rw-   (Lesen + Schreiben)
7 = rwx   (Lesen + Schreiben + Ausführen)

Wenn Sie schnell zwischen Berechtigungszeichenketten und Oktalwerten konvertieren möchten, nutzen Sie unseren chmod-Rechner für sofortige Ergebnisse.

Symbolische Notation

Die symbolische Notation verwendet Buchstaben und Operatoren zur Änderung von Berechtigungen. Sie ist oft intuitiver für gezielte Änderungen, da Sie nicht den gesamten Berechtigungssatz angeben müssen.

Syntax

chmod [wer][operator][berechtigung] datei

Wer:

  • u -- Eigentümer (user)
  • g -- Gruppe
  • o -- Andere
  • a -- Alle (Eigentümer + Gruppe + Andere)

Operator:

  • + -- Berechtigung hinzufügen
  • - -- Berechtigung entfernen
  • = -- Berechtigung genau setzen

Berechtigung:

  • r -- Lesen
  • w -- Schreiben
  • x -- Ausführen

Beispiele für symbolischen Modus

# Ausführungsrecht für den Eigentümer hinzufügen
chmod u+x script.sh

# Schreibrecht von Gruppe und anderen entfernen
chmod go-w config.yml

# Schreibschutz für alle setzen
chmod a=r readme.txt

# Lese- und Ausführungsrecht für die Gruppe hinzufügen
chmod g+rx shared-tool

# Alle Rechte für andere entfernen
chmod o= private.key

# Ausführen für alle hinzufügen, Schreiben für andere entfernen
chmod a+x,o-w deploy.sh

# Eigentümer auf rwx, Gruppe auf rx, andere auf nichts setzen
chmod u=rwx,g=rx,o= project-dir

Die symbolische Notation ist besonders nützlich, wenn Sie nur einen Aspekt der Berechtigungen ändern möchten, ohne die übrigen zu beeinflussen. Zum Beispiel fügt chmod u+x script.sh dem Eigentümer das Ausführungsrecht hinzu, ohne andere Berechtigungen zu ändern.

Häufige chmod-Muster

Bestimmte Berechtigungsmuster tauchen in der Linux-Systemverwaltung wiederholt auf. Hier sind die wichtigsten und wann sie verwendet werden.

644 – Standarddateien

chmod 644 index.html
# Eigentümer: Lesen + Schreiben | Gruppe: Lesen | Andere: Lesen

Dies ist die Standardeinstellung für die meisten regulären Dateien. Der Eigentümer kann die Datei bearbeiten, alle anderen können sie nur lesen. Verwenden Sie dies für HTML-Dateien, nicht sensible Konfigurationsdateien und allgemeine Dokumente.

755 – Ausführbare Dateien und Verzeichnisse

chmod 755 deploy.sh
chmod 755 /var/www/html
# Eigentümer: voller Zugriff | Gruppe: Lesen + Ausführen | Andere: Lesen + Ausführen

Die Standardberechtigung für Skripte, Binärdateien und Verzeichnisse, die zugänglich sein müssen. Der Eigentümer hat die volle Kontrolle, andere können lesen und ausführen (oder traversieren, bei Verzeichnissen), aber nicht ändern.

700 – Private Verzeichnisse

chmod 700 ~/.ssh
# Eigentümer: voller Zugriff | Gruppe: kein | Andere: kein

Nur der Eigentümer kann auf die Datei oder das Verzeichnis zugreifen. Unverzichtbar für sensible Verzeichnisse wie ~/.ssh oder private Konfigurationsverzeichnisse.

600 – Private Dateien

chmod 600 ~/.ssh/id_rsa
chmod 600 .env
# Eigentümer: Lesen + Schreiben | Gruppe: kein | Andere: kein

Nur der Eigentümer kann die Datei lesen und schreiben. Niemand sonst hat Zugriff. Erforderlich für SSH-Private-Keys, Umgebungsdateien mit Geheimnissen und Dateien mit Anmeldeinformationen.

444 – Schreibschutz für alle

chmod 444 LICENSE
# Eigentümer: Lesen | Gruppe: Lesen | Andere: Lesen

Niemand kann die Datei ändern, auch nicht der Eigentümer (ohne vorherige Berechtigungsänderung). Nützlich für Dateien, die nie versehentlich bearbeitet werden sollen, wie Lizenzdateien oder gesperrte Konfigurationen.

777 – Voller Zugriff für alle

chmod 777 /tmp/shared-workspace
# Eigentümer: voll | Gruppe: voll | Andere: voll

Jeder Benutzer kann lesen, schreiben und ausführen. Im Produktivbetrieb vermeiden. Es ist ein erhebliches Sicherheitsrisiko, da jeder Benutzer oder Prozess auf dem System die Datei ändern oder löschen kann. Nur in isolierten Entwicklungs- oder temporären Debugging-Szenarien verwenden.

Kurzübersichtstabelle

OktalZeichenketteTypische Verwendung
644-rw-r--r--Reguläre Dateien (HTML, CSS, Bilder)
755-rwxr-xr-xSkripte, Binärdateien, Web-Verzeichnisse
700-rwx------Private Verzeichnisse (~/.ssh)
600-rw-------Private Keys, .env-Dateien, Anmeldeinformationen
444-r--r--r--Schreibgeschützte Dateien, Lizenzen
664-rw-rw-r--Gemeinsam genutzte Dateien in der Gruppe
775-rwxrwxr-xGemeinsam genutzte Verzeichnisse in der Gruppe
777-rwxrwxrwxIm Produktivbetrieb vermeiden

chmod-Befehlssyntax und Optionen

Die vollständige Syntax von chmod lautet:

chmod [optionen] modus datei...

Wichtige Optionen

# Berechtigungen rekursiv auf Verzeichnisse und deren Inhalt anwenden
chmod -R 755 /var/www/html

# Ausführliche Ausgabe für jede geänderte Datei
chmod -v 644 *.html

# Ausgabe nur bei einer Änderung
chmod -c u+x scripts/*.sh

# Fehlermeldungen unterdrücken
chmod -f 600 missing-file

# Berechtigungen einer Referenzdatei kopieren
chmod --reference=source.conf target.conf

Praktische Beispiele

# Ein Skript ausführbar machen
chmod +x backup.sh

# SSH-Verzeichnis und Inhalt absichern
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys

# Webserver-Dateiberechtigungen setzen
chmod -R 644 /var/www/html/*.html
chmod -R 755 /var/www/html/cgi-bin/

# Eine Konfigurationsdatei einschränken
chmod 600 /etc/myapp/database.yml

# Alle Shell-Skripte in einem Verzeichnis ausführbar machen
chmod u+x scripts/*.sh

# Schreibzugriff auf eine Produktionskonfiguration entfernen
chmod a-w /etc/nginx/nginx.conf

Mit find für granulare Kontrolle kombinieren

Ein häufiges Muster ist das Setzen unterschiedlicher Berechtigungen für Dateien und Verzeichnisse innerhalb desselben Baums:

# Verzeichnisse auf 755 und Dateien auf 644 rekursiv setzen
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

# Nur Shell-Skripte ausführbar machen
find /opt/scripts -name "*.sh" -exec chmod u+x {} \;

# Weltlesbare Berechtigungen von allen Konfigurationsdateien entfernen
find /etc/myapp -type f -exec chmod o-r {} \;

Dieser Ansatz ist präziser als chmod -R, da er eine Unterscheidung zwischen Dateien und Verzeichnissen ermöglicht, die oft unterschiedliche Berechtigungssätze benötigen.

Sonderberechtigungen

Über die standardmäßigen Lese-, Schreib- und Ausführungsbits hinaus unterstützt Linux drei spezielle Berechtigungstypen. Diese werden als vierte Oktalziffer vor den üblichen drei dargestellt.

Setuid (4)

Wenn auf einer ausführbaren Datei gesetzt, wird diese mit den Berechtigungen des Dateieigentümers statt des ausführenden Benutzers ausgeführt.

chmod 4755 /usr/bin/special-tool
chmod u+s /usr/bin/special-tool

Das klassische Beispiel ist der Befehl passwd. Er muss /etc/shadow ändern, das root gehört. Das Setuid-Bit ermöglicht es jedem Benutzer, passwd mit root-Dateizugriff für diesen spezifischen Zweck auszuführen.

In der ls -l-Ausgabe zeigt eine Setuid-Datei ein s anstelle des Ausführungsbits des Eigentümers:

-rwsr-xr-x 1 root root 63960 Feb 10 12:00 /usr/bin/passwd

Setgid (2)

Wenn auf ein Verzeichnis angewendet, erben neue darin erstellte Dateien die Gruppe des Verzeichnisses statt der primären Gruppe des erstellenden Benutzers. Bei ausführbaren Dateien funktioniert es wie Setuid, aber für die Gruppenzugehörigkeit.

chmod 2775 /opt/team-project
chmod g+s /opt/team-project

Dies ist unverzichtbar für gemeinsam genutzte Projektverzeichnisse. Ohne Setgid würde jede Datei, die ein Teammitglied erstellt, zu seiner persönlichen Gruppe gehören, was die Zusammenarbeit erschwert.

drwxrwsr-x 2 root developers 4096 Mar 22 10:30 /opt/team-project

Beachten Sie das s an der Ausführungsposition der Gruppe.

Sticky Bit (1)

Wenn auf ein Verzeichnis gesetzt, kann nur der Eigentümer der Datei (oder root) Dateien darin löschen oder umbenennen, auch wenn andere Benutzer Schreibzugriff auf das Verzeichnis haben.

chmod 1777 /tmp
chmod +t /tmp

Das Verzeichnis /tmp ist das häufigste Beispiel. Jeder kann Dateien in /tmp erstellen, aber Benutzer können die Dateien anderer nicht löschen. In der ls -l-Ausgabe erscheint das Sticky Bit als t an der Ausführungsposition der anderen:

drwxrwxrwt 15 root root 4096 Mar 22 10:30 /tmp

Übersicht Sonderberechtigungen

BerechtigungOktalSymbolWirkung auf DateiWirkung auf Verzeichnis
Setuid4000u+sLäuft als DateieigentümerKeine Standardwirkung
Setgid2000g+sLäuft als DateigruppeNeue Dateien erben die Gruppe
Sticky Bit1000+tKeine StandardwirkungNur Eigentümer kann Dateien löschen

Best Practices für die Sicherheit

Das Befolgen einiger Grundsätze hält Ihre Systeme sicher und bleibt gleichzeitig praktisch für die tägliche Arbeit.

Prinzip der minimalen Rechtevergabe anwenden

Vergeben Sie nur die minimal erforderlichen Berechtigungen für eine Aufgabe. Wenn eine Datei nur gelesen werden muss, machen Sie sie nicht schreibbar. Wenn ein Skript nur vom Eigentümer ausgeführt werden muss, vergeben Sie kein Ausführungsrecht an die Gruppe oder andere.

# Gut: minimale Berechtigungen
chmod 600 .env
chmod 700 ~/.ssh

# Schlecht: übermäßig freizügig
chmod 777 .env
chmod 755 ~/.ssh

Niemals 777 im Produktivbetrieb verwenden

Es gibt fast nie einen legitimen Grund, chmod 777 auf einem Produktivsystem zu verwenden. Wenn etwas dies zu erfordern scheint, liegt das zugrunde liegende Problem normalerweise in einem falsch konfigurierten Benutzer, einer Gruppe oder Eigentümerschaft, nicht in einem Berechtigungsproblem. Verwenden Sie chown oder chgrp, um die Eigentümerschaft zu korrigieren, bevor Sie Berechtigungen lockern.

Sensible Dateien sofort absichern

SSH-Schlüssel, API-Token, Umgebungsdateien und Datenbankanmeldeinformationen sollten immer 600 oder höchstens 640 sein. Viele Tools, einschließlich OpenSSH, werden die Arbeit verweigern, wenn Schlüsseldateien übermäßig freizügige Einstellungen haben.

chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_ed25519
chmod 600 .env
chmod 600 /etc/myapp/secrets.yml

Gruppen für Zusammenarbeit nutzen

Anstatt Berechtigungen für "andere" zu erweitern, erstellen Sie eine dedizierte Gruppe, fügen die relevanten Benutzer hinzu und verwenden Gruppenberechtigungen. Kombinieren Sie dies mit dem Setgid-Bit auf gemeinsamen Verzeichnissen, damit neue Dateien automatisch die richtige Gruppe erben.

# Gemeinsames Verzeichnis mit korrekten Gruppenberechtigungen erstellen
sudo groupadd webteam
sudo usermod -aG webteam alice
sudo usermod -aG webteam bob
sudo mkdir /var/www/project
sudo chown root:webteam /var/www/project
sudo chmod 2775 /var/www/project

Berechtigungen regelmäßig überprüfen

Prüfen Sie auf Produktionsservern regelmäßig auf Dateien mit gefährlichen Berechtigungen:

# Alle weltschreibbaren Dateien finden
find / -type f -perm -o+w 2>/dev/null

# Alle Setuid-Dateien finden (mögliche Privilege-Escalation-Vektoren)
find / -type f -perm -4000 2>/dev/null

# Dateien ohne Eigentümer finden (verwaiste Dateien)
find / -nouser -o -nogroup 2>/dev/null

Sichere umask setzen

Die umask definiert die Standardberechtigungen für neu erstellte Dateien und Verzeichnisse. Eine umask von 022 resultiert in Dateien mit 644 und Verzeichnissen mit 755. Eine restriktivere umask von 027 ergibt Dateien mit 640 und Verzeichnissen mit 750, was "andere" standardmäßig vom Zugriff auf neue Dateien ausschließt.

# Aktuelle umask anzeigen
umask

# Restriktive umask für die Sitzung setzen
umask 027

# Dauerhaft machen durch Hinzufügen zu ~/.bashrc oder ~/.zshrc
echo "umask 027" >> ~/.bashrc

chmod vs. chown vs. chgrp

Diese drei Befehle sind verwandt, dienen aber unterschiedlichen Zwecken:

BefehlZweckBeispiel
chmodDateiberechtigungen ändernchmod 755 script.sh
chownDateieigentümer ändern (und optional Gruppe)chown alice:devs file.txt
chgrpDateigruppe ändernchgrp webteam index.html

Bei der Fehlersuche bei Zugriffsproblemen überprüfen Sie zunächst sowohl die Eigentümerschaft (ls -l) als auch die Berechtigungen. Oft ist die Lösung die Änderung der Eigentümerschaft mit chown statt die Lockerung der Berechtigungen mit chmod.

Den chmod-Rechner verwenden

Die manuelle Konvertierung zwischen symbolischer und Oktal-Notation ist nach etwas Übung unkompliziert, kann aber mühsam sein, wenn Sie einen neuen Server einrichten oder komplexe Berechtigungssätze überprüfen. Nutzen Sie unseren chmod-Rechner, um Berechtigungen visuell umzuschalten und sofort den entsprechenden Oktalwert, die symbolische Notation und den resultierenden chmod-Befehl zu sehen. Er ist besonders nützlich für die Überprüfung von Sonderberechtigungen wie Setuid, Setgid und Sticky Bit.

Fazit

Linux-Dateiberechtigungen sind eine der grundlegenden Säulen der Systemsicherheit. Der chmod-Befehl gibt Ihnen präzise Kontrolle darüber, wer auf jede Datei und jedes Verzeichnis auf Ihrem System zugreifen, diese ändern und ausführen kann. Durch das Verstehen von Oktal- und symbolischer Notation, die Anwendung des Prinzips der minimalen Rechtevergabe und den effektiven Einsatz von Gruppen können Sie eine sichere Umgebung aufrechterhalten, ohne die Benutzerfreundlichkeit zu beeinträchtigen.

Merken Sie sich die wichtigsten Regeln: Sensible Dateien auf 600 oder 700 beschränken, 755 für ausführbare Dateien und öffentliche Verzeichnisse verwenden, 777 im Produktivbetrieb vollständig vermeiden und Berechtigungen regelmäßig überprüfen. Mit diesen Praktiken werden Ihre Linux-Systeme sowohl funktionsfähig als auch sicher sein.

Häufig gestellte Fragen

D

Über den Autor

Daniel Park

Senior frontend engineer based in Seoul. Seven years of experience building web applications at Korean SaaS companies, with a focus on developer tooling, web performance, and privacy-first architecture. Open-source contributor to the JavaScript ecosystem and founder of ToolPal.

Mehr erfahren

Artikel teilen

XLinkedIn

Verwandte Beiträge