Dieses Handbuch wird mit freundlicher Genehmigung von Sebastian Hetze auf den Servern der Linux Information Systems AG gehosted.

next up previous contents index
Next: Genauere Betrachtung der Datensicherheit Up: Systemverwaltung Previous: Betrachtungen über die Zeit

Subsections


Linux als Mehrbenutzersystem

 

Für EDV-Anlagen im professionellen Einsatz ist es heutzutage selbstverständlich, daß mehrere Systembenutzer auf die gleichen Ressourcen zugreifen. Die Daten werden auf einem Fileserver oder in einer zentralen Datenbank gespeichert, Druckaufträge aus einem ganzen Netzwerk werden von einem einzigen Printserver bearbeitet.

Die Vorteile solch einer gemeinsamen Benutzung eines ganzen Rechnernetzes liegen auf der Hand:

1.
Teure Hardware, die von einem einzigen Arbeitsplatz nicht ausgelastet wird, kann durch verteilte Nutzung effektiver eingesetzt werden.
2.
Die Koordination von mehrgliedrigen Arbeitsprozessen wird durch die Benutzung eines gemeinsamen, zentralen Datenbestandes beschleunigt.
3.
Information und Kommunikation in Arbeitsgruppen und ganzen Unternehmen werden durch ein gemeinschaftlich genutztes Netz verbessert.

User, Gruppen und Allgemeinheit

 

Linux unterstützt das Arbeiten mit verteilten Systemen, indem es die natürlichen Konzepte von Individuum, Gruppe und Allgemeinheit fest in den Betriebssystemkern verankert hat.

Eine Person, die sich an einen Linux-Rechner setzt, um damit zu arbeiten, muß sich zuerst durch eine Login-Prozedur beim System anmelden und wird so als ``User'' identifiziert. Alle Aktionen, die während einer ``Session'' (der Zeitraum vom Login bis zum Logout) an diesem Rechner (Terminal) stattfinden, werden dem User zugeordnet. Alle User haben eigene Bereiche (Accounts) in denen sie allein über ihre eigenen Daten verfügen können.

Mehrere User, die bestimmte Systemressourcen oder Daten gemeinsam nutzen, können eine Gruppe bilden. Linux indentifiziert die Gruppenmitglieder entweder durch feste, namentliche Zuordnung oder durch eine vorübergehende Anmeldung, ähnlich der Login-Prozedur. Gruppen haben keine eigenen Accounts, können sich aber Daten aus den Bereichen beliebiger User teilen.

Linux organisiert seine ``Welt'' hierarchisch, seine Betrachtungsweise ist eher differenzierend als vereinfachend. Deshalb wird der die Gruppe und das Individuum einschließende Oberbegriff der Allgemeinheit nicht direkt unterstützt, vielmehr wird den beiden ersten Begriffen derjenige der übrigen Systembenutzer gegenübergestellt. In der gleichen Weise wird übrigens auch der User von der Gruppe differenziert betrachtet.

User und Gruppen werden betriebssystemintern durch Nummern (User-ID und Group-ID) identifiziert. Die Zuordnung der IDs zu den verbalen Namen findet durch entsprechende Einträge in den Dateien /etc/passwd und /etc/group statt.

Sie können sich Ihre eigenen Identifikationsnummern mit dem Systemprogamm id anzeigen lassen.

Natürliche Personen und funktionale Rollen

   

Die Begriffe User (Benutzer) und Group (Gruppe) sind dem wahren Leben entliehen und assoziieren das Bild von Menschen aus Fleisch und Blut. Da wir die Maschine Computer benutzen wollen um mit anderen Menschen zusammenzuarbeiten und zu kommunizieren, ist diese Bilder auch richtig.

Es bietet sich aber an -- und ist gängige Praxis bei allen echten Mehrbenutzer-Betriebssystemen, daß das Konzept von unterscheidbaren Usern und Gruppen auch für die Organisation der Systemdaten benutzt wird. Hier werden funktionale Rollen definiert, denen eigene Accounts und Gruppen zugeordnet werden.

