Linux: Linux-Forum Linux: Linux-Forum

Zurück   Linux: Linux-Forum > Linux-Forum Wiki

Dateirechte (klassisch)

Aus Linux-Forum Wiki

Wechseln zu:Navigation, Suche

Auf UNIX und UNIX-artigen Systemen, somit auch auf Linux, werden Zugriffe auf Dateien (sofern man keine Zugriffskontroll-Listen benutzt) mit der Rechtevergabe an verschiedene Klassen (Arten) von Benutzern geregelt.

Inhaltsverzeichnis

Einsatzgebiete

Die Zugriffskontrolle alleine im Dateisystem erscheint relativ primitiv, gibt es in aller Regel doch eine Vielzahl von Peripheriegeräten und Netzwerkfreigaben. Man darf jedoch dabei nicht vergessen, dass unter UNIX so gut wie alles in einem Virtuellen Dateisystem (VFS) abgebildet wird - so auch der Gerätezugriff. Selbst einige Formen der Interprozesskommunikation laufen über das Dateisystem.

Somit reicht die Rechtevergabe im Dateisystem für die Alltagsarbeit in aller Regel aus, die Lücken werden durch die speziellen Anwendungen und Serverprogramme die es betrifft gefüllt (eigene Rechteverwaltung).

Manche Dateisysteme (z.B. Linux ext2) können noch eigene Attribute für die Dateien speichern - diese fliessen mit in die Rechtevergabe ein, sind aber nicht Teil der klassischen UNIX-Rechteverwaltung.

Hier nicht behandelt werden Zugriffskontrollisten (ACL), die nahezu jedes moderne UNIX-System unterstützt. Die Rechtevergabe bei ACL ist weitaus granulierter und mächtiger.

Benutzerklassen

  • Besitzer (user/owner)
  • Gruppe (group)
  • Sonstige (other)

Der Besitzer und die Gruppe einer Datei werden administrativ festgelegt.

Hier ist auch noch der Begriff der "Effektivrechte" interessant. Die effektiven Rechte sind die Rechte die beim jeweiligen Zugriff entstehen und angewendet werden. Hier wird ausgewertet zu welcher Benutzerklasse der Zugreifende gehört und welche Rechte ihm dadurch gegeben werden. Die effektiven Rechte entstehen also aus dem Zusammenspiel zwischen Datei, Rechten und Zugreifenden.

Beispiel: Der Benutzer peter ist Mitglied in der Gruppe alle. Es existiert nun eine Datei namens adressen.txt, die dem Benutzer peter und der Gruppe alle zugewiesen ist. Der Dateibesitzer darf lesen, die Gruppe darf lesen und schreiben.

Wenn nun peter auf die Datei lesend zugreifen will, darf er das - es wird ihm sowohl als Dateibesitzer (nur lesen) als auch als Gruppenmitglied (lesen und schreiben) erlaubt. Wenn peter aber schreibend auf die Datei zugreifen will, wird ihm das verwehrt. Warum? Da er gleichzeitig Eigentümer der Datei ist, gelten für ihn effektiv nur die Eigentümerrechte - hier: nur lesen.

Rechtevergabe

Die Rechtevergabe erfolgt durch schalten von Bits mit bestimmten Bedeutungen. So spricht man neben dem Leserecht auch gerne vom Readbit oder R-bit.

Symbolische Links haben keinen Einfluss auf irgendwelche Berechtigungen - für die Rechteauswertung gelten die Rechte der Datei, auf die ein symbolischer Link zeigt.

Im Gegensatz zur Verwendung von Zugriffskontrollisten werden bei der klassischen Rechtevergabe keinerlei Dateirechte vererbt.

Die Konstellation der gesetzten Rechtebits einer Datei nennt man auch Dateimodus.

Basisrechte

Die Basisrechte die man vergeben kann sind recht einleuchtend:

  • Lesen (Read): r
  • Schreiben (Write): w
  • Ausführen (Datei) bzw. Hineinwechseln (Verzeichnis) (eXecute): x

Bei Dateien

  • das Leserecht bestimmt, ob die jeweilige Benutzerklasse zum Lesen des Inhalts der Datei berechtigt ist
  • das Schreibrecht bestimmt analog, ob die jeweilige Benutzerklasse den Inhalt der Datei verändern darf
  • das Ausführungsrecht bestimmt, ob die jeweilige Benutzerklasse diese Datei ausführen ("laufen lassen") darf

