- inet-Dämon
- File Transfer Protocol (FTP)
- Anonymer ftp-Server
- TFTP, schnell und vertrauensvoll
- Terminaldienst (telnet)
- r-Kommandos
- Wenn Sicherheit vorgeht: die ssh und scp
inet-Dämon
inetd reduziert die Zahl der Dämonen
Die meisten Serverprozesse einer UNIX-Maschine werden relativ selten benötigt. Soll deren Dienst aber angeboten werden, muss ein Prozess ständig den Port abhorchen, ob Anfragen vorliegen. Jeder dieser Prozesse benötigt Hauptspeicher. Zwar wird der Prozess bei Inaktivität bald in den Swapbereich verschoben, aber auch dieser ist nicht unerschöpflich. Zur Lösung dieses Problems gibt es den Internet-Dämon, der mehrere Ports parallel abfragt und sobald auf einem dieser Ports eine Anfrage vorliegt, den entsprechenden Server startet.
/etc/inetd.conf
Gesteuert wird inetd durch die Datei /etc/inetd.conf. Hierin stehen die überwachten Dienste und die zugehörigen Serverprogramme. Jede Zeile hat den folgenden Aufbau:
Name Typ Protokoll Wartestatus UserID Server Argumente |
Dabei bedeuten
- Name
- Name des Dienstes wie er in der /etc/services steht.
- Typ
- stream, dgram, oder raw
- Wartestatus
- Hier kann wait oder nowait stehen. Es legt fest, ob eine neue Anfrage des Dienstes wartet, bis die vorherige Anfrage ausgeführt ist. Dies würde die die Parallelität der Anfragen beschränken.
- UserID
- meist ist die UserID, unter der der Dämon läuft root. Bei finger beispielsweise nobody.
- Server
- Dateiname inkl. Pfad des Serverprozesses
- Argumente
- Kommandozeile des Serveraufrufs
Hier als Beispiel die Auszüge aus der inetd.conf für ftp und telnet:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd |
Dienst stoppen durch Auskommentieren
Will man aus Sicherheitsgründen keinen Zugang für telnet oder ftp, reicht es aus, den Eintrag in der inetd.conf mit einem Hashzeichen (#) auszukommentieren. Änderungen in der inetd.conf liest der inetd ein, wenn man ihm das Signal SIGHUP sendet.
gaston# ps -ax | grep inetd 566 ? S 0:00 /usr/sbin/inetd gaston# kill -SIGHUP 566 |
File Transfer Protocol (FTP)
Dateitransfer, nicht Verzeichnisdienst
Wie der Name sagt, dient FTP dem Übertragen von Dateien. Es ist aber nicht ein Verzeichnisdienst wie NFS oder im PC-Bereich Novell oder NT-Server, bei dem der Verzeichnisbaum des entfernten Rechners in den eigenen Baum eingebunden wird. Beim FTP werden einzelne Dateien explizit per Befehl übertragen.Der Client
Login
Für FTP gibt es einige Clients mit einer grafischen Oberfläche. Hier soll aber das Kommandozeilentool ftp mit seinen Kommandos interessieren. Den FTP-Client startet man es unter Angabe der Internetnummer oder des Hostnamen. Es führt zunächst einen normalen Login aus. Der Anwender wird also aufgefordert, Benutzernamen und Passwort einzugeben. Danach ist man auf dem fremden Rechner angemeldet und erhält einen eigenen ftp-Prompt.
silver> ftp gaston Connected to gaston.willemer.edu. 220 gaston.willemer.edu FTP server (Version 6.5/OpenBSD, linux port 0.3.2) ready. Name (gaston:arnold): arnold 331 Password required for arnold. Password: 230- Have a lot of fun... 230 User arnold logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> quit 221 Goodbye. silver> |
Kommandos
Vom ftp-Prompt kann man wie auf einer Shell verschiedene Kommandos geben.
- Befehle zum Manövrieren auf dem Zielrechner
- quit oder bye
- Das wichtigste zuerst: Mit quit kommt man wieder aus ftp heraus.
- cd
- Man kann die Verzeichnisse auf der fernen Seite wechseln. Will man das Verzeichnis wechseln, in dem man sich lokal bewegt, gibt man den Befehl lcd.
- ls oder dir
- Anzeige der Dateien im aktuellen Verzeichnis.
- pwd
- Anzeigen, in welchem Verzeichnis man sich befindet.
- ! Befehl
- Damit ruft man eine Shell auf dem lokalen Rechner für einen Befehl.
- Dateien zwischen diesem und dem Zielrechner tauschen
- get Datei
- Damit wird eine Datei vom fremden Rechner geholt. Der Dateiname muss exakt eingegeben werden, es gibt keine Wildcards.
- put Datei
- Eine Datei wird auf den fremden Rechner geschoben. Auch hier ist ein exakter Dateiname erforderlich.
- mget Dateien
- Das m bedeutet multi. Man kann * und ? verwenden, um mehrere Dateien anzugeben, die geholt werden sollen. Nach jeder einzelnen Datei werden Sie gefragt, ob diese ebenfalls geladen werden soll.
- mput Dateien
- Hiermit werden mehrere Dateien auf den fremden Rechner geschoben, sonst wie mget.
- Dateibearbeitung auf dem Zielrechner
- delete Dateiname
- lösche Datei
- rename Original Ziel
- benenne Datei um
- mkdir Verzeichnisname
- erzeuge ein Verzeichnis
- rmdir Verzeichnisname
- lösche ein Verzeichnis
- Optionen
- image oder ascii
- ftp ist standardmäßig im ASCII-Modus. Er stellt fest, welches Textformat auf der anderen Seite ist, und passt beispielsweise die Dateiendemarken an. Mit image (oder binary) schaltet man diese Anpassung ab, die beispielsweise bei Datenbanken oder Programmen zerstörerische Folgen hat.
- prompt
- Damit kann man die Nachfrage bei mput und mget unterbinden. Wenn Sie mit einer Maske mehrere Dateien mit mput oder mget bearbeiten, fragt ftp nach jeder Datei, ob die auch übertragen werden soll. Diese Abfrage schaltet prompt ab. Ein weiterer Aufruf schaltet sie wieder an. Alternativ kann man auch ftp mit der Option -i starten.
Daneben kennt ftp noch eine Reihe von Kommandos, die man natürlich in der Manpage findet. Letztlich reichen die vorgestellten Kommandos, um so ziemlich jeder Situation gewachsen zu sein.
time out
Eine Sitzung, über die keine Daten mehr fließen, wird nach 900 Sekunden automatisch beendet.Mit der Option -P kann ein anderer Port angesprochen werden. Das ist besonders wichtig bei dem Zugriff über Proxies.
Automatisieren des Einloggens
~/.netrc
In manchen Fällen soll der Austausch von Dateien automatisiert werden, also beispielsweise durch Programme oder Skripten gesteuert und auch zeitversetzt durch cron oder at gestartet werden. In solchen Situationen stört die Passwortnachfrage. Durch eine Datei namens .netrc im Heimatverzeichnis kann das Einloggen automatisiert werden. Dabei enthält diese Datei in jeder Zeile die Einträge:
Host Benutzerkennung Passwort |
Zuerst wird der Host angegeben. Wird dieser Host als Argument des ftp genannt, gilt diese Zeile. Es wird dann automatisch die angegebene Benutzerkennung verwendet und nicht wie sonst, die gleiche, die auf dem lokalen Rechner verwendet wird. Der Eintrag des Passworts ist optional. Ist ein Passwort eingetragen, muss die Datei mit chmod auf 600 gestellt werden. Sie darf also von niemandem gelesen werden können außer dem Besitzer.
Anonymes ftp
Die ftp-Server im Internet erfordern üblicherweise keine Zugangsberechtigung, sondern lassen das so genannte anonyme ftp zu. Dazu meldet man sich mit anonymous an. Als Passwort pflegt man die eigene E-Mail Adresse anzugeben.Konfiguration des ftp-Servers
Der tandardmäßig auf jedem UNIX System vorzufindende ftp-Server heißt ftpd und wird normalerweise über den inetd gestartet. Man kann ihn aber auch als Dämon aus den rc-Dateien starten. Dann muss ftpd allerdings mit der Option -D aufgerufen werden.
Abklemmen des ftp-Servers
Da ein ungeschützter ftp-Zugriff durchaus sicherheitskritisch ist, kann der Zugang beschränkt werden. Man kann durch Auskommentieren des ftp-Dienstes in der inetd.conf den FTP komplett abschalten.
Abschalten mit Begründung
Existiert eine Datei namens /etc/nologin, wird diese einem Client angezeigt und dann der Zugriff verweigert. Dies ist ideal für kurzfristig abgeschaltete ftp-Zugänge oder wenn man auf einen anderen Rechner verweisen will.
Benutzerausschluss
Einzelne Benutzer können ausgeschlossen werden, indem man sie in der Datei /etc/ftpusers aufführt. Trotz der anders lautenden Intention stehen hier die Anwender, die keinen Zugriff auf den ftp-Server haben sollen.Anonymer ftp-Server
Der normale ftp-Zugang erfolgt über das Anmelden als Benutzer des Systems. Im Internet gibt es viele ftp-Server, die öffentlich Dateien zur Verfügung stellen. Man spricht von anonymem ftp, weil man sich mit der Kennung >>anonymous<< anmeldet und seine E-Mailadresse als Passwort eingibt. Letzteres ist allerdings freiwillig und nicht zwingend.
Ein Rechner kann nur entweder ein anonymes oder reguläres ftp anbieten. Ist ein anonymer Server aktiv, kann man sich nicht mehr über das normale ftp einwählen. Ein solcher Zugriff wird abgewiesen mit dem Hinweis, dass nur anonymes ftp zugelassen ist.
Der Benutzer ftp
Um ftpd als anonymen Dienst zu starten, wird der ftp-Dämon in der inetd.conf oder in der rc-Datei mit der Option -A gestartet. Es muss außerdem ein Benutzer namens ftp auf dem System existieren. Beim Login als >>anonymous<< werden die Benutzer in dessen Heimatverzeichnis gesetzt. Dort wird intern ein chroot aufgerufen, der verhindert, dass der Benutzer andere Bereiche des Verzeichnisbaums erreichen kann.
# /etc/inetd.conf ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -A # |
Es gibt noch andere FTP-Server, wie beispielsweise der WuFTP-Server, der vor allem sicherheitskritische Einstellungen ermöglicht.
TFTP, schnell und vertrauensvoll
Das Trivial File Transfer Protocol wird auch manchmal Trusted FTP genannt. Der Grund liegt darin, dass es keine Authentifizierung verlangt. Der Zugriff ist nur auf Dateien erlaubt, deren Rechte auf dem System den Zugriff für alle erlauben.
Auf den meisten Systemen ist TFTP in der inetd.conf abgeschaltet. Seine Hauptbedeutung erlangte TFTP im Zusammenhang mit Workstations, die keine eigene Festplatte besaßen, den >>diskless workstations<<. Diese haben per TFTP ihre Grunddaten von anderen Maschinen bezogen. Heutzutage findet man selten solche Geräte und aus Sicherheitsaspekten ist TFTP wenig ratsam.
Der größte Unterschied zu FTP ist eigentlich in der Realisierung. TFTP basiert auf udp, während FTP ein tcp Dienst ist.
Terminaldienst (telnet)
Mit dem Programm telnet kann man eine Terminalsitzung über das Netz auf einem fernen Rechner aufbauen. Aus Sicht des Anwenders unterscheidet sich solch eine Sitzung kaum von einer Terminalsitzung.
telnet überträgt im Klartext.
Da telnet alle Tastendrücke und Bildschirmausgaben direkt über das Netz überträgt, werden auch Passwörter im Klartext über das Netzwerk übertragen. In sicherheitskritischen Umgebungen werden darum Zugriffe per telnet ausgeschlossen. Statt dessen wird ssh (secure shell) verwendet, das die gleiche Leistung bringt, nur dass die übertragenen Daten verschlüsselt werden.telnet-Client
Als Argument wird \verb+telnet+ die Internetnummer oder der Hostname des Zielrechners angegeben. Auf dem Zielrechner wird ein login wie bei einem normalen Terminal gestartet. Nach der erfolgreichen Anmeldung wird auf dem Zielrechner eine Shell eröffnet und der Benutzer kann so arbeiten, als hätte er eine Terminalsitzung auf der fremden Maschine eröffnet.
Funktionstasten unzuverlässig
telnet leidet unter dem gleichen Problem wie die Terminals, nämlich dass die Terminalemulationen leider auf den Funktionstasten immer wieder versagen. In vielen Fällen werden Terminals emuliert, die gar keine Funktionstasten hatten, als sie gebaut wurden. Wie beim Terminal auch, wird die Terminalemulation über die Umgebungsvariable TERM und die Einträge in der termcap oder der terminfo gesteuert.
Testen textorientierter Server
Mit telnet kann man sehr gut textorierentierte Protokolle testen, wie sie von den meisten Internet-Services verwandt werden (beispielsweise HTTP oder NNTP). Beim Aufruf wird hinter dem Hostnamen als weiterer Parameter die Portnummer des Services angegeben und man sieht die Meldungen des Servers im Klartext. Man kann Antworten und so das Protokoll verfolgen.Die Sitzung wird durch das Ausloggen auf dem fremden Rechner beendet.
telnet-Dämon
/etc/securetty
In der Datei /etc/securetty wird hinterlegt, welche Terminals so sicher sind, dass sich auch der Anwender root dort einloggen darf. Im Normalfall werden dort die virtuellen Terminals, die telnet verwendet dort nicht aufgeführt. Aus diesem Grund ist es meist nicht möglich, sich als root per telnet direkt anzumelden. Statt dessen verwendet der Administrator eine >>zivile<< Kennung und wechselt per su zum root.
Abschalten des Dämons
Auch der telnet-Server wird über den inetd gestartet. Dementsprechend gibt es auch einen Eintrag in der inetd.conf. Soll es keinen Zugriff per telnet auf die Maschine mehr geben, wird der Eintrag einfach auskommentiert, indem ein # an den Anfang der Zeile gesetzt wird.
Da das ständige Authentifizieren beim Anmelden innerhalb eines LANs (Local
Area Network) in der
Praxis sehr störend ist, gibt es die Möglichkeit, direkt auf die ferne
Maschine zuzugreifen. Dabei erteilt der Anwender einem Benutzer einer anderen
Maschine die Berechtigung, seinen Zugang zu benutzen. Er erteilt diese
Berechtigung, indem er eine Datei namens .rhosts anlegt und in ihr
die Computer und Benutzer aufzählt, die ein direktes Zugriffsrecht über
die Kommandos rcp, rlogin und rsh haben sollen.
Die Befehle fragen nach der korrekten Konfiguration nicht mehr nach dem
Passwort. Wie immer stehen Bequemlichkeit und Sicherheit umgekehrt
proportional zueinander. Darum sind diese Protokolle auch sinnvollerweise
im LAN und nicht im Internet einzusetzen. Die drei r-Kommandos rcp
(remote copy), rsh (remote shell) und rlogin (remote login)
entstammen dem BSD und sind auf allen UNIX-Derivaten zu finden.
Da der Anwender vielleicht einen anderen Benutzernamen auf dem fremden Rechner
haben könnte, ist es auch möglich, hinter dem Rechnernamen noch eine
Anwenderkennung aufzuführen. Jeder eingetragene Benutzer darf von dem fremden
Rechner ohne Passwort
auf dem lokalen Rechner einloggen und darf frei Daten hin und her kopieren.
r-Kommandos
Die Datei .rhosts und hosts.equiv
~/.rhosts
Die r-Kommandos sollen Anwendern, die auf zwei Hosts ein Benutzerkonto haben,
erlauben, sich selbst den direkten Zugang zu den eigenen Ressourcen auf dem
anderen Rechner zu erlauben. Dazu legt man im Wurzelverzeichnis des eigenen
Heimatverzeichnisses eine Datei namens .rhosts an. Sie darf nur für
den Besitzer schreib- und lesbar sein.
In dieser Datei stehen die Namen der Rechner, von denen ein Zugriff über
rlogin, rcp oder rsh auf diesen Rechner erlaubt
sein soll.
/etc/hosts.equiv
Alternativ kann der Systemadministrator in der Datei /etc/hosts.equiv
Maschinen aufführen,
denen er eine pauschale Gleichstellung bzgl. rlogin und rcp
einräumen möchte. Dabei werden auch die Drucker freigegeben.
Auch diese Datei darf nur Schreib- und Leserecht für den Besitzer haben und muss
root gehören. Eine solche pauschale Freischaltung wird aber normalerweise nur
dann gemacht, wenn beispielsweise mit zwei parallelen Servern gearbeitet wird
oder wenn man im privaten Netz ohne Internetzugang arbeitet.
Beispiel für eine /etc/hosts.equiv:
+gaston willemer +idefix + pm7500 +@awfriends |
Die erste Zeile erlaubt dem Anwender willemer auf gaston den freien Zugriff ohne Passwort. In der zweiten Zeile wird allen Anwendern von idefix der freie Eintritt gestattet.
Die dritte Zeile enthält einen gravierenden Fehler: Hier steht ein Leerzeichen zwischen dem Plus und dem pm7500. Das einzelne + wird so interpretiert, dass jeder(!) Rechner freien Zugriff hat. Dass der alleinstehende pm7500 dieses Recht auch hat, versteht sich dann von selbst.
In der vierten Zeile wird der Netzgruppe awfriends ein solcher Zugriff eingeräumt. Sie muss in der Datei /etc/netgroup definiert sein.
In allen Fällen müssen die Rechnernamen natürlich in der /etc/hosts stehen oder durch einen Namensdienst aufgelöst werden.
Das Sicherheitsproblem
Das Risiko liegt nicht in erster Linie darin, dass neben dem Administrator auch Benutzer Rechte weitergeben können. Denn letztlich ist das Eintragen eines Rechnernamens in der .rhosts immer noch wesentlich besser als die Weitergabe des Passwortes. rlogin hat sogar gegenüber telnet den Vorteil, dass das Passwort bei der Kommunikation nicht über das Netz geht. Es kann also nicht abgehört werden. Das kleinere Problem besteht darin, dass wenn ein Zugang des Benutzers geknackt ist, die anderen Zugänge auch offen sind. Das hört sich schlimmer an als es ist. Normalerweise verwendet der Benutzer auf verschiedenen Rechnern des LAN vermutlich sowieso die gleichen Passwörter und wenn der Eindringling einen Zugang kennt, kennt er alle. Problematischer ist der Angriff mit einer gefälschten IP-Nummer. Ist in der .rhosts ein Notebook oder ein Rechner eingetragen, der nicht ständig im Netz steht, kann ein Angreifer seinerseits mit einem Notebook mit eben dieser IP-Nummer ins Netz gehen und sich direkt einloggen ohne das Passwort zu kennen.Remote Copy (rcp)
Das Programm rcp soll das Kopieren über Rechnergrenzen hinweg mit der Einfachheit eines normalen Kopierbefehls realisieren. Der Syntax ist sehr eng an den cp angelegt.
rcp Optionen Quelle Ziel |
Lediglich die Argumentbeschreibung ist etwas verändert. Ist Quelle oder Ziel auf einem anderen Rechner, wird vor den Pfadnamen der Rechnername gefolgt von einem Doppelpunkt gesetzt. Dies kann sowohl bei der Quelle als auch beim Ziel erfolgen. Werden bei Quelle und Ziel fremde Rechner angegeben, ist rcp so clever zu erkennen, dass es effizienter ist, die Kopie direkt zwischen den beiden Rechnern auszutauschen, ohne den Umweg über den Auftraggeber zu gehen.
rcp idefix:/etc/hosts* ./test |
Mit diesem Befehl werden vom Rechner idefix alle Dateien, die auf die Maske /etc/hosts* passen, an das im aktuellen Verzeichnis liegende test kopiert. test muss natürlich ein Verzeichnis sein, da zu erwarten steht, dass der Befehl mehrere Dateien kopieren wird. Werden die Dateien auf dem fremden Rechner nicht mit vollständigem Verzeichnis angegeben, wird vom Heimatverzeichnis auf der anderen Seite ausgegangen.
Server ist rshd
rcp verwendet als Serverdienst den rshd, also eine Remote Shell. Über diese wird auf der Gegenstation der rcp-Client aufgerufen, mit dem die eigentliche Übertragung stattfindet. Es gibt also keinen rcpd.rlogin
Terminalsitzung
Per rlogin eröffnet man eine Terminalsitzung auf dem fremden Rechner unter der eigenen Benutzerkennung. Voraussetzung ist hier, dass der einloggende Benutzer auf der fremden Maschine ebenfalls eine Benutzerkennung besitzt und die Datei .rhosts auf dem fremden Rechner den aktuellen Computer eingetragen hat. In diesem Fall wird kein Kennwort und kein Passwort ausgetauscht und damit kann es auch nicht abgehorcht werden. Versucht man einen rlogin auf einen nicht entsprechend vorbereiteten Rechner, wird rlogin davon ausgehen, dass die Kennung die gleiche ist wie auf dem aktuellen Rechner und das Passwort für die Zielmaschine anfordern.
Rechnernamen als rlogin
Man kann das Einloggen auf eine fremde Maschine noch weiter vereinfachen, indem man einen Link von rlogin erstellt und dem Link den Namen eines Rechners gibt. rlogin prüft beim Aufruf, ob es unter einem anderen Namen aufgerufen wurde und verwendet dann diesen Namen als Zielmaschine.
silver> ln -s `which rlogin` gaston silver> gaston Last login: Thu Mar 21 09:52:09 from gaston.willemer.edu Have a lot of fun... gaston> |
In der ersten Zeile wird ein symbolischer Link von dem Dateinamen gebildet, den der Befehl which liefert, mit dem Ziel gaston. Dieser zeigt dann auf den vollständigen Pfad von rlogin. Nun kann man gaston aufrufen. Über den symbolischen Link wird rlogin gestartet. Das Programm rlogin stellt fest, dass der Name unter dem es gerufen wurde, gaston lautet und verbindet zu gaston.
Befehlsausführung (rsh, rcmd und rexec)
Das Programm rsh dient dazu, ein Kommando auf einem fremden Rechner ausführen zu können. Auf einigen Systemen hat rsh den Namen rexec. 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.
rsh host Befehl |
rsh versus rlogin
Gegenüber rlogin hat rsh seine Vorteile, wenn Skripten oder einzelne Programme auf anderen Maschinen Prozesse gestartet werden sollen. Das kann beispielsweise im Zusammenhang mit einer Fernsteuerung der Fall sein. Auch wenn ein Login aufgrund begrenzter Lizenzen ein weiteres Mal nicht möglich ist, kann man noch ein paar Abläufe starten.Mit der Option -l kann der Benutzer angegeben werden, unter dessen Kennung der Befehl ausgeführt werden soll.
Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru und dem Nachfolgebuch Arnold Willemer: UNIX - Das umfassende Handbuch |