Nach der Installation von Linux finden Sie in den Dateien /etc/passwd und /etc/group eine ganze Reihe solcher ``Pseudouser''. Die wichtigste Rolle hat hier ein User namens root (Wurzel) mit der gleichnamigen Gruppe. User-ID und Group-ID von root sind 0 (Null). Die Rolle von root wird auch als Superuser    bezeichnet. Sie zeichnet sich dadurch aus, daß sie mit den Rechten des Betriebssystems arbeitet. Alle Sicherheitsmechanismen, die das Betriebssystem zum Schutz der eigenen Integrität und zum Schutz der Benutzerprozesse und -daten eingebaut hat, sind für root außer Kraft gesetzt.

Weitere Pseudouser können für bestimmte Programmgruppen (beispielsweise News und Mail) oder für bestimmte Komponenten oder Gerätegruppen (beispielsweise Drucker, Band- und Diskettenlaufwerke) existieren.

Haupt- und Nebengruppen

 

Das Betriebssystem verlangt, daß jeder User einer Gruppe angehört. Diese ``Hauptgruppe'' wird in der Benutzerdatenbank /etc/passwd eingetragen. Bei einigen Linux-Distributionen wird hier als Standard die gleiche allgemeine Gruppe für alle User benutzt (users, user, other oder ähnliche), bei anderen Distributionen wird von den Administrationstools beim Einrichten neuer Accounts für jeden neuen User eine eigene Gruppe mit dem Usernamen angelegt.

Festes Mitglied weiterer Gruppen können Sie werden, indem Sie von der Systemverwalterin in der Gruppendatenbank in den entsprechenden Mitgliederlisten eingetragen werden. Bei Gruppen, die durch ein Paßwort geschützt sind, können Sie auch ohne einen festen Eintrag in der Mitgliederliste vorübergehend die Gruppenmitgliedschaft erlangen, indem Sie sich mit dem Systemprogramm newgrp unter Angabe des korrekten Paßwortes in der Gruppe ``einloggen''.

Sie können sich Ihre gerade aktive Hauptgruppe und alle eingetragenen Nebengruppen mit dem Systemprogramm id anzeigen lassen.    

Eigentum und Zugriffsrechte

      Durch die eindeutige Unterscheidbarkeit von Usern und Gruppen ist es naheliegend und möglich, den natürlichen Eigentumsbegriff auf alle Daten im System anzuwenden. Das wesentliche Recht des Eigentümers besteht darin, die Zugriffsrechte oder allgemeiner den Modus einer Datei bestimmen zu können. Die Gruppe und alle anderen User haben nur Rechte an einer Datei, sofern der Eigentümer ihnen diese Rechte abgibt.

In einem verteilten System, in dem private oder gruppeninterne Daten auf einem allgemein zugänglichen Medium gespeichert werden, kann der Eigentümer einer Datei durch entsprechende Zugriffsbeschränkung eine Veränderung oder das Lesen seiner Daten verbieten. Der Modus einer Datei kann für den Eigentümer, die Benutzergruppe und die sonstigen User separat und unabgängig voneinander festgelegt werden. Dadurch lassen sich bereits mit Hilfe der Zugriffsrechte die Kompetenzen und Zuständigkeiten eines Gruppenarbeitsprozesses auf die Dateien, mit denen die Gruppe arbeitet, abbilden.

Die Zugriffsrechte als Modus einer Datei

Linux unterscheidet drei Zugriffsmodi für Dateien:

lesbar (readable)
Wenn eine Datei für Sie lesbar ist, können Sie sich deren Inhalt ansehen. Lesen bedeutet hier nicht unbedingt Verstehen. Die symbolische Abkürzung für lesbar ist r.
schreibbar (writable)
Eine (be-)schreibbare Datei können Sie verändern. Sie können Daten in der Datei austauschen, an die Datei anhängen und aus der Datei entfernen. Sie können eine Datei, für die Sie Schreibrecht haben, sogar vollständig leeren; das Schreibrecht für die Datei erlaubt Ihnen aber nicht, die Datei vollständig aus dem Verzeichnis zu löschen. Die symbolische Abkürzung für schreibbar ist w.
ausführbar (executable)
Wenn eine Datei für Sie ausführbar ist, können Sie diese Datei als Programm aufrufen und vom Betriebssystem ausführen lassen. Bei ``echten'' Programmen, die in Maschinensprache vorliegen und die direkt vom Betriebssystem ausgeführt werden können, benötigen Sie für die Ausführung einer Datei kein Leserecht. Bei interpretierten Programmen wie zum Beispiel Shellscripts oder Perl-Programme benötigen Sie Leserecht für die Programmdatei, um sie ausführen zu können. Die symbolische Abkürzung für ausführbar ist x.

