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 Bootdiskete, 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 Applikationen, 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.
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:
/home
und /tmp
) sollte auf einer separaten Partition
liegen. Dies reduziert das Risiko eines DoS durch einen Nutzer, indem er Ihren
"/"-Mountpoint vollschreibt und so das gesamte System unbenutzbar
macht. (Eigentlich ist das so nicht ganz richtig, da immer etwas Platz für den
Superuser root reserviert wird, den ein normaler Nutzer nicht belegen kann.)
/var
(insbesondere /var/log
) eine seperate Partition
bekommen. Auf einem Debian-System sollten Sie der /var-Partition etwas mehr
Platz als gewöhnlich geben, da heruntergeladene Pakete (der Zwischenspeicher
von apt) unter /var/cache/apt/archives
gespeichert werden.
/opt
oder /usr/local
. Wenn dies separate Partitionen
sind, werden sie nicht gelöscht, falls Sie einmal Ihr Debian neu installieren
(müssen).
Im Falle eines Mailservers ist es wichtig, eine seperate 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.
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 diesen Fällen:
Lassen wir mal die Betrachtung der Leistung von Journaling-Filesystemen beiseite (da dies oft in quasi-religiösen Glaubenskriegen 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 mit einem 2.2er-Kernel der Rettungsdiskette festhängen, kann es sich als ziemlich schwer erweisen, auf reiserfs oder xfs zuzugreifen.
In jedem Fall sind mit ext3 weniger Datenverluste zu befürchten, 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
).
Das System, das Sie installieren wollen, sollten Sie nicht sofort während der Installation 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, wenn das System mit dem Internet verbunden ist und sie nicht geeignet konfiguriert sind, Ihr System für Angriffe öffnen.
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 kompromitiert 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 ist 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 Sytem ohne Internet-Verbindung zu installieren. Benutzen Sie eine
lokale Quelle (mirror) sowohl für die zu installierenden Pakete als auch für
die Sicherheits-Updates. Sie können einen Paket-Mirror aufsetzen, indem Sie
ein anderes System nutzen, dass mit dem Internet verbunden ist und
Debian-spezifische Tools (wenn es sich um ein Debian-System handelt) wie
apt-move
oder apt-proxy
. 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 Sicherheits-Update geschützt durch eine
Firewall, Anhang F).
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.
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 jederseit 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
).
Desweiteren werden Sie während der Installation gefragt, ob Sie Passwörter
benutzen möchten, welche als MD5-Hashwerte gespeichert wurden. Dies ist im
allgemeinen eine 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 neueren Versionen des Pakets password
.
Sie können dies noch jederzeit nach der Installation mit dpkg-reconfigure
-plow passwd ändern. 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 der Wert für max nicht größer als 8 gewählt, ist diese Änderung ziemlich sinnlos.
Dienste sind Programme wie FTP- und Web-Server. Da sie eingehende Verbindungen, die den Dienst anfordern entgegennehmen und ihnen zuhören müssen, können sich externe Computer mit Ihrem Computer verbinden. Dienste sind manchmal verwundbar (zum Beispiel durch einen bestimmten Angriff kompromitierbar) und sind dadurch ein Sicherheitsrisiko.
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 das Risiko ziemlich gering. Es wird noch geringer, wenn man nur Dienste installiert, die man auch wirklich im Netzwerk anbieten möchte. Das Risiko bei Debian 2.1 war 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 Netzwerk-Dienst (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
Netzwerk-Schnittstelle 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.
Das Abschalten eines Daemons ist sehr einfach. Es gibt verschiedene Methoden:
/etc/rc${runlevel}.d/
oder
Umbenennen des Links (so dass er nicht mehr mit einem 'S' anfängt)
/etc/init.d/_service_name_
), zum
Beispiel in /etc/init.d/OFF._service_name_
/etc/init.d/_dienst_
/etc/init.d/_dienst_
, so dass sich das Skript
sofort beendet.
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 wenig 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
werden sogar nach der Deinstallation eines Dienstes von dem System 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
Abschalten sollten Sie alle nicht benötigten Dienste, 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). Nachdem Sie diese abgeschaltet haben, sollten Sie überprüfen, ob Sie überhaupt den inetd-Daemon brauchen. Viele Leute ziehen es vor einzelne Daemonen zu benutzen, anstatt einen Dienst über inetd zu starten. Wenn Sie dann immer noch einen inetd-Dienst laufen lassen wollen, wechseln Sie zu einem besser zu konfigurierenden inet-Daemonen, wie xinetd oder lrinetd.
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 auskommentiert, 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. Alternativ können Sie einen Daemon wie
xinetd
benutzen.
Debian bietet sehr viel Software an. Debian 3.0 (woody) enthält alleine 6 CDs mit Software und tausenden von Paketen. Bei so viel Software, selbst wenn Sie die Installation auf das Basis-System reduzieren [2] 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ötige 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, Python, tcl, s.u.) 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 wird es für den Angreifer wesentlich schwieriger werde, das System zu komprimitieren (und manchmal wird er in dieser Situation aufgeben und sich ein leichteres Ziel suchen). Wenn Sie also auf einem produktivem System Tools lassen, die benutzt werden können, um andere Systeme anzugreifen (siehe Tools zur Fern-Prüfung der Verwundbarkeit, Abschnitt 7.1), müssen Sie auch davon ausgehen, dass ein Angreifer sie benutzen wird.
Sie müssen bedenken, dass es nicht gerade einfach ist, Perl
von
einem Debian-System zu entfernen, 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. Sie müssen nur
bedenken, dass Sie auf diesem System keine Perl-Anwendung mehr laufen lassen
können, und Sie müssen auch das Paket-Management-System hereinlegen, damit es
weiterhin denkt, dass perl-base
installiert ist, auch wenn es das
nicht mehr ist. [4]
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 mit ein:
/usr/bin/chkdupexe
aus dem Paket util-linux
.
/usr/bin/replay
aus dem Paket bsdutils
.
/usr/sbin/cleanup-info
aus dem Paket dpkg
.
/usr/sbin/dpkg-divert
aus dem Paket dpkg
.
/usr/sbin/dpkg-statoverride
aus dem Paket dpkg
.
/usr/sbin/install-info
aus dem Paket dpkg
.
/usr/sbin/update-alternatives
aus dem Paket dpkg
.
/usr/sbin/update-rc.d
aus dem Paket sysvinit
.
/usr/bin/grog
aus dem Paket groff-base
.
/usr/sbin/adduser
aus dem Paket adduser
.
/usr/sbin/debconf-show
aus dem Paket debconf
.
/usr/sbin/deluser
aus dem Paket adduser
.
/usr/sbin/dpkg-preconfigure
aus dem Paket debconf
.
/usr/sbin/dpkg-reconfigure
aus dem Paket debconf
.
/usr/sbin/exigrep
aus dem Paket exim
.
/usr/sbin/eximconfig
aus dem Paket exim
.
/usr/sbin/eximstats
aus dem Paket exim
.
/usr/sbin/exim-upgrade-to-r3
aus dem Paket exim
.
/usr/sbin/exiqsumm
aus dem Paket exim
.
/usr/sbin/keytab-lilo
aus dem Paket lilo
.
/usr/sbin/liloconfig
aus dem Paket lilo
.
/usr/sbin/lilo_find_mbr
aus dem Paket lilo
.
/usr/sbin/syslogd-listfiles
aus dem Paket sysklogd
.
/usr/sbin/syslog-facility
aus dem Paket sysklogd
.
/usr/sbin/update-inetd
aus dem Paket netbase
.
Ohne Perl und solange Sie diese Dienstprogramme nicht in einem Shell-Skript neuschreiben, 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 Bug-Reports zu den aufgezählten Paketen, die (als ein Patch) einen Ersatz dieser Dienstprogramme als Shell-Skript enthält.
Es ist niemals falsch einen Blick entweder in die debian-security-announce Mailing-Liste zu werfen, wo Sicherheitsgutachten und Problemlösungen durch das Debian-Sicherheits-Team bekannt gemacht werden oder sich an der debian-security@lists.debian.org-Liste zu beteiligen, wo Sie an den Diskussionen zu allen sicherheitsrelevanten Fragen teilnehmen könen.
Um wichtige Warnungen zu Sicherheits-Update zu erhalten, senden Sie eine E-Mail
an debian-security-announce-request@lists.debian.org
mit dem Wort "subscribe" in der Betreff-Zeile. Sie können diese
moderierte E-Mail-Liste unter http://www.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 Sicherheits-Updates der Debian-Distribution informiert. Dies erlaubt Ihnen sehr schnell neue Pakete mit Sicherheits-Updates herunterzuladen, was sehr wichtig ist, um ein sicheres System zu verwalten (siehe Ausführen von Sicherheitsupdates, Abschnitt 4.8 für weitere Details, wie Sie dies machen).
Anleitung zum Absichern von Debian
Version: 2.5 (beta), Fri, 03 Dec 2004 23:31:52 +0000jfs@debian.org