Dateirechte unter Linux

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

Autoren: Michael Gisbers und Christian Hesse

Das 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".

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.

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 vielmehrden 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 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.