Der Eigentümer legt den Zugriffsmodus für jede seiner Dateien getrennt für sich selbst, die Benutzergruppe und die übrigen Systembenutzer fest. Beim Erzeugen einer Datei wird der Modus zuerst nach einem bestimmten Muster festgelegt, das jeder User durch die Funktion umask für seine Laufzeitumgebung einstellen kann. Der Modus einer existierenden Datei kann mit dem Systemkommando chmod verändert werden.

Sie können den Zugriffsmodus einer Datei mit dem Kommando ls -l anzeigen lassen. Im ersten Feld der Anzeige finden Sie die symbolischen Abkürzungen der Modi readable, writable und executable für den Eigentümer, die Gruppe und die anderen User (in dieser Reihenfolge).

[she@atlantis she]$ ls -l /home/buch/
total 298
-rw-r-----   1 hohndel  autoren      4739 Mar  9  1995 X11R6.tex
-rw-r-----   1 hohndel  autoren     44866 Dec 21  1995 XFree86.tex
-rw-rw-r--   1 she      she         56340 Dec 21  1995 grundlagen.tex
drwxr-xr-x   2 she      autoren      2048 Jun 28 11:22 man1
drwxr-xr-x   2 she      autoren      1024 Dec 21  1995 man8
-rw-rw----   1 okir     autoren     75735 Oct 24  1995 news.tex
-rw-rw-r--   1 she      she         63310 Dec 24  1995 sysadmin.tex
-rwxr-x---   1 she      autoren        51 Jun 28 19:04 twopage.letter
-rw-rw----   1 okir     autoren     48236 Oct 24  1995 uucp.tex
[she@atlantis she]$

Die Datei X11R6.tex im Beispiel ist für den Besitzer hohndel lesbar und kann von ihm verändert werden, für die Gruppe autoren ist sie nur lesbar und für alle anderen Systembenutzer ist sie nicht zugänglich.

Die Datei sysadmin.tex ist für den User und die Gruppe she lesbar und schreibbar, für alle anderen Systembenutzer ist sie nur lesbar.

Die Datei news.tex ist für den Eigentümer okir und für die Benutzergruppe autoren lesbar und schreibbar, für alle anderen User ist sie nicht zugänglich.

Die Datei twopage.letter ist für den Eigentümer she lesbar, schreibbar und ausführbar, für die Gruppe der Autoren ist sie lesbar und ausführbar und für alle anderen User ist sie nicht zugänglich.

Bedeutung des Zugriffsmodus bei Verzeichnissen

Verzeichnisse werden in vielerlei Hinsicht wie die anderen Dateitypen behandelt, die Bedeutung der Modi für die Zugriffsrechte können aus offensichtlichen Gründen nicht einfach übernommen werden. Die ``Übersetzung'' der Wirkung von Zugriffsrechten auf die Verzeichnisse sieht folgendermaßen aus:

lesbar
Bei den Verzeichnissen bedeutet die Lesbarkeit, daß die berechtigten Personen den Inhalt des Verzeichnisses sehen können. Ohne dieses Recht können Programme wie ls kein Listing des Verzeichnisses anzeigen.
schreibbar
Wenn ein Verzeichnis schreibbar ist, können Dateien darin angelegt, umbenannt und gelöscht werden. Das Löschen einer Datei ist auch erlaubt, wenn diese Datei selbst nicht verändert werden darf.
ausführbar
Die Ausführbarkeit eines Verzeichnisses erlaubt es den berechtigten Usern, in dieses Verzeichnis als aktuelles Verzeichnis zu wechseln und auf die Dateien darin zuzugreifen. Wenn ein Verzeichnis ausführbar, aber nicht lesbar ist, kann auf die Dateien oder Unterverzeichnisse ``blind'' zugegriffen werden.
  

Eigentum an Dateien

 

Linux unterscheidet sechs verschiedene Dateiarten, die im Dateisystem gespeichert werden: normale Files, Verzeichnisse, Gerätedateien, Sockets, FIFOs und Links. All diese Objekte werden bei ihrer Erzeugung in den Datenstrukturen des Dateisystems eingetragen. In diesen Einträgen (den I-Nodes) wird unter anderem die Information über den Eigentümer und die Benutzergruppe, der die Datei zugeordnet wird, festgehalten. Jede Datei kann nur einem Eigentümer und einer Benutzergruppe gehören.

