Rechtevergabe unter Linux

In diesem Artikel möchte ich mal auf die Rechtevergabe bei einem Linuxsystem eingehen. Gleich zu beginn sei gesagt, dass ich für alle Befehle, Screenshots, etc. eine Ubuntu 13.04 Installation verwende. Ok nun was euch erwartet. Ich werde am Anfang auf die allgemeine Rechteverwaltung von Ordner und Dateien unter einem Linux System eingehen. Dabei werde ich auch aufgreifen, wie wir diese Rechte ändern können. Zum Ende dieses Artikels werde ich noch auf die Besonderheit des SUID-Bits und des Sticky-Bits eingehen.

Rechtevergabe

Zu beginn der Rechtevergabe, schauen wir uns einfach einmal einen Terminal Auszug eines Ordners an. Ihr könnt diese Informationen auch selber über jeden Ordner erheben. Ihr müsst dafür nur den folgenden Befehl in euer Terminal eingeben:

Haben wir diesen Befehl auf dem Terminal eingegeben bekommen wir eine Ausgabe, die wie folgt aussieht:

ubuntu_rightmanagement_01

Auf den Bild sehen wir drei markierte Bereiche. Rot, blau und grün. Rot sind die Rechte die vergeben wurden, blau ist der Besitzer der Datei bzw. des Ordners und grün ist eine Gruppe. Ich beginne hier mit erstmal mit dem roten Teil.

Rechte

Der rote Bereich zeigt die einzelnen Rechte, die eine Datei oder ein Ordner hat. Ich greif hier einfach mal als Beispiel die erste Zeile auf. drwxr-xr-x. Diesen Eintrag teilen wir nun erstmal in vier Bereiche ein (Hier durch ein | getrennt).

d | rwx | r-x | r-x

Der erste Teil sagt uns ob es sich bei dem Objekt um einen Datei oder einen Ordner (directory) handelt. Steht dort ein d handelt es sich um einen Ordner, bei einem Minus handelt es sich um eine Datei.
Nun kommen die drei Teile, bei denen es wirklich um die Rechte geht. Der erste Bereich (rwx) sagt euch, welche Rechte der Besitzer/Ersteller der Datei hat. Der zweite Teil (r-x) gibt die Rechte der zugehörigen Gruppe wieder. Der letzte Teil (r-x) gibt die Rechte jeder anderen Person, die nicht der Besitzer ist und die nicht der Gruppe angehört wieder. Jeder dieser Teile kann drei Einträge haben. r (read), w (write) und x (execute). Hinter r versteckt sich das Recht, eine Datei zu lesen bzw. öffnen zu können. w gibt euch das Recht die Datei zu bearbeiten. Zuletzt haben wir noch x. Mit x legt ihr fest, ob die Datei ausgeführt werden darf.

Zurück zu unserem Eintrag aus der ersten Zeile. Mit unseren neuen Erkenntnissen können wir nun auslesen, dass es sich bei dem Objekt um einen Ordner (d) handelt. Der Besitzer/Erstelle darf den Ordner öffnen (r), darf darin Dateien erstellen (w) und darf den Ordner auch ausführen (x), auch wenn das hier nicht wirklich Sinn macht. Alle Mitglieder der Gruppe zu der der Ordner gehört dürfen den Inhalt des Ordners sehen (r) und den Ordner ausführen (x). Was die Gruppe nicht darf ist den Ordner ändern (w), da dieses Recht nicht gesetzt wurde. Der ganze Rest der User hat die gleichen Rechte wie die Gruppe. Ob das Sinn macht kommt immer auf den Ordner bzw. die Datei an. Nun wollen wir aber vielleicht die Rechte auf eine Datei/Ordner ändern.

Bevor ich euch allerdings den Befehl zeige, bekommen erstmal die einzelnen Rechte eine Wertigkeit. Das Ausführen (exucute, e) bekommt die Wertigkeit 1. Das bearbeiten/erstellen (write, w) bekommen die Wertigkeit 2. Als letztes bekommt das lesen/öffnen Recht (read, r) die Wertigkeit 4. Diese Wertigkeiten benötigen wir nun für die Rechtevergabe. Wir verwenden dafür den Befehl chmod. Dieser ist so aufgebaut: chmod <Besitzer><Gruppe><Rest> <Dateiname>. In die Klammern muss nun eine Zahl für die Rechte rein. Ich hangel mich mal wieder an dem Eintrag aus der ersten Zeile lang (rwxr-xr-x). Würde ich eine Datei diese Rechte geben wollen, dann würde der Befehl so aussehen:

Wie bin ich nun darauf gekommen? Die Zahl für den Besitzer (7) ist die Summe aller Wertigkeiten die wir zuvor den Rechten gegeben haben (e =1, w =2, r = 4, 1+2+4=7). Die 5 setzt sich aus dem Lesen- und dem Ausführenrecht zusammen. So könnt ihr jedem (Besitzer, Gruppe, Rest der Welt) eindeutig die Rechte zuweisen.

