TCP/IP-Dienste

Es gibt eine Reihe standardisierter Dienste. Diese Dienste sind durchnumeriert und in der Datei /etc/services aufgelistet.

Anatomie einer Servers

Ein Dienst (service) wird durch einen Server-Prozeß geleistet. Durch eine nach außen bekannte Nummer, dem sogenannten well-known-port, kann ein Client den Server-Prozeß direkt ansprechen und ihm seine Anfrage mitteilen. Die Nummern besitzen Namen, die in der Datei /etc/services definiert sind.

Damit mehrere Anfragen parallel bedient werden können, wird sich der Serverprozeß teilen. Der eine bedient den Client, der andere wartet auf weitere Anfragen. Das Zusammenspiel von Client und Server kann auch am Source-Beispiel untersucht werden.

Ein solcher Prozeß, der im Hintergrund wartet, bis ein bestimmtes Ereignis eintritt, wird auch Dämon genannt.

Der inet-Dämon

Für viele TCP-IP-Dienste wird nicht jeweils ein Dämon gestartet, sondern der inet-Dämon überwacht als einziger Prozess alle zugehörigen Ports. Wird ein solcher überwachter Port angefragt, startet inetd den zugehörigen Serverprozeß. Gesteuert wird inetd durch die Datei /etc/inetd.conf. Hierin stehen die überwachten Dienste und die Dateinamen der zugehörigen Dienste. Jede Zeile hat den folgenden Aufbau:

<name> <type> <protocol> <wait-status> <uid> <server> <arguments>

Dabei bedeuten

name
Name des Dienstes wie er in der /etc/services steht.
type
stream, dgram, oder raw
wait-status
wait oder nowait: Ob eine neue Anfrage des Dienstes wartet, bis die vorherige Anfrage ausgeführt ist. Dies beschränkt ggfs. die Parallelität der Anfragen.
uid
meist root, bei finger oft nobody. Die User-ID unter der der Server ausgeführt wird.
server
Dateiname inkl. Pfad des Serverprozesses
arguments
Kommandozeile des Serveraufrufs inkl. des Dateinamens des Serverprozesses.

Das File Transfer Protocol (ftp)

Das Programm ftp kann mit Angabe der Internetnummer oder des Hostnamen gestartet. Es führt zunächst einen normalen login aus. Der Anwender wird also aufgefordert, Benutzernamen und Passwort einzugeben. Anschließend landet er auf dem fremden Rechner mit einer ftp-eigenen Shell. Die wichtigsten Kommandos lauten:

Befehl Bedeutung
get Datei Zieldatei Hole eine Datei
put Datei Zieldatei Sende eine Datei
pwd Zeige aktuelles Verzeichnis auf Zielrechner an
cd Verzeichnis Wechsle Verzeichnis auf Zielrechner
ls oder dir Zeige die Dateien auf dem Zielrechner
quit Verlasse ftp
image oder binary Übertrage ohne Änderung
ascii Korrigiere Zeilenvorschübe bei Übertragung

Durch eine Datei .netrc im Homeverzeichnis kann der ftp-Dienst mit geringeren Eingaben gestartet werden. Dabei enthält diese Datei in jeder Zeile die Einträge:


<host>    <user>    <passwort>

Der Eintrag des Passworts ist optional. Ist ein Passwort eingetragen, muß die Datei mit chmod auf 600 gestellt werden. Sie darf also von niemandem gelesen werden können.

Freischalten unter Linux

In manchen Distributionen ist standardmäßig der ftp-Zugang des Rechners gesperrt. Das ist daran erkennbar, daß ein ftp bereits vor der Abfrage des Passwortes abgelehnt wird. In diesem Fall lohnt ein Blick in die /etc/inetd.conf. In der Zeile, in der der ftp-Aufruf konfiguriert wird (mit ftp beginnend), wird die Zeile mit in.ftpd statt wu.ftpd -a entkommentiert. Anschließend muß ein kill -1 auf den inetd abgesetzt werden.

Wird nur dem root der Zugriff verweigert: in der /etc/ftpusers stehen alle User, die KEINEN ftp-Zutritt haben.

Terminaldienst (telnet)

Mit dem Befehl

telnet <Internetadresse>