Das Programm ls zeigt Eigentümer und Gruppe jeder Datei an, wenn es wie im Beispiel oben mit der Option -l aufgerufen wird. Die dritte Spalte zeigt den Namen des Eigentümers, die vierte Spalte zeigt den Namen der Gruppe.

Eigentum an Prozessen

   

Linux betrachtet nicht nur die mehr oder weniger ``festen'' Daten auf einem dauerhaften Speichermedium als Objekte, die einem Eigentümer zugeordnet werden. Der Eigentumsbegriff wird in gewisser Weise auch auf die im Speicher befindlichen Daten und die laufenden Prozesse angewendet.

Jedes Kommando, das ein User über die Tastatur eingibt, erzeugt einen Prozeß im Arbeitsspeicher des Rechners. Im normalen Betrieb befinden sich immer mehrere Prozesse gleichzeitig im Speicher, die vom Betriebssystem streng voneinander abgegrenzt werden. Die einzelnen Prozesse werden mit allen Daten, die in ihrem virtuellen Adressraum enthalten sind, einem User als Eigentümer zugeordnet.

Die Eigentümer der Prozesse werden vom Programm ps angezeigt, wenn es mit der Option -u aufgerufen wird.

USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
bin         89  0.0  1.0   788   328  ?  S    13:27   0:00 rpc.portmap 
hohndel    190  0.0  2.0  1100   628   3 S    13:27   0:00 -bash 
hohndel    613  0.0  1.3   968   424   3 S    15:05   0:00 vi XF86.tex 
nobody     167  0.0  1.4   932   444  ?  S    13:27   0:00 httpd 
okir       191  0.0  2.0  1100   628   4 S    13:27   0:00 -bash 
okir       622  0.3  1.5  1064   476   4 S    15:05   0:00 elm 
root         1  0.0  1.0   776   316  ?  S    13:27   0:03 init [3] 
root         2  0.0  0.0     0     0  ?  SW   13:27   0:00 (kflushd)

Wem gehört was - SUID und SGID Modus bei einem Programm

Die einfache Grundregel für die Bestimmung des Eigentümers eines Objektes lautet: jedes Ding gehört dem User, der es erzeugt hat. Die Gruppe eines Objektes richtet sich nach der aktuellen Hauptgruppe des Eigentümers zum Zeitpunkt der Entstehung der Datei.

Auf dieser Regel aufbauend gibt es ein paar Besonderheiten und Ausnahmen, die die Leistungsfähigkeit und Flexibilität des Betriebssystems deutlich verbessern.

Wie bereits erwähnt, betrachtet Linux auch die laufenden Prozesse als Objekte mit Eigentümern. Ein Prozeß entsteht, indem ein User ein Programm aus einer Programmdatei aufruft. Es ist naheliegend, den User, der ein Programm startet, als den Eigentümer des dadurch entstehenden Prozesses anzusehen.

Das ist aber nicht die einzig mögliche Sichtweise. Es kann das berechtigte Interesse des Eigentümers einer Programmdatei sein, daß der Prozeß, der durch die Ausführung dieser Datei entsteht, auch sein Eigentum ist. So eine Situation tritt häufig dann ein, wenn ein Programm Systemdienste (Services) für alle Systembenutzer anbietet.

Der Eigentümer einer Programmdatei kann deshalb den Ausführungsmodus einer Programmdatei so verändern, daß das Betriebssystem den daraus entstehenden Prozeß mit seiner effektiven User-ID oder mit der effektiven Group-ID seiner Benutzergruppe ausführt. Der Prozeß einer Programmdatei mit S-Modus hat damit die Rechte des Eigentümers (beziehungsweise der Gruppe) der Datei. Zusätzlich behält jeder Prozeß mit einer veränderten User- oder Gruppen-ID auf einer zweiten Ebene auch die realen Identitäten und Rechte der aufrufenden Person. Damit hat so ein Prozeß die Freiheit, in beiden Bereichen zu arbeiten. Ein ``Set User ID Programm'' bildet auf diese Weise ein ``intelligentes Tor'' zwischen den ansonsten hermetisch voneinander abgeriegelten Bereichen zweier User.

