<!-- CVS revision of original english document "1.20" -->

<chapt>Vor und während der Installation


<sect id="bios-passwd">Setzen Sie ein Passwort im BIOS
<p>
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.

<p>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.

<p>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.

<sect>Partitionieren des Systems

<sect1>Wählen Sie eine sinnvolle Partitionierung
<p>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:

<list>
<item>Jeder Verzeichnisbaum, auf den ein Nutzer Schreibzugriff hat (wie
zum Beispiel <file>/home</file>, <file>/tmp</file> und <file>/var/tmp/</file>)
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.
<footnote>
Eigentlich ist das so nicht ganz
richtig, da immer etwas Platz für Root reserviert
wird, den ein normaler Nutzer nicht belegen kann.
</footnote>
Außerdem verhindert dieses
Vorgehen Hardlink-Angriffe.
<footnote>
Ein sehr gutes Beispiel dieser Art von Angriff, der das /tmp-Verzeichnis
benutzt, ist ausführlich auf <url
id="http://www.hackinglinuxexposed.com/articles/20031111.html" name="The
mysteriously persistently exploitable program (contest)"> und auf <url
id="http://www.hackinglinuxexposed.com/articles/20031214.html" name="The
mysteriously persistently exploitable program explained"> beschrieben (beachten
Sie, dass dieser Vorfall in einem Zusammenhang mit Debian steht). Im Prinzip
ist das ein Angriff, bei dem ein lokaler Benutzer eine angreifbare
Setuid-Anwendung <em>versteckt</em>, indem einer einen harten Link zu ihr
einrichtet. So kann er wirksam verhindern, dass diese Anwendung vom
Systemadministrator aktualisiert (oder entfernt) wird. Dpkg wurde kürzlich
verbessert, um das zu verhindern (vergleiche <url
id="http://bugs.debian.org/225692" name="225692">). Aber andere
Setuid-Anwendungen, die nicht vom Paketverwaltungsprogramm kontrolliert werden,
bleiben ein 
Risiko, wenn Partitionen nicht richtig eingerichtet werden.
</footnote>
</item>

<item>Außerdem sollte jeder Verzeichnisbaum, dessen Größe schwanken kann, zum
Beispiel
<file>/var</file> (insbesondere <file>/var/log</file>) eine separate
Partition bekommen. Auf einem Debian-System sollten Sie der
/var-Partition etwas mehr Platz als auf anderen Systemen geben, da
heruntergeladene Pakete (der Zwischenspeicher von apt) unter
<file>/var/cache/apt/archives</file> gespeichert werden.

<item>Jeder Teil, in dem Sie Nicht-Distributions-Software installieren
wollen, sollte eine separate Partition erhalten. Nach dem
File-Hierarchy-Standard wären dies <file>/opt</file> oder
<file>/usr/local</file>. Wenn dies separate Partitionen sind, werden sie
nicht gelöscht, falls Sie einmal Ihr Debian neu installieren
(müssen).

<item>Rein sicherheitstechnisch ist es sinnvoll zu versuchen,
statische Daten auf eine eigene Partition zu legen und diese
dann als nur-lesbar einzuhängen (mounten). Oder noch
besser: legen Sie diese Daten auf einem nicht beschreibbares Medium ab.
Lesen Sie dazu die Ausführungen weiter unten.
</list>

<p>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 (<file>/var/mail</file> oder
<file>/var/spool/mail</file>) ü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 <file>/var</file>-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 <file>/var/run</file> benutzen).

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

<sect2>Auswahl eines passenden Dateisystems

<p>Während der Partitionierung des Systems müssen Sie sich
ebenfalls entscheiden, welche Dateisysteme Sie benutzen möchten.
Als Standard-Dateisystem<footnote>Seit Debian GNU/Linux 4.0 mit dem
Codenamen <tt>Etch</tt>.</footnote> wird während der Installation für
Linux-Partitionen <tt>ext3</tt> ausgewählt, das ein »Journaling
Dateisystem« (ein Dateisystem, das Änderungen mitprotokolliert)
ist. Es ist empfehlenswert, immer ein solches Dateisystem zu
verwenden, wie zum Beispiel
<tt>ext3</tt>, <tt>reiserfs</tt>, <tt>jfs</tt>
oder <tt>xfs</tt>. Dadurch
verringern Sie Probleme nach einen Absturz des Systems in folgenden Fällen:

<list>

