[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ weiter ]

Anleitung zum Absichern von Debian
Kapitel 3 - Vor und während der Installation


3.1 Setzen Sie ein Passwort im BIOS

Bevor Sie irgendein Betriebssystem auf Ihrem Computer installieren, setzen Sie ein Passwort im BIOS. Nach der Installation (sobald Sie von der Festplatte booten können) sollten Sie zurück ins BIOS gehen und die Boot-Reihenfolge ändern, so dass Sie nicht von Diskette, CD-ROM oder sonstigen Geräten booten können, von denen dies nicht gehen sollte. Andernfalls benötigt ein Cracker nur physischen Zugang und eine Bootdiskette, um Zugriff auf Ihr ganzes System zu bekommen.

Es ist noch besser, wenn das System beim Booten immer ein Passwort verlangt. Dies kann sehr effektiv sein, wenn Sie einen Server laufen lassen, der selten neu gestartet wird. Der Nachteil dieser Vorgehensweise ist, dass das Neustarten einen menschlichen Eingriff benötigt, was zu Problemen führen kann, wenn das System nicht leicht zugänglich ist.

Beachten Sie: Viele BIOS-Varianten haben bekannte Master-Passwörter und es gibt sogar Programme, um Passwörter aus dem BIOS wieder auszulesen. Folglich können Sie sich nicht auf diese Maßnahme verlassen, um den Zugriff auf das Systems zu beschränken.


3.2 Partitionieren des Systems


3.2.1 Wählen Sie eine sinnvolle Partitionierung

Was eine sinnvolle Partitionierung ist, hängt davon ab, wie die Maschine benutzt wird. Eine gute Faustregel ist, mit Ihren Partitionen eher großzügig zu sein und die folgenden Faktoren zu berücksichtigen:

Im Falle eines Mailservers ist es wichtig, eine separate Partition für die Mail-Warteschlange (mail spool) anzulegen. Nicht-Lokale Nutzer können (wissentlich oder unwissentlich) diese Verzeichnisse (/var/mail oder /var/spool/mail) überfüllen. Liegt dieses Verzeichnis auf einer separaten Partition, würde dies das System nicht sofort unbenutzbar machen. Anderenfalls (wenn das Verzeichnis auch auf der /var-Partition liegt) hat das System ein großes Problem: Protokoll-Einträge (logs) können nicht erstellt werden, Pakete können nicht installiert werden und es könnten sogar ein paar Programme Probleme mit dem Starten haben (wenn Sie /var/run benutzen).

Außerdem sollten Sie für Partitionen, deren Platzbedarf Sie noch nicht abschätzen können, den Logical-Volume-Manager (lvm-common und die benötigten ausführbaren Programme, entweder lvm10 oder lvm2) installieren. Durch Benutzen von lvm können Sie Datenträger-Gruppen erstellen, die über mehrere Festplatten verteilt sind.


3.2.1.1 Auswahl eines passenden Dateisystems

Während der Partitionierung des Systems müssen Sie sich ebenfalls entscheiden, welche Dateisysteme Sie benutzen möchten. Als Standard-Dateisystem wird während der Installation für Linux Partitionen ext2 ausgewählt. Dennoch ist es ratsam, ein "journaling filesystem" (ein Dateisystem, dass Änderungen mitprotokolliert) zu nehmen, wie zum Beispiel ext3, reiserfs, jfs oder xfs. Dadurch verringern Sie Probleme nach einen Absturz des Systems in folgenden Fällen:

Lassen wir mal die Betrachtung der Leistung von Journaling-Dateisystemen beiseite (da dies oft in quasi-religiöse Glaubenskriege ausartet). In der Regel ist es besser, das ext3-Dateisystem zu benutzen. Der Grund dafür ist die Abwärtskompatibilität zu ext2. So können Sie, wenn es Probleme mit dem Journal gibt, dieses einfach abschalten und haben immer noch ein funktionierendes Dateisystem. Außerdem müssen Sie, wenn Sie das System mal mit einer Boot-Diskette (oder CD-ROM) wiederherstellen müssen, keinen speziellen Kernel benutzen. Wenn es sich um einen 2.4er-Kernel handelt, ist Unterstützung für ext3 bereits vorhanden. Wenn es sich um einen 2.2er-Kernel handelt, können Sie trotzdem Ihr Dateisystem booten, auch wenn Sie die Journaling-Fähigkeiten einbüßen. Wenn Sie ein anderes Journaling-Filesystem benutzen, werden Sie feststellen, dass eine Wiederherstellung nicht möglich ist, bis Sie einen 2.4er-Kernel mit den benötigten Modulen haben. Wenn Sie einen 2.2er-Kernel auf der Rettungsdiskette verwenden müssen, kann es sich als noch schwerer erweisen, auf reiserfs oder xfs zuzugreifen.

Auf jeden Fall ist die Datenintegrität unter ext3 besser, da es auch Datei-Daten protokolliert, während andere Dateisysteme lediglich Meta-Daten protokollieren (siehe auch http://lwn.net/2001/0802/a/ext3-modes.php3).


3.3 Gehen Sie nicht ins Internet, bevor Sie nicht bereit sind

Während der Installation sollten Sie das System nicht sofort mit dem Internet verbinden. Dies hört sich vielleicht komisch an, aber die Installation über das Netzwerk ist eine gängige Methode. Da das System einige Dienste installiert und diese sofort aktiviert werden, könnten Sie Ihr System für Angriffe öffnen, wenn das System mit dem Internet verbunden ist und die Dienste nicht geeignet konfiguriert sind.

Außerdem sollten Sie beachten, dass manche Pakete noch Sicherheitsprobleme haben können, weil das Installationsmedium nicht auf dem aktuellen Stand ist. Dies ist für gewöhnlich dann der Fall, wenn Sie von älteren Medien (wie CD-ROMs) installieren. In diesem Fall könnte Ihr System bereits kompromittiert sein, bevor Sie mit der Installation fertig sind!

Da die Debian-Installation und das Aktualisieren über das Internet durchgeführt werden können, denken Sie vielleicht, es sei eine gute Idee, dies gleich während der Installation zu nutzen. Wenn das System direkt mit dem Internet verbunden ist (und nicht von einer Firewall oder NAT geschützt wird), ist es besser, das System ohne Internet-Verbindung zu installieren. Benutzen Sie sowohl für die zu installierenden Pakete als auch für die Sicherheits-Updates eine lokale Quelle (mirror). Sie können einen Paket-Mirror aufsetzen, indem Sie ein anderes System nutzen, dass mit dem Internet verbunden ist und für Debian spezifische Werkzeuge (falls es sich um ein Debian-System handelt) wie apt-move oder apt-proxy oder andere gebräuchliche Werkzeuge zur Erstellung von Quellen verwendet. Damit kann das Archiv für das installierte System zur Verfügung gestellt werden. Sollte dies nicht möglich sein, sollten Sie Firewall-Regeln aufsetzen, die den Zugriff auf Ihr System beschränken, während Sie das Update durchführen (siehe Schutz der Sicherheitsaktualisierung durch eine Firewall, Anhang F).


3.4 Setzen Sie ein Passwort für root

Die wichtigste Grundlage für ein sicheres System ist ein gutes Root-Passwort. Siehe passwd(1) für einige Tipps, wie man gute Passwörter auswählt. Sie können auch automatische Passwort-Generatoren verwenden (siehe Erstellen von Benutzerpasswörtern, Abschnitt 4.10.13).

Im Internet gibt es zahlreiche Hinweise dazu, wie man gute Passwörter wählt. Zwei Seiten, die eine angemessene Übersicht und Ausführung bieten, sind Eric Wolframs How to: Pick a Safe Password und Walter Belgers Unix Password Security.


3.5 Aktivieren Sie Shadow-Passwörter und MD5-Passwörter

Gegen Ende der Installation werden Sie gefragt, ob "shadow passwords" eingeschaltet werden sollen. Beantworten Sie diese Frage mit "yes", dann werden Passwörter in der Datei /etc/shadow gespeichert. Nur root und die Gruppe shadow haben Lesezugriff auf diese Datei. So ist es keinem Nutzer möglich, sich eine Kopie dieser Datei zu besorgen, um einen Passwort-Cracker auf sie loszulassen. Sie können mit dem Befehl shadowconfig jederzeit zwischen "shadow passwords" und normalen Passwörtern wechseln.

Mehr zum Thema Shadow-Passwörter finden Sie unter Shadow Password (/usr/share/doc/HOWTO/en-txt/Shadow-Password.txt.gz).

Des Weiteren verwendet die Installation standardmäßig Passwörter, welche als MD5-Hashwerte gespeichert werden. Dies ist im Allgemeinen eine sehr gute Idee, da es längere Passwörter und bessere Verschlüsselung erlaubt. Mit MD5 sind Passwörter möglich, die länger als 8 Zeichen sind. Auf diese Weise kann man es einem Angreifer schwieriger machen, mit Brute-Force-Methoden an die Passwörter heranzukommen. Dies ist die Standardeinstellung in den neuesten Versionen des Pakets passwd. Sie erkennen MD5-Passwörter übrigens in der /etc/shadow an dem Anfang $1$.

Dies verändert allerdings alle Dateien im Verzeichnis /etc/pam.d und ergänzt in der "password"-Zeile den Eintrag "md5".

     password required pam_unix.so md5 nullok obscure min=6 max=16

Wird für max nicht ein Wert größer als 8 gewählt, ist diese Änderung ziemlich sinnlos. Weitere Informationen dazu finden Sie unter Nutzerauthentifizierung: PAM, Abschnitt 4.10.1.

Beachten Sie: Die Standardeinstellung in Debian verändert nicht den vorher gewählten max-Wert, auch dann nicht, wenn MD5 aktiviert wird.


3.6 Lassen Sie so wenige Dienste wie möglich laufen

Dienste sind Programme wie FTP- und Web-Server. Da sie nach eingehende Verbindungen, die den Dienst anfordern, horchen müssen, können sich externe Computer mit Ihrem Computer verbinden. Dienste sind manchmal verwundbar (zum Beispiel durch einen bestimmten Angriff kompromittierbar) und stellen dadurch ein Sicherheitsrisiko dar.

Sie sollten keine Dienste installieren, die Sie nicht unbedingt auf dem System brauchen. Jeder installierte Dienst könnte neue, vielleicht nicht gerade offensichtliche (oder bekannte) Sicherheitslöcher auf Ihrem Computer öffnen.

Wie Sie vielleicht schon wissen, wird ein Dienst, sobald er installiert wird, auch gleich automatisch aktiviert. Bei einer Standardinstallation ohne weitere installierte Dienste ist die Anzahl der laufenden Dienste ziemlich gering. Sie wird noch geringer, wenn man die Dienste betrachtet, die im Netzwerk angeboten werden. Das Zahl war bei Debian 2.1 etwas größer als bei Debian 2.2 (einige inetd-Dienste waren standardmäßig aktiviert) und in Debian 2.2 ist der RPC-Portmapper nach der Installation aktiviert. RPC ist standardmäßig installiert, da er für viele Dienste wie zum Beispiel NFS benötigt wird. Er kann sehr leicht entfernt werden. Lesen Sie Daemons abschalten, Abschnitt 3.6.1, wie Sie ihn abschalten.

Wenn Sie einen neuen Netzwerkdienst (Daemon) auf Ihrem Debian GNU/Linux System installieren, kann er auf zwei Arten gestartet werden: durch den inetd-Superdaemon (d. h. eine Zeile wird zu der /etc/inetd.conf hinzugefügt) oder durch ein eigenständiges Programm, dass sich selbst an die Netzwerkschnittstelle bindet. Eigenständige Programme werden durch /etc/init.d gesteuert. Sie werden beim Hochfahren durch den Sys-V-Mechanismus gestartet, der die symbolischen Links in /etc/rc?.d/* benutzt. (Mehr Informationen dazu finden Sie in /usr/share/doc/sysvinit/README.runlevels.gz).

Wenn Sie trotzdem Dienste installieren möchten, diese aber selten benutzen, entfernen Sie sie mit den update-Befehlen, wie update-inetd und update-rc.d, aus dem Startvorgang.


3.6.1 Daemons abschalten

Das Abschalten eines Daemons ist sehr einfach. Es gibt verschiedene Methoden:

Sie können die Links manuell aus /etc/rc${runlevel}.d/ entfernen oder Sie benutzen update-rc.d (siehe auch update-rc.d(8)). So können Sie zum Beispiel einen Dienst in den Multi-User-Runleveln abschalten:

      update-rc.d stop XX 2 3 4 5 .

Bitte beachten Sie, dass update-rc.d -f _service_ remove nicht korrekt arbeiten wird, wenn Sie nicht file-rc benutzen, da alle Verknüpfungen entfernt werden. Nach einer Neuinstallation oder einem Upgrade dieses Paketes werden diese Verknüpfungen neu angelegt (was Sie vermutlich nicht wollen). Wenn Sie denken, dass dies nicht sehr intuitiv ist, haben Sie wahrscheinlich recht (siehe Bug 67095). Aus der Manpage:

      If any files /etc/rcrunlevel.d/[SK]??name already exist then
      update-rc.d does nothing.  This is so that the system administrator 
      can rearrange the  links,  provided that  they  leave  at  least one
      link remaining, without having their configuration overwritten.

Wenn Sie file-rc benutzen, werden alle Informationen über das Starten von Diensten durch eine gemeinsame Konfigurationsdatei verarbeitet und sogar nach der Deinstallation von Paketen beibehalten.

Sie können das TUI (Text User Interface, textbasierte Benutzungsoberfläche) des Paketes rcconf benutzen, um all diese Änderungen einfach zu erledigen (rcconf arbeitet sowohl mit file-rc als auch mit normalen System-V-Runleveln).

Andere (nicht empfohlene) Methoden zum Abschalten eines Dienstes sind: chmod 644 /etc/init.d/daemon (aber das erzeugt eine Fehlermeldung beim Booten) oder das Ändern des /etc/init.d/daemon-Skriptes (hinzufügen von exit 0 als allererste Zeile oder Auskommentieren des start-stop-daemon Teils). Da es sich bei allen init.d-Dateien um Konfigurationsdateien handelt, werden sie bei einem Upgrade nicht überschrieben.

Leider können Sie, im Gegensatz zu anderen (UNIX-)Betriebssystemen, Dienste unter Debian nicht abschalten, indem Sie die Dateien unter /etc/default/_servicename_ modifizieren.

FIXME: Add more information on handling daemons using file-rc


3.6.2 Abschalten von inetd oder seinen Diensten

Sie sollten überprüfen, ob Sie heutzutage den inetd-Daemon überhaupt brauchen. Inetd war früher eine Möglichkeit, Unzulänglichkeiten des Kernels auszugleichen. Diese sind aber in modernen Linux-Kerneln nicht mehr vorhanden. Gegen inetd gibt es die Möglichkeit von Angriffen, die zur Dienstverweigerung führen (Denial of Service), welche die Last des Rechners unglaublich erhöhen. Viele Leute ziehen es vor, einzelne Daemonen zu benutzen, anstatt einen Dienst über inetd zu starten. Wenn Sie immer noch einen inetd-Dienst laufen lassen wollen, wechseln Sie wenigstens zu einem besser zu konfigurierenden Inet-Daemonen wie xinetd oder rlinetd.

Sie sollten alle nicht benötigten Inetd-Dienste auf Ihrem System abschalten, wie zum Beispiel echo, chargen, discard, daytime, time, talk, ntalk und die r-Dienste (rsh, rlogin und rcp), die als SEHR unsicher gelten (benutzen Sie stattdessen ssh).

Sie können Dienste abschalten, indem Sie direkt /etc/inetd.conf editieren, aber Debian stellt Ihnen einen besseren Weg zur Verfügung: update-inetd (was die Dienste auf eine Art herauskommentiert, so dass sie leicht wieder eingeschaltet werden können). Sie können den Telnet-Daemon sehr leicht mit dem folgenden Kommando abschalten, so dass die Konfigurationsdateien angepasst und der Daemon neu gestartet wird:

      /usr/sbin/update-inetd --disable telnet

Wenn Sie Dienste starten wollen, aber nur auf bestimmten IP-Adressen Ihres Systems, müssen Sie eventuell auf eine undokumentierte Funktion des inetd zurückgreifen (Austausch des Namens des Dienstes durch dienst@ip). Alternativ können Sie einen Daemon wie xinetd benutzen.


3.7 Installieren Sie möglichst wenig Software

Debian bietet sehr viel Software an. Debian 3.0 (Woody) enthält sechs oder sieben (je nach Architektur) CDs mit Software und tausenden Paketen. Debian 3.1 Sarge wird mit etwa 13 CD-ROMs ausgeliefert werden. Bei so viel Software, selbst wenn Sie die Installation auf das Basis-System reduzieren [4], könnten Sie auf Abwege geraten und mehr installieren, als Sie wirklich benötigen.

Da Sie bereits wissen, was Sie mit Ihrem System machen wollen (oder etwa nicht?), sollten Sie nur Software installieren, die Sie wirklich für den Betrieb benötigen. Jedes unnötig installierte Programm könnte von einem Nutzer, der Ihr System kompromittieren will, genutzt werden – oder von einem externen Eindringling, der Shell-Zugriff bekommen hat (oder der Code von außerhalb durch einen fehlerhaften Dienst ausführen kann).

Zum Beispiel kann das Vorhandensein von Hilfsprogrammen für Programmierer (ein C-Compiler) oder Interpretern (wie Perl s.u., Python, tcl, ...) einem Angreifer helfen, das System weiter zu kompromittieren:

Natürlich kann ein Eindringling mit lokalem Shell-Zugriff seine eigenen Programme herunterladen und ausführen. Und sogar die Shell selbst kann benutzt werden, um komplexere Programme zu schreiben. Das Entfernen unnötiger Programme wird also nicht helfen, das Problem zu verhindern. Jedoch wird es für den Angreifer wesentlich schwieriger werden, das System zu kompromittieren (und manchmal wird er in dieser Situation aufgeben und sich ein leichteres Ziel suchen). Wenn Sie also auf einem produktivem System Werkzeuge lassen, die benutzt werden können, um andere Systeme anzugreifen (siehe Programme zur Fernprüfung der Verwundbarkeit, Abschnitt 8.1), müssen Sie auch davon ausgehen, dass ein Angreifer sie auch benutzen wird.

Beachten Sie bitte, dass eine Standardinstallation von Debian Sarge (d.h. eine Installation, bei der nicht individuell Pakete ausgewählt werden) einige Pakete zur Softwareentwicklung installieren wird, die normalerweise nicht benötigt werden. Das liegt daran, dass einige Pakete zur Softwareentwicklung die Priorität Standard haben. Wenn Sie keine Software entwickeln, können Sie ohne Bedenken die folgenden Pakete von Ihrem System entfernen, was nebenbei auch etwas Platz schafft:

       Paket                     Größe
       ------------------------+--------
       gdb                     2.766.822
       gcc-3.3                 1.570.284
       dpkg-dev                  166.800
       libc6-dev               2.531.564
       cpp-3.3                 1.391.346
       manpages-dev            1.081.408
       flex                      257.678
       g++                         1.384 (Hinweis: virtuelles Paket)
       linux-kernel-headers    1.377.022
       bin86                      82.090
       cpp                        29.446
       gcc                         4.896 (Hinweis: virtuelles Paket)
       g++-3.3                 1.778.880
       bison                     702.830
       make                      366.138
       libstdc++5-3.3-dev        774.982

Das ist etwas, was wahrscheinlich in Veröffentlichungen nach Sarge verbessert werden wird. Um den aktuellen Status dieser Sache zu verfolgen, sehen Sie sich Fehler #301273 und Fehler #301138 an. Wegen eines Fehlers im Installationssystem ist dies nicht geschehen, wenn mit dem Installationssystem von Debian 3.0 Woody installiert wird.


3.7.1 Entfernen von Perl

Sie müssen bedenken, dass es nicht gerade einfach ist, Perl von einem Debian-System zu entfernen (in der Tat kann es ziemlich schwierig werden), da es von vielen Dienstprogrammen benutzt wird. perl-base hat außerdem Priority: required (und das sagt eigentlich schon alles). Es ist aber trotzdem machbar. Allerdings können Sie auf diesem System keine Perl-Anwendung mehr laufen lassen. Außerdem müssen Sie auch das Paket-Management-System hereinlegen, damit es weiterhin denkt, dass perl-base installiert ist, auch wenn es das nicht mehr ist. [6]

Welche Dienstprogramme benutzen Perl? Sie können es selbst herausfinden:

      $ for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do [ -f $i ] && {
      type=`file $i | grep -il perl`; [ -n "$type" ] && echo $i; }; done

Diese Liste schließt die folgenden Dienstprogramme mit der Priorität required oder important ein:

Ohne Perl und solange Sie diese Dienstprogramme nicht in einem Shell-Skript neu schreiben, werden Sie also wahrscheinlich keine Pakete mehr verwalten können (und so das System nicht upgraden können, und das ist keine gute Idee).

Wenn Sie sich dazu entschlossen haben, Perl aus dem Debian-Basis-System zu entfernen und ein wenig Freizeit haben, schicken Sie uns doch Fehlerberichte zu den aufgezählten Paketen, die (als ein Patch) einen Ersatz dieser Dienstprogramme als Shell-Skript enthalten.


3.8 Lesen Sie Debians Sicherheits-Mailinglisten

Es ist niemals falsch, einen Blick entweder in die debian-security-announce Mailingliste zu werfen, wo Anleitungen und Problemlösungen durch das Debian-Sicherheits-Team bekannt gemacht werden, oder sich an mailto:debian-security@lists.debian.org zu beteiligen, wo Sie an Diskussionen zu allen sicherheitsrelevanten Fragen teilnehmen können.

Um wichtige Warnungen zu Sicherheitsaktualisierungen zu erhalten, senden Sie eine E-Mail an debian-security-announce-request@lists.debian.org mit dem Wort "subscribe" in der Betreffzeile. Sie können diese moderierte E-Mail-Liste unter http://www.de.debian.org/MailingLists/subscribe auch über das Web abonnieren.

Diese Mailingliste hat ein sehr geringes Aufkommen, und indem Sie sie abonnieren, werden Sie sofort über Sicherheitsaktualisierungen der Debian-Distribution informiert. Dies erlaubt Ihnen sehr schnell, neue Pakete mit Sicherheitsaktualisierungen herunterzuladen, was sehr wichtig ist, um ein sicheres System zu verwalten (siehe Ausführen von Sicherheitsupdates, Abschnitt 4.2 für weitere Details, wie Sie dies machen).


[ zurück ] [ Inhalt ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ weiter ]

Anleitung zum Absichern von Debian

Version: 3.0, Mon, 16 May 2005 21:27:58 +0200

Javier Fernández-Sanguino Peña jfs@debian.org
Autoren, Abschnitt 1.1