![]() |
|
||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
von Carsten Schnober
Wer hat nicht schon mal in einem Dialogfenster auf OK geklickt, ohne den Inhalt zu lesen? Schnell passiert es Computer-Benutzern bei derlei Anlässen, dass sie versehentlich Daten löschen oder die Systemkonfiguration ruinieren. Schränkt das Betriebssystem die Rechte seiner Benutzer auf das Nötigste ein, minimiert es versehentliche und absichtliche destruktive Aktionen.
Unix, und damit auch Linux, kennt konzeptionell mehrere Benutzer. Von ihnen darf nur der User namens Root alles, dem Rest soll nur erlaubt sein, was er zur Arbeit braucht. Auch Windows verfolgt in aktuellen Versionen ein verwandtes Prinzip, hier heißt der allmächtige Verwalter Administrator.
Linux setzt die Rechteverwaltung über das Dateisystem um. Da Linux alles als Datei betrachtet, also auch beispielsweise Hardware und teilweise sogar Netzwerkverbindungen über spezielle Dateien steuert, genügt dieses Verfahren, um alle Systemvorgänge zu kontrollieren.
Dateien und Verzeichnisse gehören stets einem bestimmten Benutzer sowie einer Gruppe. Linux unterteilt die Zugriffsrechte einer Datei an Hand dieser Informationen in drei Kategorien von Rechteinhabern: Was dürfen der Besitzer, die Mitglieder der Gruppe und was die restlichen Benutzer?
Jeder der drei Kategorien ist es jeweils gestattet oder verboten, drei Aktionen auf eine Datei anzuwenden: Lesen, Schreiben und Ausführen. Hat ein Benutzer das Recht zum Lesen einer Datei, gewährt ihm dies vollständigen Einblick in den Inhalt. Das Schreibrecht gibt ihm die Möglichkeit, eine Datei beliebig zu manipulieren, also den Inhalt nicht nur zu verändern und zu ergänzen, sondern auch zu löschen.
Das Recht zum Ausführen bedeutet im Fall einer gewöhnlichen Datei, dass sich dahinter eine ausführbare Programmdatei verbirgt -- und dass Benutzer mit entsprechender Berechtigung dieses Programm starten dürfen. Wenn eine Anwendung läuft, verfügt sie im Normalfall über dieselben Rechte wie der Benutzer, der sie gestartet hat.
Verzeichnisse sind mit denselben Berechtigungen ausgestattet. Das Recht zum Ausführen bedeutet in ihrem Fall aber die Erlaubnis, den Verzeichnisinhalt anzeigen zu lassen. Das Schreibrecht in einem Verzeichnis erlaubt einem Benutzer, darin enthaltene Dateien zu löschen oder umzubenennen. Möchte er jedoch deren Inhalt lesen oder verändern, benötigt er entsprechende Rechte für die Dateien selbst.
Dem Prinzip folgend, dass das System jedem Benutzer nur soviel wie nötig erlauben sollte, steht gewöhnlichen Anwendern nur das eigene Home-Verzeichnis vollständig zur Verfügung. Darin landen persönliche Dokumente und individuelle Konfigurationsdateien für Anwendungen oder den Desktop. Ob andere Benutzer das gesamte Home-Verzeichnis, einzelne Dateien oder Verzeichnisse einsehen dürfen, bestimmt der Besitzer selbst.
Lesen dürfen Standardbenutzer darüber hinaus systemweite Konfigurationsdateien im Verzeichnis /etc und die Programmdateien unter /usr oder /opt und Programmbibliotheken unter /lib. So starten sie Anwendungen ohne die Möglichkeit, sie zu verändern oder zu löschen.
Dem Systemverwalter Root steht es frei, einzelne Verzeichnisse oder Dateien unterhalb allgemein lesbarer Verzeichnisse auszunehmen und die Zugriffsrechte einzuschränken. Das betrifft beispielsweise Dateien unter /etc/ssh, die für verschlüsselte Verbindungen über das SSH-Protokoll (siehe Artikel ab Seite ##) zuständig sind, oder die Datei /etc/shadow, die die Passwörter aller Benutzer in verschlüsselter Form enthält.
Ein Linux-System reserviert seinen Benutzern in deren Home-Verzeichnissen eine Privatsphäre, in der sie allein festlegen, wer Zugriff auf welche Dateien hat. Sie legen darin beliebige Dateien ab, auch ausführbare Programme. Hier könnten beispielsweise auch per E-Mail versandte oder heruntergeladene hypothetische Viren landen. Vom Benutzer ausgeführt, erhalten sie jedoch auch nur dessen Rechte und somit keinen Schreibzugriff auf den Großteil des Dateisystems. Das schützt gegen Viren ebenso wie beispielsweise gegen Tippfehler auf der Kommandozeile.
Der Benutzer Root dagegen genießt unbeschränkten Zugriff auf alle Daten auf der Festplatte oder anderen Datenträgern sowie auf Netzwerkverbindungen und -geräte. Führt er ein destruktives Programm aus -- egal, ob fehlerhaft oder bösartig --, stehen diesem alle Möglichkeiten zur Manipulation von Dateien oder Netzwerkverbindungen offen. Ein gewöhnlicher Benutzer kann jedoch im Normalfall lediglich sein Home-Verzeichnis löschen.
Dass der Systemverwalter Zugriff auf die Home-Verzeichnisse aller Benutzer hat, sollten die User eines Mehrbenutzersystems wissen. Vor seiner Neugier schützen zwar moralische und juristische, aber keine technischen Schranken. Hier schaffen nur aufwendige Mittel wie Verschlüsselung Abhilfe [1].
Auf Systemen mit mehreren Benutzern ermöglicht es die Verwendung von Benutzergruppen, Rechte an andere User als den Besitzer einer Datei zu vergeben, ohne sie allgemein zugänglich machen. Der Systemverwalter legt beliebig viele User als Mitglieder einer Gruppe fest. Erteilt er dann einer Gruppe bestimmte Zugriffsrechte für eine Datei oder ein Verzeichnis, erhalten alle Mitglieder diese Rechte.
Die meisten Linux-Distributionen nutzen Gruppen unter anderem, um den Zugriff auf bestimmte Hardware grundsätzlich zu untersagen, sie aber einzelnen Benutzern zu erlauben. Beispielsweise legt das System an einem Rechner, der über /dev/hdc das CD-Laufwerk ansteuert, als Eigentümer der Gerätedatei den Benutzer root und die Gruppe cdrom fest. Nun gibt es dem Besitzer und der Gruppe Schreib- und Leserechte auf diese Datei, so dass außer Root nur Benutzer auf das CD-Laufwerk zugreifen dürfen, die der Systemverwalter der Gruppe cdrom zuordnet.
Weiterhin kommen häufig Gruppen zum Einsatz, um Benutzern einzelne Administrationsaufgaben zu ermöglichen, ohne dass sie Root-Rechte brauchen. Beispielsweise gehören unter manchen Distributionen System-Log-Dateien dem Benutzer Root und einer Gruppe adm oder admin; Mitglieder der Gruppe dürfen dann die Systemprotokolle lesen.
Für die meisten Mehrbenutzersysteme reicht das Gruppenkonzept aus, um die Zugriffsrechte so fein wie nötig abzustufen. Einige Server-Systeme mit besonders hohen Sicherheitsansprüchen erweitern jedoch den Linux-Kernel, um die Befugnisse mit Hilfe so genannter Access Control Lists (ACL, Zugriffskontrolllisten) weiter zu verfeinern. Andere Kernel-Erweiterungen schränken sogar die Allmacht des Benutzers Root ein.
Die Linux-typische Herangehensweise, sämtliche Daten über Dateien zu verwalten, erfordert eine Kennzeichnung der verschiedenen Dateitypen. Auch sie nimmt Linux über die Zugriffsrechte vor.
Außer gewöhnlichen Dateitypen kennt das Betriebssystem Verzeichnisse, Socket-Dateien -- zuständig für die Kommunikation zwischen Anwendungen und dem Netzwerk -- und Gerätedateien. Letztere wiederum unterteilen sich in blockorientierte und zeichenorientierte, die sich in der Art der Datenverwaltung unterscheiden. Zu guter Letzt gibt es die so genannten Named Pipes: Dateien, über die voneinander unabhängige Programme und Prozesse Daten miteinander austauschen.
Weitere Spezialeigenschaften räumen besondere Rechte ein. Die Attribute namens SetUID (Set User ID) und SetGID (Set Group ID) sorgen bei ausführbaren Dateien dafür, dass das Programm mit den Rechten des Besitzers (SetUID) beziehungsweise der besitzenden Gruppe (SetGID) startet. Diese Funktionen heben also den Grundsatz auf, dass ein Programm stets mit den Rechten des Benutzers startet, der es ausgeführt hat.
Gehört eine ausführbare Programmdatei beispielsweise Root, ist mit dem SetUID-Attribut ausgestattet und gewährt den Benutzern der Gruppe admin Ausführrechte, dürfen außer Root die Mitglieder dieser Gruppe das Programm starten. Die Anwendung selbst wiederum verhält sich dank des SetUID-Attributs immer, als hätte Root es gestartet, und verfügt so über dessen Berechtigungen. Analog funktioniert es mit SetGID: Startet ein Benutzer ein Programm mit diesem Attribut, erhält dieses die Rechte der besitzenden Gruppe.
Ist ein Verzeichnis mit dem SetGID-Attribut versehen, gehören alle in diesem Ordner neu angelegten Dateien automatisch der Gruppe, die auch das Verzeichnis besitzt. Das SetUID-Attribut dagegen ignoriert Linux im Falle von Verzeichnissen.
Das so genannte Sticky-Attribut schließlich schränkt die Schreibrechte in einem Verzeichnis ein. Ein damit ausgestatteter Ordner erlaubt Benutzern mit entsprechendem Schreibrecht nur, neue Dateien anzulegen; löschen oder umbenennen dürfen sie darin allerdings ausschließlich ihre eigenen Dateien. Diese Möglichkeit kommt bei gemeinsam benutzten Verzeichnissen zum Einsatz, unter einigen Linux-Distributionen beispielsweise bei /tmp. So können dort dank allgemeiner Schreibberechtigung alle Benutzer ihre temporären Dateien ablegen, jedoch nicht die der anderen User löschen.
Hat eine ausführbare Datei das Sticky-Attribut gesetzt, verschafft dies lediglich Geschwindigkeitsvorteile: Startet ein Benutzer ein solches Programm, verbleibt es im Arbeitsspeicher. Dadurch lädt es beim nächsten Aufruf schneller, da das System es nicht erneut von der Festplatte einlesen muss. Bei heutigen Platten erzeugt das jedoch nur einen sehr geringen Vorteil, so dass das Sticky-Attribut bei Dateien nur noch selten zum Einsatz kommt.
Mit Hilfe der grafischen Oberfläche erledigt der Datei-Manager Konqueror Anzeige und Manipulation der Zugriffsrechte. Dazu klickt der Benutzer mit der rechten Maustaste auf eine Datei oder ein Verzeichnis und wählt aus dem Kontextmenü Eigenschaften. Der Reiter Berechtigungen zeigt im unteren Bereich Eigentümer Besitzer und Gruppe (Abbildung 1). Im Abschnitt Zugangsberechtigungen verraten drei Einträge, ob Eigentümer, Gruppe und sonstige Benutzer die gewählte Datei lesen oder verändern dürfen.
Das Recht zum Ausführen verwaltet Konqueror in dieser Ansicht über das Feld Ausführbar. Ist es aktiv, gilt die Erlaubnis zum Ausführen für alle Benutzer. Möchte man feiner abstufen, geschieht dies über die Schaltfläche Erweiterte Berechtigungen. Darin legt man die Zugriffsrechte genauer fest und findet zudem die Spezialattribute SetUID, SetGID und Sticky (Abbildung 2).
Einen schnellen Überblick über die Zugriffsrechte aller Dateien und Verzeichnisse verschafft Konqueror in der detaillierten Ordner-Ansicht. Hier stehen in jedem Eintrag in der Spalte Berechtigungen neun Zeichen. Von links nach rechts geben die ersten drei Auskunft über die Befugnisse des Besitzers: Steht hier rwx, verfügt er über Lese-, Schreib- und Ausführrechte. Fehlen dem Besitzer eines oder mehrere dieser Privilegien, ersetzt ein Minus-Symbol den jeweiligen Buchstaben. Die Buchstaben R, W und X stehen dabei für die englischen Wörter "read" (lesen), "write" (schreiben) und "execute" (ausführen). Die nächsten drei Zeichen folgen derselben Logik, gelten aber für die Gruppe, der die Datei gehört. Schließlich folgen wieder drei Zeichen, die die Rechte der restlichen Benutzer wiedergeben.
Dieselben Informationen liefert auf der Kommandozeile der Befehl ls -l (Abbildung 3). Er zeigt jede Datei im aktuellen Verzeichnis in einer eigenen Zeile an, in der die Berechtigungen jeweils am Anfang stehen. Zudem enthält die Spalte außer den neun Zeichen für die drei möglichen Aktionen der drei Benutzerkategorien die Attribute von Spezialdateien. Findet sich hier ein Minus-Symbol, handelt es sich um eine gewöhnliche Datei. Bei einem Verzeichnis steht dagegen ein d für "directory" (Verzeichnis), bei einer Socket-Datei ein s für "socket". Gerätedateien unterscheiden sich wie beschrieben in blockorientierte (b) und zeichenorientierte (c, "character"), ein p kennzeichnet eine Named Pipe.
Die drei Spezialattribute SetUID, SetGID und Sticky belegen in dieser Darstellung die Stelle der Ausführrechte. Ist SetUID gesetzt, steht hier statt des x des Dateibesitzers ein S oder, falls dieser nicht über Ausführrechte verfügt, ein kleines s. Das SetGID-Attribut erscheint nach demselben Prinzip aber an der Stelle des Ausführen-Symbols der besitzenden Gruppe. Die Eigenschaft Sticky schließlich schreibt ein T an die letzte Stelle der Zeichenkette. Auch hier gilt: Dürfen die Benutzer eine Datei nicht ausführen, steht hier ein kleines t.
Die Zugriffsrechte der Dateien speichert das Dateisystem auf der Festplatte. Beim Einhängen [2] einer Partition oder eines anderen Datenträgers wie einer CD-ROM kann der Systemverwalter jedoch von vornherein Vorgaben treffen und die Möglichkeiten zur Rechteverwaltung innerhalb dieses Dateisystems einschränken.
Auf diese Weise verhindern beispielsweise viele Distributionen in der Standardeinstellung, dass Benutzer von einer CD-ROM aus Dateien starten. Dazu hängen sie CDs mit einer Option ein, die es unabhängig von den Rechten der Dateien verbietet, Programmdateien auf diesem Dateisystem auszuführen. Andere Optionen verhindern das Beschreiben eines Dateisystems oder das Auswerten der SetUID- und SetGID-Attribute.
Beim Zugriff auf Windows-Partitionen spielen solche Maßnahmen ebenfalls eine wichtige Rolle. Windows verwendet als Standard das Dateisystem NTFS, alte Versionen benutzten FAT, das teilweise immer noch zum Einsatz kommt. Beide verwalten Berechtigungen grundlegend anders als Linux-Dateisysteme oder gar nicht (FAT). So kann das freie Betriebssystem diese zwar einhängen, aber die beim Einhängen verwendeten Optionen schreiben Zugriffsrechte und Eigentümer vor. (csc)
| Infos |
|
[1] Verschlüsselung: Achim Leitner, "Vorhang zu!", EasyLinux 09/2005, S. 42 ff.
[2] Dateisysteme mounten: Hans-Georg Eßer & Heike Jurzik, "Bergsteiger", EasyLinux 06/2004, S. 80 ff., http://www.easylinux.de/2004/06/080-guru-mount |
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite |
Datenschutz |
© 2012 Linux New Media AG |
Last modified: 2007-04-05 11:10
[Linux-Magazin]
[LinuxUser]
[Linux-Community]
[Admin-Magazin]
[Ubuntu User]
[Smart Developer]
[Linux Events]
[Linux Magazine]
[Ubuntu User]
[Admin Magazine]
[Smart Developer]
[Linux Magazine Poland]
[Linux Community Poland]
[Linux Magazine Brasil]
[Linux Magazine Spain]
[Linux Technical Review]