<item>Auf Laptops auf allen Dateisystemen. Auf diese Art reduzieren Sie
die Wahrscheinlichkeit eines Datenverlustes, wenn beispielsweise
unerwartet Ihr Akku leer wird oder das System aufgrund eines
Hardware-Problems (etwa durch die X-Konfiguration, was relativ häufig auftritt)
neu gestartet werden muss.

<item>Auf produktiven Systemen, die große Mengen von Daten speichern (zum
Beispiel Mail-Server, FTP-Server, Netzwerk-Fileserver, ...), ist es
empfehlenswert, ein Journaling-Dateisystem auf diesen Partitionen einzusetzen.
Wenn das System abstürzt, benötigt der Server so weniger Zeit,
um das Dateisystem wieder herzustellen und zu prüfen, und die
Wahrscheinlichkeit eines Datenverlustes wird verringert.

</list>

<p>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
<tt>ext3</tt>-Dateisystem zu benutzen. Der Grund dafür ist die
Abwärtskompatibilität zu <tt>ext2</tt>. 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  oder 2.6er Kernel handelt, ist Unterstützung
für <tt>ext3</tt> 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-Dateisystem benutzen, werden Sie feststellen,
dass eine Wiederherstellung nicht möglich ist, bis Sie einen
2.4er  oder 2.6er 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 <tt>reiserfs</tt> oder
<tt>xfs</tt> zuzugreifen.

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

<p>Beachten Sie aber, dass es auch einige Partitionen gibt, die von
einem Journaling-Dateisystem nicht profitieren können. Zum Beispiel,
wenn Sie eine eigene Partition für <file>/tmp/</file> verwenden, ist
es ratsam, ein übliches <tt>ext2</tt>-Dateisystem einzusetzen, weil es
bei einem Neustart des Systems ohnehin gesäubert wird.

<sect>Gehen Sie nicht ins Internet, bevor Sie nicht bereit sind

<p>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.

<p>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!

<p>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 <package>apt-move</package> oder <package>apt-proxy</package> 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 <ref id="fw-security-update">).

<sect>Setzen Sie ein Passwort für Root
<p>
Die wichtigste Grundlage für ein sicheres System ist ein gutes Root-Passwort.
Siehe <manref section="1" name="passwd"> für einige Tipps, wie man
gute Passwörter auswählt. Sie können auch automatische
Passwort-Generatoren verwenden (siehe <ref id="user-pwgen">).

<p>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 <url name="How to: Pick a Safe Password"
id="http://wolfram.org/writing/howto/password.html"> und Walter Belgers <url
name="Unix Password Security"
id="http://www.belgers.com/write/pwseceng.txt">.
<!--Also at http://citeseer.ist.psu.edu/8481.html -->


<sect>Aktivieren Sie Shadow-Passwörter und MD5-Passwörter

<p>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 <file>/etc/shadow</file> 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 <tt>shadowconfig</tt> jederzeit zwischen »shadow
passwords« und normalen Passwörtern wechseln.

<p>Mehr zum Thema Shadow-Passwörter finden Sie unter <url name="Shadow
Password" id="http://www.tldp.org/HOWTO/Shadow-Password-HOWTO.html">
(<file>/usr/share/doc/HOWTO/en-txt/Shadow-Password.txt.gz</file>).
<!-- SB(20050228): HOWTO ist nicht übersetzt! -->

<p>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 <package>passwd</package>.
Sie erkennen MD5-Passwörter übrigens in der <file>/etc/shadow</file>
an dem Anfang $1$.

<p>Dies verändert allerdings alle Dateien im Verzeichnis
<file>/etc/pam.d</file>
und ergänzt in der »password«-Zeile den Eintrag »md5«.

<example>
password required pam_unix.so md5 nullok obscure min=6 max=16
</example>

<p>Wird für <tt>max</tt> nicht ein Wert größer als 8 gewählt, ist
diese Änderung ziemlich sinnlos. Weitere Informationen dazu finden Sie
unter <ref id="auth-pam">.

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


<sect>Lassen Sie so wenige Dienste wie möglich laufen

<p>Dienste sind Programme wie FTP- und Web-Server. Da sie
nach eingehenden Verbindungen, die den Dienst anfordern, <em>horchen</em>
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.

<p>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.

<p>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.<footnote>Die Zahl war bei Debian 3.0 und davor
nicht so niedrig, da einige <prgn>inetd</prgn>-Dienste standardmäßig aktiviert
waren. Außerdem war in Debian 2.2 der NFS-Server wie auch der Telnet-Server
Bestandteil der Standardinstallation.</footnote> 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
<ref id="rpc">.

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

<p>Wenn Sie trotzdem Dienste installieren möchten, diese aber selten
benutzen, entfernen Sie sie mit den update-Befehlen wie
<prgn>update-inetd</prgn> oder <prgn>update-rc.d</prgn> aus dem
Startvorgang. Weitere Informationen, wie Sie Netzwerkdienste abschalten, finden
Sie unter <ref id="disableserv">. Wenn Sie das Standardverhalten des Startens
von Diensten nach der Installation von ihren Paketen ändern
wollen<footnote>Dies ist z.B. wünschenswert, wenn Sie eine Chroot-Umgebung zur
Entwicklung einrichten.</footnote>, lesen Sie bitte für weiterführende
Informationen <file>/usr/share/doc/sysv-rc/README.policy-rc.d.gz</file>.

<p>Die Unterstützung von <prgn>invoke-rc.d</prgn> ist bei Debian nun
zwingend. Dies bedeutet, dass Sie seit Debian 4.0 <em>Etch</em> eine
<prgn>policy-rc.d</prgn>-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 <package>policyrcd-script-zg2</package> an.


<sect1 id="disableserv">Daemons abschalten

<p>Das Abschalten eines Daemons ist sehr einfach. Entweder Sie entfernen das
Paket, das das Programm für diesen Dienst anbietet, oder Sie entfernen oder
benennen die Startlinks unter <file>/etc/rc${runlevel}.d/</file> um. Wenn Sie
sie umbenennen, stellen Sie sicher, dass sie nicht mehr mit einem 'S' beginnen,
damit sie nicht von <prgn>/etc/init.d/rc</prgn> ausgeführt werden. Entfernen
Sie nicht alle verfügbaren Links, denn sonst wird das Paketverwaltungssystem
sie bei der nächsten Paketaktualisierung 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 <url
id="http://www.debian.org/doc/manuals/reference/ch-system#s-custombootscripts"
name="Anpassen des Bootvorgangs"> der Debian-Referenz (2. Kapitel -
Debian-Grundlagen).


<p>Sie können diese Links manuell entfernen oder Sie benutzen
<tt>update-rc.d</tt> (siehe auch <manref section="8"
name="update-rc.d">). So können Sie zum Beispiel einen Dienst in
den Multi-User-Runleveln abschalten:

<example>
# update-rc.d <var>name</var> stop <var>XX</var> 2 3 4 5 .
</example>

<p>Wobei <em>XX</em> eine Zahl ist, die bestimmt, wann die Stop-Aktion für
diesen Dienst ausgeführt wird. Bitte beachten Sie, dass <tt>update-rc.d -f <var>Dienst</var>
remove</tt> nicht korrekt arbeiten wird, wenn Sie <em>nicht</em>
<package>file-rc</package> benutzen, da <em>alle</em>
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 <url
id="http://bugs.debian.org/67095" name="Bug 67095">). Aus der
Handbuchseite:

<example>
 If any files /etc/rc<var>runlevel</var>.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.
</example>

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

<p>Sie können das TUI (Text User Interface, textbasierte
Benutzungsoberfläche) des Paketes <package>sysv-rc-conf</package> benutzen,
um all diese Änderungen einfach zu erledigen
(<package>sysv-rc-conf</package> arbeitet sowohl mit <package>file-rc</package>
als auch mit normalen System-V-Runleveln). Es gibt auch vergleichbare GUIs für
Desktop-Systeme. Sie können auch die Befehlszeile von
<package>sysv-rc-conf</package> verwenden:

<example>
  # sysv-rc-conf <var>foobar</var> off
</example>

<p>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:

<example>
  # sysv-rc-conf <var>foobar</var> on
</example>

<p>Andere (weniger empfohlene) Methoden zum Abschalten eines Dienstes sind:

<list>

<item>Löschen Sie das
Skript <file>/etc/init.d/<var>service_name</var></file> und entfernen
Sie die Start-Links mit:

<example>
# update-rc.d <var>name</var> remove
</example>

<item>Benennen Sie die Skriptdatei (<file>/etc/init.d/<var>Dienst</var></file>)
um (zum Beispiel in <file>/etc/init.d/OFF.<var>Dienst</var></file>). Da das zu
Verweisen führt, die kein Ziel mehr haben (dangling symlinks), werden beim
Systemstart Fehlermeldungen erzeugt werden.

