Mit dem Befehl chmod PARAMETER DATEI/ORDNER werden Zugriffsberechtigungen auf Dateien und Ordner gesetzt. Zugriffsberechtigungen schliessen das Ausführen einer Datei (Programm/App) mit ein.

Es gibt unterschiedliche Wege, wie diese Berechtigungen entweder gesetzt, entfernt oder manipuliert (geändert) werden können.

Außerdem gibt es noch ein paar Sonderberechtigungen.

Genereller Aufbau

Generell kann chmod mit Zahlen oder mit Buchstaben benutzt werden. Im Alltag werden bei den Zahlen nur 3 Stellen benutzt und bei den Buchstaben nur ugoa. Bei den Zahlen ist aber die Angabe von 4 Stellen möglich, wenn eine entsprechende Sonerberechtigung benötigt wird.

Aber es gibt noch weitere Sonderberechtigungen, die mit einer zusätzlichen Stelle angegeben wird.

Bei Zahlen - numerisch

chmod  755 datei
       │││
       ││└── Andere-Rechte
       │└── Gruppen-Rechte
       └── Besitzer-Rechte

Sonderrechtigungen

chmod  4755 datei
       ││││
       │││└── Andere-Rechte
       ││└── Gruppen-Rechte
       │└── Besitzer-Rechte
       └── Sonerberechtigung (SUID/SGID/Sticky)

Mehr Details in den entsprechenden Kapiteln zu Sonderberechtigungen

Bei Buchstaben - symbolisch

chmod  rwxr-xr-x datei
       │││││││││
       ││││││││└── Andere: Ausführen (x)
       │││││││└── Andere: Schreiben (w)
       ││││││└── Andere: Lesen (r)
       │││││└── Gruppe: Ausführen (x)
       ││││└── Gruppe: Schreiben (w)
       │││└── Gruppe: Lesen (r)
       ││└── Besitzer: Ausführen (x)
       │└── Besitzer: Schreiben (w)
       └── Besitzer: Lesen (r)

Sonderrechtigungen

Dateien
chmod u=rwxs,g=rx,o=rx,t datei
       │ │    │     │    │ │
       │ │    │     │    │ └── Sticky Bit (nur auf Ordnern sinnvoll, hier auf Datei ignoriert)
       │ │    │     │    └── Operator (=) für Andere (o) - setzt genau diese Rechte
       │ │    │     └── Rechte für Andere (o): r-x (Lesen + Ausführen)
       │ │    └── Operator (=) für Gruppe (g) - setzt genau diese Rechte
       │ └── Rechte für Gruppe (g): r-x (Lesen + Ausführen)
       └── Operator (=) für Besitzer (u) - setzt genau diese Rechte
           └── Rechte für Besitzer (u): rwx + s (SUID)
Ordner
chmod u=rwxs,g=rwxs,o=rwxt ordner/
       │ │    │ │     │ │    │
       │ │    │ │     │ │    └── Sticky Bit (t) - nur Eigentümer darf löschen
       │ │    │ │     │ └── Rechte für Andere: rwx + t (Sticky Bit)
       │ │    │ │     └── Operator (=) für Andere (o)
       │ │    │ └── SGID (s) - neue Dateien erben Ordnergruppe
       │ │    └── Rechte für Gruppe: rwx + s (SGID)
       │ └── SUID (s) - läuft mit Besitzer-Rechten
       └── Rechte für Besitzer: rwx + s (SUID)

Mehr Details in den entsprechenden Kapiteln zu Sonderberechtigungen

Ordner vs Datei

  • Bei Dateien bedeutet x (ausführen): Die Datei als Programm starten.
  • Bei Ordnern bedeutet x (ausführen): In den Ordner hineingehen (cd).

Ein Ordner mit 755 ist also für alle lesbar und betretbar, aber nur der Besitzer darf darin löschen/umbenennen/erstellen.

Rekursiv - in alle Unterordner

# Definition - mehr mit dem Befehl `man chmod`
-R, --recursive  
       Dateien und Verzeichnisse rekursiv ändern
       
# Beispiel
chmod -R 755 ordner

Mit Zahlen - setzen - Numerische Schreibweise

# Beispiele

chmod 755 datei
chmod 0755 datei
chmod 600 datei
chmod 777 Ordner

Jede Zahl ist eine Kombination aus den drei Grundrechten lesen|schreiben|ausführen

  • rwx für alle Rechte
  • --- gar keine Rechte
  • rwxr-xr-- Rechte für: User rwx Gruppe r-x Andere r-- oder 754
  • rwxr-xr-x 755 oder 0755