Lese- und Schreibrecht sollte sich soweit von selbst erklären.

Die Ausführbarkeit von Dateien wird nicht durch irgendeine Dateinamenserweiterungen (wie EXE, COM oder BAT) festgelegt, sondern nur durch diese Kennzeichnung. Ob es Sinn macht, eine Datei die eigentlich keinen ausführbaren Programmcode enthält als Ausführbar zu kennzeichnen ist natürlich Sache des Administrators und seiner Anforderungen.

Bei Verzeichnissen

  • das Leserecht bestimmt, ob die jeweilige Benutzerklasse zum Auflisten der Verzeichnisinhalte berechtigt ist
  • das Schreibrecht bestimmt, ob die jeweilige Benutzerklasse den Inhalt des Verzeichnisses ändern darf
  • das Ausführungsrecht hat eine angepasste Bedeutung: Es bestimmt, ob die jeweilige Benutzerklasse in das Verzeichnis wechseln darf

Bei einem Verzeichnis bestimmt das Leserecht das "Lesen des Verzeichnisses" - was gleichbedeutend ist mit dem Auflisten des Inhalts. Wenn das Leserecht ohne Ausführungs- bzw. Wechselrecht gegeben ist, darf man den Inhalt auflisten, allerdings ohne die Dateirechte der Dateien im Verzeichnis zu erfahren.

Das Schreibrecht erlaubt, wie leicht zu erraten ist, Schreiboperationen im Verzeichnis. Schreiboperationen im Verzeichnis sind unter Anderem das Löschen und Anlegen von Dateien und Unterverzeichnissen, Umbenennen, etc... Vorsicht: Das bedeutet zum Beispiel dass, anders als viele glauben, eine Datei nicht durch ihre eigenen Rechte vor dem Löschen geschützt wird! Dieses Verhalten kann durch das Sticky-Bit beeinflusst werden.

Durch das Ausführungsrecht wird einfach das Recht zum Wechseln in das Verzeichnis gegeben. Wie oben schon angesprochen, kontrolliert dieses Recht beim Auflisten des Verzeichnisses auch, ob die Dateirechte des Verzeichnisinhalts (Dateien, Unterverzeichnisse) gelesen werden dürfen oder nicht.

Erweiterte Rechte

Aufgrund besonderer Anforderungen kommen zu den Basisrechten noch einige weitere Rechte hinzu.

  • SUID: Festlegen der Prozessrechte (Benutzer-ID) bei Ausführung (eines Programmes) - Set User ID on execution
  • SGID: Festlegen der Prozessrechte (Gruppen-ID) bei Ausführung (eines Programmes) - Set Group ID on execution
  • Sticky-Bit: Beeinflussung von ausführbarem Programmcode (Datei) bzw. des Verzeichnisschreibrechts (Verzeichnis)

Bei Dateien

SUID/SGID: Prozesse, Programme, Scripte - alles läuft unter UNIX mit bestimmten Benutzerrechten ab, anders könnte man nicht kontrollieren, ob der Prozess X Zugriff auf die Datei Y nehmen darf. Wenn ein Benutzer ein Programm startet, wird dieses Programm mit den Rechten des Benutzers laufen, das heisst, dieses Programm hat alle Rechte des Benutzers und seiner Gruppe. Es gibt aber Fälle, in denen ein Benutzer ein Programm startet, das garnicht mit seinen Rechten laufen soll (z.B. ping oder sudo). Hier kommen die Rechte der SUID bzw. SGID-Bits zum Tragen. Wird eine Datei ausgeführt, bei der das SUID-Bit gesetzt ist, wird das Programm mit den Benutzerrechten des Besitzers der Datei laufen. Analog ist es mit dem SGID-Bit.

Das Setzen des Sticky-Bits sorgt bei ausführbaren Dateien dafür, dass der Programmcode nach beendigung des Programms im Speicher bleibt. Dies hat meines Wissens nach keinerlei praktische Bedeutung mehr.

Bei Verzeichnissen

SUID/SGID: Das SUID-Bit hat bei Verzeichnissen meines Wissens nach keine Bedeutung. Das SGID-Bit allerding schon: Im Normalfall wird die Zugehörigkeit einer Datei die ein Benutzer erstellt automatisch auf Besitzer=Benutzer und Gruppe=Benutzergruppe gesetzt. Das heisst, diese Datei gehört dem jeweiligen Benutzer und seiner Gruppe. Ist nun in einem Verzeichnis das SGID-Bit gesetzt, so wird die Gruppe von neu erzeugten Dateien grundsätzlich auf die Gruppe gesetzt, die für das Verzeichnis festgelegt ist.

