From: Christian Weisgerber (naddy_at_mips.inka.de)
Date: 06. May 2000
Raphael Becker <beckerra_at_rumms.uni-mannheim.de> wrote:
> Soweit ich das begriffen habe werden diese Teile alle von inetd
> verwaltet, der offenbar die IP-Kommunikation übernimmt und die
> eigentlichen Programme nur per stdio anspricht,
inetd(8) übernimmt nur den Verbindungsaufbau - Stichwörter: socket(2),
bind(2), listen(2), accept(2) -, erzeugt ein Kind und reicht diesem
den Socket mit der Netzverbindung auf stdin/stdout. Das Kind kann
dann ganz normal mit read(2)/write(2) arbeiten. inetd selbst hat
damit nichts mehr zu tun.
Wie ich, glaube ich, vor kurzem schon beim Thema Pipes angeschnitten
habe, wird die Unix-API für Dateizugriffe auch für andere Dinge
benutzt. Pipes und Sockets werden anders erzeugt, lassen sich danach
aber wie Dateien ansprechen. Daher auch der flapsige Spruch »bei
Unix ist alles eine Datei«.
Entgegen einem oft erweckten Eindruck ist an dem Starten eines
Dienstes durch inetd erst einmal nichts Anstößiges oder Ungeschicktes.
Im Gegenteil, das ist eine mächtige Möglichkeit auf einfache Weise
Netzdienste zu realisieren.
Ein Nachteil ist, dass das fork()/exec() für jede eingehende
Verbindung eine vergleichsweise teure Operation ist. Ein selbständig
laufender Dæmon braucht nur ein fork(), und vielleicht noch nicht
einmal dieses, so dass der Overhead für eine Verbindung geringer
ist. Das spielt aber nur bei hoch ausgelasteten Diensten eine Rolle.
Bei 20 Verbindungen pro Tag lohnt der Aufwand nicht, einen selb-
ständigen Dæmon zu schreiben und ständig im Hintergrund hängen zu
haben, bei 20 Verbindungen pro Sekunde schon.
Ein anderer Grund für einen selbständigen Dæmon ist, wenn dieser
bei seinem Start einen aufwendigen Zustand laden (z.B. Datenbank)
oder erzeugen muss. sshd(8) z.B. generiert beim Start einen temporären
Server-Schlüssel, was je nach Geschwindigkeit des Rechners eine
nicht vernachlässigbare Zeit dauert. Dieser Schlüssel wird im
laufenden Betrieb stündlich neu erzeugt, was nicht weiter auffällt.
Startet man dagegen sshd von inetd aus, was möglich aber nicht
empfehlenswert ist, dann muss der Schlüssel bei jedem Verbindungsaufbau
neu erzeugt werden, was eine entsprechende Zwangspause für die
Benutzung von ssh(1) zu diesem Rechner bedeutet.
Ein Vorteil beim Start eines Dienstes von inetd aus ist die zentrale
Konfiguration von Zugriffsbeschränkungen mittels TCP-Wrapper.
Selbständige Dæmons müssen entweder mit eigener Unterstützung für
TCP-Wrapper (libwrap) gebaut werden oder (hoffentlich!) eigene,
äquivalente Mechanismen mitbringen, was zur Ausuferung der
Konfigurationsorte und -formate beiträgt.
-- Christian "naddy" Weisgerber naddy_at_mips.inka.de
Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET