Anders als bei MacOS, wo jeder der gerade am Mac sitzt alle Datei beliebig manipulieren kann (sofern er die notwenigen Kenntnise hat), darf unter Linux jeder Nutzer mit jeder Datei nur bestimmte Aktionen ausführen. Dazu sind sind für jede Datei Zugriffsrechte festgelegt. Und damit diese Zugriffsrechte nicht für alle Nuzter gleich sind, gibt es verschiedene Benutzer, die in verschiedenen Benutzergruppen organisert sind.
Unter Linux können auf einem Rechner über 30000 verschiedene Benutzer angelgt werden. Jeder dieser Nutzer hat dabei einen eindeutigen Benuzternamen, eine eindeutige Benutzernummer (UID für User-IDentification), die man sich aber nicht merken muss, ein eigenes Arbeits- oder Heimatverzeichnis und vor allem ein eigenes Passwort. Ausserdem gehöhrt er einer (primären) Benutzergruppe an. Dies alles wird im einfachsten Fall in der Datei /etc/passwd gespeichert.
Neben den "normalen" Benuztern, gibt es in einem Linuxsystem noch eine Reihe weiterer Benuzter, die
zum Teil mit speziellen Rechten ausgestattet sind. Allen vorran ist diese der Nuzter root
.
Dies ist der Systemadministrator. Dieser darf unabhängig von den Zugriffrechten mit jeder Datei
alles machen. root
kann der Zugriff auf Dateien nicht verweigert werden.
Ein weitere Spezialnuzter ist 'nobody'. Bei allen "anonymen" Zugriffen auf das System, also z.B. als Gast unter Netatalk oder via anonymous ftp, greift man als Benutzer 'nobody' zu. Nobody hat nur auf soilche Dateien Zugriff, die explizit für alle freigegeben wurden (und auf solche die nobody selbst angelegt hat). Damit ist dieser Benutzer eine ARt 'Sandbox', mit der man nur wenig (wenn überhaupt) am System kaputt machen kann.
Weitere vom System eingerichtete Benuzter, wie z.B. daemon, mail, news, usw. sind dazu eingerichtet Zugriff auf bestimmte Systemdateien zu haben, auf die der normale Nuzter nicht zugreifenn soll. Sie tun i.d.R. für den normalen Benutzer unsichtbar ihren Dienst. Man findet aber ihre Einträge in der /etc/passwd.
Wenn ein Nutzer nun eine Datei anlegt, so gehöhrt diese erst einmal ihm. D.h. er darf die Zugriffrechte festlegen. Er kann den lesenden Zugrif auf eine Datei freigeben, den schreibenden und den ausführenden. In der Kommanodzeile (und auch bei der Anzeige in Dateimanagern) werden diese Rechte, durch ein 'r','w' bzw. 'x' dargestellt. Ein nicht eingeräumtes Recht wird durch ein '-' symbolisert.
Beim festlegen der Rechte kann der Nuzter, diese für sich einschränlen, für die Gruppe (dazu
gleich mehr) und für den Rest der Welt getrennt einschränken.
Damit ergibt sich in der Anzeige der Rechte (z.B. im kfm
oder mit ls -l
)
zum Beispiel folgendes Aussehen:
-rwxr-xr- ich wir ....
Der erste '-' gibt dabei den Dateityp an ('-' steht für normale Dateo, 'd' für Verzeichnis).
Dannach kommen die drei Buchstaben für den Eigentümer der Datei.
In diesem Falldarf der Eigentümer die Datei lesen (r), beschrieben (w) und ausführen(x).
Angöhriger der Gruppe dürfen nur lesen (r) und ausführen(x) und alle anderen dürfen nur
lesen. Wem diese Datei gehöhrt verrät einem die nächsten beiden Angaben. Sie gehört dem
Nuzter ich
und der Gruppe wir
.
Es ist mitunter ja wünschenswert meherer Nuzter zu einer Gruppe zusammenzuschliessen, damit zum Beispiel alle Gruppenmitglieder dieselben Datei zugreifen können, ohne dass gleich alle Welt dies auch kann. Dazu gibt es die Benuztergruppen. Jede Gruppe besteht zunächst aus einem Namen und einer Identikationnummer (GID=Group-ID). Jeder Nuzter ist in mindestens einer Gruppe, nämlich der Gruppe, die bei ihm in der Datei /etc/passwd gespeichert ist. Das dies die erste Gruppe ist, zu der ein Benuzter gehört, nennt man sie auch seine "primäre" Gruppe.
Die Information welche Gruppen mit welchen IDs es gibt ist in der Datei /etc/group gespeichert. Selbstverständlich kann ein Benuzter auch in mehreren Gruppen Mitglied sein. Da in der /etc/passwd nur eine Gruppe eingetargen werden kann. verfährt man bei den weiteren Gruppen umgekehrt. In der Datei /etc/group werden am Ende einer Zeile alle Benutzer eingetragen, die zu dieser Gruppe gehören, beim denen diese Gruppe aber nicht die primäre ist.
Wenn man eine Datei anlegt, so wird nicht nur der Besizter der Datei festgelegt, sondern auch die Gruppe, der diese Datei gehören soll. Dies ist zunächst die primäre Gruppe desjenigen, der dei Datei anlegt. Man kann aber nachträglich dies ändern.
Die oben erwähnten Zugriffsrechte für die Gruppe bezieht sich immer auf die Mitglieder
der Gruppe, der die Datei gehört. dIm obigen Beispiel heisst das, dass alle Mitglieder
der Gruppe wir
auf die Datei lesend und auführende zugreifen dürfen,
auch wen ich
gar nicht mitgliched von wir
ist.
Im folgenden möchte ich auf einige Feinheiten des Rechtesystems von Linux eingehen:
Wenn man für eine Datei das Recht hat diese auszuiführen (x an der entsprechenden Stelle) gesetzt, dann geht Linux davon aus das dieses datei auch ausführbar ist. Sollte es eine Tecxtdatei sein, so wird Linux versuchen sie als Shell-Skript abzuarbeiten.
Auch wenn es auf den ersten Blick widersinnig erschein, man darf eine Datei löschen, auch wenn man keinen Schreibberechtigung auf diese Datei hat. Das liegt daran, das das Löschen einer Datei ein Schriebzugriff auf das Verzeichnis ist. Wenn man für das Verzeichnis schreibrechte hat, darf man alle Datei in diesem Verzeichnis löschen. De Facto fragen aber die meisten Programme nach, wenn man eine Datei löschen will, die man nicht beschrieben darf.
Es kommt vor, das man als normaler Nuzter unter bestimmten Umständen Zugriff auf Resourcen braucht, auf die man normalerweise keinen Zugriff hat. Um dies dennoch zu ermöglichen gibt es das suid (set uder id) und das sgid (sgid set group id) Recht. Dies wird durch eine 's' anstelle des 'x' dargestellt (ein grosses 'S' bedeuetet suid oder sgid sind gesetzt ohne das 'x' gesetzt ist).
Dies suid-Sonderrecht bewirken, das das Programm so ausgeführt wird, als hätte es der Eigentümer der Programmdatei gestartet. Analog wird bei sgid-Recht das Programm so ausgeführt als gehöre man der Gruppe an, der die Datei gehört. In der Regel wird dies bei Programmen angewandt, bei dem amn Zugriff zuf Resouren braucht, auf die nur 'root' Zugriff hat. Daher wird der Eigentümer solcher Programme meist auch 'root' sein. Damit stellen suid-Programme aber eine potenzielles Sicherheitsloch dar und sollten sher sorgfältig debuggt sein.
Bei Verzeichnsisen hat das sgid-Bit eine andere sehr nützliche Eigenschaft. Wenn das sgid-Bit gesetzt ist, gehören alle Dateien, die in diesem Verzeichnis erzeugt werden, derselben Gruppe, der auch das Verzeichnis gehärt. Das gilt auch für das Erzeugen neuer Verzeichnisse. Dabei wird sogar das sgid-bit mit vererbt.
Ein Beispiel wo dies nützlich sein kann. Eine Firma hat zwei Abteilungen, Entwicklung und Marketing.
Jede dieser Abteilungen hat ihrer eigene Gruppe. Daneben gehören alle der Gruppe firma
an. Wenn das Verzeichnis gemeinsam
folgende Rechte hat:
drwxrws--- schmidt firma 1024 May 18 22:13 gemeinsam
dann werden alle Dateien darin mit der Gruppe firma
angelegt.
Wenn man nun noch durch setzten der umask
auf 007 dafür sorgt, das die
Gruppe Lese- und Schreibrechte hat, können alle auf alle Dateien in diesem
Verzeichnis zugreifen, ohne sich um die Rechte gedanken zu machen.