Sicherheit zählt nicht nur im Netz. Ein gut gesichertes System schützt auch einzelne Benutzer untereinander vor zu viel Neugier und unguten Machenschaften des Nachbarn im gleichen System.
“Ich habe nichts zu verbergen”, glauben einige, die sich reinen Gewissens wähnen. Auf ihre Gehaltshöhe, sexuellen Präferenzen oder die PIN der Bankkarte angesprochen reagieren dieselben Personen dann aber schon zögerlicher – vollkommen zu Recht. Doch hier geht es diesmal nicht um die Vorratsdatenspeicherung, sondern um den Zugriffsschutz im kleinsten, nämlich im lokalen Rahmen: Die Steuerung der Zugriffsberechtigungen auf Dateien ist nützlich, da Dateien oft schützenswerte Informationen enthalten.
|
LPI-Aufgabengruppe |
|---|
|
Das Linux Professional Institute gliedert die Prüfungsfragen in Aufgabengruppen. Dieser Artikel bezieht sich auf die Abschnitte 1.104.5 (Zugriffsrechte) und 1.114.1 (Maßnahmen für die lokale Sicherheit). |
Erbstück
Linux hat das Permission-System für Dateien von Unix geerbt: Anwender vergeben Berechtigungen für ihre eigenen Dateien. Zudem ist praktisch, dass Linux fast alle Systemressourcen als Dateien darstellt, darunter auch Verzeichnisse, aber auch Hardware wie Festplatten, USB-Geräte oder Soundkarten. Die Systemverwaltung kann somit einheitlich erfolgen. Einzig den Zugang zum Netzwerk regelt das Betriebsystem auf anderem Wege – einfache Firewalls sind somit nicht Gegenstand dieser LPI-Folge. Bei einer Zugriffsberechtigung stellt sich neben der Frage, welches Objekt sie betrifft, auch die, für wen sie gilt. Diese Subjekte sind die Benutzer eines Rechners. Sie sind in »/etc/passwd« im Rahmen der Benutzerverwaltung aufgeführt [1].
Der Besitzer einer Datei, von dem es immer genau einen gibt, und Root sind mit allen Zugriffsrechten ausgestattet. Korrekt wäre für den Besitzer der englische Begriff Owner, aber die Befehle referenzieren ihn mit dem Begriff User. Sollen noch andere Anwender als der Besitzer Zugriff auf eine Datei erhalten, etwa weil sie in derselben Abteilung arbeiten, richtet der Admin ihnen eine Gruppe in der Datei »/etc/groups« ein. Manche Dateien sollen gar ohne Einschränkung für alle Anwender eines Systems nutzbar sein. Daher kennt Linux auch die Anwendergruppe der Anderen (englisch Others). Die Subjekte unterteilen Unix-ähnliche Systeme also in User, Group und Others.
Rechthaberei
Das System führt Buch darüber, was jedes Mitglied dieser Gruppen mit einem Objekt anstellen darf. Bei Text- oder Bilddateien ist dies ziemlich einfach erklärt: Die Berechtigung »r« erlaubt das Lesen (englisch read), also das Ansehen, »w« erlaubt das Schreiben (write). Die Berechtigungen einer Datei zeigt der Befehl »ls -l« an:
-rw-rw-r-- 1 bob users 0 2008-01-05 12:35 bobs-brief.txt
In der Ausgabe symbolisieren drei Gruppen zu je drei Zeichen – von links nach rechts ohne das erste Zeichen – die Berechtigungen für den Besitzer, die Gruppe und die Anderen. Ist der Buchstabe »r« gesetzt, darf das zugehörige Subjekt das Objekt lesen. Zum Schreiben (»w«) gehört jede Veränderung eines Datei-Inhaltes, inklusive Anhängen neuer Inhalte, Überschreiben vorhandener Inhalte oder Kürzen des Inhalts bis auf 0 Byte große Dateien. Im obigen Beispiel darf der Besitzer Bob seine Datei ansehen und verändern. Gleiches gilt für alle Mitglieder der Gruppe »users«. Alle anderen dürfen die Datei nur lesen, nicht aber verändern, denn die Schreibberechtigung ist nicht gesetzt.
Im Beispiel von Abbildung 1 hat Bob beim Spielen im Sandkasten von Alice die Datei »bobs-brief.txt« liegen lassen. Er kehrt später dorthin zurück und kann die Datei verändern, weil er schließlich ihr Besitzer ist. Er scheitert jedoch, als er versucht, der Datei den neuen Namen »bobs-erster-brief.txt« zuzuweisen, obwohl er Schreibberechtigungen für die Datei hat. Er darf es nicht, weil der Name der Datei nicht in der Datei selbst gespeichert ist, sondern im Verzeichnis »sandkasten«. Im »sandkasten«, der Alice gehört, hat offensichtlich nur Alice Schreibrechte.

