Tipp: Dateirechte unter Linux

Dateirechte unter Linux sind Lerninhalt der LPI Prüfungen Linux Essentials, Thema 5
und LPI 101, Thema 104.5


dateirechteDas Konzept der Dateirechte unter Linux bereitet Benutzern wie
Administratoren gerade in der Anfangszeit immer wieder Probleme. Grund
genug also, hier einen genaueren Blick darauf zu werfen!

Die Notwendigkeit von Dateirechten im PC-Bereich fiel mit der
zunehmenden Nutzung einzelner Geräte durch mehrere Personen
zusammen. Microsoft beispielsweise führte Dateirechte mit dem Start des
Dateisystems NTFS Anfang der 1990er Jahre ein.

Bereits bei Unix-Dateisystemen gab es die gleichen
Berechtigungsstrukturen, wie sie heute unter Linux bei den gängigen
Dateisystemen (ext2, ext3, ext4, btrfs, xfs, reiserfs usw.) üblich
sind.

Grundsätzlich unterscheidet man bei Dateirechten zwei Kategorien:
Besitzrechte und Zugriffsrechte.

1. Besitzrechte

Jede Datei ist genau einem Besitzer und einer Gruppe zugeordnet. Die
Zuordnung zu weiteren Besitzern oder Gruppen ist ohne die Nutzung
erweiterter Zugriffsrechte nicht möglich.

Bei einer typischen Ausgabe des Befehls ls mit dem Parameter -l,
der eine ausführliche Ausgabe erzeugt, sind Besitzer (hier user)
und Gruppe (hier group) deutlich sichtbar:

user@linux ~$ ls -l
-rw-r--r-- 1 user  group 634 19. Feb 14:12 kapitel1.txt
-rwxr-xr-x 1 user  group 512 19. Feb 14:12 myscript

Neben dem Besitzer und benannten Gruppen gibt es immer eine weitere
Gruppe, die immer dann zum Tragen kommt, wenn der Zugriff weder vom
Besitzer noch einem Mitglied einer angegebenen Gruppe erfolgt: Diese
“Gruppe der Namenlosen” heißt schlicht andere (other).

Die Auswertung der Besitzrechte erfolgt immer in der Reihenfolge
Benutzer → Gruppe → Andere. Auch wenn durch eine Fehlkonfiguration
einer Gruppe weiterreichende Rechte an einer Datei gegeben wurden als
dem Besitzer selbst, so hat sie dennoch nur die maximalen Rechte des
Benutzers. Hier gilt also das Prinzip des First Match, also des
ersten Treffers.

2. Zugriffsrechte

Die Zugriffsrechte sagen aus, welche Rechte der durch die Besitzrechte
bestimmte Benutzer, die Gruppe oder andere auf die Datei haben.

In dem oben aufgeführten Beispiel beschreibt die Zeichenfolge

-rw-r--r--

die Zugriffsrechte für die Datei kapitel1.txt

Genau genommen gehört das erste Zeichen, in diesem Fall ein einzelner
Strich (-), nicht zu den Zugriffsrechten. Es repräsentiert vielmehr
den Dateityp, und der Strich steht für eine “normale” Datei.

An dieser Position könnten auch folgende Buchstaben stehen
bzw. folgende Typen markiert sein:


d
Verzeichnis
l
Link
s
Socket
p
Pipe
b
blockorientiertes Gerät
c
zeichenorientiertes Gerät

Die folgenden Zeichen lassen sich in drei Gruppen zu je drei Zeichen
gliedern.

Die erste Dreiergruppe (hier rw-) bezeichnet die Rechte für den
Besitzer, die zweite (hier r--) für die Gruppe und die letzte für
alle anderen (hier ebenfalls r--).

Die drei Dreiergruppen sind gleich aufgebaut: Das erste Zeichen gibt
jeweils die Leseberechtigung an (r für read), das zweite die
Scheibberechtigung (w für write) und das dritte die
Ausführberechtigung (x für execute). Bei dem letzten Zeichen gibt
es Sonderfälle, die später folgen.

Steht an einer Stelle statt des Buchstabens, der das entsprechende
Recht repräsentiert, der Strich (-), so ist das Recht nicht gesetzt.