Das Angebot eines solchen Tores setzt das Vertrauen des Eigentümers in die Zuverlässigkeit des Programmes voraus, das mit seinen eigenen Rechten laufen soll. Der ``Größte Anzunehmende Unfall'' bei der Verwendung eines SUID-Programms würde eintreten, wenn der Benutzer eine interaktive Shell mit den Rechten des Dateieigentümers bekommen würde. Insbesondere bei Programmen, die mit der User-ID von root laufen, können aber auch ``kleinere'' Fehlfunktionen des Programms Schaden an Systemdaten oder an den Dateien anderer User anrichten.

Die Systemprogramme, die bei der Installation einer der bekannten und aktuellen Linux-Distributionen in den SUID-Modus gesetzt werden, sind gut getestet und nach dem gegenwärtigen wissensstand zuverlässig und sicher.

Der SUID-Modus wird wie alle anderen Modi einer Datei mit dem Systemprogramm chmod verändert.

Sie erkennen Programme, die mit den Rechten des Eigentümers oder der Gruppe der Programmdatei arbeiten, in einem langen Listing von ls durch die symbolischen Abkürzungen s anstelle von x für normal ausführbare Dateien.  

Besondere Modalitäten für Verzeichnisse

 

Es gibt eine weitere Ausnahme von der Zuordnung des Eigentums an Dateien nach dem ``Verursacherprinzip'': der Eigentümer eines Verzeichnisses kann bestimmen, daß die in diesem Verzeichnis erzeugten Dateien der gleichen Benutzergruppe gehören wie das Verzeichnis selbst. Das geschieht, indem das Verzeichnis den S-Modus für die Gruppe (Set Group-ID) bekommt.

Die Zugriffsrechte auf ein Verzeichnis werden durch das SGID-Bit nicht verändert. Um eine Datei in einem solchen Verzeichnis anzulegen, muß ein User das Schreibrecht in der für ihn zutreffenden Kategorie (Eigentümer, Gruppe, andere User) haben. Wenn ein User zum Beispiel weder der Eigentümer noch Mitglied der Benutzergruppe eines SGID-Verzeichnisses ist, muß das Verzeichnis für die ``anderen User'' beschreibbar sein. Die in dem SGID-Verzeichnis erzeugte Datei gehört dann der Gruppe des Verzeichnisses, auch wenn der User selbst dieser Gruppe nicht angehört.

Der SGID-Modus verändert nur das Verhalten des Betriebssystems beim Erzeugen neuer Dateien. Der Umgang mit bereits existierenden Dateien ist in diesen Verzeichnissen völlig normal. Das bedeutet beispielsweise, daß eine Datei, die außerhalb des SGID-Verzeichnisses erzeugt wurde, beim Verschieben dorthin ihre originale Gruppe behält (wohingegen sie beim Kopieren die Gruppe des Verzeichnisses bekommen würde).

Auch das Programm chgrp arbeitet in SGID-Verzeichnissen völlig normal: der Eigentümer einer Datei kann sie jeder Gruppe zueignen, der er selbst angehört. Gehört der Eigentümer nicht zu der Gruppe des Verzeichnisses, kann er die Datei mit chgrp nicht dieser Gruppe zueignen -- dazu muß er sie in dem Verzeichnis neu erzeugen.

Es ist zwar möglich, auch bei einem Verzeichnis den S-Modus für den Eigentümer (Set User-ID) zu setzen, diese Einstellung hat aber keine Wirkung. Das Betriebssystem erlaubt es den Usern nicht, Dateien an andere User ``zu verschenken''.

   Linux unterstützt noch einen weiteren Spezialmodus für Verzeichnisse, bei dem das Löschen oder Umbenennen von darin enthaltenen Dateien nur mit ausreichenden Rechten an der jeweiligen Datei selbst vorgenommen werden können.

Mit diesem ``T-Modus'' kann einem Problem begegnet werden, das bei der gemeinsamen Verwendung öffentlicher Verzeichnisse entstehen kann: das Schreibrecht für das Verzeichnis erlaubt auch das Löschen fremder Dateien, unabhängig vom Zugriffsmodus für die Datei.

Beispielsweise sind die tmp/-Verzeichnisse ``öffentlicher Raum'', in dem von vielen Programmen temporäre Dateien angelegt werden. Um darin Dateien anlegen zu können, haben alle User für diese Verzeichnisse Schreibrecht. Damit hat jeder User auch das Recht, Dateien in diesem Verzeichnis zu löschen. Normalerweise betrachtet das Betriebssystem beim Löschen oder Umbenennen einer Datei die Zugriffsrechte auf die Datei selbst nicht weiter.

