
Linux chmod erklärt: Dateiberechtigungen ohne Kopfschmerzen
📷 Pixabay / PexelsLinux 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.
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
cdin 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:
| Berechtigungszeichenkette | Bedeutung |
|---|---|
-rw-r--r-- | Eigentümer kann lesen/schreiben. Gruppe und andere können nur lesen. |
-rwxr-xr-x | Eigentü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. |
-rwxrwxrwx | Voller 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:
| Wert | Berechtigung |
|---|---|
| 4 | Lesen (r) |
| 2 | Schreiben (w) |
| 1 | Ausführen (x) |
| 0 | Keine 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-- Gruppeo-- Anderea-- Alle (Eigentümer + Gruppe + Andere)
Operator:
+-- Berechtigung hinzufügen--- Berechtigung entfernen=-- Berechtigung genau setzen
Berechtigung:
r-- Lesenw-- Schreibenx-- 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
| Oktal | Zeichenkette | Typische Verwendung |
|---|---|---|
644 | -rw-r--r-- | Reguläre Dateien (HTML, CSS, Bilder) |
755 | -rwxr-xr-x | Skripte, 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-x | Gemeinsam genutzte Verzeichnisse in der Gruppe |
777 | -rwxrwxrwx | Im 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
| Berechtigung | Oktal | Symbol | Wirkung auf Datei | Wirkung auf Verzeichnis |
|---|---|---|---|---|
| Setuid | 4000 | u+s | Läuft als Dateieigentümer | Keine Standardwirkung |
| Setgid | 2000 | g+s | Läuft als Dateigruppe | Neue Dateien erben die Gruppe |
| Sticky Bit | 1000 | +t | Keine Standardwirkung | Nur 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:
| Befehl | Zweck | Beispiel |
|---|---|---|
chmod | Dateiberechtigungen ändern | chmod 755 script.sh |
chown | Dateieigentümer ändern (und optional Gruppe) | chown alice:devs file.txt |
chgrp | Dateigruppe ändern | chgrp 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.