UNIX: Dateieigenschaften

Willemers Informatik-Ecke

Der Begriff Datei ist unter UNIX sehr allgemein. Eigentlich ist fast alles als Datei ansprechbar. Seien es Gerätedateien (special files), die den Kontakt zur Peripherie herstellen oder Verzeichnisse, die auch nur eine Sonderform von Dateien sind. Alle haben jedenfalls Eigentümer, Rechte und andere Eigenschaften.

Eigentümer wechseln: chown und chgrp

Jede Datei kennt ihr Herrchen

Jede Datei hat in seinem Dateieintrag die Information, welchem Benutzer und welcher Gruppe sie gehört. Um genau zu sein, speichert die Datei die User-ID und die Group-ID des Benutzers, wie sie in der /etc/passwd des lokalen Rechners hinterlegt sind. Damit in einem lokalen Netzwerk die Eigentümerbezeichnungen konsistent sind, ist es wichtig, dass Benutzer auf jeder Maschine auf der sie angemeldet sind, die gleiche User-ID haben. Gleiches gilt für die Group-ID. Eigentümer und Gruppe werden in den Eigenschaften einer Datei gespeichert, weil man für den Eigentümer und die Gruppe einer Datei unterschiedliche Berechtigungen einstellen kann als für den Rest der Welt. Eine neue Datei erhält immer die User-ID und die Standard-Group-ID des Anwenders, der sie erzeugt. Dies gilt beispielsweise auch, wenn eine Datei kopiert wird. Aus Sicht des Systems wird beim Kopieren eine neue Datei angelegt, die den Inhalt der alten Datei hat. Bei mv liegt der Fall anders, weil hier nur der Verzeichniseintrag an eine andere Stelle bewegt wird.

chown

Um einer Datei oder einem Verzeichnis einen neuen Besitzer zuzuordnen, gibt es den Befehl chown (change owner). Der erste Parameter ist der neue Benutzername. Es folgen die Dateien, die dem Benutzer zugeordnet werden sollen. Zur Änderung des Eigentümers ist nur der bisherige Eigentümer und der Systemadministrator root berechtigt.

chown Benutzer  Dateien

chgrp

Analoges gilt für chgrp (change group). Eine Datei gehört nicht nur einem Benutzer, sondern auch einer Gruppe. Auf diese Weise kann einer beschränkten Gruppe von Personen ein Recht auf die Datei zugewiesen werden, die die anderen Benutzer nicht haben. Die Group-ID, die die Datei hält, kann mit dem Befehl chgrp geändert werden. Berechtigt ist ein Mitglied der Gruppe oder root.

chgrp Gruppe  Dateien 

Man kann auch Benutzer und Gruppe bei einigen Varianten von chmod mit einem Befehl setzen.

chown Benutzer:Gruppe  Dateien

Berechtigungen: chmod

Jede Datei hat Informationen darüber, ob sie gelesen, geschrieben oder ausgeführt werden kann. Diese Rechte existieren jeweils für Eigentümer, Gruppe und alle restlichen Benutzer. Durch den Befehl ls -l kann man die Rechte von Dateien als eine Gruppe von 9 Buchstaben oder Minuszeichen sehen.

Besitzer Gruppe Rest
r w x r w x r w x

Die Bedeutung der Buchstaben bedeutet bei Dateien:

Recht Bedeutung für Dateien
x Die Datei ist ausführbar, also ein Programm oder ein Skript
r Die Datei darf gelesen werden
w Die Datei darf geschrieben werden

Die Ausgabe eines ls -l zeigt die Rechte ab dem zweiten Zeichen in der oben genannten Reihenfolge für Benutzer, die Gruppe und den Rest der Welt.

-rwxr-----    1 arnold   users       13654 Jan 17 04:41 a.out
drwxr-x---    2 arnold   users        4096 Mär  6 23:35 awk
-rwxr-xr-x    1 arnold   users       13856 Feb  8 10:48 copy
-rw-r--r--    1 arnold   users         175 Feb  8 10:48 copy.c
drwxr-xr-x    2 arnold   users        4096 Jan 13 12:37 dir
-rw-rw-r--    1 arnold   users          98 Apr 13 13:55 doppel.c
-rwxr-xr-x    1 arnold   users       13516 Feb  8 21:25 env
-rw-r--r--    1 arnold   users         165 Feb  8 21:25 env.c
drwx------    2 arnold   users        4096 Feb 21 14:13 ipc
drwxr-xr-x    2 arnold   users        4096 Feb 13 13:51 make
-rwxr-xr-x    1 arnold   users       13489 Apr 11 21:34 moin
-rw-r--r--    1 arnold   users          60 Apr 13 13:55 moin.c