<item>Entfernen Sie das Ausführungsrecht von der Datei
<file>/etc/init.d/<var>Dienst</var></file>. Auch das wird beim Booten
Fehlermeldungen verursachen.

<item>Editieren der Datei <file>/etc/init.d/<var>Dienst</var></file>, so dass
sich das Skript sofort beendet, sobald es gestartet wird, indem Sie die Zeile
<prgn>exit 0</prgn> am Anfang einfügen oder den
<tt>start-stop-daemon</tt>-Abschnitt auskommentieren. Falls Sie dies tun,
können Sie das Skript nicht später dazu verwenden, den Dienst von Hand zu
starten.

</list>

<p>Jedoch handelt es sich bei allen Dateien unter <file>/etc/init.d</file> um
Konfigurationsdateien und sollten daher bei einer Paketaktualisierung nicht
überschrieben werden.

<p>Sie können im Gegensatz zu anderen (UNIX-)Betriebssystemen Dienste
unter Debian nicht abschalten, indem Sie die
Dateien unter <file>/etc/default/<var>Dienst</var></file> modifizieren.

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


<sect1 id="inetd">Abschalten von <prgn>inetd</prgn> oder seinen Diensten

<p>Sie sollten überprüfen, ob Sie heutzutage den <prgn>inetd</prgn>-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 <prgn>inetd</prgn> 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 <prgn>inetd</prgn> zu starten. Wenn Sie immer
noch einen <prgn>inetd</prgn>-Dienst laufen lassen wollen, wechseln Sie
wenigstens zu einem besser zu konfigurierenden Inet-Daemonen wie
<prgn>xinetd</prgn> oder <prgn>rlinetd</prgn>.

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

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

<example>
 /usr/sbin/update-inetd --disable telnet
</example>
<!-- # /etc/init.d/inetd restart Not needed since the manpage says update-inetd
sends a SIGHUP, commented out as suggested by Dariusz Puchalak -->

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


<sect>Installieren Sie möglichst wenig Software

<p>Debian bietet <em>sehr viel</em> Software an. Debian 3.0 (<em>Woody</em>)
enthält sechs oder sieben (je nach Architektur) CDs mit Software und tausenden
Paketen. Debian 3.1 <em>Sarge</em> wird mit etwa 13 CD-ROMs ausgeliefert werden.
Bei so viel Software, selbst wenn Sie die
Installation auf das Basis-System reduzieren
<footnote>
Unter Debian-Woody ist das Basis-System etwa 400-500MB groß. Probieren Sie
Folgendes:
<example>,
 $ size=0
 $ for i in `grep -A 1 -B 1 "^Section: base" /var/lib/dpkg/available |
 grep -A 2 "^Priority: required" |grep "^Installed-Size" |cut -d : -f 2
 `; do size=$(($size+$i)); done
 $ echo $size
 47762
</example>
</footnote>,
könnten Sie auf Abwege geraten und mehr installieren, als Sie
wirklich benötigen.

<p>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 &ndash; oder von einem externen Eindringling, der
Shell-Zugriff bekommen hat (oder der Code von außerhalb durch einen
fehlerhaften Dienst ausführen kann).

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

<list>
<item>Der Angreifer kann seine Privilegien auf dem System erweitern.
Es ist beispielsweise leichter, eine lokale Sicherheitslücke des Systems
auszunutzen, wenn man einen Debugger und Compiler zur Verfügung hat,
um den eigenen Exploit (ein Programm, das eine Sicherheitslücke
ausnutzt) zu kompilieren und zu testen.

<item>Man könnte dem Angreifer Werkzeuge zur Verfügung stellen, die ihm helfen
könnten, das kompromittierte System als <em>Basis für
Angriffe</em> auf andere Systeme zu benutzen.
<footnote>
Häufig werden fremde Systeme nur deshalb gehackt, weil Sie zu weiteren
illegitimen Aktivitäten benutzt werden sollen (DoS-Attacken, Spam,
geheime FTP-Server, DNS-Schweinereien, ...). Der Angreifer möchte meist
gar nicht an die vertraulichen Daten auf dem kompromittierten System
herankommen.
</footnote>

</list>

<p>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
<em>verhindern</em>. 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 <ref id="vuln-asses">), müssen Sie
auch davon ausgehen, dass ein Angreifer sie auch benutzen wird.

