ein Kapitel zurück                                           ein Kapitel weiter

Zugriffsrechte

In den Kapiteln zuvor haben sie viel über Zugriffsrechte gelesen. Wie sie an diese Informationen kommen und wie sie diese verändern können. Leute die mit Linux/Unix vertraut sind, können dieses Kapitel getrost überspringen. Für Umsteiger oder aber Neulinge auf Linux sind die Zugriffsrechte auf den ersten Blick ein wenig verwirrend. Diese Kapitel soll ein wenig Abhilfe schaffen und einen kleinen Überblick dazu liefern.

Wo kommen die Zugriffrechte her?

Wenn sie in der Konsole ls -l eingeben werden Ihnen als erstes die Zugriffrechte der einzelnen Dateien und Verzeichnisse ins Auge stechen. Wie sie schon ein paar Kapitel vorher erfahren haben, besteht eine Datei in Linux aus ein Haufen von Blöcken und den I-Nodes. Die Blöcke enthalten dabei die Informationen IN der Datei und die I-Nodes ÜBER der Datei. Aus Sicht der Rechte befinden sich in der I-Node die User-ID, Group-ID und die 12 Rechtebits (3 Bits mit der Bezeichnung sst und 3mal3 Allzweckbits). Der Zugriff auf eine Datei erfolgt durch den Kernel. Dieser entscheidet dann anhand der Rechtebits in der I-Node, ob ein Zugriff auf die Datei ausgeführt wird oder nicht.

Wo werden die Rechte geprüft?

Die Rechte werden mit der Funktion permission() überprüft die sie in...

/usr/bin/linux/fs/namei.c

...finden. Als Funktionsparamter werden der Funktion ein Zeiger auf die I-Node übergeben und welche Art des Zugriffes auf der Datei erfolgen soll.

Wie kann man die Rechte lesen?

Dies ist jetzt nicht im Sinne von Funktionen gedacht (diese haben sie schon Teilweise kennengelernt), sondern im Wörtlichen Sinne.

Wenn sie in der Konsole eingeben ls -l werden Ihnen die einzelnen Files im Verzeichnis mit den Rechten aufgelistet. Dies sieht dann etwa so aus....

drwxrwxrwx    2 tot      tot          4096 Nov 29 22:12 backups_txt_dat/
drwx------    5 tot      tot          4096 Okt 15 19:28 evolution/
-rw-rw-rw-    1 tot      tot          7932 Dez 11 00:10 files.txt
lrwxrwxrwx    1 tot      tot            11 Aug 10 02:20 floppy -> /mnt/floppy/
-rwxrwxrwx    1 tot      tot          1627 Nov 29 04:18 hallo.pl*
drwxrwxrwx    2 tot      tot          4096 Nov 20 17:17 highlevel/
-rw-r--r--    1 tot      leben        1232 Dez 11 02:14 out.txt
-rwxrwxrwx    1 tot      tot          9601 Nov  6 18:52 perl2html.pl*
drwxr-xr-x    2 tot      tot          4096 Nov  9 18:48 pngs/
-rw-r--r--    1 root     root         2734 Aug 17 19:42 pppoe.log
-rwxr-xr-x    1 tot      tot         14384 Dez 11 00:00 stat*
-rw-rw-rw-    1 tot      tot           631 Dez 11 00:00 stat.c

Beispielsweise...

-rw-r--r--     1 tot      leben        1232 Dez 11 02:14 out.txt

-rw-r--r-- sind die Zugriffrechte auf diese Datei. Das erste Zeichen steht für den Dateityp. Hier bei uns ein '-', also ein normale Datei. Würde hierfür ein 'd' stehen, dann handelt es sich um ein Verzeichnis. Steht ein 'l' als erstes Zeichen, haben wir einen symbolischen Link. Die nächsten 3 Zeichen rw- stehen für den Dateieigentümer. In diesem Fall hat der Eigentümer das Recht die Datei zu lesen (r=readable) und zu beschreiben (w=writable). Das 3 Zeichen könnte ein 'x' (executable) sein. x bedeutet Ausführrecht. Die nächsten 3 Bits gehören der Gruppe, die hier nur Leserecht haben. Die letzten 3 Bits stehen für alle Anderen (Others) die ebenfalls nur aus dieser Datei lesen können. tot ist der Besitzer dieser Datei und der Name der Gruppe lautet leben.

Wie kann man die Zugriffsrechte ändern?

Auch hierzu haben sie berreits die C-Funktion chmod kennengelernt. Wir werden hier das gleichnamige Shell-Bulletin verwenden.

Wollen sie zum Beispiel die Zugriffrechte des Eigentümers ändern, (Vorrausgesetzt sie sind der Eigentümer oder root) können sie dies so machen.......