kann man sich in einen beliebigen erreichbaren Host einloggen. Dabei wird zunächst die Verbindung hergestellt und anschließend wird der Anwender nach Benutzername und Passwort gefragt. Nach dem Einloggen kann der Benutzer so arbeiten, als hätte er eine Terminalsitzung auf der fremden Maschine eröffnet.

Die r-Kommandos

Da das ständige Authentifizieren beim Anmelden in der Praxis sehr störend ist, gibt es die Möglichkeit, mit bestimmten Kommandos direkt auf die ferne Maschine zuzugreifen. Die Berechtigung wird einmal festgelegt, indem angegeben wird, welche Benutzer welcher Maschinen berechtigt sind, auf der lokalen Maschine zu operieren. Ein ganz enormer Vorteil liegt bei der Verwendung solcher Programme in Skripten oder Programmen.

Wie fast immer stehen gerade hier Bequemlichkeit und Sicherheit umgekehrt proportional zueinander.

Remote Copy (rcp)

Im Gegensatz zu ftp eignet sich rcp besonders dazu, in Scripten verwendet zu werden, da der Befehl im Idealfall ohne Rückfragen an den Benutzer erfolgt. Dazu müssen allerdings die Rechte des Benutzers für den Zugriff vorher eingestellt sein.

    rcp [<Host>:]<Quelle> [<Host>:]<Ziel>

Beispiel:

    rcp idefix:/etc/hosts* ./test

test muß ein Verzeichnis sein. Die Dateien auf dem fremden Rechner müssen mit vollständigem Verzeichnis angegeben werden. Der rcp gelingt natürlich, wenn der eigene Rechner auf dem fernen Rechner in der Datei /etc/hosts.equiv eingetragen ist. Zusätzlich muß der ferne Rechner in der /etc/hosts angegeben sein, da rcp den Hostnamen und nicht eine Internetnummer verlangt. Im Normalfall wird der rcp allerdings für einzelne Benutzer zugelassen. Dazu sind folgende Voraussetzungen erforderlich:

rlogin

Per rlogin eröffnet man eine Terminalsitzung auf dem fremden Rechner unter seiner eigenen Benutzer-ID. Voraussetzung ist hier, daß der einloggende Benutzer auf der fremden Maschine ebenfalls eine Benutzerkennung besitzt.

Befehlsausführung (rsh, rcmd und rexec)

Das Ausführen einer Zeile auf einem fremden Rechner wird je nach System mit unterschiedlichen Aufrufen durchgeführt. Alle diese Befehle basieren auf der Bibliotheks-Funktion rexec. Entsprechend ist der Name rexec als Befehl ebenfalls vorhanden. Um Ablaufen zu können, Das ftp-PCTCP für OS/2 nennt den Befehl rsh (remote shell).

rsh <host> [-l <user>] <Befehl>

SCO nennt den Befehl rcmd (remote command). Der Name rsh ist hier für die restricted shell, einer lokalen Shell mit eingeschränkten Rechten vergeben.

rcmd <host< [-l <user>] [-n] <Befehl>

Drucken im TCP/IP

BSD-Unix: lpd, lpr, lpq und lprm

Das Drucken per TCP/IP erfolgt nach einer an BSD-UNIX angelehnten Methode. Im Zentrum steht der Lineprinter-Dämon (lpd). Der lpd liest beim Start die Datei /etc/printcap aus. Darin findet er die definierten Drucker und deren Spoolverzeichnisse. Findet er darin eine Daten- und eine Kontrolldatei für einen Ausdruckswunsch, druckt er ihn aus indem er sich an die eingetragene Schnittstelle (Parameter lp) wendet. Ist dieser Eintrag leer und stattdessen ein fremder Host (Parameter rm) eingetragen, sendet er beide Dateien an den lpd des entsprechenden Rechners. Er sendet diesem auch den Druckereintrag, über den dieser ausdrucken soll. Empfängt ein lpd einen Druckauftrag über TCP/IP, sieht er in der Datei /etc/hosts.lpd nach, ob der Sender überhaupt berechtigt ist, auf diesem Rechner zu drucken. Die Datei hosts.lpd darf kein öffentliches Schreibrecht haben. Auch alle Rechner, die in der /etc/hosts.equiv stehen, haben Druckrecht. Beim Eintrag des Hostnamen ist darauf zu achten, daß der erste Name des Rechners aus der /etc/hosts verwendet wird, da er sonst nicht erkannt wird. Um die Dateien in das Spoolverzeichnis des lpd zu schreiben, wird das Frontend lpr verwendet. Der Aufruf lautet: Unter Linux:

    lpr -P<printer> <Dateiname>