Indem die tmp/-Verzeichnisse in den T-Modus gesetzt werden, können nur noch der Eigentümer und die zum Schreiben in der Datei berechtigten User eine dort gespeicherte Temporärdatei löschen.   

Mandatory Locking

   

Im Mehrbenutzerbetrieb kommt es gelegentlich vor, daß mehrere Prozesse auf die gleiche Datei zugreifen. Das Betriebssystem unterstützt diese Betriebsart und erlaubt sogar, daß mehrere Prozesse gleichzeitig die selbe Datei zum Schreiben geöffnet halten. Wenn beide Prozesse Veränderungen an der gleichen Stelle in der Datei vornehmen, führt das zu unvorhersagbaren Ergebnissen.

Um dieses Problem zu lösen, haben sich mehrere Methoden zum Sperren von Dateien entwickelt. Die traditionelle Form der Sperrung durch Lockfiles und auch die Sperrung durch die Systemcalls flock und fcntl sind kooperative Sperren. Das bedeutet, daß jeder Prozeß, der eine Datei verändern will, von sich aus prüfen muß, ob eine Sperre eines anderen Prozesses vorhanden ist um gegebenenfalls auf die Veränderung der Datei vorübergehend zu verzichten.

Linux kann eine weitere Form der Dateisperrung unterstützen: das Mandatory Locking[*] (Verbindliche Sperrung). Wenn eine Datei oder ein Teil davon mit so einer Sperre belegt ist, wird jeder Versuch, diesen Teil zu verändern, vom Betriebssystem abgebrochen.

Der Mechanismus zum verbindlichen Sperren benutzt den Systemcall fcntl im Stil von System V. Damit eine Datei mit diesem Systemaufruf verbindlich gesperrt wird, muß bei einer für die Gruppe nicht ausführbaren Datei das SGID-Bit gesetzt sein.

Das folgende Beispiel zeigt, wie Sie eine Datei zum verbindlichen Sperren kennzeichnen:

[she@atlantis she]$ chmod g+s-x database 
[she@atlantis she]$ ls -l database 
-rw-rwSr--   1 she      she         92160 Jul  9 09:51 database
[she@atlantis she]$

Das große S im Feld für die Ausführungsrechte der Gruppe zeigt, daß die Datei nicht ausführbar und das SGID-Bit gesetzt ist.

Die Dateiattribute des ext2fs

   

Zusätzlich zu der aus dem Dateisystemkonzept von Unix übernommenen Methode, die Datensicherheit durch Reglementierung der Zugriffsrechte zu erhöhen, bietet das ext2fs mit seinen Dateiattributen weitere Mechanismen an, die den Datenschutz in verschiedenen Richtungen verbessern.

1.
Dateien lassen sich seit ext2-0.5a durch die Attribute a (append) und i (immutable) zusätzlich vor Veränderungen schützen.
2.
Dateien können durch das Attribut s (secure) beim Löschen durch zufällige Daten überschrieben und dadurch zuverlässig vernichtet werden.
3.
Die besonders sensiblen Metadaten einer Datei können im Speicher und auf der Festplatte synchron verwaltet werden, indem das Attribut S gesetzt wird.

Alle Dateiattribute können mit dem chattr-Kommando verändert werden. Das Kommando lsattr zeigt die aktuellen Attribute ähnlich wie das ls-Programm die Zugriffsrechte.

Schreibzugriff nur zum Anhängen weiterer Daten

Beim traditionellen System der Zugriffsregelung wird das Schreiben ganz allgemein entweder erlaubt oder verboten. Die Erlaubnis erstreckt sich uneingeschränkt auf das Schreiben an jeder beliebigen Stelle der Datei. Damit bedeutet Schreiben in diesem Sinne sowohl Schreiben als auch Überschreiben.

Das Betriebssystem kann, dem POSIX-Standard entsprechend, zwischen wahlfreiem Schreiben und dem ausschließlichen Schreiben am Ende einer Datei, also dem Anhängen von Daten, unterscheiden.

Das ext2-Dateisystem unterstreicht diese Unterscheidung und führt damit ein zusätzliches Sicherheitsmerkmal ein. Durch das append-Attribut a wird jeder Schreibzugriff automatisch am Ende der Datei ausgeführt; es gibt dann keine Möglichkeit, die Schreibposition an eine andere Stelle zu setzen.