<p>Beachten Sie bitte, dass eine Standardinstallation von Debian <em>Sarge</em>
(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 <em>Standard</em> haben. Wenn Sie keine
Software entwickeln, können Sie ohne Bedenken die folgenden Pakete von Ihrem
System entfernen, was nebenbei auch etwas Platz schafft:

<example>
  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
</example>

<p>Dieses Verhalten wurde in den Veröffentlichungen nach Sarge verändert.
Für weitere Informationen sehen Sie sich
<url id="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=301273" name="Fehler
#301273"> und <url id="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=301138"
name="Fehler #301138"> an. Wegen eines Fehlers im Installationssystem ist dies
nicht geschehen, wenn mit dem Installationssystem von Debian 3.0 <em>Woody</em>
installiert wird.


<sect1>Entfernen von Perl

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

<p>Welche Dienstprogramme benutzen <prgn>Perl</prgn>? Sie können es selbst
herausfinden:
<example>
 $ for i in /bin/* /sbin/* /usr/bin/* /usr/sbin/*; do [ -f $i ] && {
 type=`file $i | grep -il perl`; [ -n "$type" ] && echo $i; }; done
</example>

<p>Diese Liste schließt die folgenden Dienstprogramme mit der
Priorität <em>required</em> oder <em>important</em> ein:

<list>
<item><file>/usr/bin/chkdupexe</file> aus dem Paket
<package>util-linux</package>.

<item><file>/usr/bin/replay</file> aus dem Paket
<package>bsdutils</package>.

<item><file>/usr/sbin/cleanup-info</file> aus dem Paket
<package>dpkg</package>.

<item><file>/usr/sbin/dpkg-divert</file> aus dem Paket
<package>dpkg</package>.

<item><file>/usr/sbin/dpkg-statoverride</file> aus dem Paket
<package>dpkg</package>.

<item><file>/usr/sbin/install-info</file> aus dem Paket
<package>dpkg</package>.

<item><file>/usr/sbin/update-alternatives</file> aus dem Paket
<package>dpkg</package>.

<item><file>/usr/sbin/update-rc.d</file> aus dem Paket
<package>sysvinit</package>.

<item><file>/usr/bin/grog</file> aus dem Paket
<package>groff-base</package>.

<item><file>/usr/sbin/adduser</file> aus dem Paket
<package>adduser</package>.

<item><file>/usr/sbin/debconf-show</file> aus dem Paket
<package>debconf</package>.

<item><file>/usr/sbin/deluser</file> aus dem Paket
<package>adduser</package>.

<item><file>/usr/sbin/dpkg-preconfigure</file> aus dem Paket
<package>debconf</package>.

<item><file>/usr/sbin/dpkg-reconfigure</file> aus dem Paket
<package>debconf</package>.

<item><file>/usr/sbin/exigrep</file> aus dem Paket
<package>exim</package>.

<item><file>/usr/sbin/eximconfig</file> aus dem Paket
<package>exim</package>.

<item><file>/usr/sbin/eximstats</file> aus dem Paket
<package>exim</package>.

<item><file>/usr/sbin/exim-upgrade-to-r3</file> aus dem Paket
<package>exim</package>.

<item><file>/usr/sbin/exiqsumm</file> aus dem Paket
<package>exim</package>.

<item><file>/usr/sbin/keytab-lilo</file> aus dem Paket
<package>lilo</package>.

<item><file>/usr/sbin/liloconfig</file> aus dem Paket
<package>lilo</package>.

<item><file>/usr/sbin/lilo_find_mbr</file> aus dem Paket
<package>lilo</package>.

<item><file>/usr/sbin/syslogd-listfiles</file> aus dem Paket
<package>sysklogd</package>.

<item><file>/usr/sbin/syslog-facility</file> aus dem Paket
<package>sysklogd</package>.

<item><file>/usr/sbin/update-inetd</file> aus dem Paket
<package>netbase</package>.

</list>

<p>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 <em>keine gute Idee</em>).

<p>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.

<p>Wenn Sie wissen wollen, welche Debian-Pakete von Perl abhängen, können Sie
Folgendes verwenden:

<example>
$ grep-available -s Package,Priority -F Depends perl
</example>

<p>oder
<example>
$ apt-cache rdepends perl
</example>


<sect>Lesen Sie Debians Sicherheits-Mailinglisten

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

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

<p>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 <ref id="security-update"> für
weitere Details, wie Sie dies machen).