Unter SCO:

    lpr -d<printer> <Dateiname>

Die Druckerbeschreibung befindet sich auf UNIX-Systemen in der
/etc/printcap.

Unter OS/2 (PCTCP):


    lpr -S<hostname> -P<printername> <Dateiname>

Besonderheiten des SCO

SCO hat standardmäßig das lpd-Protokoll nicht installiert. Um mit einem System auf lpd-Basis arbeiten zu können, muß zunächst das Remote-Line-Printing (rlp) installiert werden. Dies geschieht über den Befehl

    mkdev rlp

Besonderheiten des PCTCP unter OS/2

Der lpd wird nicht vom PCTCP automatisch gestartet. Er muß von Hand gestartet werden.

minstart lpd

Ein detach hat zu erheblichen Performance-Einbrüchen geführt. Weitere Verbesserungen der Performance erreicht man, wenn in der Datei \pctcp\etc\pctcp.ini bei Angabe der Schnittstelle der Zusatz /redirected angehängt wird. So werden die Daten block- und nicht buchstabenweise verarbeitet. Beispiel:

[Epson]

   device = LPT1/redirected

Network File System (NFS)

NFS stellt Teile des Verzeichnisbaumes anderen Rechnern als virtuelle Plattenlaufwerke zur Verfügung. Dabei wird der zur Verfügung stellende Rechner als Server und derjenige, der die Platte nutzt als Client bezeichnet. Nahezu jede UNIX-Maschine ist in der Lage, sowohl als Client als auch Server aufzutreten. Um Zirkel zu vermeiden, wo ein Rechner einem anderen Rechner Verzeichnisse zur Verfügung gestellt, die von ihm selbst erhalten hat, werden über NFS gemountete Verzeichnisse nicht wiederum exportiert. Die meisten TCP/IP Implementationen für PC-Betriebssysteme sind nur in der Lage als Client aufzutreten. Da NFS auf dem RPC basiert, muß zunächst dieses sowohl für den Client als auch den Server aktiviert werden. Unter LINUX wird dazu im Skript /etc/rc.d/rc.inet2 der Portmapper freigeschaltet. Der Portmapper liest eine Datei /etc/portmap, in der seine Dienste aufgelistet sind, zu denen auch NFS gehört. Der NFS-Server muß zusätzlich den nfsd (NFS-Dämon) aktivieren. Auch dieser wird in der Datei /etc/rc.d/rc.inet2 freigeschaltet. Server und Client müssen sich als Hostnamen anreden können, es müssen also Einträge für den jeweils anderen in der /etc/hosts stehen.

NFS-Server

Der NFS-Server stellt in der Datei /etc/exports alle Verzeichnisse ab, die von anderen Hosts gemountet werden können. Dem Pfadnamen können Einschränkung angehängt werden, die Rechner, Netze oder auch einzelne Benutzer betreffen. Auch Schreibrechte können auf diese Weise eingegrenzt werden.

/usr/src    # das Verzeichnis ist für alle frei zugreifbar

Nach Änderungen an der /etc/exports muß ein kill -1 auf den mountd-Prozeß abgesetzt werden. Unter Linux wird der NFS-Dienst gestoppt und gestartet mit:


/sbin/init.d/nfsserver stop

/sbin/init.d/nfsserver start

NFS-Clients

Der Client muß ein NFS-Laufwerk wie eine gewöhnliche Platte per mount in den Verzeichnispfad integrieren. Unter UNIX lautet der Befehl:

    mount -t nfs <Hostname:><Pfadname> <Mountpoint>

Beispiel:

    mount -t nfs idefix:/home/ingres /mnt

