![]() |
|
Linux - Wegweiser für NetzwerkerOnline-VersionCopyright © 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. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Weitere Informationen zum Linux - Wegweiser für Netzwerker
Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center
© 2001, O'Reilly Verlag