Du addierst sie einfach:

ZahlBedeutungRechte
0keine Rechte---
1nur ausführen--x
2nur schreiben-w-
3schreiben + ausführen-wx
4nur lesenr--
5lesen + ausführenr-x
6lesen + schreibenrw-
7lesen + schreiben + ausführenrwx
  • x (execute) = 1
  • w (write) = 2
  • r (read) = 4

Die Zahl ist einfach die Summe. Also 1+2+4 = 7 für volle Rechte. Von der kleinsten Zahl anfangen zu zählen!

Sonderberechtigungen mit Zahlen

  • 0 Keine Sonderberechtigung
  • 1 Sticky Bit
  • 2 SGID
  • 3 SGID + Sticky Bit
  • 4 SUID
  • 5 SUID + Sticky Bit
  • 6 SUID + SGID
  • 7 SUID + SGID + Sticky Bit

Mit Buchstaben - manipulieren - symbolische Schreibweise

Im Gegensatz zur Nutzung von Zahlen, hast du bei der Nutzung von Buchstaben die Möglichkeit die Rechte nicht nur zu setzen, sondern auch einzeln wegzunehmen oder einzeln hinzuzufügen.

# Definition
chmod PERSONEN/GRUPPEN   OPERATOREN    BERECHTIGUNGEN

# Beispiele

chmod u+w
chmod ug+rw
chmod u=rwx,g+rx,o-w
chmod a+r

Personen & Gruppen

  • u (user) - Besitzer
  • g (group) - Gruppe
  • o (others) - Andere
  • a (all) - Alle zusammen. Abkürzung für ugo

Berechtigungen

  • r Lesen
  • w Schreiben
  • x Ausführen

Operatoren - setzen/entfernen/hinzufügen

Zusätzlich zu den Buchstaben verwendest du diese Operatoren , um

  • + gezielt Rechte hinzuzufügen
  • - zu entfernen
  • = genau zu setzen

Beispiele

  • chmod u+w datei User darf schreiben
  • chmod ugo+w datei Setzt Schreibrecht für User,Gruppe,Andere
  • chmod u-w datei User darf nicht mehr schreiben
  • chmod a=r datei Alle dürfen lesen
  • chmod u=rwx,g+w,o-r datei setzt für User alle Rechte, Gruppe bekommt zusätzlich Schreibrechte, allen Anderen wird das Leserecht entzogen

Vorteil der Buchstaben & Operatoren

Der Vorteil dieser Methode ist, dass die aktuellen Berechtigungen nicht kennen musst. Du kannst Berechtigungen addieren, subtrahieren oder eben auch setzen.

Vergleich der Methoden

NumerischSymbolischBedeutung
chmod 755chmod u=rwx,go=rxStandard für Ordner/Programme
chmod 644chmod u=rw,go=rStandard für Dateien
chmod 700chmod u=rwx,go=Nur Besitzer
chmod u+x(nur symbolisch)Ausführrecht für Besitzer hinzufügen
chmod -R g+w(nur symbolisch)Schreibrecht für Gruppe rekursiv

Sonderberechtigungen - Sticky Bit | SGID | SUID

Sticky Bit - 1 - flexible Ordnerberechtigungen

Wichtig: Wenn die anderen Rechte ugo nicht bekannt sind, oder man sie nicht nochmal explizit setzen will, dann kann das Sticky Bit (und auch die anderen Sonderberechtigungen) nur mit der symbolischen Schreibweise, also mit den Buchstaben hinzugefügt oder entfernt werden.

# Übersicht

-drwxrwxrwt  ordner/
 │        │
 │        └── t = Sticky Bit ist gesetzt (für Andere)
 └── d = Ordner (Verzeichnis)
  • Das Sticky Bit ist ein spezielles Berechtigungsattribut für Ordner in Linux.
  • Sein Zweck: Schützt Dateien vor versehentlichem oder böswilligem Löschen durch andere Benutzer.

Wer darf: lesen/ändern/löschen?

  • Nur der Besitzer der Datei,
  • der Besitzer des Ordners
  • oder root darf eine Datei in diesem Ordner löschen oder umbenennen

… auch wenn andere Benutzer Schreibrechte für den Ordner haben.

Klassisch wird das beim /tmp/ Ordner gesetzt. Mit ls -ld /tmp/ bekommst du drwxrwxrwt das Sticky Bit angezeigt

Sticky Bit setzen/löschen

# Sticky Bit hinzufügen
chmod +t ordner/  