Abbildung 1: Obwohl Bob als Besitzer der Datei »bobs-brief.txt« das Schreibrecht hat, darf er sie nicht umbenennen: Die Änderung betrifft nicht den Inhalt der Datei, sondern den Inhalt des Verzeichnisses. Als Besitzer des Verzeichnisses »sandkasten« hat hier neben Root nur Alice Schreibrecht.
Du darfst, du darfst nicht
Der Befehl »chmod« ändert Berechtigungen von Dateien. Das darf nur der Besitzer – er benötigt dazu keinerlei Schreib- oder Leserechte, solange er nur der Besitzer ist. Er gibt im ersten Argument das Subjekt, das ein Recht erhalten soll, in Form des Buchstabens »u«, »g« oder »o« an. Ein Pluszeichen signalisiert, dass Linux ein Recht hinzufügen soll. Ein Minuszeichen entfernt das Recht. Dann legt der Besitzer fest, welche Rechte er ändert. Die Subjektzuweisungs-Bündel lassen sich mit Kommata kombinieren.
Im zweiten Argument legt er nun fest, welche Datei er eigentlich meint. Um dem Besitzer (»u«) von »bobs-brief.txt« Schreib- und Leserechte zuzuweisen, der Gruppe (»g«) das Lesen zu ermöglichen, aber allen anderen Benutzern (»o«) das Lesen und Schreiben zu verbieten, gibt der Anwender ein:
chmod u+rw,g+r,o-rw bobs-brief.txt
Vorsicht ist geboten, wenn ein Subjekt ein Recht schon vorher besaß: Der letzte Befehl entzieht der Gruppe beispielsweise nicht das Schreibrecht, wenn sie es vorher schon besaß.
Bei den Symbolen für Zugriffsrechte bleibt noch das dritte Recht »x« zu klären. Bei Dateien bedeutet es, dass Anwender sie als Programme ausführen dürfen. Für Shellskripte benötigen sie im Gegensatz zu kompilierten Programmen zusätzlich das Leserecht. Eine andere Bedeutung hat das Recht »x«, wenn der Anwender es einem Verzeichnis zuweist. Dann erlaubt er dem Subjekt, das Verzeichnis zu betreten oder auch zu durchqueren, beispielsweise als Teil eines Dateipfads.
Manche Anwender unterschätzen die Gefahr, die durch ein schreibbares Verzeichnis droht. Einem Angreifer ist es so möglich, alle Dateien in dem Verzeichnis zu löschen oder umzubenennen. Wie dies für eine weitreichende Kompromittierung des Systems genutzt werden kann, zeigt der Kasten “Ein kurzer Befehl …”.
|
Ein kurzer Befehl |
|---|
|
Ein Administrator verlässt nur eine Minute lang seinen Arbeitsplatz. Eine Root-Shell bleibt ungeschützt zurück. Ein übelmeinender Kollege hat sich schon länger die begehrten Root-Rechte sichern wollen. Er hat nun die Chance, einen einzigen Befehl abzusetzen und den Bildschirm wieder zu löschen. Er setzt diesen Befehl ab: chmod o+w / Der Angreifer loggt sich danach an seinem Rechner mit seinem normalen Account im System ein und begibt sich in das Hauptverzeichnis. Weil er dort nun Schreibrechte besitzt, legt er ein neues Verzeichnis »hackedbin« an, in das er zunächst eine Kopie des Inhalts des Systemverzeichnisses »bin« legt: cd / mkdir hacked_bin cp bin/* hacked_bin Die eigentlichen Systemprogramme in »bin« sind zwar weiterhin für den Angreifer unantastbar. Weil er jedoch Kopien von ihnen angelegt hat, ist er nun deren Besitzer und modifiziert ein Programm seiner Wahl, etwa »grep« oder »su«. Er kann zudem das Orginalverzeichnis »bin« umbenennen, denn es liegt im Hauptverzeichnis, wofür er sich in der Root-Shell des Administrators Schreibrecht gegeben hat. Dann benennt er sein eigenes Verzeichnis um in »bin«: mv bin altes_bin mv hacked_bin bin Ab jetzt führen alle Benutzer – und vor allem Root – die modifizierten Programme des Angreifers aus, die beliebigen Schadcode enthalten können. Das Beispiel zeigt, dass Administratoren stets ein wachsames Auge auf schreibbare Verzeichnisse haben sollten, wenn sie einen solchen Angriff vermeiden möchten. |
Privatdedektei »find«
Um solche Verzeichnisse als Administrator aufzuspüren, hilft das Kommando »find«. Der Befehl, eine Art großer Bruder von »ls«, sucht Dateien nach unterschiedlichen Kriterien. Anders als »ls« wirkt er auch über Verzeichnisgrenzen hinaus. Wer »find« nutzt, hat drei Fragen zu beantworten: Wo will ich suchen, was will ich suchen und was soll passieren, wenn »find« es gefunden hat?
Die erste Frage beantwortet der Anwender durch ein Verzeichnis im ersten Argument. Gibt er hier nichts an, startet der Befehl im aktuellen Verzeichnis. Verbreitet ist die Suche nach Dateien mit einem bekannten Namen, was die Option »-name Dateiname« erledigt. Als weiteres Suchkriterium kann die Option »-perm« nach Berechtigungen suchen. Dazu stellt der Anwender der Berechtigung in der Form des »chmod«-Kommandos ein Minuszeichen voran. Der Befehl
find /home -perm -o+w -ls
sucht nach Dateien unterhalb von »/home«, bei denen das Write-Flag bei Others gesetzt ist, und gibt die Treffer in Form des »ls«-Kommandos aus. Soll sich die Suche auf Verzeichnisse beschränken, gibt der Anwender zusätzlich das Muster »-type d« an.
Wer nach Flags für verschiedene Subjekte sucht, etwa Group und Other, stellt dem Berechtigungsmuster einen Schrägstrich »/« voran: In diesem Fall reicht es, wenn ein Bit einer Datei auf das Muster passt, nicht alle sind notwendig. Der Befehl
find /home -perm /go+w -type d -ls
findet nun alle schreibbaren Verzeichnisse. Wenn das Schreib-Flag bei Group gesetzt ist, sollte man die Gruppe prüfen: Einige Gruppen, etwa »users«, sind sehr verbreitet und ihre Berechtigung bedeutet daher effektiv das Gleiche wie eine Berechtigung für Others.
Bis ins Letzte
Admins möchten sich oft informieren, ob Programme SUID- oder GUID-Flags gesetzt haben, um zu kontrollieren, ob diese Berechtigungen notwendig sind. Der Befehl
find /usr -perm /ug+s -type f -ls
sucht nach Dateien, die eines der beiden Flags gesetzt haben, und gibt sie aus. Die Auswirkungen von fehlerhaften Berechtigungen werden oft unterschätzt. Um sie aufzuspüren, hat der Admin in »find« ein mächtiges Werkzeug.
Viele falsche Berechtigungen rühren von einer ungünstigen Voreinstellung her. Jeder Unix-Prozess führt die so genannte »umask«-Einstellung mit sich, die festlegt, welche Berechtigung neue Dateien bekommen. Ein entsprechendes Kommando ist in jeder Shell eingebaut.
Umask: Schnelle Nummer
Umask benutzt das numerische Äquivalent der Berechtigungen: Der Anwender muss jene Bits angeben, die er nicht setzen möchte. Zwei typische Werte sind:
umask 002 umask 027
Das erste Kommando sorgt dafür, dass alle Benutzer der Gruppe neue Dateien lesen und schreiben können, allein die Others sind von Veränderungen ausgenommen. Das findet sich oft, wo mehrere Mitglieder eines Teams Dateien bearbeiten. Die zweite Variante bietet sich für Umgebungen an, in denen Anwender unabhängig voneinander arbeiten: Mitglieder von Gruppen dürfen zumindest lesen, die anderen erhalten gar keine Berechtigungen.
Den aktuellen Status der »umask«-Einstellung gibt der Befehl aus, wenn ihn der Anwender ohne Argumente eingibt. Eine systemweite Einstellung nehmen Admins oft in »/etc/profile« vor, da jede Shell diese Datei ausführt. Von dort vererbt sich der Umask-Wert von Prozess zu Prozess weiter, bis ein Anwender ihn beispielsweise in den Konfigurationsdateien seiner eigenen Shell ändert.
Trotz seiner Einfachheit schützt das Unix-Berechtigungssystem Dateien und Verzeichnisse zuverlässig vor unberechtigtem Zugriff. Differenziertere Rechte bietet die Familie der Dateisysteme Ext 2,Ext 3 undExt 4 (siehe Kasten “Erweiterte Attribute”). Noch einen Schritt weiter gehen SE Linux und App Armor [2]. Erweiterungen sind jedoch nicht mehr Teil der LPI-Prüfung 102. (ake)
|
Erweiterte Attribute |
|---|
|
Einige Dateisysteme ermöglichen dem Anwender eine feinere Steuerung, in welcher Form andere Anwender auf seine Dateien zugreifen dürfen. Das verbreitete Ext-Dateisystem bietet beispielsweise ab Version 2 eine Reihe zusätzlicher Rechte: Das »a«-Flag sorgt dafür, dass Anwender nur neue Inhalte an Dateien anhängen können, bestehende Inhalte aber nicht verändern dürfen. Das ist zum Beispiel nützlich für Logdateien. In einigen Fällen ist auch das »i«-Flag interessant, das für immutable, also unveränderlich, steht. Niemand kann dann die Datei verändern – selbst wenn die normalen »chmod«-Berechtigungen dies andeuten. Das Immutable-Flag setzen und entfernen kann nur der Besitzer. Es gibt viele weitere Attribute, die sich jedoch mehr auf die Dateiverwaltung und das Backup beziehen und nicht auf die Zugriffssicherheit. Erweiterte Attribute lassen sich mit dem Befehl »lsattr« anzeigen und analog zu »chmod« mit »chattr« verändern. Die erweiterten Attribute sind normalerweise nicht Teil der LPI-Prüfung, haben aber schon manchem Admin den Feierabend gerettet, der vorher nicht wusste, dass es sie gibt. |
|
Infos |
|---|
|
[1] Peer Heinlein, “Admins Vollprogramm – LPIC-1-Kurs, Teil 10”: Linux-Magazin 05/2007, S. 84 [2] Linux-Magazin-Schwerpunkt 06/06,Schwerpunktthema Sicherheit |