Ein paar Dateien sollen herausgegriffen werden. Die Datei a.out erlaubt dem Besitzer, aber sonst niemandem, zu schreiben, zu lesen und auszuführen. Dagegen darf die Datei copy zusätzlich sowohl von der Gruppe users als auch vom Rest der Welt gelesen und gestartet werden, aber nicht geschrieben. Die Datei copy.c dagegen ist ein Quelltext mit ganz typischen Rechten für Datendateien. Der Besitzer darf sie lesen und schreiben, alle anderen nur lesen. Die Rechte werden als Oktalzahlen dargestellt. Oktalzahlen sind eine Sonderform der dualen Zahlendarstellung, in der 3 Bit eine Ziffer ergeben. Mit 3 Bit lassen sich die Zahlen von 0 bis 7 darstellen. Das heißt, dass jeweils eine rwx Gruppe zu einer Zahl umgebildet wird. So ergibt sich:

r w x Kennzahl Bedeutung
0 0 0 0 keine Rechte
0 0 1 1 Ausführung, aber weder Lesen noch Schreiben
0 1 0 2 Nur Schreibrecht
0 1 1 3 Schreib- und Ausführungsrecht, nicht Lesen
1 0 0 4 Nur Leserecht
1 0 1 5 Lese- und Auführungsrecht
1 1 0 6 Lese- und Schreibrecht, kein Ausführungsrecht
1 1 1 7 Lese-, Schreib- und Ausführungsrecht

Eine Besonderheit ergibt sich für Verzeichnisse. Hier bedeutet das Fehlen(!) einer Berechtigung:

Recht Bedeutung für Verzeichnisse
x In dieses Verzeichnis darf nicht gewechselt werden
r Die Dateinamen des Verzeichnisses können nicht gelesen werden
w Es darf weder eine Datei gelöscht noch umbenannt oder hinzugefügt werden

Auf den ersten Blick erscheinen die Unterschiede zwischen den Datei- und den Verzeichnisrechten kompliziert. Wenn man sich ein Verzeichnis aber als eine Datei vorstellt, in der die Dateinamen abgestellt sind, ist der Zusammenhang mit den Schreib- und Leserechten logisch. Wenn man das Verzeichnis nicht lesen kann, kann man auch die Dateinamen nicht anzeigen. Darf das Verzeichnis nicht geschrieben werden, kann man auch keine Einträge hinzufügen oder löschen oder umbenennen. Die Rechte von Dateien oder Verzeichnissen kann man mit dem Kommando chmod (change mode) verändert werden. Beispiel:

chmod 754 meinskript

Mit diesem Befehl erhält die Datei meinskript die Rechte rwxr-xr--. Das bedeutet, dass der Eigentümer die Datei lesen, schreiben und ausführen darf. Die Mitglieder der besitzenden Gruppe dürfen die Datei einsehen und starten, der Rest der Welt darf die Datei nur lesen.

Auftritt unter fremder Lizenz: User-ID Bit

Bei Programmen kann beim chmod vor die drei Ziffern eine 4 gestellt werden. Das bewirkt, dass das Programm unter der Benutzerkennung des Eigentümers ausgeführt wird, egal, wer das Programm gestartet hat. Man spricht vom Set-User-ID-Bit oder vom SUID. Dies wird verwendet, wenn man auf bestimmte Daten nur mit dem entsprechenden Programm zugegriffen werden soll. Die Daten können auf 600 gesetzt werden, sodass sie nur der Eigner verändern darf. Ein Programm, dass das User-ID-Bit gesetzt hat, darf niemals für jemand Fremdes beschreibbar sein. (Der Grund ist eine Übungsaufgabe für den interessierten Leser.) Beispiel für das Setzen des User-ID Bits:

chmod 4755 myprog

Die Datei myprog würde beim ls -l folgende Rechte haben:

-rwsr-xr-x   1 arnold   users        0 Dez  7 00:10 myprog

Statt dem x steht also ein s bei den Benutzerrechten.

Buchstaben statt Zahlen

Wem das Rechnen in Dualzahlen gar nicht liegt, der hat auch die Möglichkeit, chmod mit Buchstaben zu steuern. In Form einer Zuweisung wird auf der linken Seite des Operators die Zielgruppe genannt. Auf der rechten Seite stehen die Rechte. Als Zielgruppe gibt es den Eigentümer (u für user), die Gruppe (g) und alle übrigen (o für others). Mit einem a (a für alle) oder durch Weglassen der Zielgruppe kann man alle Zielgruppen auf einmal ansprechen.

Ziel Operator Recht
u = r
g + w
o - x
a s

Das Verändern eines Rechtes wird durch einen Ausdruck herbeigeführt, der sich aus den in der Grafik gezeigten drei Balken zusammensetzt. Das Gleichheitszeichen bewirkt ein Setzen, das Minuszeichen ein Entziehen und das Pluszeichen das Hinzufügen eines Rechtes. Die Rechte sind mit r, w, und x wenig überraschend. Das s ist das User-ID Bit. Beispiele für die Ausdrücke, die statt der Oktalzahl beim chmod verwendet werden können:

Term Bedeutung
a=r setzt für alle Gruppen nur lesen
u+w Der Besitzer erhält zusätzlich Schreibrecht
o-r Der >>Welt<< wird das Leserecht entzogen
go=rx Der Gruppe und der >>Welt<< wird Lese- und Ausführungsrecht erteilt

Der Nachteil der Buchstabenschreibweise ist, dass manche Kombination mit zwei Befehlen gegeben werden muss. Soll eine Datei so gesetzt werden, dass der Besitzer lesen und schreiben, alle anderen aber nur lesen sollen, dann ist 644 natürlich kürzer als a=r und im zweiten Schritt u+w. Dafür ist es mit Ziffern recht umständlich, alle Ausführungsrechte der Dateien im aktuellen Verzeichnis zu entziehen und dabei die anderen Rechte nicht zu verändern.

Maske für die Rechte neuer Dateien: umask

Mit dem Befehl umask wird festgelegt, welche Rechte beim Anlegen von Dateien standardmäßig nicht gesetzt werden sollen. Im Allgemeinen ist dieser Wert 022 und braucht nur in den seltensten Fällen geändert werden. Der Wert 022 bedeutet, dass beim Erstellen von Dateien für die Gruppe und für den Rest das Recht des Schreibens nicht angelegt wird. Der Befehl umask ohne Parameter zeigt den geltenden Wert. Wird ein Parameter angegeben, wird die Maske entsprechend geändert.

umask 002

Mit diesem Befehl wird verhindert, dass neu erzeugte Dateien vom Rest der Benutzer verändert werden. Der Besitzer und die Gruppe erhält dadurch Schreibrecht.

Neuer Zeitstempel: touch

Der Befehl touch (engl. berühren) aktualisiert die Zugriffszeit einer Datei auf den jetztigen Zeitpunkt. Wenn die Datei bereits existierte, ist der Effekt derselbe, als wäre sie neu, aber unverändert geschrieben worden.

gaston> ls -l moin.c
-rw-r--r--    1 arnold   users          60 Apr 13 13:55 moin.c
gaston> touch moin.c
gaston> ls -l moin.c
-rw-r--r--    1 arnold   users          60 Jun 29 10:13 moin.c
gaston> date
Sam Jun 29 10:13:17 CEST 2002
gaston>

Dateien anlegen

Gab es die angegebene Datei bis dahin noch nicht, wird sie angelegt. Sie ist dann leer, hat also eine Größe von 0 Byte. Die Möglichkeit Dateien anzulegen ist beispielsweise bei Protokolldateien wichtig. Die meisten Programme, die in solche Dateien schreiben, sind nicht in der Lage, die Datei auch zu erzeugen.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru
Verlagsrechte bei galileo computing


Homepage (C) Copyright 2002 Arnold Willemer