# Sticky Bit entfernen
chmod -t ordner/ 

# Numerisch setzen (1 = Sticky Bit, 777 = volle Rechte)
chmod 1777 ordner/  

Das Sticky Bit wird einfach zusätzlich zu den normalen Rechten vergeben. Jede Rechtekombination ist auch hier möglich.

SGID (Set Group ID) - 2 - Gruppenrechte

Neue Dateien erstellen

Neu erstellte Dateien erben die Gruppe des Ordners. Nicht die des Benutzers!

# Beispiel: 
# Aktueller Benutzer hans mit der Gruppe team1 = hans:team1 
# Der Ordner ordner/ gehört der Benutzerin sarah und der Gruppe gruppe = sarah:gruppe 
# sarah fügt dem Ordner das SGID +s hinzu

# Zustand vorher
-drwxrwxr-x  sarah:gruppe  ordner/

# Befehl der nur
chmod g+s ordner/

# numerisch - ABER es müssen alle bestehenden Berechtigungen mitgegeben werden !!
chmod 2775 ordner/

# Zustand nachher
-drwxrwsr-x  sarah:gruppe  ordner/

# eine neue Datei in ordner/ als hans:team1 anlegen
touch neueDatei.txt

# Besitzverhältnisse mit der GRUPPE von sarah !
-rw-rw----    hans       gruppe     ordner/neueDatei.txt
              │          │
              │          └── Gruppe = gruppe (geerbt durch SGID)
              └── Besitzer = hans (der erstellende Benutzer)

Programme

Ausführbare Programme mit SGID oder die in Ordnern mit gesetztem SGID liegen werden mit den GRUPPEN-Berechtigung ausgeführt.

# Beispielaufbau wie oben.
# hans startet ein Programm im Verzeichnis von sarah

# Der Ordner "ordner/" hat dieses GRUPPEN-Berechtigungen
-drwxrwsr-x  sarah:gruppe  ordner/

# oder das Programm "AusführbareDatei" hat diese GRUPPEN-Berechtigung
-rwxrwsr-x sarah:gruppe AusführbareDatei

# In beiden Fällen wird die Datei 
# mit den Zugriffs-Berechtigungen der GRUPPE ausgeführt
# nicht mit den Berechtigungen und Zugriffsrechten der Gruppe team1 von hans

SUID (Set User ID) - 4 - Programme mit Besitzerrechten

Ausführebare Programme mit dem SUID, werden mit den Berechtigungen des Besitzers ausgeführt. NICHT mit den Berechtigungen des aktuellen Benutzers. Beispiel: passwd

# hans startet ein Programm im Verzeichnis von sarah
# Das Programm "ausfuehrbare_datei" hat diese BESITZER-Berechtigung

# Zustand vor der Änderung
-rwxr-xr-x  sarah:gruppe  AusführbareDatei

# Befehl zum Setzen der SUID
chmod u+s AusführbareDatei

# Zustand nach dem Befehl
-rwsr-xr-x  sarah:gruppe  AusführbareDatei

# Wenn hans die AusführbareDatei startet
# dann wird die Datei mit den Zugriffs-Berechtigungen des BESITZERS sarah ausgeführt
# NICHT mit den Berechtigungen und Zugriffsrechten des Benutzers hans

Wichtige Sicherheitshinweise:

  • SUID und SGID sind mächtig und gefährlich - sie können Sicherheitslücken öffnen.
  • Klassiker: /usr/bin/passwd hat SUID (weil es /etc/shadow schreiben darf).
  • Sticky Bit ist ungefährlich und sehr nützlich (wie bei /tmp/).

Befehle - Dateien und Ordner getrennt behandeln

Numerisch

# Nur Ordner auf 755 setzen
find /pfad/zu/ordner -type d -exec chmod 755 {} \;

# Nur Dateien auf 644 setzen
find /pfad/zu/ordner -type f -exec chmod 644 {} \;

Symbolisch

# Besitzer und Gruppe Lese-Recht hinzufügen (rekursiv)
chmod -R ug+r ordner/

# Anderen Lese-Recht entziehen (rekursiv)
chmod -R o-r ordner/

# Gruppe Lese- und Schreib-Recht hinzufügen (rekursiv)
chmod -R g+rw ordner/

# Nur Ordner auf 755 setzen (rekursiv)
find /pfad/zu/ordner -type d -exec chmod u=rwx,go=rx {} \;

# Nur Dateien auf 644 setzen (rekursiv)
find /pfad/zu/ordner -type f -exec chmod u=rw,go=r {} \;