Im Katalog suchen

Linux - Wegweiser für Netzwerker

Online-Version

Copyright © 2001 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser für Netzwerker oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel



Der Super-Server inetd

Häufig werden Dienste durch sogenannte Netzwerk-Dämonen bereitgestellt. Ein Dämon ist ein Programm, das einen bestimmten Port öffnet und auf eingehende Verbindungen wartet. Wird eine solche Verbindung aufgebaut, erzeugt der Dämon einen Kind-Prozeß, der die Verbindung übernimmt, während er selbst weiter nach eingehenden Anforderungen Ausschau hält. Dieses an sich gute Konzept hat den Nachteil, daß für jeden angebotenen Dienst ein entsprechender Dämon im Hauptspeicher laufen muß. Außerdem müssen in jedem einzelnen Netzwerkdämon, der für die Verbindungsüberwachung und die Verwaltung der Ports zuständig ist, immer wieder dieselben Softwareroutinen eingebunden werden.

Um diesen Mangel an Effizienz zu überwinden, verwenden nahezu alle UNIX-Installationen einen speziellen Netzwerkdämon, den man als “Super-Server” auffassen kann und der Sockets für eine Reihe von Diensten erzeugt und simultan abhört. Fordert ein entfernter Host einen Dienst über einen dieser Sockets an, wird das vom Super-Server registriert, und er startet den für diesen Port zuständigen Server. Der Socket wird dann an den Kind-Prozeß übergeben, und der Super-Server fährt daraufhin mit dem Abhören der Sockets fort.

Der am häufigsten verwendete Super-Server ist inetd, der “Internet Dämon”. Er wird während der Boot-Phase des Systems gestartet und liest eine Liste der Dienste, die er verwalten soll, aus der Datei /etc/inetd.conf. Außer diesen Servern gibt es eine Reihe trivialer Dienste, sogenannte interne Dienste, die inetd selbständig ausführt. Dazu gehören beispielsweise chargen, das einfach eine Zeichenkette erzeugt, und daytime, das die nach Meinung des Systems aktuelle Tageszeit zurückliefert.

Ein Eintrag in dieser Datei besteht aus einer einzelnen Zeile, die sich aus den folgenden Feldern zusammensetzt:

service type protocol wait user server cmdline

Die Bedeutung der einzelnen Felder wird nachfolgend erklärt:

service

Enthält den Namen des Dienstes. Dieser Name muß in eine Portnummer übersetzt werden, was durch Nachschlagen in der Datei /etc/services geschieht. Diese Datei wird im Abschnitt Die Dateien services und protocols beschrieben.

type

Bestimmt den Socket-Typ entweder als stream (bei verbindungsorientierten Protokollen) oder als dgram (für Datagrammprotokolle). TCP-basierte Dienste sollten daher immer stream verwenden, während UDP-basierte Dienste immer dgram verwenden sollten.

protocol

Benennt das vom Dienst verwendete Transportprotokoll. Hier muß ein gültiger, in der (weiter unten erläuterten) Datei protocols enthaltener Name stehen.

wait

Diese Option gilt nur für dgram-Sockets. Sie kann entweder wait oder nowait lauten. Wird wait angegeben, führt inetd immer nur einen Server für den angegebenen Port aus. Anderenfalls beginnt inetd unverzüglich wieder an diesem Port zu horchen, sobald der Server gestartet wurde.

Das ist sinnvoll bei sogenannten “Single-Threaded-Servern”, die alle eingehenden Datagramme lesen, bis keine weiteren mehr ankommen, und sich dann beenden. Die meisten RPC-Server sind von dieser Art und sollten daher immer wait verwenden. Der entgegengesetzte Typ, der “Multi-Threaded-Server”, erlaubt eine unbeschränkte Anzahl von gleichzeitig laufenden Instanzen. Dieser Servertyp sollte nowait angeben.

stream-Sockets sollten immer nowait verwenden.

user