Das Setzen des Sticky-Bits beeinflusst die Schreibrechte in Verzeichnissen. Der Normalfall ist dass ein Benutzer der Schreibrechte in einem Verzeichnis hat auch alle sich im Verzeichnis befindlichen Einträge (Dateien, Unterverzeichnisse) löschen darf. Das gesetzte Sticky-Bit schränkt nun dieses Recht ein - und zwar auf alle Einträge, die dem Benutzer selbst gehören. Genau aus diesem Grund sollte das allgemein zugängliche Verzeichnis /tmp das Sticky-Bit gesetzt haben: Jedermann darf dort Dateien anlegen, aber nur seine eigenen Dateien wieder löschen.

Notation

Symbolisch bei ls

Der Befehl ls erzeugt, sofern mit dem Parameter -l aufgerufen, ein Dateilisting mit ausführlicher Beschreibung der Metadaten der einzelnen Dateien (Metadaten bedeutet hier "Daten über die Daten", also Dateigröße, Dateirechte, Dateityp, ...).

Darstellung am Beispiel eines Phantasieverzeichnisses /home/test (Befehl: ls -l /home/test):

d  rwx  rwx  rwx   2   root   users   4096   2006-01-03 08:15   /home/test
|  |    |    |         |      |
|  |    |    |         |      +----- Gruppe
|  |    |    |         |
|  |    |    |         +------------ Besitzer
|  |    |    |
|  |    |    +---------------------- Rechte für Sonstige
|  |    |
|  |    +--------------------------- Rechte für Gruppe
|  |
|  +-------------------------------- Rechte für Besitzer
|
+----------------------------------- Dateityp (hier: Directory, "Verzeichnis")


Wie oben erläutert, zeigt ls -l deutlich die vergebenen Rechte und die Eigentumsverhältnisse an. Die Bits für die Rechtevergabe werden dabei Symbolisch durch ein Zeichen repräsentiert:

- kein Bit an der entsprechenden Stelle gesetzt
r Leserecht
w Schreibrecht
x Ausführungsrecht bzw. Recht zum Verzeichniswechsel
s SUID- bzw. SGID-Bit gesetzt (wenn Ausführungsrecht vorhanden), nur bei Besitzer oder Gruppe
t Sticky-Bit, nur bei Sonstige
S SUID- bzw. SGID-Bit gesetzt, aber kein Ausführungsrecht, nur bei Besitzer oder Gruppe
T Sticky-Bit ohne Ausführungsrecht (Recht zum Verzeichniswechsel), nur bei Sonstige


Nur der Vollständigkeit halber hier noch die Übersicht der Dateitypen (der Dateityp ist nicht an der Rechtevergabe beteiligt!):

- Reguläre Datei
d Verzeichnis (Directory)
b Blockorientierte Spezialdatei (Gerätedatei)
c Zeichenorientierte Spezialdatei (Gerätedatei)
l Symbolische Verknüpfung
p FIFO-Puffer (Named Pipe)
s UNIX-Sockeldatei (Socket)

Symbolisch bei chmod

chmod ist der Befehl zum Setzen der Zugriffsrechte (Dateimodus) einer Datei (CHange MODe). Die zu setzenden Rechtebits kann man symbolisch (als Zeichen) angeben. Die verwendeten Zeichen für die Rechte-Bits sind identisch mit den Zeichen, wie ls sie bei der Ausgabe verwendet (siehe oben).

Um die Rechte den einzelnen Benutzerklassen zuzuordnen, benutzt chmod die Symbole u (user), g (group), o (other) und a (all). Um Rechte zu setzen wird das Pluszeichen verwendet, um Rechte zu nehmen, das Minuszeichen. Mehrere Angegebene Klassen werden durch Kommata getrennt.

Das Resultat sieht dann zum Beispiel so aus:

chmod u+rwx,g-w,o-rwx /home/test

Diese Angabe bedeutet, dass für die Klasse user (Besitzer) Schreib-, Lese- sowie Ausführungsrechte gegeben werden. Der Klasse group (Gruppe) wird das Schreibrecht entzogen, und alle anderen (Sonstige) gehen komplett leer aus (alle Rechte entzogen).

Oktal

