Der Zugriff auf jedes Verzeichnis und auf jede Datei im System wird vom Betriebssystem gegen unerlaubten Zugriff geschützt. Nur Benutzer die eine entsprechende Berechtigung haben, können eine Datei beziehungsweise ein Verzeichnis verwenden.
drwxr-xr-x 28 root root 36864 Mar 16 00:00 /var/log/
Die Benutzerin daisyduck möchte den Inhalt der Datei todos.txt ausgeben.
| Benutzertyp | Symbolischer Modus | Oktalmodus |
|---|---|---|
| Besitzer | u (User) | 1. Ziffer |
| Gruppe | g (Group) | 2. Ziffer |
| Alle anderen | o (Others) | 3. Ziffer |
| Besitzer, Gruppe und Andere | a (All) |
| r | w | x | Oktalwert | Berechtigung |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | Keine Berechtigung |
| 0 | 0 | 1 | 1 | Nur Ausführen |
| 0 | 1 | 0 | 2 | Nur Schreiben |
| 1 | 0 | 0 | 4 | Nur Lesen |
Die weiteren Werte ergeben sich zwangsläufig aus den möglichen Kombinationen. Sie können auch einfach die Werte der gewünschten Rechte zusammenzählen, also z.b. R + W = 4 + 2 = 6 Einigen Kombinationen wie Schreiben und Ausführen sind zwar möglich aber in der Praxis nicht sinnvoll da beispielsweise eine Datei trotz Excecute-Recht nicht ausführbar ist, wenn sie nicht gelesen werden kann. | ||||
| 0 | 1 | 1 | 3 | Schreiben und Ausführen |
| 1 | 0 | 1 | 5 | Lesen und Ausführen |
| 1 | 1 | 0 | 6 | Lesen und Schreiben |
| 1 | 1 | 1 | 7 | Lesen, Schreiben und Ausführen = Vollzugriff |
wget https://edu.epcom.cc/linux-administration/chmod-practice.sh
./chmod-practice.sh
| Pfad | Beschreibung |
|---|---|
| job/ | Besitzer und Gruppe dürfen neue Dateien anlegen und bestehende Löschen. Alle anderen dürfen sich nur den Inhalt der vorhandenen Dateien ansehen. |
| media/* | Besitzer darf neue Dateien und Verzeichnisse anlegen und bestehende Löschen. Die Gruppe darf die Inhalte sehen, aber nicht verändern können. Alle anderen dürfen nicht in dieses Verzeichnis gelangen. |
| privat | NUR der Besitzer darf neue Dateien und Verzeichnisse anlegen und bestehende Löschen. Alle anderen dürfen nicht in dieses Verzeichnis gelangen. |
| scripts | Besitzer darf neue Dateien und Verzeichnisse anlegen und bestehende Löschen. Die Gruppe darf die Inhalte sehen, aber nicht verändern können. Alle anderen dürfen nicht in dieses Verzeichnis gelangen. |
| scripts/weisheit.sh | Dieses Script soll vom Besitzer und von der Gruppe ausgeführt werden dürfen. |
| scripts/entspannung.sh | Dieses Script soll nur vom Besitzer ausgeführt werden dürfen. Entziehen Sie allen anderen Benutzern sämtliche Berechtigungen. |
| Ihr Benutzer | buddy | bully |
|---|---|---|
| Geben Sie den Inhalt der Datei job/projekte.txt und privat/passworte.txt aus. Führen Sie die Scripts scripts/weisheit.sh und scripts/entspannung.sh aus. Erstellen Sie ein neues Verzeichnis Downloads |
Melden Sie sich als Benutzer buddy an. Die folgenden Befehle müssen erfolgreich ausgeführt werden können: Wechseln ins Verzeichnis /var/example-data Erstellen eines Unterverzeichnisses job/Vorlagen. Ausgeben der Datei job/projekte.txt Anzeige aller Dateien (rekursiv) im Verzeichnis media Ausführen der Datei scripts/weisheit.sh Die folgenden Befehle dürfen NICHT ausgeführt werden können und müssen einen Fehler liefern. Löschen aller Dateien aus dem Verzeichnis media/videos/ Anzeige des Verzeichnisinhalts von privat/ Ausführen der Datei scripts/eintspannung.sh |
Melden Sie sich als Benutzer bully an. Die folgenden Befehle müssen erfolgreich ausgeführt werden können: Ausgeben der Datei job/projekte.txt Die folgenden Befehle dürfen NICHT ausgeführt werden können und müssen einen Fehler liefern. Anzeige des Verzeichnisinhalts von privat/, media/ und scripts/ Löschen der Datei job/projekte.txt |
wget https://edu.epcom.cc/downloads/validate-chmod.sh
Ist das SetUID bei einem Befehl gesetzt, dann startet der Befehl nicht wie üblich im Namen des aufrufenden Benutzers sondern im Namen des Besitzers der Datei.
Beispiel /bin/passwd
Dieser Befehl setzt das Passwort des aktuellen Benutzers. Da das Passwort aber
in einer Datei gespeichert ist (/etc/shadow) die ein
normaler Benutzer nicht bearbeiten (und nicht einmal lesen) darf, benötigt man
einen Mechanismus der es erlaubt diesen Befehl mit anderen Berechtigungen auszustatten.
Hier setzt das SetUID Bit an.
Der Besitzer der Datei /etc/passwd ist der User root.
Erkennbar ist das gesetzte SUID-Bit am s anstelle des x
Wird nun das Programm (der Befehl) passwd von der Userin daisy gestartet, so startet dieser mit den Berechtigungen des Users root. Daher kann auch die Datei /etc/shadow aktualisiert werden, die ansonsten vor Bearbeitung gesperrt ist.
ACHTUNG! Aufgrund von Sicherheitsbedenken wird das SUID-Bit bei Shell-Scripts vom Linux-Kernel ignoriert
SetGID verhält sich gleich wie SetUID nur dass nicht die effektive UID des Programms geändert wird sondern die primäre Gruppe wird auf die zugewiesene Gruppe geändert
Setzen der Bits
Gesetzt werden die Bits wiederum mit chmod. In der symbolischen Schreibweise durch +s.
Wird dabei kein Benutzertyp angegeben, wird sowohl SUID als auch SGID gesetzt, ansonsten wird dies über den Benutzertyp u, g gesteuert.
wget https://edu.epcom.cc/linux-administration/chmod-practice.sh
Das sogenannte Sticky Bit wird verwendet um in einem Verzeichnis den Schreibzugriff von mehreren Accounts zu erlauben. Einschränkend kommt hierbei aber zu tragen, dass Dateien anschließend nur durch den Besitzer selbst (oder von root) wieder gelöscht werden können.
Beispiel /tmp
Dieses Verzeichnis wird von vielen Programmen für temporär benötigte Dateien genutzt. Durch das
Sticky Bit wird jedoch sichergestellt dass nicht jeder die Daten eines anderen Benutzers löschen darf.
Gesetzt wird das Bit wiederum mit chmod. In der symbolischen Schreibweise durch +t.
Der Oktale Wert ist 1 und wird ebenfalls, wie die SUID und SGID Bits durch voranstellen einer 4 Oktette vor den Berechtigungsoktetts.