![]() |
Praktikum "UNIX"von Prof. Jürgen Plate |
Es gibt daneben die Möglichkeit, Benutzer auch dann zu informieren, wenn sie nicht eingeloggt sind.
Das Mail-Kommando ergänzt den Brief um einen Briefkopf, in dem Absender und Absendezeitpunkt verzeichnet sind. Der Mailkopf enthält einzelne Zeilen, die sich anhand eines Schlüsselwortes identifizieren lassen ("From", "To", usw.). Zum Versand an ferne Rechner käme dann noch ein "Briefumschlag" hinzu. Normalerweise sorgt das Mail-Kommando nicht selbst für den Versand, sondern es übergibt den Brief an ein anderes, speziell für den Mailversand konzipiertes Programm.
Wir haben es hier also mit einem Frontend, dem 'Mail User Agent' (mail, mailx, elm, pine,...), und einem Backend, dem 'Mail Transport Agent' (sendmail, smail, ...), zu tun. Der MTA sorgt auch für die Weiterleitung ankommender Post an den richtigen Empfänger.
Kann der Brief nicht zugestellt werden (z. B. unbekannter Empfänger), gibt mail eine Fehlermeldung aus. Gleichzeitig erhält man den eigenen Brief, ergänzt um Zusatzinformationen per mail retour. Fehlerhafte Briefe werden auch (je nach Einstellung des MTA) an einen besonderen Pseudo-Empfänger namens 'postmaster' geschickt. Dieser Benutzer steht nicht in der Passwortdatei, sndern es ist ein sogenanntes 'Mail-Alias' für den Systemverwalter oder einen Beauftragten. An den 'postmaster' kann man sich auch wenden, wenn man Fragen im Zusammenhang mit Mail hat (z. B. wenn man einen Empfänger sucht). Beispiel für das Versenden einer Mail:
$ mail markus Lieber Markus, leider habe ich dich heute nicht getroffen. Ich brauche dringend das UNIX-Buch, das ich Dir neulich geliehen habe. Bitte leg es doch in mein Fach. Danke. Gruss, Hans .
Wenn der Benutzer markus mehrere Mails erhalten hat, wird er über diesen Brief nicht besonders glücklich sein, denn jeder Mailer (MUA) zeigt normalerweise erst einmal den Absender und eine Betreff-Zeile an. Letztere besitzt aber der obige Brief garnicht. Man sollte also eine "Subject:"-Zeile anbringen. Das geht recht gut mit dem verbesserten 'mail'-Kommando, 'mailx'. Hier kann man in der Kommandozeile ein "Subject" angeben:
mailx -s "UNIX-Buch" markus ....
'mail' und 'mailx' werden eigentlich nur noch verwendet, wenn nichts besseres da ist - oder wenn es darum geht in Kommandodateien (Shellskripts) Mail automatisch zu versenden, da man mit Ausgabeumleitung oder Pipe die Ausgabe eines Programms direkt an den MUA übergeben kann.
Eine Nachricht über eingegangene Post erhält der Benutzer beim Login mit der Meldung you have mail.
Er kann dann mit einem Mail-Kommando seine Post ansehen (und gleich antworten). Der Unterschied zum Senden besteht bei mail und mailx im Fehlen der Empfänger-Logins. mail arbeitet interaktiv - man kann so alle Briefe nacheinander bearbeiten. Die obige Ausgabe stützt sich auch auf das Mail-Kommando.
-e | Keine Bearbeitung, nur anzeigen, ob Post vorliegt. mail antwortet mit 0 oder 1 (=keine Post/Post). |
-h | Nur numerierte Liste der Briefköpfe anzeigen, danach in den interaktiven Modus gehen. |
-p | Alle Briefe ohne interaktive Steuerung ausgeben. |
-q | Abbruchtaste beendet mail (im Normalfall wird damit nur die Ausgabe des aktuellen Briefs abgebrochen). |
-r | Anzeige der Briefe nach Alter, den ältesten zuerst (FIFO). |
-f datei | mail bietet die Möglichkeit, Briefe in einer benutzereigenen Datei zu speichern. Statt des Standardnamens "mbox" wird der angegebene Name verwendet. |
Beim Lesen der Post im interaktiven Modus (der Aufruf von mail ohne Parameter ist die Regel) meldet sich mail mit dem Fragezeichen als Prompt. Danach können zahlreiche Kommandos gegeben werden. Die Ausgabe kann mit CTRL-S angehalten und mit CTRL-Q fortgesetzt werden. Für den Anfang reichen ein paar Tasten:
CR,n,+ | zum nächste Brief gehen |
d | löscht den angezeigten Brief (markiert als "gelöscht") |
p | aktuellen Brief nochmals ausgeben. |
- | vorherigen Brief nochmals ausgeben. |
s | Brief in der Datei mbox speichern. Hinter s kann auch ein Dateiname angegeben werden. |
w | wie s, jedoch ohne Briefkopf. m Brief weiterleiten. Hinter m muß ein Login-Name angegeben werden. |
r | Antworten, der Empfänger wird von mail dem Brief entnommen. |
! | Ausführen des hinter dem ! angegebenen UNIX-Kommandos. |
q | mail verlassen, als gelöscht markierte Briefe entfernen |
x | mail abbrechen - alles bleibt, wie es war. |
Das Kommand 'mailx' zeigt beim Start zumindest eine Übersicht der eingegangenen Post (Subject und Absender) und bietet komfortablere Bearbeitung (z. B. Löschen aller Mails auf einmal oder die oben erwähnte Subject-Angabe).
Programme wie 'elm', 'pine' oder 'mutt' arbeiten interaktiv und stellen eine komfortablere Benutzer-Schnittstelle dar. Deshalb werden sie normalerweise verwendet. Eine detaillierte Beschreibung dieser Programme würde jedoch den Rahmen dieses Skripts sprengen.
Bei allen sendmail- oder smail-basierten Systemen ist die Umleitung einfacher. Der Benutzer muß lediglich in seinem Home-Directory eine Datei namens ".forward" anlegen und in dieser Datei eine (korrekte) Mailadresse eintragen. Sollen mehrere Empfänger angesprochen werden, sind die Namen durch Kommas zu trennen.
Der Mechanismus geht jedoch noch weiter. Wird eine Datei mit vollständigem Pfad angegeben (die Weiterleitungszeile beginnt also mit einem '/'), dann landet die Post in der angegebenen Datei. Ein weiterer Schritt ist die Angabe einer Pipe in ein Programm oder Skript, das die Mail weiterverarbeitet (z. B. "| tuwas"). Beim Erstellen des Skripts ist zu beachten, daß keinerlei Pfade oder Voreinstellungen vorausgesetzt werden dürfen und gewisse Sicherheitsmaßnahmen zu beachten sind. Ein recht bekanntes Programm, das eingehende Mail vorsortieren oder unerwünschte Mail gleich löschen kann ist beispielsweise 'procmail'.
Mailsysteme, die auf 'smail' oder 'sendmail' basieren, bieten noch einige weitere Features. Die Datei /etc/aliases ist hier von besonderem Interesse, da sich damit einige Mail-Dienste realisieren lassen:
plate: plate@fh-muenchen.de
postmaster: holzmann
webmaster: plate
admin: root
....
netmaster: plate,holzmann,root
Eine E-Mail an "netmaster" wird im Beispiel an drei verschiedene Accounts geschickt.
wichtel: :include:/home/plate/wichtel-mailingliste
Die Datei enthält einfach in jeder Zeile eine komplette Mailadresse. Durch Hinzufügen und Löschen von Zeilen kann die Liste aktualisiert werden.
In regelmäßigen Zeitabständen wird dann der eigentliche Datentransfer gestartet (Programm 'uucio' = Unix to Unix Copy I/O). Per Modem wird Kontakt zu einem entfernten Rechner aufgenommen und wechselseitig Daten ausgetauscht. Ist alles erledigt, wird die Verbindung wieder unterbrochen.
Heute wird vieles online im Netz erledigt, aber uucp hat immer noch seine Daseinsberechtigung, z. B. zum Austausch von Mail und Usenet-News. Wenn jemand beispielsweise sowieso nur einmal am Tag seine Mail bearbeitet dann kann dies offline, d. h. lokal geschehen und der Transfer irgendwann Nachts oder im Lauf des Tages erfolgen. Uucp-Software gibt es auch für andere Betriebssysteme (z. B. das Paket 'Waffle' für DOS) und so ist auch ein platformübergreifender Datenverkehr möglich. Außerdem kommt man so auch in Gegenden an seine Mail, in denen nur eine Telefonverbindung verfügbar ist. Das Thema wird im Kapitel über das Internet nochmals aufgegriffen. Um erreichbar und von anderen Rechnern unterscheidbar zu sein, braucht jedes System einen eindeutigen Knotennamen. Mit deren Hilfe gab es dann auch die erste Möglichkeit, Benutzer auf anderen Rechnern zu adressieren.
Das Versenden von Post an ein anderes System erfolgte anfangs durch Angabe von Knotennahmen und Loginnamen des Empfängers, getrennt durch ein Ausrufezeichen, z. B.:
mailx -s "Konferenz an 12.7." werk2!hans
Die übrige Bedienung von mail erfolgt dann wie schon beschrieben. Es ist auch möglich, die Post über mehrere Knoten zu leiten, wenn zwischen dem eigenen Rechner und den Zielrechner keine direkte Verbindung besteht. Angenommen alle Rechner eines Unternehmens sind pr uucp gekoppelt, dann könnte der mail-Aufruf so aussehen:
mailx -s "Konferenz am 12.7." werk1!werk2!werk4!klaus
Nachteil dieser Wegbeschreibung, die wegen der Ausrufezeichen als 'Bang-Path' bezeichnet wird, ist die Festlegung ebe gerade auf einen Weg. Ist der Rechner "werk2" gerade nicht betriebsbereit, bleibt die Post hängen. Deshalb ist man schon sehr bald zu einer wegeunabhängigen Adressierung übergegangen, der an anderer Stelle beschriebenen Domain-Adressierung, die heute verwendet wird. Manchmal findet man noch Mischformen, bei denen sozusagen die letzte Wegstrecke noch als Bangpath notiert ist. Es gibt eine ganze Reihe von uucp-Kommandos:
Von den Optionen werden nur einige vorgestellt:
-j | gibt die Auftragskennung aus |
-m | Sendet an der Aufrufer einen mail-Mitteilung über den Erfolg der Kopieraktion |
-n | Empfänger-Loginname Der Empfänger wird per mail über den Kopiervorgang informiert. |
Knotenname[~Loginname]Kommando
Mit "uux Konotenname!login" kann man sich auf dem fremden Rechner anmelden, als ob man an einem seiner Terminals wäre. Dazu wird oft aber auch das folgende Kommando angeboten:
Die uu-Kommandogruppe kennt noch eine Reihe weiterer Kommandos für den Verkehr zwischen UNIX-Rechnern - siehe weiterführende Literatur. uucp-Verbindungen sind jedoch in jedem Fall für Mail, Netnews und gelegentliche Dateitransfers ausreichend. Sehr viel komfortabler wird es jedoch, wenn über Netzwerkkabel, Standleitung, Modemverbindung oder sogar Satellitenfunk die einzelnen Systeme direkt vernetzt sind.
Die Installation und Initialisierung von TCP/IP komplett zu beschreiben, würde die Grenzen dieses Skripts sicherlich sprengen. Eine solche Beschreibung ist auch ziemlich überflüssig, da nahezu jeder Hersteller eigene Installationsroutinen zur Verfügung stellt. Leider sind diese unter Unix nicht einheitlich, jedoch läuft die Einrichtung von TCP/IP zumeist schon während der Installation des Betriebssystems ab. Aus diesem Grund beschränken wir uns auf die allgemein wichtigen Kommandos und Konfigurationsdateien.
Für weitergehende Information zur Netzwerktechnik sei auf das Skript Internet-Einführung.
ifconfig lo0 127.0.0.1
Broadcast-Interfaces sind die üblichen Schnittstellen zu lokalen Netzwerken, über die mehrere Systeme erreichbar sind, und über die Broadcasts, also Nachrichten an alle, verschickt werden. Es handelt sich dabei um Schnittstellen zu Ethernet und TokenRing. Neben der Internet-Adresse werden bei der Initiatisierung des Broadcast-Interfaces auch die Netzmaske und die Broadcast-Adresse angegeben:
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255
Neben den Broadcast-Schnittstellen gibt es noch die sogenannten Point-to-Point-Schnittstellen. Sie sind dadurch gekennzeichnet, daß man nur über sie ein anderes System erreichen kann. Beispiele sind SLIP (Serial Line IP) und das Point-to-Point-Protokoll PPP, die Verbindungen über die serielle Schnittstelle oder per Modem/ISDN-Adapter WAN-Verbindungen zulassen. Die Initialisierung einer Point-to-Point-Schnittstelle hat z.B. die folgende Form:
ifconfig ppp0 192.168.1.1 192.168.1.2 netmask 255.255.255.240
So eine PPP-Verbindung bildet ein eigenständiges Netzwerk. Sollen mehrere Verbindungen kombiniert werden, so muß eine Unterteilung in Subnetze erfolgen. Das heißt, daß eine entsprechende Netzmaske gewählt werden muß. Wird als Argument für das ifconfig-Kommando nur der Name der Schnittstelle angegeben, so bezieht sich das auf die aktuelle Konfiguration der Schnittstelle, die dann ausgegeben wird:
eth0 Link encap:10Mbps Ethernet HWaddr 00:20:18:03:0B:F5 inet addr:10.10.10.4 Bcast:10.10.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:11 Base address:0x340
Internet-Adresse Name Aliase ...
Dazu ein Beispiel:
127.0.0.1 localhost 192.168.0.1 sun1-lbs micky 192.168.0.2 sun2-lbs minnie 192.168.0.3 sun3-lbs goofy 192.168.0.4 sun4-lbs donald 192.168.0.5 sun5-lbs dagobert 192.168.0.6 sun6-lbs daisy 192.168.0.7 sun7-lbs tick 192.168.0.8 sun8-lbs trick 192.168.0.9 sun9-lbs track
Nach der Internet-Adresse wird der "offizielle" Name des Systems angegeben, gefolgt von Alias-Namen für dieses System. Wird als Argument für ein Netzwerk-Kommando ein Name angegeben, so wird in dieser Datei die zugehörige Internet-Adresse ermittelt. Erst über die Adresse wird eine Verbindung zum Zielsystem aufgebaut. Die Datei /etc/hosts wird jedoch auch für den umgekehrten Vorgang benutzt. Mit einem IP-Datagram wird nur die Internet-Adresse des sendenden Systems mitgeschickt. Soll nun der zugehörige Name ermittelt werden, so geschieht dies ebenfalls mittels dieser Datei. Das Resultat ist jedoch immer der "offizielle" Name des Systems. Deshalb ist darauf zu achten, daß stets dieser Name verwendet werden muß, wenn ein Rechnername in weiteren Konfigurationsdateien eingetragen wird.
Natürlich reicht das System mit /etc/hosts höchstens für ein lokales Kleinstnetz mit einer handvoll Rechner aus, denn auf jedem Rechner muß die /etc/hosts auf dem aktuellen Stand gehalten werden. Diesem Problem sahen sich auch bald die Väter des Internet gegenüber und so wurde die größte weltweit verteilte Datenbank, das Domain Name System (DNS) erfunden. Es gibt eine Software, welche die Namensdatenbank verwaltet und auf Anfrage zu einem Rechnernanen die IP-Adresse liefert oder umgekehrt. Das Programm ist unter UNIX in der Regel BIND (Berkely Internet Name Daemon). Es läuft als "Nameserver" auf normalerweise mindestens zwei Rechnern einer Domain. Mehr darüber finden Sie im DNS-Kapitel des Internet-Skripts. Für den Rechner, der DNS nutzen will gibt es zwei Dateien, /etc/hosts.conf und /etc/resolv.conf, die festlegen, wie der Nameserver genutzt wird. In /etc/hosts.conf wird festgelegt, wie der Namenssuche erfogen soll:
order hosts bind multi onMit order hosts bind wird festgelegt, daß zuerst in der lokalten Datenbank /etc/hosts gesucht werden soll und erst dann eine Nameserveranfrage an einen fernen Rechner gestartet wird. Die Datei /etc/resolv.conf enthält Infos über den Nameserver:
search mydomain.net nameserver 10.10.10.4 nameserver 10.10.10.1
Wie die Datei /etc/hosts enthält auch die Datei /etc/networks Adressen und Namen. Diesmal sind es allerdings Namen für Netzwerke. Die Funktion dieser Datei ist durchaus mit der /etc/hosts vergleichbar: Netzwerk-Namen werden in Netzwerk-Adressen umgesetzt und umgekehrt. Die allgemeine Form eines Eintrags sieht dann so aus:
Netzwerk-Name Netzwerk-Adresse Netzwerk-Aliase ...
Zum Beispiel:
loopback 127 admin-net 192.168.1 dev-net 192.168.2
Eine weitere Datei ist für die Zuordnung der Portnummern zu den einzelnen Diensten wie Telnet, FTP, WWW, Mail, usw. zuständig. In dieser Datei, /etc/services, werden der Name des Dienstes, die Portnummer, das Transportprotokoll (UDP oder TCP) und Service-Aliase angegeben. Die allgemeine Form eines Eintrags in /etc/services hat die Form:
Service-Name Portnummer/Protokoll Service-Aliases
Wichtig: Hier sind nur Portnummern für Server spezifiziert. Client-Programme bekommen beim Verbindungsaufbau eine beliebige, freie Portnummer zugewiesen. So kann der Server wieder auf der Standard-Portnummer aus /etc/services auf einen weiteren Verbindungswunsch warten. Die spezifizierten Portnummern sind auf allen Rechnern im Netz gleich. Die Server-Programme entnehmen dieser Datei, auf welchen Port sie zugreifen müssen. Die Client-Programme finden hier die entsprechenden Portnummern ihrer Server. In /etc/services werden die Portnummern für TCP- und UDP-Dienste spezifiziert. Die Portnummern für diese beiden Transport-Protokolle sind völlig unabhängig voneinander. Trotzdem ist es im allgemeinen üblich, gleiche Portnummern für beide Protokolle zu benutzen, wenn ein Dienst über beide Transportprotokolle verfügbar ist.
Ein Ausschnitt aus /etc/services:
tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol msp 18/udp # message send protocol chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp 21/tcp # 22 - unassigned telnet 23/tcp # 24 - private smtp 25/tcp mail # 26 - unassigned time 37/tcp timserver time 37/udp timserver rlp 39/udp resource # resource location nameserver 42/tcp name # IEN 116 whois 43/tcp nicname domain 53/tcp nameserver # name-domain server domain 53/udp nameserver mtp 57/tcp # deprecated bootps 67/tcp # BOOTP server bootps 67/udp bootpc 68/tcp # BOOTP client bootpc 68/udp tftp 69/udp gopher 70/tcp # Internet Gopher gopher 70/udp rje 77/tcp netrjs finger 79/tcp www 80/tcp http # WorldWideWeb HTTP www 80/udp # HyperText Transfer Protocol link 87/tcp ttylink kerberos 88/tcp krb5 # Kerberos v5 kerberos 88/udp supdup 95/tcp # 100 - reserved hostnames 101/tcp hostname # usually from sri-nic iso-tsap 102/tcp tsap # part of ISODE. csnet-ns 105/tcp cso-ns # also used by CSO name server csnet-ns 105/udp cso-ns rtelnet 107/tcp # Remote Telnet rtelnet 107/udp pop2 109/tcp postoffice # POP version 2 pop2 109/udp pop3 110/tcp # POP version 3 pop3 110/udp sunrpc 111/tcp sunrpc 111/udp auth 113/tcp tap ident authentication sftp 115/tcp uucp-path 117/tcp nntp 119/tcp readnews untp # USENET News Transfer Protocol ntp 123/tcp ntp 123/udp # Network Time Protocol netbios-ns 137/tcp # NETBIOS Name Service netbios-ns 137/udp netbios-dgm 138/tcp # NETBIOS Datagram Service netbios-dgm 138/udp netbios-ssn 139/tcp # NETBIOS session service netbios-ssn 139/udp imap2 143/tcp # Interim Mail Access Proto v2 imap2 143/udp .....
Es gibt bei UNIX zwei Möglichkeiten, einen Netzdienst anzubieten:
# See "man 8 inetd" for more information. # # If you make changes to this file, either reboot your machine or send the # inetd a HUP signal. # ## # These are standard services. # ftp stream tcp nowait root /usr/sbin/wu.ftpd wu.ftpd -a # ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd # nntp stream tcp nowait root tcpd in.nntpd smtp stream tcp nowait root /usr/sbin/sendmail sendmail -v printer stream tcp nowait root /usr/bin/lpd lpd -i # # Shell, login, exec and talk are BSD protocols. # shell stream tcp nowait root /usr/sbin/in.rshd in.rshd -L login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd # talk dgram udp wait root /usr/sbin/in.talkd in.talkd # ntalk dgram udp wait root /usr/sbin/in.talkd in.talkd # # Kerberos authenticated services # # klogin stream tcp nowait root /usr/sbin/tcpd rlogind -k # eklogin stream tcp nowait root /usr/sbin/tcpd rlogind -k -x # kshell stream tcp nowait root /usr/sbin/tcpd rshd -k # # Services run ONLY on the Kerberos server # # krbupdate stream tcp nowait root /usr/sbin/tcpd registerd # kpasswd stream tcp nowait root /usr/sbin/tcpd kpasswdd # # Pop et al # # pop2 stream tcp nowait root /usr/sbin/in.pop2d in.pop2d pop3 stream tcp nowait root /usr/sbin/popper popper -s # # Comsat - has to do with mail. # # comsat dgram udp wait root /usr/sbin/tcpd in.comsat # # The Internet UUCP service. # # uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." # # tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd # bootps dgram udp wait root /usr/sbin/bootpd bootpd # # Finger, systat and netstat give out user information which may be # valuable to potential "system crackers." Many sites choose to disable # some or all of these services to improve security. # Try "telnet localhost systat" and "telnet localhost netstat" to see that # information yourself! # finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd -w systat stream tcp nowait nobody /bin/ps /bin/ps -auwwx netstat stream tcp nowait root /bin/netstat /bin/netstat -a ident stream tcp nowait root /usr/sbin/in.identd in.identd # # These are to start Samba, an smb server that can export filesystems to # Pathworks, Lanmanager for DOS, Windows for Workgroups, Windows95, Lanmanager # for Windows, Lanmanager for OS/2, Windows NT, etc. Lanmanager for dos is # available via ftp from ftp.microsoft.com in bussys/MSclient/dos/. Please read # the licensing stuff before downloading. Use the TCP/IP option in the client. # Add your server to the \etc\lmhosts (or equivalent) file on the client. netbios-ssn stream tcp nowait root /usr/bin/smbd smbd netbios-ns dgram udp wait root /usr/bin/nmbd nmbd # End.
Als letzte der Konfigurations-Dateien soll die /etc/protocols behandelt werden. Hier werden die über IP arbeitenden Protokolle aufgelistet. Die allgemeine Form eines Eintrags hat die Form:
Protokoll-Name Protokoll-Nummer Protokoll-Aliase ...
Zum Beispiel:
ip 0 IP # internet protocol, pseudo protocol number icmp 1 ICMP # internet control message protocol igmp 2 IGMP # internet group multicast protocol ggp 3 GGP # gateway-gateway protocol tcp 6 TCP # transmission control protocol egp 8 EGP # Exterior-Gateway Protocol PUP 12 PUP # PARC universal packet protocol udp 17 UDP # user datagram protocol idp 22 IDP # WhatsThis? hello 63 HELLO # HELLO Routing Protocol raw 255 RAW # RAW IP interface
Die Protokoll-Nummer wird im Header des Internet-Protokolls angegeben.
Jeder Rechner im Netz (= Host) besitzt eine Datei /etc/hosts.equiv, in der "vertrauenswürdige" Rechner eingetragen sind. Wollen sich Benutzer von einem dieser Rechner auf dem lokalen Computer einloggen, brauchen sie kein Passwort für den Rechner-Rechner-Übergang (wobei "Benutzer" auch Dämonprozesse sein können --> automatischer Datenaustausch möglich). Enthält die Datei nur eine Zeile mit einem '+'-Zeichen, werden alle angeschlossenen Rechner akzeptiert. Gibt es keine "vertrauenswürdigen" Rechner, ist jeweils die Eingabe des Login-Paßwortes nötig. Außerdem funktioniert das Ganze nur, wenn man auf Quell-und Zielrechner die gleiche Benutzerkennung hat.
Die Benutzer eines Rechners können auf einen anderen Rechner im Home-Verzeichnis eine Datei namens '.rhosts' anlegen, über deren Einträge entschieden wird, von welchem Rechner aus der Benutzer sich ohne Passwort einloggen darf.
Weitere Netzwerkprogramme, die man ständig zum Fern-Login braucht, sind 'telnet' und 'ftp'. An dieser Stelle gibt es eine kurze Bedienungsanleitung, im Internet-Skript werden die Hintergründe erklärt.
telnet oder telnet Rechnername
Für die Kommunikation gibt es eine ganze Reihe von Befehlen, z. B.:
help | Hilfe |
open | Verbindung aufbauen |
close | Verbindung beenden |
display | Betriebsparameter anzeigen |
quit | Telnet beenden |
Beispiel: Verbindung zum Rechner sun1-lbs
telnet sun1-lbs
Telnet reagiert daraufhin mit:
Trying to ..... Connect to sun1-lbs Escape Character is '^]'Jetzt folgt die normale Loginsequenz auf dem Rechner sun1-lbs. Um weitere Kommandos an Telnet geben zu können, muß der Befehl mit dem angegeben Escape-Character eingeleitet werden (im Beispiel das ESC-Zeichen). Beenden der Verbindung erfolgt in diesem Fall mit "^] quit" oder einfach Ctrl-D.
telnet kann auch vorzüglich zum Testen von Verbindungen und Servern verwendet werden. Bei Kenntnis der Protokolle (nachlesbar in den entsprechenden RFCs) kann ein Protokoll wie SMTP, NNTP, HTTP, usw. auch von Hand nachgebildet werden. Man kann so durch eine telnet-Verbindung nachsehen, ob auf einem fernen System Mail-, News-, WWW- oder andere Dienste laufen.
Neben den Kommandos für den "Normalbenutzer" gibt es noch Testkommandos, die recht hilfreich sind, wenn man einen fernen Rechner nicht erreicht oder, um mehr über das Netz zu erfahren.
$ ping donald
erhält man je nach System die Meldung "donald is alive." oder es wird pro Sekunde 1 Datenpaket gesendet. Die als Echo zurückkommenden Pakete werden angezeigt. Ab gebrochen wird das Ping-Pong-Spiel durch das Interrupt-Signal (Delete, Ctrl-C). Nach dem Abruch von ping wird noch eine kurze Statistik ausgegeben. (die Wortkarge Variante von ping muß man durch die Option "-s" zur Dauerarbeit bringen). Besonders interessant ist die Angabe "packet loss", also der Prozentsatz der nicht be antworteten Pakete. Bei einer einwand freien Verbindung, insbesondere in einem lokalen Netz, sollte hier eigentlich immer 0% stehen. Im Falle von 100% ist definitiv etwas nicht in Ordnung. Passiert dies bei allen Systemen, so ist das Netz defekt. Beispiel:
$ ping www.e-technik.fh-muenchen.de PING www.e-technik.fh-muenchen.de (129.187.206.140): 56 data bytes 64 bytes from 129.187.206.140: icmp_seq=0 ttl=242 time=48.9 ms 64 bytes from 129.187.206.140: icmp_seq=1 ttl=242 time=41.9 ms 64 bytes from 129.187.206.140: icmp_seq=2 ttl=242 time=41.3 ms 64 bytes from 129.187.206.140: icmp_seq=3 ttl=242 time=39.9 ms 64 bytes from 129.187.206.140: icmp_seq=4 ttl=242 time=44.9 ms 64 bytes from 129.187.206.140: icmp_seq=5 ttl=242 time=42.9 ms 64 bytes from 129.187.206.140: icmp_seq=6 ttl=242 time=45.4 ms 64 bytes from 129.187.206.140: icmp_seq=7 ttl=242 time=40.5 ms 64 bytes from 129.187.206.140: icmp_seq=8 ttl=242 time=41.4 ms 64 bytes from 129.187.206.140: icmp_seq=9 ttl=242 time=42.3 ms --- www.e-technik.fh-muenchen.de ping statistics --- 10 packets transmitted, 10 packets received, 0% packet loss round-trip min/avg/max = 39.9/42.9/48.9 ms
$ arp -a Net to Media Table Device IP Address ------- Mask Flags Phys Addr ------ --------------------------- --------------- ----- ----------------- le0 brokrz.lrz-muenchen.de 255.255.255.255 00:00:a2:0f:76:97 le0 infoserv.rz.fh-muenchen.de 255.255.255.255 00:e0:29:06:18:d3 le0 flynt.rz.fh-muenchen.de 255.255.255.255 00:e0:29:08:49:f1 le0 kobra.rz.fh-muenchen.de 255.255.255.255 00:08:c7:a9:6c:cc le0 netmon.rz.fh-muenchen.de 255.255.255.255 00:e0:29:0e:83:92 le0 linux4.rz.fh-muenchen.de 255.255.255.255 00:00:c0:93:19:d3 le0 linux5.rz.fh-muenchen.de 255.255.255.255 00:00:c0:37:19:d3 le0 door2.rz.fh-muenchen.de 255.255.255.255 00:00:c0:3f:fb:a7 le0 wapserv 255.255.255.255 SP 08:00:20:23:02:88 le0 sun10.rz.fh-muenchen.de 255.255.255.255 08:00:20:86:ce:5e le0 kiosk1.rz.fh-muenchen.de 255.255.255.255 00:00:c0:60:af:d7 le0 satellit.rz.fh-muenchen.de 255.255.255.255 08:00:20:71:77:b4 le0 kaputt.rz.fh-muenchen.de 255.255.255.255 00:50:56:82:f0:f0Mit Hilfe der Option "-d" können Einträge aus dieser Tabelle gelöscht werden. Die Einträge sind jedoch nicht nicht permanent, sondem nach einer gewissen Zeit verschwinden sie wieder. Daher ist es meistens nicht notwendig einen Eintrag manuell zu entfernen.
Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags lo 3584 0 220 0 0 0 220 0 0 0 BLRU eth0 1500 0 0 0 0 0 0 0 0 0 BRUMöchte man die Angaben numerisch, so verwendet man netstat -in. Von besonderem Interesse sind die letzten fünf Spalten. Hier werden die Anzahl von empfangenen und gesendeten Paketen, die Anzahl der dabei auftretenden Fehler, sowie die Anzahl der Kollisionen ausgegeben, in die das System verwickelt waren. Sind die Zahlen lpkts und Opkts gleich Null oder ist Opkts gleich Oerrs, so liegt ein mehr oder weniger gravierendes Hardware-Problem vor. Die Anzahl der Kollisionen sollte bei jedem System im Netz unter 5% von Opkts liegen. In die sem Fall arbeiten die Netzwerkschnittstellen effizient. Eine weitere interessante Option des netstat-Kommandos ist die Möglichkeit, sich die aktuellen Verbindungen und aktiven Server mittels der Option "-a" anzeigen zu lassen. Bei diesem Aufruf werden zunächst die zur Zeit benutzten Verbindungen ausgegeben. Dies ist dadurch gekennzeichnet, daß in der Spalte (state) der Zustand ESTABLISHED anaeaeben wird. An .schließend werden alle aktiven Server Prozesse ance-eben, d.h. alle Server, die zur Zeit erreichbar sind. Ein Auszug aus der Ausgabe von netstat -a könnte beispielsweise so aussehen:
Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (State) User tcp 0 0 *:netbios-ssn *:* LISTEN root tcp 0 0 *:nntp *:* LISTEN root tcp 0 0 *:auth *:* LISTEN root tcp 0 0 *:sunrpc *:* LISTEN root tcp 0 0 *:pop3 *:* LISTEN root tcp 0 0 *:www *:* LISTEN root tcp 0 0 *:finger *:* LISTEN root tcp 0 0 *:midinet *:* LISTEN root tcp 0 0 *:http-rman *:* LISTEN root tcp 0 0 *:btx *:* LISTEN root tcp 0 0 *:smtp *:* LISTEN root tcp 0 0 *:telnet *:* LISTEN root tcp 0 0 *:ftp *:* LISTEN root tcp 0 0 *:netstat *:* LISTEN root tcp 0 0 *:systat *:* LISTEN root tcp 0 0 *:printer *:* LISTEN root tcp 0 0 *:shell *:* LISTEN root tcp 0 0 *:login *:* LISTEN root tcp 0 0 *:exec *:* LISTEN root udp 0 0 *:rplay *:* udp 0 0 *:netbios-ns *:* udp 0 0 *:sunrpc *:* udp 0 0 *:ntalk *:* udp 0 0 *:talk *:* udp 0 0 *:syslog *:* raw 0 0 *:1 *:* Active UNIX domain sockets Proto RefCnt Flags Type State Inode Path unix 1 [ ACC ] SOCK_STREAM LISTENING 417 /dev/log unix 2 [ ] SOCK_STREAM CONNECTED 440 unix 2 [ ] SOCK_STREAM UNCONNECTED 441 /dev/log unix 2 [ ] SOCK_STREAM CONNECTED 499 unix 2 [ ] SOCK_STREAM UNCONNECTED 500 /dev/log unix 2 [ ] SOCK_STREAM CONNECTED 517 unix 2 [ ] SOCK_STREAM UNCONNECTED 518 /dev/logDie erste Spalte enthält das Transportprotokoll. Die zweite und dritte Spalte sagen etwas über die Anzahl der Bytes in der Empfangs- bzw. Sende-Warteschlange aus. Die nächsten beiden Spalten geben lokale und ferne Adressen einer Verbindung an. Diese Adressen bestehen aus der Internet-Adresse und der Portnummer der Kommunikationspartner. Ist der Rechner in der /etc/hosts bzw. der Dienst in der /etc/services eingetragen, so werden statt der Adressen Rechnername bzw. der Name des Services aus gegeben. Dies läßt sich durch den Aufruf von netstat -in verhindern. Handelt es sich 4611 um einen Eintrag für einen aktiven Server, so wird die lokale Adresse in der Form "*.<portnummer>" und ferne Adressen in der Form "*.*" angegeben. Diese Art der Ausgabe zeigt an, daß der entsprechende Dienst bereit ist. Bei TCP-Diensten zeigt zusätzlich die letzte Spalte an, daß der Server auf LISTEN aesetzt ist. Kommt für einen speziellen Dienst keine Verbindung zustande, obwohl andere Programme (z.B. ping) funktionieren. so kann man mittels netstat -a auf dem Zielsystem überprüfen, ob der Server dort aktiv ist. Nur dann kann eine entsprechende Verbindung überhaupt aufgebaut werden.
Zähler Gateway-Name Gateway-IP-Nummer "round-trip"-Zeit (3 Werte)Traceroute sendet jeweils drei Datenpakete. Wenn auf ein Paket keine Antwort erfolgt, wird ein Sternchen (*) ausgegeben. Ist ein Gateway nicht erreichbar, wird statt einer Zeitangabe '!N' (network unreachable) oder '!H' (host unreachable) ausgegeben. Man kann so feststellen, wo eine Verbindung unterbrochen ist, und auch, welchen Weg die Daten nehmen - wo also der Zielrechner in etwa steht. Bei grafischen Benutzerschnittstellen erfolgt die Parameterangabe über Dialogfelder und nicht in der Kommandozeile.
$ traceroute www.linux.org traceroute to www.linux.org (198.182.196.56), 30 hops max, 40 byte packets 1 space-gw2m (194.97.64.8) 2.758 ms 3.637 ms 2.491 ms 2 Cisco-M-IV.Space.Net (195.30.0.123) 6.413 ms 4.118 ms 4.107 ms 3 Cisco-M-Fe0-0.Space.Net (195.30.0.126) 4.826 ms 4.508 ms 5.53 ms 4 Cisco-ECRC-H1-0.Space.Net (193.149.44.2) 5.977 ms 6.273 ms 20.832 ms 5 munich-ebs2-s0-0-0.ebone.net (192.121.158.189) 14.415 ms 17.018 ms 8.575 ms 6 newyork-ebs1-s5-0-0.ebone.net (195.158.224.21) 137.35 ms 139.103 ms 138.14 ms 7 serial0-0-1.br1.nyc4.ALTER.NET (137.39.23.81) 137.132 ms 141.742 ms 141.207 ms 8 134.ATM2-0.XR1.NYC4.ALTER.NET (146.188.177.178) 135.375 ms 128.12 ms 165.913 ms 9 189.ATM3-0.TR1.EWR1.ALTER.NET (146.188.179.54) 141.83 ms 144.798 ms 362.469 ms 10 105.ATM4-0.TR1.DCA1.ALTER.NET (146.188.136.185) 145.321 ms 147.889 ms 152.43 ms 11 299.ATM6-0.XR1.TCO1.ALTER.NET (146.188.161.169) 354.577 ms 133.535 ms 348.647 ms 12 193.ATM8-0-0.GW2.TCO1.ALTER.NET (146.188.160.49) 152.444 ms 369.313 ms 150.106 ms 13 uu-peer.oc12-core.ai.net (205.134.160.2) 365.008 ms 509.81 ms 144.898 ms 14 border-ai.invlogic.com (205.134.175.254) 270.065 ms 341.586 ms 153.441 ms 15 router.invlogic.com (198.182.196.1) 356.496 ms 506.371 ms 532.983 ms 16 www.linux.org (198.182.196.56) 584.957 ms 300.612 ms 380.004 ms
Da nach wie vor 7-Bit-ASCII als kleinster gemeinsamer Standard für News und Mail gilt, lassen sich Binärdateien nicht ohne weiteres posten. Abhilfe schaffen hier die Programme UUENCODE und UUDECODE, mit deren Hilfe binäre Daten auf den Bereich der druckbaren ASCII-Zeichen (Großbuchstaben, Ziffern und Sonderzeichen) abbilden lassen. Es werden also Bytes in 6-Bit-Worten codiert und in Zeilen umbrochen. Die mit UUENCODE erzeugte Datei ist nun zwar größer als die Ursprungsdatei, sie läßt sich aber problemlos per News oder Mail verbreiten. Die "uuencodete" Datei enthält am Anfang eine Zeile mit Zugriffsrechte und den Dateinamen:
begin 644 camera.wav Danach folgen die codierten Daten und als Abschluß eine Zeile
end
Eine weitere Form der Codierung findet man bei der Verbreitung von Programmquellen und anderen zusammengehörenden Texten (Programmquellen bestehen in der Regel aus mehreren Quelldateien, Manualpages, Makefile, usw.). Diese Dateien kann man zu sogenannten 'Shell-Archiven' zusammenfassen. Hier wird ein komplettes Shell-Skript gepostet, das die Dateien in Form einzelner Here-Dokumente enthält. Man startet das Skript, wodurch die einzelnen Dateien ausgepackt und meist auch noch auf Korrektheit (Prüfsumme) geprüft werden. Hier als Beispiel der Anfang eines Shell-Archivs:
#! /bin/sh # This is a shell archive. Remove anything before this line, then # feed it into a shell via "sh file" or similar. To overwrite # existing files, type "sh file -c". # Contents: bells.sh hells-bells.au.uu PATH=/bin:/usr/bin:/usr/ucb ; export PATH echo If this archive is complete, you will see the following message: echo ' "shar: End of archive."' if test -f 'bells.sh' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'bells.sh'\" else echo shar: Extracting \"'bells.sh'\" \(581 characters\) sed "s/^X//" >'bells.sh' <<'END_OF_FILE' X#!/bin/ X XBELL=/usr/local/sounds/hells-bells.au XPLAY=/usr/local/bin/play XVOL=40 XDATE=`date +%H:%M` XMINUTE=`echo $DATE | sed -e 's/.*://'` XHOUR=`echo $DATE | sed -e 's/:.*//'` X ....
Um mehrere Dateien in einer einzigen zusammenzufassen verwendet man in der Regel das tar-Kommando (Tape ARchive), nur wird hier nicht auf das Band geschrieben, sondern alle Dateien und Verzeichnisse in eine einzige Datei geschrieben (Option "f"). Analog kann ein Archiv dann wieder "ausgepackt" werden.
tar cvf datei(en) archiv | Archiv erzeugen (c = create) |
tar xvf archiv | Archiv auspacken (x = extract) |
tar tvf archiv | Archiv ansehen |
Um z. B. alle Dateien des Verzeichnisses 'bin' (und dessen Unterverzeichnisse) in einem Archiv zu sichern, geben das Kommando:
tar cvf bin binaeres.tar
tar kann aber auch verwendet werden, um ganze Dateibäume auf der Platte zu verschieben:
(cd Quelldir ; tar cvf - ) | (cd Zieldir ; tar xvfp - )
Damit Übertragungszeit beim ftp gespart wird, kann man nun das Archiv noch komprimieren, wozu bei fast allen Systemen die Kommandos pack/unpack bzw. compress/uncompress existieren:
pack datei
komprimiert die Datei und ersetzt sie durch die komprimierte Version, wobei an den Namen die Endung ".z" angehängt wird. Mit
unpack datei.z
wird die Datei wiederhergestellt.
compress datei
komprimiert die Datei und ersetzt sie durch die komprimierte Version, wobei an den Namen die Endung ".Z" angehängt wird. Mit
uncompress datei.Z
wird die Datei wiederhergestellt, wobei das Ergebnis von compress wesentlich kompakter als bei pack ist.
In letzter Zeit wurde der GNU-Zip zum Standard. Er liefert bessere Ergebnisse als compress und kann auch mit pack oder compress bearbeitete Dateien bearbeiten. Die Aufrufe lauten:
gzip datei
zum Komprimieren und
gunzip datei oder gzip -d datei
zum Dekomprimieren.
Die einzige Konfigurationsdatei für den NFS-Dämon des NFS-Servers ist die Datei /etc/exports mit folgendem Format:
Verzeichnis-Pfad Rechnernamen (Optionen)Links steht das Verzeichnis, das der NFS-Server exportieren soll, beispielsweise /home/public oder /cdrom. In der Mitte stehen die Rechner, die Zugriff auf das Verzeichnis haben sollen, und danach in Klammern die Optionen. ACHTUNG: Beachten Sie das Leerzeichen zwischen den Rechnernamen und den Optionen! Nach jeder Änderung der Datei müssen Sie den Portmapper neu starten und dann den NFS-Dämon neu einlesen lassen.
Die zugriffsberechtigten Client-Rechner können Sie auf drei Arten definieren:
Die gebräuchlichsten Optionen sind:
Im folgenden Beispiel sollen folgende Zugriffe möglich sein: Auf die erste CD-ROM bekommen die Clients nur Lesezugriff. Der Rechner boss.netzmafia.de benötigt root-Zugriff auf /install knecht.netzmafia.de darf ebenfalls auf /install zugreifen, allerdings ohne daß Dateien des Benutzers root als solche erscheinen. Die Home-Verzeichnisse aller Benutzer auf dem Server exportiert der Server an alle Rechner im Subnetz, damit die Benutzer auf allen Clients das gleiche Home-Verzeichnis bekommen:
# /etc/exports # /cdrom *.netzmafia.de (ro) /install boss.netzmafia.de (rw,no-root-squash) \ knecht.netzmafia.de (ro,root-squash) /home 192.168.253.255/255.255.255.255Beim Client werden die Verzeichnisse unter Angabe des Servernamens (durch Doppelpunkt getrennt) eingebunden. Das kann entweder per mount-Kommando geschehen, z. B. durch:
mount nfs.netzmafia.de:/cdrom -t nfs /opt/cdromoder in der Datei /etc/fstab, z. B.:
. . nfs.netzmafia.de:/cdrom /opt/cdrom nfs ro 0 0 nfs.netzmafia.de:/home /home nfs defaults 0 0 . .
![]() |
![]() |