Linux-Dateiberechtigungen mit dem Befehl 'chmod' meistern

Lerne chmod mit symbolischen und numerischen Modi, sicheren Standardeinstellungen, rekursiven Änderungen und speziellen Berechtigungsbits.

Linux-Dateiberechtigungen mit dem Befehl 'chmod' meistern

Linux-Dateiberechtigungen legen fest, wer eine Datei lesen, ändern oder ausführen darf. Wenn ein Skript nicht ausgeführt wird, ein Webserver eine Datei nicht lesen kann oder ein privater Schlüssel als zu offen abgelehnt wird, ist chmod oft Teil der Lösung.

Der Befehl chmod ändert Berechtigungsbits. Du kannst lesbare symbolische Modi wie u+x oder kompakte numerische Modi wie 755 verwenden.

Berechtigungszeichenfolgen lesen

Führe ls -l aus, um den Typ und die Berechtigungen einer Datei zu sehen:

ls -l deploy.sh

Beispielausgabe:

-rwxr-xr-- 1 app deploy 1200 May 23 10:00 deploy.sh

Das erste Zeichen ist der Dateityp. Eine reguläre Datei beginnt mit -, ein Verzeichnis mit d und ein symbolischer Link mit l.

Die nächsten neun Zeichen sind drei Berechtigungsgruppen:

  • Benutzer: der Dateibesitzer.
  • Gruppe: Mitglieder der Dateigruppe.
  • Andere: alle anderen.

Jede Gruppe kann haben:

  • r: Dateiinhalte lesen oder Verzeichnisnamen auflisten.
  • w: Eine Datei ändern oder Einträge in einem Verzeichnis erstellen/löschen/umbenennen.
  • x: Eine Datei ausführen oder ein Verzeichnis durchsuchen.

Die Ausführungsberechtigung für Verzeichnisse ist wichtig. Ohne x auf einem Verzeichnis kannst du es nicht betreten oder auf darin enthaltene Dateien namentlich zugreifen, selbst wenn du anderswo einige Metadaten auflisten kannst.

Symbolische Modi für kleine Änderungen verwenden

Die symbolische Syntax sieht so aus:

chmod [wer][operator][berechtigungen] pfad

wer kann u für Benutzer, g für Gruppe, o für andere oder a für alle sein. Operatoren sind + zum Hinzufügen, - zum Entfernen und = zum genauen Setzen.

Ein Skript für den Besitzer ausführbar machen:

chmod u+x deploy.sh

Der Gruppe erlauben, eine gemeinsame Datei zu bearbeiten:

chmod g+w shared_document.txt

Schreibzugriff für Gruppe und andere entfernen:

chmod go-w config.yml

Andere auf schreibgeschützt setzen, vorhandene Berechtigungen für andere ersetzen:

chmod o=r project_plan.txt

Symbolische Modi sind nützlich, weil sie nur die Bits ändern, die du benennst.

Numerische Modi für vollständige Berechtigungssätze verwenden

Numerische Modi setzen Benutzer-, Gruppen- und andere Berechtigungen in einem Befehl. Jede Berechtigung hat einen Wert:

  • Lesen: 4
  • Schreiben: 2
  • Ausführen: 1

Addiere die Werte für jede Gruppe:

Modus Bedeutung
7 rwx
6 rw-
5 r-x
4 r--
0 ---

Eine normale Textdatei auf Besitzer lesen/schreiben und alle anderen nur lesen setzen:

chmod 644 important_file.txt

Ein normales Verzeichnis so setzen, dass der Besitzer es verwalten kann und andere es betreten und lesen können:

chmod 755 public_assets

Einen privaten Schlüssel so sperren, dass nur der Besitzer ihn lesen und schreiben kann:

chmod 600 private_key.pem

Vermeide 777, es sei denn, du befindest dich in einer temporären Testumgebung und verstehst das Risiko:

chmod 777 scratch

777 erlaubt jedem lokalen Benutzer, den Pfad zu lesen, zu schreiben und auszuführen oder zu durchsuchen. Auf gemeinsam genutzten Systemen ist das selten akzeptabel.

Dateien und Verzeichnisse unterschiedlich behandeln

Dateien und Verzeichnisse benötigen normalerweise unterschiedliche Modi. Dateien verwenden oft 644; Verzeichnisse oft 755. Wenn du dies blind ausführst, machst du jede Datei ausführbar:

chmod -R 755 web_root/

Für ein Webverzeichnis ist ein sichereres Muster:

find web_root -type d -exec chmod 755 {} +
find web_root -type f -exec chmod 644 {} +

Dann füge Ausführungsberechtigung nur zu Skripten hinzu, die sie tatsächlich benötigen:

chmod 755 web_root/scripts/deploy.sh

Spezielle Berechtigungsbits vorsichtig verwenden

Numerische Modi können eine vierte führende Ziffer für spezielle Bits enthalten:

Wert Name Häufige Wirkung
4 SetUID Ein ausführbares Programm läuft mit der effektiven Benutzer-ID des Dateibesitzers.
2 SetGID Ein ausführbares Programm läuft mit der effektiven Gruppen-ID der Dateigruppe; bei Verzeichnissen erben neue Einträge die Gruppe des Verzeichnisses.
1 Sticky Bit In Verzeichnissen können Benutzer nur Dateien löschen, die ihnen gehören, dem Verzeichnisbesitzer gehören oder die root löschen kann.

Setze das SetGID-Bit auf einem gemeinsamen Projektverzeichnis, damit neue Dateien die Verzeichnisgruppe erben:

chmod 2770 shared_group_files

Setze das Sticky Bit auf einem gemeinsam beschreibbaren Verzeichnis:

chmod 1777 /srv/shared-upload

Das klassische Beispiel ist /tmp, das weltweit beschreibbar, aber durch das Sticky Bit geschützt ist.

Sei vorsichtig mit SetUID und SetGID bei ausführbaren Programmen. Sie können ein ernsthaftes Risiko der Rechteausweitung darstellen, wenn das Programm beschreibbar, schlecht entworfen ist oder unsichere Eingaben akzeptiert. Viele Unix-ähnliche Systeme ignorieren SetUID bei Skripten aus Sicherheitsgründen.

Das Ergebnis überprüfen

Nach dem Ändern der Berechtigungen überprüfe sie:

ls -ld web_root web_root/index.html

Verwende stat, wenn du den numerischen Modus möchtest:

stat -c '%a %n' web_root/index.html

Auf macOS ist das stat-Format anders:

stat -f '%Lp %N' web_root/index.html

Fazit

Verwende symbolisches chmod, wenn du eine Berechtigung hinzufügen oder entfernen möchtest. Verwende numerisches chmod, wenn du den vollständigen Modus genau setzen möchtest. Gehe mit rekursiven Änderungen vorsichtig um, behandle Dateien und Verzeichnisse getrennt und überprüfe mit ls -l oder stat, bevor du fortfährst.