Druckversion | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Wer dem Buch durch die einzelnen Kapitel folgte, hat schon Bekanntschaft
mit den wichtigsten Zugriffsmechanismen unter Unix geschlossen. Diese Rechte betreffen (die
Darstellung entspricht der ersten Kolonne des Kommandos
Ein r in der entsprechenden Dreiergruppe, erlaubt das Lesen für den betreffenden Nutzerkreis, ein w steht für die Befugnis, die Datei zu ändern und das x erlaubt das Ausführen der Datei bzw. - im Falle von Verzeichnissen - die Erlaubnis, in jenes zu wechseln.
Zunächst werden wir zwei spezielle Zugriffsrechte kennen lernen, die für gewisse Anwendungsfälle die üblichen Rechte "verbiegen". Des Weiteren werden Sie in der Lage sein, die Zugriffsrechte Ihrer Dateien nach Ihren Wünschen zu gestalten. Ebenso in diesem Abschnitt behandeln wir Dateiattribute, die einen anderweitigen Schutz der Daten gewährleisten. Nach dem Studium dieses Abschnitts wissen Sie:
Typische Listings im Langformat führen zu Ausgaben folgender Gestalt:
Was die einzelnen Bits zu bedeuten haben, sollte bereits bekannt sein. Betrachten wir nun aber folgende Ausgaben:
Die erste Besonderheit betrifft das Bit t des Verzeichnisses /tmp. Der Buchstabe steht in diesem Fall für »save program text on swap device« und bewirkt, dass in dieses Verzeichnis zu schreibende Daten so lange wie möglich nur in der Swap-Partition (bzw. Hauptspeicher) existieren und eventuell erst beim Shutdown des Systems tatsächlich zurückgeschrieben werden. Für kurzlebige Daten (temporäre Daten) kann ein solches Verhalten zur Performancesteigerung beitragen, da zeitaufwändige Schreiboperationen vermieden werden. Wird das Flag auf ein normales Verzeichnis angewandt, darf dessen Besitzer Dateien anderer Benutzer aus diesem Verzeichnis nicht löschen (das trifft auch auf /tmp! zu). In diesem Zusammenhang spricht man auch vom »Sticky Bit«. Zur Erläuterung des s-Bits »set user or group ID on execution« betrachten wir ein kurzes C-Programmfragment, so wie das Programm passwd (dient zum Ändern des Passwortes) realisiert sein könnte:
Der Systemadministrator übersetzt das Programm und installiert es mit folgenden Zugriffsrechten im Verzeichnis /usr/bin:
Ein normaler Benutzer möchte nun sein Passwort ändern und startet das Programm passwd:
Was ist die Ursache? Das Programm versucht, die Datei /etc/passwd zum Schreiben zu öffnen und scheitert natürlich, da nur Root die Schreibberechtigung besitzt (dies darf auch nicht anders sein, sonst könnte jeder die Passwörter manipulieren). Grund hierfür ist, dass der Prozess, der das Programm ausführt, die Benutzerkennung von user erhält. Mit Hilfe des s-Flags kann die Benutzerkennung des Prozesses vom rufenden Benutzer/Gruppe in die des Besitzers / der besitzenden Gruppe umgewandelt werden, so dass passwd nun "im Auftrag" von Root die Datei /etc/passwd öffnet. Ein s-Bit darf nur bei Binärdateien gesetzt werden (keine Shellskripte).
Zum Ändern der Zugriffsrechte steht das Kommando chmod zur Verfügung:
Für die möglichen Optionen sei auf die Manuals verwiesen. Symbolisch lassen sich die Rechte setzen durch eine Kombination aus der betreffenden Rechtegruppe:
und den entsprechenden Rechten:
Beispiele
Abbildung 1: Nummerischer Modus von chmod Rechte werden bitweise dargestellt, für Eigentümer, Gruppe und Andere.
Jede Rechtegruppe wird durch einen numerischen Wert repräsentiert, die Sonderrechte (s,t) werden durch einen eigenen Wert dargestellt. Somit werden dem Kommando chmod maximal vier Werte übergeben (Abbildung). Fehlen Werte, werden diese von links her (!) als Null (keine Rechte) angenommen, d.h.
ist gleichbedeutend mit
Für die Sonderrechte gelten folgende Bitdarstellungen:
Beispiele
Neue Dateien/Verzeichnisse werden offensichtlich stets mit ein und denselben Zugriffsrechten erzeugt:
Zuständig für dieses Verhalten ist die so genannte umask, die oft in der Datei /etc/profile auf den Wert 022 voreingestellt wird. Zusätzlich wird noch eine Maximalmaske benötigt, die sich für Verzeichnisse und andere Dateien unterscheidet. Die bei der Erzeugung gesetzten Rechte entstehen nun, indem von der Maximalmaske der durch umask vorgegebene Wert subtrahiert wird:
Mit dem Kommando umask lässt sich die Voreinstellung ändern.
Wird eine Datei neu erzeugt, so ist ihr Eigentümer immer derjenige, der die Aktion veranlasste und die Datei gehört zur Default-Gruppe des Benutzers. Zum Ändern der Werte dienen die Kommandos chown (change owner) und chgrp (change group).
Den Besitzer einer Datei darf einzig Root ändern. Wäre dem nicht so,
könnten hintertriebene Hacker einem beliebigen Benutzer ein modifziertes Programm unterschieben,
das dann, mit dessen Rechten gestartet, ggf. allerlei Schindluder im System treiben könnte. Beginnen wir mit dem Kommando chgrp:
Um die Gruppenzugehörigkeit einer Datei zu wechseln, geben wir Folgendes ein:
Das Beispiel funktioniert allerdings nur, wenn "user" Mitglied in den Gruppen "users" und "fibel" und Eigentümer von "datei" ist. "chgrp" kann auch auf Verzeichnisse angewandt werden, in dem Fall ist die Option "-R" hilfreich, um rekursiv alle enthaltenen Dateien/Verzeichnisse zu bearbeiten. Das Kommando ändert, wird es auf einen symbolischen Link angewandt, die Datei, auf die der Link verweist. Mit der Option "-h" lässt sich zusätzlich die Gruppe des Links modifizieren (ab Linux-Kernel 2.2).
Mit chown kann sowohl der Besitzer einer Datei als auch deren Gruppenzugehörigkeit gesetzt werden.
Die wichtigen Optionen arbeiten analog zu "chgrp"; also kann "-R" verwendet werden, um bei Verzeichnissen rekursiv deren Besitzer / besitzende Gruppe zu modifzieren. Im Unterschied zu "chgrp" bewirkt die Anwendung auf symbolische Links die Änderung deren Werte. Soll nun nur der Besitzer geändert werden, wird dieser einfach angegeben:
Soll die Gruppe gesetzt werden, ist dem Gruppennamen ein (Doppel)Punkt voranzustellen:
Wünscht man sowohl den Besitzer als auch die Gruppe zu wechseln, sind beide Namen durch einen Punkt oder Doppelpunkt voneinander zu trennen:
Gibt man den neuen Besitzer an, gefolgt von einem (Doppel)Punkt, so wird als neue Gruppe dessen Defaultgruppe aus der Datei /etc/passwd verwendet.
Die Anwendung von Attributen funktioniert nur auf dem Linux-Dateisystem "ext2". Selbst der erfahrene Linuxer ist vor Fehlern nicht gefeit. Man stelle sich nur vor, man wollte alle Dateien aus einem Unterverzeichnis löschen:
Das Beispiel sieht harmlos aus, birgt aber einen fatalen Fehler in sich: das Leerzeichen zwischen Pfadangabe und dem *. Verschwunden sind nicht die gewünschten Daten, sondern der komplette Inhalt des aktuellen Verzeichnisses (falls man die Berechtigung dazu besaß). Linux bietet bekannterweise keine zuverlässige Methode des Wiederherstellens gelöschter Daten. Dafür ermöglicht das Linux-Dateisystem ext2 die Vergabe von Attributen für Dateien und Verzeichnisse. Sicher wird man aus Bequemlichkeit meist auf diese verzichten, aber essentielle Daten lassen sich somit zuverlässig schützen. Zum Setzen von Attributen dient das Kommando chattr, anzeigen lassen sie sich mittels lsattr: a Die Datei kann weder gelöscht noch deren bisheriger Inhalt verändert werden. Allerdings ist das Anhängen von Daten möglich. Dieses Attribut darf nur Root setzen.
d
Eine so gekennzeichnete Datei wird beim Sichern mit
dump nicht berücksichtigt.
i
Die Datei kann weder umbenannt noch modifiziert noch gelinkt werden.
Nur Root darf das Attribut setzen.
Wird dieses Attribut für Verzeichnisse gesetzt, darf in diesem Verzeichnis keine Datei gelöscht werden, jedoch ist eine Änderung dieser und das Erzeugen neuer Dateien möglich. s Eine mit diesem Attribut versehene Datei wird beim Löschen mit 0-Bytes überschrieben.
S
Wird die Datei modifiziert, so wird sie unmittelbar auf die Festplatte
zurückgeschrieben, also ohne Zwischenpufferung.
Es existieren weitere Attribute, die aber in der momentanen Implementierung des ext2 nicht unterstützt werden. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Korrekturen, Hinweise? |