Dadurch wird das Verzeichnis /home/ingres auf dem Host idefix auf dem eigenen Host über den Pfadnamen /mnt erreichbar. Ein Befehl wie ``ls /mnt'' listet also den Inhalt des Verzeichnisses /home/ingres auf dem Host idefix. Bei SCO wird statt der Option -t, die ansonsten in der UNIX-Welt üblich ist, die Flag -f verwendet. Zusätzlich werden dort die Filesystem-Bezeichnungen in Großbuchstaben angegeben. So würde dort der obige Aufruf so lauten:

    mount -f NFS idefix:/home/ingres /mnt

Man kann auch NFS-Laufwerke vom Client automatisch beim Booten mounten lassen. Dies erfolgt bei Linux durch Eintrag in der /etc/fstab. Dabei wird als Filesystem-Typ nfs angegeben. Unter SCO wird dazu die Datei /etc/default/filesys verwandt, in der ebenfalls die zur Bootzeit gemounteten Dateisysteme stehen. Um zu ermitteln, welche Verzeichnisse ein NFS-Server anbietet, wird der folgende Befehl verwendet:

showmount -e scosrv

Besonderheiten von PC-Systemen

Da DOS-Systeme (in diesem Fall auch OS/2) Platten über eigene Namen ansprechen und nicht einen zusammenhängenden Verzeichnisbaum besitzen, werden NFS-Laufwerke meist auf Netzwerklaufwerke abgebildet. Das NFS verhält sich also hier aus Anwendersicht etwa wie ein Novell-Netzwerk.

Besonderheiten des OS/2 PCTCPs

Unter PCTCP wird zum Aktivieren des NFS-Clients zunächst der Befehl

    detach nfsdmon -i

angegeben. Dieser Startet den NFS-Client-Dämon des TCPs. Die Beschreibungen der Laufwerke werden in der Datei \verb|\PCTCP\ETC\IDDRIVE.INI| abgelegt. Der Dateiname kann in der Datei \verb|\PCTCP\ETC\PCTCP.INI| umkonfiguriert werden. Um die Datei zu verändern und die Veränderungen wirksam werden zu lassen, muß der NFS-Dämon zunächst beendet und neu gestartet werden. Das beenden des Dämons erfolgt durch den Befehl

    nfsdmon -k

Die in der IDDRIVE-Datei benannten Filesysteme können über den Befehl

    idmnt 

gemountet werden. Wird statt des Dateisystems -a angegeben, werden alle in der IDRIVE.INI angegebenen Systeme gemountet.

Mail

Es gibt zwei heute wichtige Protokolle im Bereich der E-Mail. Das eine ist SMTP und das andere POP3. Bei SMTP wird die Mail vom Absender an den Server geschoben. POP3 holt dagegen seine Mail ab. Dabei authentifiziert sich POP3, was bei SMTP nicht erforderlich ist.

sendmail

sendmail verwendet den Port 25, um Nachrichten zwischen den Rechnern auszutauschen. Der Tauschdämon heißt sendmail. Der Start von sendmail erfolgt mit dem Aufruf

sendmail -q -bd

Der Zeitabstand wird mit 1h für eine Stunde oder 15m für 15 Minuten angegeben. Man sollte diesen Abstand nicht unter 15 Minuten senken. Die Option -bd bewirkt, daß der Dämon den Port abfragt. Für das Versenden von Nachrichten wird die alias-Datei /etc/aliases verwendet. Hier stehen Adressaten und ihre tatsächlichen Zielorte. Beispiel:

aw: awillemer@os2aw

us: usander@os2us

all:    aw, meier@marian.mymail.de, us

owner-all:  aw

Entsteht beim Senden an all ein Problem wird mit owner-all der Teilnehmer angegeben, an den die Fehlernachricht gesendet werden soll. Werden Einträge in /etc/aliases geändert, werden diese mit dem Befehl newaliases oder sendmail -bi an den sendmail-Dämon weitergeleitet. Jeder Benutzer kann seine lokale Mail an einen anderen Rechner weiterleiten, indem er im Benutzerverzeichnis eine Datei .forward anlegt und hier die Zieladresse z. B. uwe@myserver ablegt Die Konfiguration des sendmails erfolgt in der Datei /etc/sendmail.cf Eine Beschreibung des SMTP (Simple Mail Transfer Protocol), das sendmail verwendet, findet sich in Comer S. 399.
Homepage (C) Copyright 1999 Arnold Willemer