Product SiteDocumentation Site

4.17. Einschränkung und Kontrolle des Dateisystems

4.17.1. Benutzung von Quotas

Es ist wichtig, eine gute Quota-Regelung zu haben, da es die Benutzer daran hindert, die Festplatten zu füllen.
Sie können zwei Arten von Quota-Systemen benutzen: Benutzer-Quota und Gruppen-Quota. Wie Sie sich sicher denken können, begrenzt ein User-Quota den Plattenplatz, den ein Benutzer belegen kann, und ein Gruppen-Quota macht dasselbe für Gruppen. Beachten Sie dies, wenn Sie die Größe der Quotas festlegen.
Es gibt ein paar wichtige Punkte, die Sie erwägen sollten, wenn Sie ein Quota-System aufsetzen:
  • Halten Sie die Quotas klein genug, so dass die Benutzer Ihren Festplattenplatz nicht aufzehren können.
  • Halten Sie die Quotas groß genug, so dass Benutzer sich nicht beschweren oder dass Ihr Mail-Quota Sie daran hindert, nach einer Weile Mails anzunehmen.
  • Nutzen Sie Quotas auf allen Bereichen, die Benutzer beschreiben können, auf /home ebenso wie auf /tmp.
Für jede Partition und jedes Verzeichnis, auf das Benutzer Schreibzugriff haben, sollte ein Quota eingerichtet werden. Berechnen Sie eine sinnvolle Quota-Größe, die Benutzerfreundlichkeit und Sicherheit kombiniert, und weisen Sie diese zu.
Sie wollen also Quotas benutzen. Zuerst müssen Sie prüfen, ob Ihr Kernel Quota unterstützt. Wenn nicht, müssen Sie ihn neu kompilieren. Prüfen Sie anschließend, ob das Paket quota installiert ist. Wenn nicht, installieren Sie es.
Um Quota für die entsprechenden Dateisysteme einzuschalten, müssen Sie nur die Einstellung defaults in Ihrer /etc/fstab zu defaults,usrquota ändern. Wenn Sie Gruppen-Quotas benötigen, ersetzen Sie usrquota durch grpquota. Sie können auch beides verwenden. Erstellen Sie dann leere quota.user und quota.group in den Hauptverzeichnissen der Dateisysteme, auf denen Sie Quotas einführen möchten (d.h.
touch
/home/quota.user /home/quota.group
für das Dateisystem /home).
Starten Sie quota neu, indem Sie /etc/init.d/quota stop;/etc/init.d/quota start ausführen
/etc/init.d/quota stop;/etc/init.d/quota
        start
. Nun sollte quota laufen und die Größen können festgelegt werden.
Bearbeiten der Quotas eines bestimmten Benutzer wird mit
edquota -u <user> gemacht
. Gruppen-Quotas können mit
edquota -g <group> geändert werden
. Setzen Sie dann die weiche und die harte Grenze und inode-Quotas, falls Sie es benötigen.
Mehr Informationen über Quotas finden Sie im Handbuch von quot und im Mini-Howto von quota (/usr/share/doc/HOWTO/de-html/mini/DE-Quota-HOWTO.html). Sie sollten auch einen Blick auf pam_limits.so werfen.

4.17.2. Die für das ext2-Dateisystem spezifischen Attribute (chattr/lsattr)

Zusätzlich zu den normalen Unix-Rechten bieten die ext2- und ext3-Dateisysteme eine Anzahl von besonderen Attributen, die Ihnen mehr Kontrolle über die Dateien auf Ihrem System erlauben. Im Gegensatz zu den gewöhnlichen Rechten werden diese Attribute nicht vom gebräuchlichen Befehl ls -l angezeigt und können auch nicht mit chmod geändert werden. Um sie zu verwalten, brauchen Sie zwei weitere Programme, nämlich lsattr und chattr (im Paket e2fsprogs). Beachten Sie, dass das bedeutet, dass diese Attribute normalerweise bei einem Backup des Systems nicht gespeichert werden. Wenn Sie also eines verändern, könnte es sich lohnen, die aufeinander folgenden chattr-Befehle in einem Skript zu speichern, damit Sie sie später wieder zuweisen können, falls Sie ein Backup zurückspielen müssen.
Unter allen Attributen werden die zwei, die für die Erhöhung der Sicherheit am bedeutendsten sind, mit den Buchstaben »i« und »a« bezeichnet. Sie können nur vom Superuser vergeben (oder entfernt) werden:
  • Das Attribut »i« (»immutable«, unveränderlich): Eine Datei mit diesem Attribut kann weder verändert noch gelöscht oder umbenannt werden, nicht einmal vom Superuser. Auch ein Link auf sie kann nicht angelegt werden.
  • Das Attribut »a« (»append«, anfügen): Dieses Attribut hat den gleichen Effekt wie das Attribut immutable, allerdings mit der Ausnahme, dass Sie immer noch die Datei im Anfügen-Modus öffnen können. Das bedeutet, dass Sie ihr immer noch Inhalt hinzufügen, aber den vorhanden Inhalt nicht verändern können. Dieses Attribut ist besonders für die Protokolldateien nützlich, die unter /var/log/ gespeichert werden. Beachten Sie aber, dass sie durch Log-Rotations-Skripte manchmal verschoben werden.
Diese Attribute können auch für Verzeichnisse vergeben werden. In diesem Fall ist es jedem unmöglich, den Inhalt des Verzeichnisses zu verändern, also beispielsweise eine Datei umzubenennen oder zu löschen. Wenn das append-Attribut einem Verzeichnis zugewiesen wird, können nur noch Dateien erstellt werden.
Es ist leicht einzusehen, wie das Attribut »a« die Sicherheit verbessert, indem es Programmen, die nicht vom Superuser ausgeführt werden, die Fähigkeit einräumt, Daten hinzuzufügen, aber verhindert, dass älterer Inhalt verändert wird. Dem gegenüber erscheint das Attribut »i« uninteressanter. Schließlich kann der Superuser ja schon die normalen Unix-Rechte verwenden, um den Zugang zu Dateien einzuschränken. Und ein Angreifer, der Zugang zum Konto des Superusers hat, kann immer das Programm chattr benutzen, um die Attribute zu entfernen. Ein solcher Eindringlich ist vielleicht zunächst verwirrt, wenn er feststellt, dass er eine Datei nicht löschen kann. Aber Sie sollten nicht davon ausgehen, dass er blind ist – immerhin hat er es geschafft, in Ihr System einzudringen! Einige Handbücher (einschließlich früherer Versionen dieses Dokuments) empfehlen, einfach die Programme chattr und lsattr vom System zu entfernen, um die Sicherheit zu erhöhen. Aber diese Strategie, die auch als »security by obscurity« (Sicherheit durch Verschleierung) bekannt ist, sollte unter allen Umständen vermieden werden, da sie ein falsches Gefühl von Sicherheit vermittelt.
Dieses Problem lösen Sie auf sichere Art und Weise, indem Sie die Fähigkeiten des Linux-Kernel verwenden, wie es in Abschnitt 10.4.2.1, „Proaktive Verteidigung“ beschrieben wird. Die hier interessante Fähigkeit heißt CAP_LINUX_IMMUTABLE: Wenn Sie es vom Satz der Fähigkeiten entfernen (indem Sie zum Beispiel den Befehl lcap CAP_LINUX_IMMUTABLE verwenden, ist es nicht mehr möglich, irgendwelche »a« oder »i« Attribute auf Ihrem System zu verändern, auch nicht durch den Superuser! Ein umfassende Strategie könnte also folgendermaßen aussehen:
  • Vergeben Sie die Attribute »a« und »i« an von Ihnen gewünschte Dateien.
  • Fügen Sie den Befehl lcap CAP_LINUX_IMMUTABLE einem der Skripten, die den Start des Systems steuern (startup scripts), hinzu.
  • Setzen Sie das Attribut »i« für dieses Skript, andere Startdateien und auch das Programm lcap selbst.
  • Führen Sie den oben genannten Befehl per Hand aus (oder starten Sie Ihr System neu, um sicherzustellen, dass alles wie gewünscht funktioniert).
Da nun die Fähigkeit von dem System entfernt wurde, kann ein Eindringling keine Attribute der geschützten Dateien ändern und daher diese nicht verändern oder löschen. Wenn er einen Neustart der Maschine erzwingt (was der einzige Weg ist, die Fähigkeiten wieder herzustellen), wird dies leicht zu bemerken sein. Außerdem werden die Fähigkeiten bei einem Neustart sofort wieder entfernt werden. Die einzige Möglichkeit, eine geschützte Datei zu ändern, ist, das System im Single-User-Modus zu starten oder ein anderes Bootmedium zu verwenden. Beides erfordert physischen Zugang zur Maschine!

4.17.3. Prüfung der Integrität des Dateisystems

Sind Sie sich sicher, dass /bin/login auf Ihrer Festplatte immer noch dasselbe Programm ist, das Sie vor ein paar Monaten installiert haben? Was wäre, wenn es sich um eine gehackte Version handelt, die eingegebene Passwörter in einer versteckten Datei ablegt oder sie als Klartext im ganzen Internet herummailt?
Die einzige Methode, um einen gewissen Schutz dafür zu haben, ist es, die Dateien jede(n) Stunde/Tag/Monat (ich ziehe täglich vor) zu prüfen, indem man deren aktuelle und alte MD5-Summe vergleicht. Zwei unterschiedliche Dateien können keine gleichen MD5-Summen haben (die MD5-Summe umfasst 128 Bits, so ist die Wahrscheinlichkeit, dass zwei unterschiedliche Dateien eine gleiche MD5-Summe haben etwa 1 zu 3,4e3803). So sind Sie sicher, solange niemand den Algorithmus gehackt hat, der die MD5-Summen auf Ihrer Maschine erstellt. Dies ist, nun ja, extrem schwer und sehr unwahrscheinlich. Sie sollten diese Überprüfung Ihrer Programme als sehr wichtig ansehen.
Weit verbreitete Werkzeuge hierfür sind sxid, aide (Advanced Intrusion Detection Environment, fortgeschrittene Umgebung zur Erkennung von Eindringlingen), tripwire, integrit und samhain. Das Installieren von debsums wird Ihnen helfen, die Integrität des Dateisystems zu überprüfen, indem Sie die MD5-Summen jeder Datei gegen die MD5-Summe aus dem Debian-Archiv-Paket vergleichen. Seien Sie aber gewarnt, dass diese Dateien sehr leicht von einem Angreifer geändert werden können. Außerdem stellen nicht alle Pakete MD5-Summen für die in ihnen enthaltenen Programme zur Verfügung. Weitere Informationen finden Sie unter Abschnitt 10.2, „Regelmäßiges Überprüfung der Integrität“ und Abschnitt 4.19, „Einen Schnappschuss des Systems erstellen“.
Sie benutzen vielleicht locate, um das gesamte Dateisystem zu indizieren. Wenn das so ist, sollten Sie die Auswirkungen davon berücksichtigen. Das Debianpaket findutils enthält locate, das als Benutzer nobody läuft. Daher indiziert es nur Dateien, die von jedermann eingesehen werden können. Wenn Sie dieses Verhalten verändern, werden allerdings alle Orte von Dateien für alle Benutzer sichtbar. Wenn Sie das gesamte Dateisystem indizieren wollen (und nicht nur die Stückchen, die der Benutzer nobody sehen kann), können Sie locate durch das Paket slocate ersetzen. slocate wird als eine um Sicherheit erweiterte Version von GNU locate bezeichnet, hat aber tatsächlich weitere Funktionen zum Auffinden von Dateien. Wenn Sie slocate benutzen, sieht ein Benutzer nur Dateien, auf die er auch Zugriff hat, während Sie Dateien und Verzeichnisse des gesamten Systems ausschließen können. Das Paket slocate führt seinen Aktualisierungsprozess mit höheren Rechten aus als locate. Außerdem indiziert es jede Datei. Benutzern wird es dadurch ermöglicht, schnell nach jeder Datei zu suchen, die sie sehen können. slocate zeigt ihnen keine neuen Dateien an; es filtert die Ausgabe auf Grundlage der UID.
Sie sollten auch bsign oder elfsign einsetzen. elfsign bietet die Möglichkeit, digitale Signaturen an ELF-Binaries anzufügen und diese Signaturen zu überprüfen. Die aktuelle Fassung verwendet PKI, um die Checksummen der Binaries zu signieren. Dies hat den Vorteil, dass festgestellt werden kann, ob das Binary verändert wurde und wer es erstellt hat. bsign verwendet GPG, elfsign benutzt PKI-(X.509)-Zertifikate (OpenSSL).

4.17.4. Aufsetzen einer Überprüfung von setuid

Das Debian-Paket checksecurity enthält einen Cron-Job, der täglich in /etc/cron.daily/checksecurity ausgeführt wird. [38]. Dieser Cron-Job führt das Skript /usr/sbin/checksecurity aus, das Informationen über Änderungen sichert.
Das Standardverhalten sendet diese Informationen nicht an den Superuser. Stattdessen erstellt es eine tägliche Kopie dieser Änderungen unter /var/log/setuid.changes. Sie sollten die Variable MAILTO (in /etc/checksecurity.conf) auf »root« setzen, damit diese Informationen an ihn gemailt werden. Sehen Sie sich auch checksecurity(8) für weitere Konfigurations-Informationen an.


[38] In älteren Veröffentlichungen war checksecurity in cron integriert und die Datei hieß /etc/cron.daily/standard.