Debian: Linux Zugriffsrechte System erklärt
Linux Distributionen, wie Debian, haben ein System für Zugriffsrechte (auch Dateirechte genannt). Dieses Rechtsystem ist Unix-weit in allen Betriebssystemen gleich und nur je nach Distribution um Kleinigkeiten erweitert, was in der Praxis jedoch selten Relevanz hat. Wenn man ein solches Betriebssystem verwendet, kommt man über kurz oder lang nicht umher sich damit zu beschäftigen wie man Rechte vergeben kann – und sollte. Für Nutzer, die von Windows kommen, mag das Zugriffsrechte System vom Linux anfangs schwer zu verstehen sein, jedoch hat es eine klare Struktur, die im täglichen Umgang äußerst praktisch ist. Im Folgenden erkläre ich daher das Rechtesystem in Linux Systemen wie Debian.
Bevor wir uns konkret mit dem Rechtsystem beschäftigen sollten wir uns mit Strukturen befassen auf denen dieses aufbaut, denn nur wenn wir diese kennen, können wir verstehen wie und besonders für wen wir Rechte vergeben.
Benutzer und Gruppen
In Unix Systemen gibt es Benutzer (user). Diese sind für jeweils eine Person bestimmt und jeder normale Benutzer Account hat ein Home-Verzeichnis in dem die persönlichen Dateien des Anwenders gespeichert sind. Einem Benutzer gibt man in der Regel einen Namen (bspw. jan), jedoch erhält er auch eine eindeutige Identifikationsnummer (uid genannt).
Das zweite Konstrukt, das im Rechtemanagement von Unix Anwendung findet, sind Gruppen (group). Diese setzen sich aus einem oder mehreren Benutzern zusammen. In der Regel hat jeder Benutzer eine gleichnamige Gruppe, jedoch sind natürlich weitere Gruppen möglich. Praktisch können in diesen mehrere Benutzer gemeinsam Rechte an Dateien haben. Ebenso wie bei Benutzern haben Gruppen Namen (bspw. jan oder blog) und erneut eine Identifikationsnummer (gid genannt).
Ordner, Dateien und Dateiendungen
Die Inhalte eines Dateisystems lassen sich in Unix in Ordner und Dateien einteilen. Dateiendungen (auch Dateierweiterungen genannt) sind in Unix völlig egal. Man kann eine Datei in der ein Programm steckt problemlos hello_world.txt nennen. Sofern sie ausführbar ist, wird man das Programm verwenden können – unabhängig von der Endung .txt, die in Windows/DOS die Art einer Datei (.txt für Textdatei) definiert. Die Art einer Datei ist in Unix viel mehr durch den Inhalt der Datei definiert und wird meist in der ersten Zeile beschrieben. Ordner werden als eine Art eigenes Konstrukt behandelt, das teils anders angesprochen wird als eine gewöhnliche Datei, jedoch im Rechtesystem die selben eigenständigen Eigenschaften wie eine Datei trägt und technisch als eine Art von Dateien gesehen wird.
Allgemein haben Ordner wie Dateien neben Rechten jeweils einen Besitzer und eine Gruppe, der sie zugeordnet sind. Dazu kommen noch weitere Daten wie Datum des Erzeugens oder die letzte Änderung, wie man es auch aus Windows kennt.
Befehle chmod, chown und chattr
Um Rechte und Besitzer einer Datei oder eines Ordners zu verändern gibt es in Linux in der Regel drei wichtige Befehle. Es gibt noch weitere Kommandos, die im Zusammenhang mit den Zugriffsrechten stehen, jedoch sind normale Arbeiten in der Regel mit diesen Anweisungen zu erledigen.
- chmod: Zugriffsrechte einer Datei oder eines Ordners verändern
- chown: Veränderung des Besitzers (user) oder der Gruppe (group)
- chattr: Zusätzliche Attribute setzen oder entfernen
Nachdem wir die grundlegenden Strukturen rund um das Rechtesystem kennengelernt haben, können wir uns der eigentlichen definition der Rechte widmen.
$ ls -l total 4 drwxr-x-w- 2 root jan 4096 Apr 15 09:11 dirname1 -rw-r----- 1 root www-data 0 Apr 15 10:23 file1 -rw-r----- 1 root root 0 Apr 15 08:14 file2
Dies ist eine übliche Ausgabe zu Informationen über den Inhalt eines Verzeichnisses. Als Beispiel sehen wir uns die erste Zeile an. Zunächst sehen wir eine Attribut-Zeichenkette (10 Zeichen) wie drwxr-x---
, in der die Rechte der Datei oder des Ordners definiert sind. Darauf folgt die Anzahl der hard links (2), die für uns keine Relevanz hat. In der dritten Spalte finden wir den Benutzer (root) woraufhin die Gruppe (jan) des Objektes folgt. Im Weiteren folgt die Dateigröße in Bytes. Bei einem Ordner wird dabei nur der Ordner als eigenständiges Objekt betrachtet und dessen Inhalt in die Größenangabe nicht mit einbezogen. Abschließend folgt das Datum der letzten Änderung und der Datei bzw. Ordnername.
Attribut-Zeichenkette (Symbolisch)
Die Attribut-Zeichenkette gibt Aufschluss darüber wer was mit der Datei machen darf und um welchen Typ es sich handelt. Betrachten wir einmal die Kette, so teilen sich die zehn Zeichen drwxr-x---
in vier Abschnitte 1+3+3+3 Zeichen.
Das erste Zeichen (rot markiert) gibt an um welchen Typ von Datei es sich handelt. Dieser muss nicht zwingend angegeben sein, sodass wenn man eine nur neun Zeichen Kette hat, dieser in der Regel wegfällt. Die Typen unterscheidet man wie folgt:
- d für directory (Ordner)
- b für block device (blockorientierte Geräte)
- c für character device (zeichenorientierte Geräte)
- f für fifo (Pipeline)
- s für socket (socketorientierte Geräte)
- – für eine normale Datei
Darauf folgen drei Abschnitte in denen Rechte definiert sind. In Unix unterscheidet man dabei wem die Rechte zugewiesen sind (Abschnitte) und welche diese sind (Zeichen). Dabei teilt sich jeder Block in folgende Komponenten, wobei sie in der Reihenfolge rwx
angeordnet sind.
- r für Leserechte (read)
- w für Schreibrechte (write)
- x für Ausführungsrechte (für Anwendungen; execute)
- – für Recht nicht gewährt
Der erste Block (lila) gibt die Rechte für den Besitzer an. Darauf folgen (türkis) die Rechte der Gruppe und anschließend (grün) Rechte, die jeder Benutzer an der Datei hat.
Zusammenfassend kann man verschiedene Rechte für Besitzer, Gruppen und jeden Benutzer definieren, die drei Komponenten umfassen können.
Zugriffsrechte in Oktalzahlen
Zur Abkürzung der oben erläuterten Schreibweise gibt es außerdem die Möglichkeit Zugriffsrechte in Oktalzahlen darzustellen. Das oben gegebene Beispiel würde in dieser Schreibweise 0750
lauten. In der Praxis begegnen einem diese Angaben ebenso häufig wie die vorherigen, weshalb man diese Schreibweise verstehen sollte.
Dabei fällt auf, dass die erste der vier Zahlen eine andere Farbe als in ersterer Erklärung hat. Dies hat den Hintergrund, dass sie eine andere Bedeutung als das erste Zeichen der Attribut-Zeichenkette hat. Wie oben ist es jedoch häufig so, dass diese erste Stelle nicht angegeben ist, da sie in etwa die selbe Verwendung findet.
Das zweite Zeichen (lila) gibt die Rechte des Besitzers an. Darauf folgen die Rechte der Gruppe (türkis) und abschließend wieder die Rechte aller Benutzer (grün) an der Datei. Diese drücken sich für jeden Block in Zahlenwerten aus, die als Oktalzahl addiert werden.
- 4 für lesen
- 2 für schreiben
- 1 für ausführen
Praktisch ergeben sich daraus folgende mögliche Werte. Im Falle unseres Beispiels hat der Besitzer also alle drei Rechte, die Gruppe Ausführ- und Schreibrechte und alle anderen Benutzer keine Rechte.
Rechte | Zahl | Buchstaben |
---|---|---|
Keine Rechte | 0 |
--- |
Ausführbar | 1 |
--x |
Schreibbar | 2 |
-w- |
Lesbar | 4 |
r-- |
Ausführ- und schreibbar | 3 |
-wx |
Ausführ- und lesbar | 5 |
r-x |
Schreib- und lesbar | 6 |
rw- |
Ausführ-, les- und schreibbar | 7 |
rwx |
Sonderrechte
Bislang ungeklärt ist die Bedeutung des ersten Zeichens in der Oktalzahlschreibweise und wo wir dieses in der Attribut-Zeichenkette finden. Dabei handelt es sich um die sogenannten Sonderrechte der Datei (auch special genannt). Diese finden relativ selten Anwendung, sind im Bedarfsfall jedoch praktische Funktionen des Rechtemanagements.
- Setuid: Programme werden mit den Rechten des Benutzers, dem die Datei gehört, ausgeführt, anstatt mit den Rechten desjenigen Benutzers, der die Datei ausführt. Bei Verzeichnissen vererbt sich der Besitzer (uid) auf neu angelegte Objekte in diesem Verzeichnis.
- Setgid: Programme werden beim angemeldeten Benutzer mit den Rechten der Gruppe ausgeführt, der die Datei gehört, anstatt mit den Rechten derjenigen Gruppe, die die Datei ausführt. Verhalten bei Verzeichnissen wie bei Setuid.
- Sticky bit: Nur noch der Besitzer der Datei oder der sich im Verzeichnis befindenden Dateien kann diese löschen oder umbenennen.
In der Oktalzahlschreibweise gib die erste Zahl (ocker) an ob bzw. welches der Sonderrechte gesetzt ist. Die Wertigkeit wird wie bei den normalen Rechten addiert.
- 4 für Setuid
- 2 für Setgid
- 1 für Sticky bit
In der Attribut-Zeichenkette findet diese Angabe etwas versteckter Platz. Die Sonderrechte werden in der Angabe der Ausführungsrechte versteckt (ohne Dateityp also an dritter, sechster und neunter Stelle) und durch ein s/S für Setuid und Setgid wie auch t/T für das Sticky bit dargestellt. Wenn an dieser Position zusätzlich das Ausführungsrecht gesetzt wurde, wird ein großes S/T verwenden, ansonsten ein kleines s/t.
Dabei findet das Setuid im ersten Abschnitt, Setgid im zweiten Block und das Sticky bit im letzten Bereich der Rechte seinen Platz.
Daraus ergeben sich folgende Möglichkeiten in der Oktalzahlschreibweise bzw. der Attribut-Zeichenkette (im Beispiel ohne Ausführungsrecht und ohne jeglichen weiteren Rechten an der Datei).
Rechte | Zahl | Buchstaben |
---|---|---|
Kein Sonderrecht | 0 |
--------- |
Sticky bit | 1 |
--------t |
Setgid | 2 |
-----s--- |
Setuid | 4 |
--s------ |
Sticky bit und Setgid | 3 |
-----s--t |
Sticky bit und Setuid | 5 |
--s-----t |
Setuid und Setgid | 6 |
--s--s--- |
Sticky bit, Setgid und Setuid | 7 |
--s--s--t |
Zusammenfassung
Nach diesen Ausführungen über das Unix-Rechte System sollte klar geworden sein, dass dieses vielfältige Möglichkeiten bietet. Die Bestandteile des Systems sind Benutzer, Gruppen, Rechte, Sonderrechte und Dateitypen. Dabei folgt es einer klaren Struktur in zwei verschiedenen Schreibweisen, die in der Praxis Anwendung finden.
Nachdem das System in der Theorie nun erklärt wurde, werde ich im Folgenden ausführen, wie es in der Praxis mit den Kommandos chmod, chown und chattr angewendet wird.
Rechte verändern mit chmod
Mit der Anwendung chmod ist es uns möglich zu bestimmen welche Rechte der Besitzer, die Gruppe und alle Benutzer an einer Datei oder einem Verzeichnis haben. Dabei kann man sowohl die symbolische Attribut-Zeichenkette als auch die Oktalschreibweise verwenden. Im Folgenden werde ich jedoch nur erstere Schreibweise erklären, da mir diese für den Anfang einfacher erscheint.
Allgemein ist ein Kommando dieser Art wie folgt aufgebaut (Ausdrücke einschließlich der eckigen Klammern zu ersetzen):
chmod [Parameter] [Auswirkungsziel][Rechteveränderung] [Dateiname]
Das Auswirkungsziel beschreibt für wen sich die Rechte an einer oder mehreren Dateien auswirkt. Dabei wird u für Besitzer, g für Gruppe und o für alle Benutzer (other) ausgedrückt. Falls die Auswirkung für alle Gruppen gelten soll, muss man das Auswirkungsziel nicht bennen.
Darauf folgt mit Plus (+) oder Minus (–) die Angabe ob Rechte gewährt oder entzogen werden sollten, woraufhin r für Leserechte, w für Schreibrechte und x für Ausführungsrechte angeben wird.
Eine gewisse Sonderstellung nehmen die Sonderrechte Setuid und Setgid ein. Diese werden beide mit s bestimmt, müssen jedoch in Abhängigkeit zum Auswirkungsziel u für Setuid bzw. g für Setgid stehen.
Bei Ordnern ist außerdem der Parameter -R relevant, da dieser die Änderungen rekursiv anwendet. Das bedeutet, dass nicht nur an dem Ordner die Rechte geändert werden, sondern in selber Weise auch an den im Ordner befindlichen Dateien und Ordnern.
Besitzer, Gruppen und alle Benutzer bekommen (zusätzlich) Lese-, Schreib- und Ausführungsrechte
chmod +rwx datei
Besitzern, Gruppen und allen Benutzer werden Leserechte entzogen
chmod -r datei
Besitzer erhält (zusätzlich) Lese- und Schreibrechte
chmod u+rw datei
Besitzer erhält (zusätzlich) Lese- und Schreibrechte für alle drei Objekte
chmod u+rw datei1 datei2 verzeichnis1
Gruppe erhält (zusätzlich) Leserechte an dem Verzeichnis (Inhalt von Änderung nicht betoffen)
chmod g+l verzeichnis
Gruppe erhält (zusätzlich) Leserechte an dem Verzeichnis und allen darin enthaltenen Dateien wie auch Verzeichnissen
chmod -R g+l verzeichnis
Setuid für Datei hinzufügen
chmod u+s verzeichnis
Setgid für Datei entziehen
chmod g-s verzeichnis
Eigentümer und Gruppe verändern mit chown
Das Kommando chown erlaubt es uns, den Besitzer und die Gruppe einer Datei oder eines Verzeichnisses zu ändern. Bei letzterer Operation können wir diese wie bei chmod rekursiv ausführen.
chown [Parameter] [Benutzer][:[Gruppe]] [Dateiname]
Nach der Angabe möglicher Parameter (-R für Rekursiv) müssen wir den neuen Benutzer des Objektes angeben. Daraufhin folgt mit einem Doppelpunkt getrennt der Name die neue Gruppe, woraufhin der Dateiname folgt. Falls nur die Gruppe geändert werden soll, kann der Benutzer weggelassen werden, jedoch muss vor dem Gruppennamen zwingend ein Doppelpunkt stehen. Ebenso kann die Gruppe samt Doppelpunkt ggf. entfallen.
Datei erhält Besitzer jan und Gruppe blog
chown jan:blog datei
Datei erhält Besitzer jan
chown jan datei
Datei erhält Gruppe blog
chown :blog datei
Datei1, Datei2 und Verzeichnis1 erhalten Besitzer jan und Gruppe blog
chown jan:blog datei1 datei2 verzeichnis1
Verzeichnis erhält Besitzer jan und Gruppe blog (Inhalt von Änderung nicht betoffen)
chown jan:blog verzeichnis
Verzeichnis und alle darin enthaltenen Dateien wie auch Verzeichnisse erhalten Besitzer jan und Gruppe blog
chown -R jan:blog verzeichnis
Sonderrechte bestimmen mit chattr
Die Anweisung chattr erlaubt es uns Sonderrechte, im Konkreten das Sticky bit, für Dateien und Verzeichnisse zu setzen. Die Funktionsweise ist ähnlich der von chmod. Allgemein sieht das Kommando wie folgt aus:
chattr [Parameter] [Sonderrecht] [Datei]
Als Parameter ist wieder -R für rekursiv zu erwähnen. Daraufhin folgt mit Plus (+) bzw. Minus (–) die Bestimmung ob ein Recht gewährt oder entzogen wird. Anschließend wird das Sonderrecht benannt. Dabei haben wir normalerweise nur i für Sticky bit.
Sonderrecht Sticky bit wird der Datei zugeschrieben
chattr +i datei
Sonderrecht Sticky bit wird der Datei entzogen
chattr -i datei
Sonderrecht Sticky bit wird dem Verzeichnis zugeschrieben (Inhalt von Änderung nicht betoffen)
chattr +i verzeichnis
Sonderrecht Sticky bit wird dem Verzeichnis und allen darin enthaltenen Dateien wie auch Verzeichnissen zugeschrieben
chattr -R +i verzeichnis
2 Kommentare. Hinterlasse eine Antwort
Großartig, in 10 Minuten habe ich das nötigste zum Unix Berechtigungskonzept gelernt und verstanden. Genau das was ich gesucht hatte! Herzlichen Dank für die investierte Zeit und die Top Aufbereitung.
Müsste „chmod g+l verzeichnis“ nicht „chmod g+r verzeichnis“ heißen?
(Bei „chmod -R g+l verzeichnis“ ebenso.)