Linux Systeme

Linux Rechtesystem mit chown und chmod

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.

Verfügbare Rechte

Dateien
Das Betriebssystem unterscheidet dabei bei Dateien 3 Arten, wie diese verwendet werden können:
r | Read
Lesen - Der Dateiinhalt kann gelesen werden
Beispiel-Befehl: cat myfile.txt
w | Write
Schreiben - Der Dateiinhalt kann geschrieben werden
Beispiel-Befehl: echo "Dieser Text wird in die nachfolgende Datei eingetragen!" > myfile.txt
x | eXecute
Ausführen - Bei dieser Datei handelt es sich um eine ausführbare Datei, etwa ein Programm oder ein Script und mit dieser Berechtigung kann das Programm/Script ausgeführt werden.
Beispiel-Befehl: ./myscript.sh
Verzeichnisse
Ähnlich ist dies bei Verzeichnissen:
r | Read
Lesen - Das Verzeichnis darf aufgelistet werden - also darin enthaltene Dateien und Verzeichnisse können angezeigt werden.
Beispiel-Befehl: ls -l mydir/
w | Write
Schreiben - Der Verzeichnisinhalt darf verändert werden - also dürfen neue Dateien angelegt und vorhandene Dateien gelöscht werden.
ACHTUNG! Mit dieser Brechtigung können auch Dateien gelöscht werden, auf die man selbst keinen Zugriff hat!
Beispiel-Befehle: rm mydir/myfile.txt; mkdir mydir/MySubDir
x | eXecute
Ausführen - Dieses Flag wird benötigt um in ein Verzeichnis "hineinwechseln" zu können
Beispiel-Befehle: cd mydir/

Zugriffsberechtigungen

Die Berechtigung für den Zugriff kann aufgrund von 3 Berechtigungsgruppen definiert werden. Die Berechtigungsgruppen können Sie sich anzeigen lassen, indem Sie den Befehl ls -l eingeben. Es handelt sich dabei um das erste angezeigte Feld (die ersten 10 Zeichen).
Beispiel: Im Folgenden sind die Dateirechte des Verzeichnisses /var/log/ dargestellt
Befehl: ls -ld /var/log/
drwxr-xr-x 28 root root 36864 Mar 16 00:00 /var/log/
1. Zeichen
Dateityp
Bei Verzeichnissen wird hier ein d für Directory (Verzeichnis) angezeigt, bei regulären Dateien ein -
drwxr-xr-x 28 root root 36864 Mar 16 00:00 /var/log/
2. - 4. Zeichen
Eigentümer
Dieser Berechtigungsgruppe bezieht sich auf den Eigentümer der Datei bzw. des Verzeichnis. Nachfolgend ist die Berechtigungsgruppe mit rwx für den Besitzer root markiert.
drwxr-xr-x 28 root root 36864 Mar 16 00:00 /var/log/
5. - 7. Zeichen
Gruppe
Dieser Berechtigungsgruppe bezieht sich auf die primäre Gruppe der Datei bzw. des Verzeichnis. Nachfolgend ist die Berechtigungsgruppe mit r-x für die Gruppe root markiert.
drwxr-xr-x 28 root root 36864 Mar 16 00:00 /var/log/
8. - 10. Zeichen
Alle anderen
Dieser Berechtigungsgruppe bezieht sich auf Benutzer, die weder der Eigentümer noch Mitglied der primären Gruppe der Datei bzw. des Verzeichnis sind. Nachfolgend ist die Berechtigungsgruppe mit r-x markiert.
drwxr-xr-x 28 root root 36864 Mar 16 00:00 /var/log/

chown und chgrp | Ändern des Besitzers und der Gruppe

