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
rwxfür alle Rechte---gar keine Rechterwxr-xr--Rechte für: UserrwxGrupper-xAnderer--oder 754rwxr-xr-x755 oder 0755
Du addierst sie einfach:
| Zahl | Bedeutung | Rechte |
|---|---|---|
| 0 | keine Rechte | --- |
| 1 | nur ausführen | --x |
| 2 | nur schreiben | -w- |
| 3 | schreiben + ausführen | -wx |
| 4 | nur lesen | r-- |
| 5 | lesen + ausführen | r-x |
| 6 | lesen + schreiben | rw- |
| 7 | lesen + schreiben + ausführen | rwx |
x(execute) = 1w(write) = 2r(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
0Keine Sonderberechtigung1Sticky Bit2SGID3SGID + Sticky Bit4SUID5SUID + Sticky Bit6SUID + SGID7SUID + 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) - Besitzerg(group) - Gruppeo(others) - Anderea(all) - Alle zusammen. Abkürzung fürugo
Berechtigungen
rLesenwSchreibenxAusfü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 dateiUser darf schreibenchmod ugo+w dateiSetzt Schreibrecht für User,Gruppe,Anderechmod u-w dateiUser darf nicht mehr schreibenchmod a=r dateiAlle dürfen lesenchmod u=rwx,g+w,o-r dateisetzt 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
| Numerisch | Symbolisch | Bedeutung |
|---|---|---|
| chmod 755 | chmod u=rwx,go=rx | Standard für Ordner/Programme |
| chmod 644 | chmod u=rw,go=r | Standard für Dateien |
| chmod 700 | chmod 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. Mitls -ld /tmp/bekommst dudrwxrwxrwtdas 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 {} \;