Die oktale Darstellung erfordert etwas Übung, wenn man sie beherrscht, ist es allerdings auch die schnellste Möglichkeit, Rechte zu formulieren. Dazu muss man etwas Binärrechnen können, da die jeweiligen Rechte-Bits in einer Klasse durch die Bit-Wertigkeit von einer 3-Bit-Zahl dargestellt werden und oktal ausgedrückt werden. Das heisst, eine oktale Stelle pro Klasse. Die Sonderrechte werden zudem auch so dargstellt, was zum Schluss eine 4-stellige Oktakzahl ergibt.

Wertigkeiten

Bit Wert Sonderrechte Benutzer Gruppe Sonstige
1 1 Sticky-Bit Ausführen Ausführen Ausführen
2 2 SGID Schreiben Schreiben Schreiben
3 4 SUID Lesen Lesen Lesen

Beispiel

Es sieht auf den ersten Blick komplizierter aus als es ist. Nehmen wir zum Beispiel die Rechte, wie sie ls als rwxr-x--- darstellen würde:

  • keine Angabe von Sonderrechten
  • Besitzer: Lesen, Schreiben, Ausführen
  • Gruppe: Lesen, Ausführen
  • Sonstige: nichts

Aus diesen Angaben kann man sich nun die Bits zusammenstellen:

  • jede Klasse (Sonderrechte, Besitzer, Gruppe, Sonstige) wird gesondert berechnet und ergibt zum Schluss eine eigene oktale Stelle
  • jedes gesetzte Bit (in der Tabelle "X") fliesst mit der jeweiligen Wertigkeit in die Berechnung der Klasse ein
  • jedes ungesetzte Bit (in der Tabelle "-") fliesst mit 0 (Null) in die Berechnung der Klasse ein
  • das Ergebnis hat 4 (vier) Stellen, allerdings können alle Stellen von links weggelassen werden, die aufeinanderfolgend 0 (Null) sind: aus 0060 mach 60 (fehlende Stellen von links werden als Null angenommen)


Bit Wert Sonderrechte Besitzer Gruppe Sonstige
1 1 - X X -
2 2 - X - -
3 4 - X X -
0 + 0 + 0 1 + 2 + 4 1 + 0 + 4 0 + 0 + 0
0 7 5 0

Der oktale Modus einer Datei mit dem symbolischen Modus rwxr-x--- wäre somit 0750, oder auch 750.

Befehle

ls

Der Befehl ls (LiSt) wurde vorhin schon angesprochen. Er hat mit der Verwaltung der Dateirechte eigentlich nichts zu tun, nur mit deren Anzeige. Wichtig ist, dass ls das nur im sog. "langen Listenformat" mit der Option -l macht.

Beispiel (die Option -d ist hier nur dazu da, um ls auf das Verzeichnis selbst zu beschränken):

$ ls -d -l /home/bonsai/
drwxr-xr-x 85 bonsai bonsai 4096 2008-03-26 23:24 /home/bonsai/

chmod

chmod (CHange MODe) wurde auch schon angesprochen. chmod versteht sowohl eine symbolische Angabe von Dateirechten (siehe oben), als auch eine oktale. Die Syntax ist

chmod MODUS DATEI

Aufgrund der Möglichkeit, symbolische oder oktale Notation für den Modus zu verwenden, wäre

chmod u+rwx,g+rw-x,o+r-wx /home/bonsai/test.txt

gleichbedeutend mit

chmod 764 /home/bonsai/test.txt

chown

chown (CHange OWNer) ist eigentlich zum Ändern des Besitzereintrages einer Datei gedacht:

chown BESITZER DATEI

Auf GNU-Systemen (so auch GNU/Linux) kann der chown-Befehl trotzdem auch die Gruppe abändern. Sie wird von der Besitzerangabe durch einen Doppelpunkt getrennt:

chown BESITZER:GRUPPE DATEI

Man kann also damit sowohl nur den Besitzer

chown bonsai /home/bonsai/test.txt

als auch beides

chown bonsai:users /home/bonsai/test.txt

ändern.

chgrp

chgrp (Change GRouP) wird, wie der Name schon vermuten lässt, zum Abändern der Gruppenzugehörigkeit einer Datei verwendet.

chgrp GRUPPE DATEI

Beispiel:

chgrp users /home/bonsai/test.txt

Artikelkritik

Kritik und Anregungen zu diesem Artikel bitte im Forum als PN an TheBonsai.

Siehe auch


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:37 Uhr.



Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0 ©2009, Crawlability, Inc.