Für unser Beispiel bedeutet das, dass die Gruppe die Datei
kapitel1.txt zwar lesen, aber weder verändern/schreiben noch
ausführen darf.

Die Leseberechtigung erlaubt es, den Inhalt einer Datei auszugeben:

user@linux ~$ cat kapitel1.txt
Hello World!!!

Bei Verzeichnissen bedeutet es, in das entsprechende Verzeichnis
wechseln und sich dessen Inhalt ansehen zu dürfen. Verzeichnisse sind,
getreu dem Linux/Unix-Grundsatz “Everything is a file” (“Alles ist
eine Datei”), auch nur Dateien, in denen die Inhalte des
Verzeichnisses aufgelistet sind.

Die Schreibberechtigung erlaubt es, Daten in eine Datei zu schreiben
oder, im Falle eines Verzeichnisses, neue Dateien anzulegen:

user@linux ~$ cat kapitel1.txt
Hello World!!!
user@linux ~$ echo "Hello User!" >> kapitel1.txt
user@linux ~$ cat kapitel1.txt
Hello World!!!
Hello User!

Alle mit einem x markierten Dateien dürfen ausgeführt werden,
allerdings nur dann, wenn auch der Pfad zur Datei angegeben wird (oder
der Dateipfad in der Umgebungsvariablen PATH hinterlegt ist).

user@linux ~$ /home/user/myscript
Ein tolles Program...
user@linux ~$ ./myscript
Ein tolles Programm...
user@linux ~$ myscript
-bash: myscript: Kommando nicht gefunden.

Für Verzeichnisse hat die Ausführberechtigung eine besondere
Bedeutung: Hier weist das x darauf hin, dass man in das Verzeichnis
wechseln darf.

Neben diesen “normalen” Rechten kann an Stelle der
Ausführberechtigung für das Zeichen x auch ein s stehen — bei den
anderen auch ein t.

Das s steht bei der Besitzergruppe für SetUID. Eine solche Datei
wird bei Ausführung statt mit den Rechten des ausführenden Benutzers
mit den Rechten des Besitzers, im Beispiel denen des Benutzers root, ausgeführt. Im Linux-System gibt
es einige Dateien, die mit diesem Recht arbeiten, zum Beispiel der
Befehl mount:

user@linux ~$ ls -l /bin/mount
-rws--x--x 1 root root 48160 17. Dez 11:54 /bin/mount

Ohne dieses Recht könnte ein normaler Benutzer keine Dateisysteme
einhängen.

Steht das s bei der Gruppe, hat es die Bedeutung SetGID, d.h. bei
Ausführung der Datei wird die Gruppe als effektive Gruppe gesetzt. Ist
SetGID für ein Verzeichnis gesetzt, erhalten alle in dem Verzeichnis
neu angelegten Dateien oder Verzeichnisse automatisch die angegebene
Gruppe. Es ist also eine Art Vererbung, die es sonst in
Linux-Dateisystemen nicht gibt. Besitzrechte neuer Dateien werden
sonst immer auf den Benutzer und dessen primäre Gruppe gesetzt.

Betrachten wir zuletzt das Zeichen t, das statt des x nur für die
anderen gesetzt sein kann. Es steht für das sog. Sticky Bit und
spielt nur im Zusammenhang mit temporären Verzeichnissen wie
z.B. /tmp eine Rolle:

user@linux ~$ ls -ld /tmp
drwxrwxrwt 22 root root 620 19. Feb 14:24 /tmp

Das Verzeichnis bietet volle Rechte für jeden. Damit könnte auch jeder
die Dateien eines anderen löschen oder umbenennen. Das Sticky Bit
schränkt dies innerhalb des Verzeichnisses so ein, dass Dateien nur
noch von den eingetragenen Besitzern gelöscht oder umbenannt werden
können.

So viel zur Übersicht über die Dateirechte. Der nächste Artikel dieser
Reihe wird sich dem Setzen und Verändern dieser Besitz- und
Zugriffsrechte widmen.


Dieser Text ist im Rahmen des Tipp des Monats von Michael Gisbers und Christian Hesse auf der Website des LPI Central Europe unterstützt von der Open Source Press veröffentlicht worden.