Wurde eine Datei oder ein Verzeichnis von einem Benutzer erstellt, so wird dieser automatisch auch der Besitzer. Die Gruppe wird ebenfalls vom aktuellen Benutzer übernommen. Im folgenden Beispiel ist der Benutzername daisyduck und die primäre Gruppe users
daisyduck@demo-host:~ >ls -l
insgesamt 4
drwxr-xr-x 2 daisyduck users 4096 7. Mär 2020 bin
daisyduck@demo-host:~ >id
uid=1001(daisyduck) gid=100(users) Gruppen=100(users)
daisyduck@demo-host:~ >mkdir Meine-Bilder
daisyduck@demo-host:~ >ls -l
insgesamt 8
drwxr-xr-x 2 daisyduck users 4096 7. Mär 2020 bin
drwxr-xr-x 2 daisyduck users 4096 16. Mär 19:54 Meine-Bilder
Zuweisen einer neuen Gruppe bzw. eines neuen Besitzers darf nur der User root.
Soll beispielsweise beim neu erstellten Verzeichnis Meine-Bilder der Besitzer zu donaldduck gewechselt werden, wird dies mit dem Befehl chown ( CHange OWNer) gemacht.
root@demo-host:/home/daisyduck # ls -ld Meine-Bilder/
drwxr-xr-x 2 daisyduck users 4096 Mar 16 19:54 Meine-Bilder/
root@demo-host:/home/daisyduck # chown donaldduck Meine-Bilder/
root@demo-host:/home/daisyduck # ls -ld Meine-Bilder/
drwxr-xr-x 2 donaldduck users 4096 Mar 16 19:54 Meine-Bilder/
Die Gruppe kann mit dem Befehl chgrp (CHange GRouP) zugewiesen werden.
Soll die Gruppe beispielsweise auf entenhausen geändert werden:
root@demo-host:/home/daisyduck #ls -ld Meine-Bilder/
drwxr-xr-x 2 donaldduck users 4096 Mar 16 19:54 Meine-Bilder/
root@demo-host:/home/daisyduck # chgrp entenhausen Meine-Bilder/
root@demo-host:/home/daisyduck # ls -ld Meine-Bilder/
drwxr-xr-x 2 donaldduck entenhausen 4096 Mar 16 19:54 Meine-Bilder/
Da es häufiger vorkommt, dass sowohl der Besitzer als auch die Gruppe geändert werden müssen, kann dies ebenfalls gleich mit dem Befehl chown gemacht werden.
Man gibt dazu einfach den User und die Gruppe durch einen Punkt voneinander getrennt an.
Soll der Besitzer wieder auf daisyduck und die Gruppe wieder auf users zurückgeändert werden:
root@demo-host:/home/daisyduck #ls -ld Meine-Bilder/
drwxr-xr-x 2 donaldduck entenhausen 4096 Mar 16 19:54 Meine-Bilder/
root@demo-host:/home/daisyduck # chown daisyduck.users Meine-Bilder/
root@demo-host:/home/daisyduck # ls -ld Meine-Bilder/
drwxr-xr-x 2 daisyduck users 4096 Mar 16 19:54 Meine-Bilder/

Zusammenfassung: Ermittlung ob der Zugriff erlaubt ist

Die Benutzerin daisyduck möchte den Inhalt der Datei todos.txt ausgeben.


daisyduck
daisyduck@demo-host:~ >cat todos.txt

todos.txt
-rw-r--r-- 1 daisyduck users 45 16. Mär 20:28 todos.txt

Betriebssystem überprüft den Zugriff

Schritt 1: Welche Benutzergruppe gilt für die Benutzerin?
daisyduck@demo-host:~ >id
uid=1001(daisyduck) gid=100(users) Gruppen=100(users)

daisyduck@demo-host:~ >ls -l todos.txt -rw-r--r-- 1 daisyduck users 45 16. Mär 20:28 todos.txt
Ergebnis Schritt 1: Die Benutzerin daisyduck entspricht der Besitzerin der Datei, es wird also der erste Berechtigungsblock rw- verwendet.
Schritt 2: Welches Recht wird gefordert?
daisyduck@demo-host:~ >cat todos.txt
Ergebnis Schritt 2: Die Benutzerin daisyduck möchte mit dem Befehl cat den Inhalt ausgeben, das Erforderliche Recht dafür ist ein lesender Zugriff - also r.

Ergebnis: Das Recht r ist in rw- enthalten. Zugriff erlaubt

chmod | Ändern der Zugriffsberechtigungen

Die 3 Berechtigungsgruppen für die Dateien und Verzeichnisse können vom User root und vom Besitzer (owner) geändert werden.
Dabei kann chmod im Symbolischen Modus und im Oktalmodus verwendet werden.
Die drei verschiendenen Benutzergruppen sind bei den Modi folgendermaßen anzugeben
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)  
Symbolischer Modus
Beim Symbolischen Modus werden 3 Angaben benötigt.
1. Der Benutzertyp
u, g, o, a
z.B. u für den Besitzer (User). Kombinationen für z.b. Benutzer und Gruppe mit ug sind ebenfalls möglich.
2. Der Operator
+, -, =
z.B. + um das bzw. die Rechte zu den bestehenden anzufügen, - um sie zu entfernen und = um sie explizit zu überschreiben
3. Das Recht, bzw. die Rechte
r, w, x
z.B. r für Lesen (Read). Diese können ebenfalls wieder kombiniert werden, also z.B. rw für Lesen (Read) und Schreiben (Write)
Beispiel: Die Benutzerin daisyduck hat ein einfach Script mit dem Namen daisy.sh erstellt. Sie möchte, dass dieses aufgerufen werden kann. Neu angelegte Dateien haben jedoch noch nicht das Recht zum Ausführen (x = eXecute).
Möchte Sie nun beispielsweise, dass sowohl sie selbst, als auch alle in ihrer Gruppe das Script benutzen können muss sie die Berechtigung anpassen:
daisyduck@demo-host:~ >./daisy.sh
-bash: ./daisy.sh: Keine Berechtigung
daisyduck@demo-host:~ >ls -l daisy.sh
-rw-r--r-- 1 daisyduck users 45 16. Mär 20:28 daisy.sh
daisyduck@demo-host:~ >chmod ug+x daisy.sh
daisyduck@demo-host:~ >ls -l daisy.sh
-rwxr-xr-- 1 daisyduck users 45 16. Mär 20:28 daisy.sh
daisyduck@demo-host:~ >./daisy.sh
Das ist das Script von Daisy Duck!
Oktalmodus
Sehr häufig wird auch eine auf den ersten Blick ungewöhnliche Methode verwendet die Berechtigungen zu setzen. Dabei werden im Gegensatz zum Symbolischen Modus immer alle Rechte für alle 3 Berechtigungsgruppen gesetzt. Vergleichbar mit dem Operator = des Symbolischen Modus jedoch können unterschiedliche Rechte für jede Berechtigungsgruppe durch einen Aufruf gemacht werden.
Repräsentiert werden die 3 Berechtigungsgruppen durch jeweils ein Oktette - also eine Zahl zwischen 0 und 7. Die Zahl ergibt sich aus einer 3-stelligen Binärmaske welche für die 3 Berechtigungen r, w und x stehen:
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
Die Angabe des Berechtigungswertes ergibt sich also als Kombination der 3 Zahlen welche jeweils für die Berechtigung des Benutzertyps steht.
Beispiel: Die Benutzerin daisyduck möchte, dass Ihr Script nur von ihr selbst ausgeführt werden darf. Natürlich möchte sie auch dass sie selbst das Script lesen und bearbeiten kann. Die Mitglieder ihrer Gruppe sollen das Script ebenfalls lesen, aber weder bearbeiten noch ausführen können. Alle anderen Benutzer sollen keinen Zugriff auf diese Datei haben.

Aus dieser Anforderung heraus ergibt sich für
Die Besitzerin
7 ( r + w + x, Lesen + Schreiben + Ausführen)
Die Gruppe
4 ( r, Lesen)
Alle anderen
0 ( - )
und somit die Zahl 740

daisyduck@demo-host:~ >ls -l daisy.sh
-rwxr-xr-- 1 daisyduck users 45 16. Mär 20:28 daisy.sh
daisyduck@demo-host:~ >chmod 740 daisy.sh
daisyduck@demo-host:~ >ls -l daisy.sh
-rwxr----- 1 daisyduck users 45 16. Mär 20:28 daisy.sh
Weitere Informationen
https://wiki.ubuntuusers.de/Rechte/
https://wiki.ubuntuusers.de/chmod/
https://wiki.ubuntuusers.de/chown/

Übungsbeispiel