Hier steht die Login-ID des Benutzers, unter dem der Prozeß ausgeführt wird. Das wird häufig root sein, einige Dienste verwenden aber auch andere Benutzerkonten. Sie sollten übrigens immer das Prinzip der geringsten Privilegien anwenden, d.h., ein Befehl sollte nur mit Privilegien ausgestattet sein, die er zur fehlerfreien Ausführung unbedingt benötigt. Zum Beispiel läuft der NNTP-Newsserver als news, während Dienste, die ein Sicherheitsrisiko darstellen (z.B. tftp oder finger), häufig als nobody laufen.

server

Enthält den vollen Pfadnamen des auszuführenden Serverprogramms. Interne Dienste werden mit dem Schlüsselwort internal gekennzeichnet.

cmdline

Die an den Server zu übergebende Befehlszeile. Sie beginnt mit dem Namen des auszuführenden Servers und kann alle dafür notwendigen Argumente enthalten. Wenn Sie den TCP-Wrapper benutzen, geben Sie hier den vollen Pfadnamen zum Server an. Falls nicht, geben Sie den Server so an, wie er in der Prozeßliste erscheinen soll. Über TCP-Wrapper reden wir in Kürze.

Dieses Feld ist für interne Dienste leer.

Ein Beispiel für inetd.conf ist in Tabelle 12.1 zu sehen. Der finger-Service ist auskommentiert und steht daher nicht zur Verfügung. Dies wird häufig aus Sicherheitsgründen getan, weil er von Angreifern dazu verwendet werden kann, Namen und andere Details der Benutzer Ihres Systems zu ermitteln.

Beispiel 12.1: /etc/inetd.conf-Beispieldatei

# 
# inetd-Dienste 
ftp      stream tcp nowait root  /usr/sbin/ftpd    in.ftpd -l 
telnet   stream tcp nowait root  /usr/sbin/telnetd in.telnetd -b/etc/issue 
#finger  stream tcp nowait bin   /usr/sbin/fingerd in.fingerd 
#tftp    dgram  udp wait  nobody /usr/sbin/tftpd   in.tftpd 
#tftp    dgram  udp wait  nobody /usr/sbin/tftpd   in.tftpd /boot/diskless 
#login   stream tcp nowait root  /usr/sbin/rlogind in.rlogind 
#shell   stream tcp nowait root  /usr/sbin/rshd    in.rshd 
#exec    stream tcp nowait root  /usr/sbin/rexecd  in.rexecd 
# 
#       inetd-interne Dienste 
# 
daytime  stream tcp nowait root internal 
daytime  dgram  udp nowait root internal 
time     stream tcp nowait root internal 
time     dgram  udp nowait root internal 
echo     stream tcp nowait root internal 
echo     dgram  udp nowait root internal 
discard  stream tcp nowait root internal 
discard  dgram  udp nowait root internal 
chargen  stream tcp nowait root internal 
chargen  dgram  udp nowait root internal

Der tftp-Dämon ist ebenfalls auskommentiert. tftp implementiert das Trivial File Transfer Protocol (TFTP), das es einem erlaubt, allgemein lesbare Dateien ohne Paßwortprüfung von Ihrem System zu übertragen. Das ist besonders bei der Datei /etc/passwd gefährlich, um so mehr, wenn Sie keine Shadow-Paßwörter benutzen.

TFTP wird üblicherweise von Clients ohne eigenes Diskettenlaufwerk und von X-Terminals genutzt, um deren Code von einem Boot-Server herunterzuladen. Muß tftpd aus diesem Grund ausgeführt werden, sollten Sie sicherstellen, daß Sie den Zugriff nur auf solche Verzeichnisse erlauben, aus denen die Clients die entsprechenden Dateien lesen. Diese Verzeichnisse können Sie in der tftpd-Kommandozeile angeben, was in der zweiten tftp-Zeile des Beispiels zu erkennen ist.





vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser für Netzwerker

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home|O'Reilly-Partnerbuchhandlungen|Bestellinformationen
Kontakt|Über O'Reilly|Datenschutz

© 2001, O'Reilly Verlag