So jetzt haben wir schonmal den größten Teil abgehackt =) Kommen wir nun zum Blauen Teil.

Besitzer

In dem Bild am Artikelanfang sehen wir einen blau markierten Bereich. In diesem wird festgelegt wer der Besitzer der Datei ist. Dies kann jeder User den es auf dem System gibt sein sowie auch eine große Anzahl an Diensten (deamon). Wenn ihr eine neue Datei oder einen neuen Ordner anlegt, dann gehört er automatisch dem Nutzer mit dem ihr an dem System angemeldet seit. Eigentlich nicht wirklich kompliziert. Wenn ihr den Besitzer der Datei nun ändern wollt, dann verwenden wir dafür den Befehl chown.
Dieser ist wie folgt aufgebaut: chown <neuer Besitzer> <Dateiname>. Wenn ich jetzt zum Beispiel den Besitzer von Desktop auf den User Chris ändern will, dann sieht der Befehl so aus:

Das war auch schon der blaue Teil. Weiter gehts mit grün =)

Gruppen

Der grüne Bereich in dem Bild zeigt euch, welcher Gruppe diese Datei zugeordnet ist. Bei einem Linux System wird für jeden Nutzer auch eine eigene Gruppe angelegt. Dies hat zur folge das oft Nutzer und Gruppe gleich sind. Wenn wir aber in einer Firma sind, dann wollen wir vielleicht, dass alle Benutzer der Gruppe Vertrieb die Datei anschauen können oder andere Rechte auf diese hat. Aus diesem Grund zeig ich euch hier nun den Befehl mit dem ihr die Gruppe ändern könnt.
Er lautet chgrp und ist so aufgebaut: chgrp <neue Gruppe> <Dateiname>. Wenn wir nun Desktop der Gruppe Vertieb zuordnen wollen, dann würde der Befehl wie folgt aussehen:

Das war es auch schonwieder zur Gruppe. Ich gehe nun noch auf drei Spezialrechte ein. Das SUID-BIT, das SGID-Bit und das Sticky-Bit.

SUID-Bit

Das SUID (Set-User-ID-Bit) Bit ist ein Zugriffsbit für Dateien und Ordner.  Wenn dieses Bit auf ein Verzeichnis gesetzt ist gehören zum Beispiel die darin abgelegten Dateien nicht mehr dem Ersteller der Datei sondern dem Besitzer des Verzeichnisses. Kann in machen Situation von Vorteil sein. Interessant ist an dieser Stelle, dass wir das SUID-Bit auch auf Programme setzten können. Wenn wir zum Beispiel Programme haben die dem Systemadministrator root gehören, können wir mit dem setzten dieses Bites auch anderen Nutzern erlauben, dass Programm zu verwenden auch wenn sie das eigentlich nicht sollen. Das SUID-Bit können wir mit dem folgenden Befehl setzten:

 

SGID-Bit

Das SGID-Bit (Set-Group-ID-Bit) verhält sich eigentlich genauso wie das SUID-Bit. Der einzige Unterschied ist, dass wir hier diesmal von einer ganzen Gruppe ausgehen und nicht nur von einem einzelnen Benutzer. Der Befehl zum Setzten des SGID-Bites ist ganz ähnlich dem Befehl des SUID-Bites:

 

Sticky-Bit

Zu guter letzt haben wir noch das Sticky-Bit (t-Bit). Der Hintergrund ist hier etwas kompliziert. Wenn wir ein Programm haben, bei dem das t-Bit gesetzt ist, dann verweilt der Programmcode auch nach Beendigung des Programmes im Swap- oder Arbeitsspeicher. Dies hat den Vorteil, dass das Programm bei einem neuen Start schneller geladen werden kann. Darum setzt man diese Bit nur bei Programmen die oft verwendet werden. Gesetzt wird diese Recht auch wieder mit dem chmod Befehl:

 

Das war es soweit zu der Rechtevergabe unter Linux. Wichtig an dieser Stelle ist noch, dass der Verwendung des SUID-Bit, des SGID-Bit und des Sticky-Bit mit Vorsicht zu genießen ist. Durch das falsche setzten dieser Bits können relativ große Sicherheistlücken entstehen. Also setzt diese nicht ohne vorher genau drüber nachzudenken.
Falls ihr noch Ergänzungen zu dem Artikel habt oder Fehler gefunden habt, dann postet einfach schnell ein Kommentar =)

About Christian Piazzi

Ich blogge hier über alles, was mir so in meinem ITler Altag über den Weg läuft =)
Man findet mich privat bei Google+ und Twitter

Comments

  1. Sehr guter Artikel, vor allem sehr leicht verständlich.
    Anmerken möchte ich aber, dass du die Rechte bezüglich Verzeichnisses nicht ganz korrekt wiedergibst.
    Das Recht einen Ordner auszuführen hat nämlich sehr wohl einen Sinn.
    Siehe dazu: http://www.selflinux.org/selflinux/html/nutzer_unter_linux05.html#d21e1256

Speak Your Mind

*