Vorbereitung
Melden Sie sich als Benutzer root an. Wechseln Sie anschließend in das Verzeichnis /tmp und geben Sie den folgenden Befehl ein um ein Shellscript herunterzuladen.
wget https://edu.epcom.cc/linux-administration/chmod-practice.sh
Dieses Script muss nun ausgeführt werden, dazu benötigen Sie die Berechtigung eXecute. Vergeben sie diese und führen Sie anschließend das Script durch folgende Eingabe aus:
./chmod-practice.sh
Benutzer anlegen
Legen Sie einen neuen Benutzer mit dem Namen buddy an (Home-Verzeichnis braucht er auch). Vergeben Sie ihm auch ein Passwort. buddy soll in in der gleichen primären Gruppe sein wie sie.
Legen Sie einen neuen Benutzer mit dem Namen bully an (Home-Verzeichnis braucht er auch). Vergeben Sie ihm auch ein Passwort. Legen Sie eine neue Gruppe mit dem Namen bullies an und weisen Sie bully diese Gruppe als primäre Gruppe zu.
Besitzerwechsel
Durch das Script wurde ein neues Verzeichnis /var/example-data/ erstellt. Dieses Verzeichnis mit sämtlichen Inhalten soll nun Ihrem "normalen" Benutzer gehören. Ändern Sie daher die Besitzrechte sämtlicher Dateien und Verzeichnisse auf ihren Benutzernamen.
Die Gruppe soll ebenfalls für alle Verzeichnisse und Dateien geändert werden - und zwar auch auf Ihre primäre Gruppe.
Überprüfung
Öffnen Sie in der grafischen Oberfläche den Dateiexplorer Dolphin. Navigieren Sie zum Verzeichnis /var/example-data. Klicken Sie sich durch die Verzeichnisse. Sie sollten alle Dateien öffnen und in alle Verzeichnisse hineinwechseln können.
Setzen der Berechtigungen
Beenden Sie die root-Sitzung und öffnen Sie ein Terminal mit Ihrem regulären Benutzerkonto. Passen Sie als erstes die Berechtigungen für das Verzeichnis /var/example-data/ an. Sie, als BesitzerIn, sollen Vollzugriff haben, die Gruppe und alle Anderen dürfen Lesen und in das Verzeichnis wechseln.
Passen Sie anschließend die Berechtigungen nach nachfolgender Tabelle an:
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.
Überprüfen der Berechtigungen in der Konsole
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
Überprüfen der Berechtigungen mit Script
Nachdem Sie die Überprüfungen laut der oben angegebenen Tabelle vorgenommen haben laden Sie bitte auch noch ein Script zur Überprüfung herunter. Wechseln Sie in das Verzeichnis bin in Ihrem Homeverzeichnis.
wget https://edu.epcom.cc/downloads/validate-chmod.sh
Machen Sie das Script bitte Ausführbar und starten Sie es anschließend als Benutzer root.
Achten Sie bei der Ausgabe, dass keine Zeile den Text FAIL aufweist.

Spezielle Berechtigungs-Flags

Allgemein
Neben den bereits kennengelernten Berechtigungen r(ead), w(rite) und (e)x(ecute) gibt es noch 3 die eine ganz spezielle Aufgabe erfüllen.
Es handelt sich dabei um die Berechtigungen SetUID, SetGID und das sogenannte Sticky Bit.
SetUID und SetGID

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

-rwsr-xr-x 1 root root 67K 23. Mär 2023 /bin/passwd

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.

-rw-r----- 1 root shadow 1,2K 7. Nov 19:22 /etc/shadow

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.

daisyduck@demo-host:~ >ls -l trusted-command.cmd
-rwxr-xr-x 1 zaunerj zaunerj 12 14. Dez 13:11 trusted-command.cmd
daisyduck@demo-host:~ >chmod +s trusted-command.cmd
daisyduck@demo-host:~ >
wget https://edu.epcom.cc/linux-administration/chmod-practice.sh
an>ls -l trusted-command.cmd
-rwsr-sr-x 1 zaunerj zaunerj 12 14. Dez 13:11 trusted-command.cmd

Auch die Oktalschreibweise ist möglich. Dabei wird eine weitere Zahl vor die 3 Berechtigungswerte geschrieben. Hier steht eine 4 für ein gesetztes SUID Bit und eine 2 für ein gesetztes SGID Bit. Dementsprechend 6 für 4+2 also SUID+SGID.
daisyduck@demo-host:~ >ls -l trusted-command.cmd
-rwxr-xr-x 1 zaunerj zaunerj 12 14. Dez 13:11 trusted-command.cmd
daisyduck@demo-host:~ >chmod 6755 trusted-command.cmd
daisyduck@demo-host:~ >ls -l trusted-command.cmd
-rwsr-sr-x 1 zaunerj zaunerj 12 14. Dez 13:11 trusted-command.cmd

Sticky Bit

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.