Zusätzlich kann eine durch dieses Attribut gesicherte Datei nicht gelöscht, gelinkt, umbenannt oder verschoben werden. Dieser Schutz läßt sich auch durch Rootprivilegien nicht umgehen.

Das append-Attribut kann jeder Benutzer für seine eigenen Dateien ändern. Mit Rootprivilegien ist auch das Ändern fremder Dateiattribute möglich.

Einfrieren einer Datei

Allein die Superuserin kann eine Datei im ext2-Dateisystem völlig einfrieren. Das immutable-Attribut verbietet jeden Schreibzugriff auf eine Datei. Zusätzlich sind wie beim append-Attribut Löschen, Linken, Umbenennen und Verschieben der Datei unmöglich.

Der normale Eigentümer einer Datei kann das immutable-Attribut nicht verändern. Damit kann ihm durch dieses Attribut jede Veränderung wirksam verboten werden. Diese Restriktion macht für natürliche Systembenutzer keinen Sinn. Für news, mail und ähnliche Systemaccounts, die sich dadurch auszeichnen, daß viele Programme zur Laufzeit mit den Rechten dieser ``Eigentümer'' arbeiten, bietet immutable wirksam zusätzliche Sicherheit vor Mißbrauch.

Das immutable-Attribut selbst kann mit Rootprivilegien wieder gelöscht werden. Einen absoluten Schutz vor unberechtigter Veränderung einer Datei bietet also auch dieses Attribut nicht.

Geheime Daten gehören in den Reißwolf

 

Beim Löschen einer Datei wird in den Linux-Dateisystemen normalerweise der Verzeichniseintrag gelöscht und die Inode sowie die Datenblöcke freigegeben, wenn der Verzeichniseintrag der letzte für diese Datei war.

Die freigegebenen Datenblöcke werden bei irgendeiner Gelegenheit durch einen anderen Prozeß wieder belegt. Es ist kein Geheimnis, daß der Inhalt solcher Datenblöcke von dem Prozeß, dem sie zugeteilt worden sind, auch gelesen werden kann. Wenn ein Prozeß den Datenblock liest, bevor er eigene Daten hineingeschrieben hat, kann er fremde Daten darin finden.

Um diese unbeabsichtigte Weitergabe von Daten zu verhindern, bietet das ext2-Dateisystem die Möglichkeit, alle von einer Datei belegten Datenblöcke durch zufällige Zeichen zu überschreiben, bevor sie beim Löschen für andere Prozesse freigegeben werden. Das secure-Attribut schickt die Dateien beim Löschen also durch einen elektronischen Reißwolf.

Sie sollten allerdings bedenken, daß häufig bei der Bearbeitung von Dateien durch andere Programme Kopien angelegt werden, die nicht automatisch mit dem secure-Attribut ausgestattet sind.

Gespeichert ist noch nicht gesichert

 

Indem Linux einen Großteil des freien Arbeitsspeichers als Puffer für die relativ langsamen Festplattenzugriffe nutzt, wird die Geschwindigkeit des System spürbar erhöht.

Diese erhebliche Leistungssteigerung geht zu Lasten der Datensicherheit. Wenn das System nämlich aus irgendeinem Grund abstürzen sollte, sind die im Puffer veränderten, aber noch nicht auf die Festplatte zurückgeschriebenen Daten verloren.

Besonders unangenehm wird es, wenn es sich bei den verlorenen Daten um Strukturinformation handelt. In diesem Fall kann auch die bereits sicher auf der Festplatte befindliche Information unzugänglich werden.

Der Verzicht auf die Datenpufferung kommt nicht ernsthaft in Betracht. Ein Betriebssystem, das mehrere Benutzer und viele Prozesse gleichzeitig bedienen soll, braucht ein sehr schnelles Dateisystem.

Um wenigstens die Sicherheit der bereits auf Festplatte gespeicherten Daten zu optimieren, bietet das ext2-Dateisystem die Möglichkeit, mit dem synchron-Attribut die ungepufferte Verwaltung der Metadaten einer Datei zu erreichen. Verzeichnis und Inode werden unmittelbar nach ihrer Veränderung auf die Festplatte geschrieben.

  


next up previous contents index
Next: Genauere Betrachtung der Datensicherheit Up: Systemverwaltung Previous: Betrachtungen über die Zeit

Das Linux Anwenderhandbuch
(C) 1997 LunetIX