chmod u-w out.txt
ls -l out.txt
-r--r--r--     1 tot      leben        1232 Dez 11 02:14 out.txt

Nun haben wir das Schreibbit des Eigentümers entfernt. 'u' steht für User. Mit dem '-' entfernen wir das Bit 'w' in der Textdatei out.txt

Wollen wir das ganze wieder Rückgängig machen, gehen wir folgendermaßen vor......

chmod u+w out.txt
ls -l out.txt
-rw-r--r--     1 tot      leben        1232 Dez 11 02:14 out.txt

Eigentlich ganz logisch. Mit dem '+' haben wir das 'w'-bit für Scheibrecht wieder gesetzt. Ein dritte Möglichkeit außer mit '+' und '-' wäre '='

Mit '=' werden exakt die Rechte so angegeben wie sie diese Fordern. Beispiel....

chmod u=rx out.txt
ls -l out.txt
-r-xr--r--     1 tot      leben        1232 Dez 11 02:14 out.txt

Damit haben wir für den Eigentümer die Ausführrechte und Leserechte gesetzt.

Die Kürzel für die Gruppe lautet 'g'. Beispiel.......

chmod g-r out.txt
ls -l out.txt
-rw----r--     1 tot      leben        1232 Dez 11 02:14 out.txt

Hiermit hat die Gruppe leben überhaupt keine Zugriffsrechte mehr auf die Datei out.txt Wollen sie hingegen die Zugriffrechte für alle Anderen (other) setzen, verwenden sie den Buchstaben 'o'........

chmod o+w out.txt
ls -l out.txt
-rw----rw-     1 tot      leben        1232 Dez 11 02:14 out.txt

Somit haben alle Anderen das Lese-und-Schreibrecht. Natürlich können sie auch die Rechte für alle auf einmal vergeben......

chmod a+rwx out.txt
ls -l out.txt
-rwxrwxrwx     1 tot      leben        1232 Dez 11 02:14 out.txt

Somit haben wir alle Rechte für Jeden gesetzt mit dem Buchstaben 'a'. Umgekehrt gehts natürlich auch.......

chmod a-wx out.txt
ls -l out.txt
-r--r--r--     1 tot      leben        1232 Dez 11 02:14 out.txt

Es ist auch möglich das s-bit zu setzen. Mit diesem Bit können praktisch normale User die Datei ausführen als wären sie der Superuser. Setzen können sie diese Bit nur für den Eigentümer oder der Gruppe.....

chmod a+w,u+s out.txt
ls -l out.txt
-rwsrw-rw-     1 tot      leben        1232 Dez 11 02:14 out.txt

Das s-bit wird anstatt des 'x' verwendet.

Nun das ganze kann man natürlich auch mit oktalen Zahlen machen. Oktalen Zahlen sind im Gegensatz zum Dezimalsystem (0-9) Zahlen von 0-7
Und sich die Zugriffrechte von 0-7 festlegen, eignet sich die Oktale Darstellung dazu prima.

Mit 3 Bits können wir Zahlen im Wert von 0-7 darstellen......

Bitwert 4 2 1
Bit 1 1 1


In diesem Fall wird die Zahl 7 dargestellt da alle Bits gesetzt sind. Fügen wir noch 'rwx' hinzu.....

Dateirechte r w x
Bitwert 4 2 1
Bit 1 1 1


Ich schätze mal jetzt dämmert es langsam. Kommen wir nun zu dem Recht 777 (Recht für alle)....

4 2 1 4 2 1 4 2 1
r w x r w x r w x
1 1 1 1 1 1 1 1 1




violett = Eigentümer
hellblau = Gruppe
Gelb = Andere

Wenn sie nun das Recht 750 setzen wollen (Eigentümer darf alles, Gruppe darf Lesen und Ausführen aber nicht Schreiben und die anderen dürfen gar nichts) sieht dies folgendermaßen aus....

r w x r w x r w x
1 1 1 1 0 1 0 0 0


Auf diese Tutorial kam die Frage : "...das mit den einzelnen Bits ist mir klar aber trotzdem verstehe ich nicht wie das System aus der Zahl 750 7 und 5 und 0 macht?">
Nun um diese Zahl 750 handelt es sich um eine Oktalzahl (siehe Teil XX). Und Oktalzahlen gehen im Gegensatz zu unserem Dezimalsystem von 1 bis 8 anstatt wie bekannt 1 bis 10. Oktalzahlen haben somit eine Länge von 3 Bits.

Hierzu noch schnell ein Tabelle zum Nachschlagen für die Darstellung der Rechte als Oktalzahlen...

--- 0 --x 1 -w- 2 -wx 3 r-- 4 r-x 5 rw- 6 rwx 7

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf