Product SiteDocumentation Site

3.5. Lassen Sie so wenige Dienste wie möglich laufen

Dienste sind Programme wie FTP- und Web-Server. Da sie auf eingehende Verbindungsanfragen, die den Dienst anfordern, warten müssen, können sich externe Computer mit Ihrem Computer verbinden. Dienste sind manchmal verwundbar (das heißt, 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. Und die Anzahl der Dienste, die im Netzwerk angeboten werden, ist noch niedriger. In einer Standardinstallation von Debian 3.1 werden Sie mit OpenSSH, Exim (abhängig davon, wie Sie ihn konfiguriert haben) und dem RPC-Portmapper als Netzwerkdienste auskommen.[5] Wenn Sie nicht eine Standard-, sondern eine Experten-Installation durchgeführt haben, kann es sein, dass Sie überhaupt keine aktiven Netzwerkdienste haben. Der RPC-Portmapper ist standardmäßig installiert, da er für viele Dienste wie zum Beispiel NFS benötigt wird. Er kann allerdings sehr leicht entfernt werden. Weitere Informationen, wie Sie RPC-Dienste absichern oder abschalten, finden Sie unter Abschnitt 5.13, „Absichern von RPC-Diensten“.
Wenn Sie einen neuen Netzwerkdienst (Daemon) auf Ihrem Debian GNU/Linux System installieren, kann er auf zwei Arten gestartet werden: durch den Superdaemon inetd (d. h. eine Zeile wird zu /etc/inetd.conf hinzugefügt) oder durch ein eigenständiges Programm, das 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. Weitere Informationen dazu finden Sie in /usr/share/doc/sysvinit/README.runlevels.gz.
Wenn Sie Dienste installieren möchten, diese aber selten benutzen, entfernen Sie sie mit den update-Befehlen wie update-inetd oder update-rc.d aus dem Startvorgang. Weitere Informationen, wie Sie Netzwerkdienste abschalten, finden Sie unter Abschnitt 3.5.1, „Daemons abschalten“. Wenn Sie das Standardverhalten des Startens von Diensten nach der Installation von ihren Paketen ändern wollen[6], lesen Sie bitte für weiterführende Informationen /usr/share/doc/sysv-rc/README.policy-rc.d.gz.
Die Unterstützung von invoke-rc.d ist bei Debian nun zwingend. Dies bedeutet, dass Sie seit Debian 4.0 Etch eine policy-rc.d-Datei anlegen können, die das Starten von Daemons verbietet, bevor Sie sie konfiguriert haben. Zwar sind derartige Skripte noch nicht in Paketen enthalten, sie sind aber ziemlich leicht zu schreiben. Sehen Sie sich auch policyrcd-script-zg2 an.

3.5.1. Daemons abschalten

Das Abschalten eines Daemons ist sehr einfach. Entweder Sie entfernen das Paket, welches das Programm für diesen Dienst anbietet, oder Sie entfernen oder benennen die Startlinks unter /etc/rc${runlevel}.d/ um. Wenn Sie sie umbenennen, stellen Sie sicher, dass sie nicht mehr mit einem »S« beginnen, damit sie nicht von /etc/init.d/rc ausgeführt werden. Entfernen Sie nicht alle verfügbaren Links, denn sonst wird das Paketverwaltungssystem sie bei dem nächsten Upgrade des Pakets wieder herstellen. Gehen Sie also sicher, dass zumindest ein Link übrig bleibt (typischerweise ein »K«-Link, »K« steht für »kill«). Zusätzliche Informationen finden Sie im Abschnitt http://www.debian.org/doc/manuals/reference/ch-system#s-custombootscripts der Debian-Referenz (2. Kapitel - Debian-Grundlagen).
Sie können diese Links manuell 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 name stop XX 2 3 4 5 .
Wobei XX eine Zahl ist, die bestimmt, wann die Stop-Aktion für diesen Dienst ausgeführt wird. Bitte beachten Sie, dass update-rc.d -f Dienst 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 http://bugs.debian.org/67095). Aus der Handbuchseite:
  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 sysv-rc-conf benutzen, um all diese Änderungen einfach zu erledigen (sysv-rc-conf arbeitet sowohl mit file-rc als auch mit normalen System-V-Runleveln). Es gibt auch vergleichbare GUIs für Desktop-Systeme. Sie können auch die Befehlszeile von sysv-rc-conf verwenden:
  # sysv-rc-conf foobar off
Der Vorteil dieses Werkzeugs ist, dass die rc.d-Links wieder auf den Status zurückgesetzt werden, die sie vor dem Aufruf von »off« hatten, wenn Sie den Dienst wieder aktivieren mit:
  # sysv-rc-conf foobar on
Andere (weniger empfohlene) Methoden zum Abschalten eines Dienstes sind:
  • Löschen Sie das Skript /etc/init.d/service_name und entfernen Sie die Start-Links mit:
      # update-rc.d name remove
  • Benennen Sie die Skriptdatei (/etc/init.d/Dienst) um (zum Beispiel in /etc/init.d/OFF.Dienst). Da das zu Verweisen führt, die kein Ziel mehr haben (dangling symlinks), werden beim Systemstart Fehlermeldungen erzeugt.
  • Entfernen Sie das Ausführungsrecht von der Datei /etc/init.d/Dienst. Auch das wird beim Booten Fehlermeldungen verursachen.
  • Editieren Sie die Datei /etc/init.d/Dienst, so dass sich das Skript sofort beendet, sobald es gestartet wird, indem Sie die Zeile exit 0 am Anfang einfügen oder den start-stop-daemon-Abschnitt auskommentieren. Falls Sie dies tun, können Sie das Skript nicht später dazu verwenden, um den Dienst von Hand zu starten.
Jedoch handelt es sich bei allen Dateien unter /etc/init.d um Konfigurationsdateien und sollten daher bei einem Upgrade des Pakets nicht überschrieben werden.
Sie können im Gegensatz zu anderen (UNIX-)Betriebssystemen Dienste unter Debian nicht abschalten, indem Sie die Dateien unter /etc/default/Dienst modifizieren.
FIXME: Add more information on handling daemons using file-rc.

3.5.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, rlinetd oder openbsd-inetd.
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 (womit die Dienste auf eine Art auskommentiert werden, in der sie leicht wieder aktiviert 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, können Sie 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.


[5] Die Zahl war bei Debian 3.0 und davor nicht so niedrig, da einige inetd-Dienste standardmäßig aktiviert waren. Außerdem war in Debian 2.2 der NFS-Server wie auch der Telnet-Server Bestandteil der Standardinstallation.
[6] Dies ist z.B. wünschenswert, wenn Sie eine Chroot-Umgebung zur Entwicklung einrichten.