File Transfer Protocol

18.10.1999 von Holger Reibold
FTP ist eines der ältesten und auch solidesten Protokolle, die heute im Internet eine tragende Rolle spielen. Seine wichtige Aufgabe: Die Regelung des Dateitransfers zwischen zwei Rechnern.

Fast jede Website bietet Dateien zum Download an. Ob neue Browser, Testsoftware oder MP3: In den meisten Fällen stellt nicht ein HTTP-, sondern ein FTP-Server die Dateien zum Download bereit. So ist es nicht verwunderlich, dass der FTP-Traffic etwa die Hälfte des gesamten Datenaufkommens im Internet ausmacht.

FTP kann auf eine lange Entwicklungsphase zurückblicken. Der erste RFC 114 stammt aus dem Jahre 1971. Die heute noch gültige Spezifikation RFC 959 wurde 1985 veröffentlicht.

Seit dem hat sich an den grundlegenden Übertragungsmechanismen nichts geändert.

Das Prinzip

Das zu Grunde liegende Modell ist einfach: FTP erzeugt zwischen Server und Client zwei Verbindungen. Die Erste dient ausschließlich der Übermittlung von FTP-Kommandos und den zugehörigen Antworten, die Zweite als Datenkanal. Der so genannte User Protocol Interpreter initiiert dabei die Verbindung, sendet seine Befehle an den Server und bearbeitet dessen Antworten. Über den Steuerkanal tauschen beide Seiten Kommandos aus, die dann eine Datenübertragung einleiten. Die Kontrollverbindung folgt dem Telnet-Protokoll. Dabei werden in den Standardeinstellungen TCP-Port 21 für die Kommandos, und TCP-Port 20 für die Datenübertragung genutzt. Die FTP-Kommandos bestimmen zudem die Parameter für die Datenverbindung, beispielsweise Port- oder Transfer-Modus.

Leitet der Server den Datentransfer ein, gehorcht der Datentransferprozess des Clients den Befehlen des Servers, bis die Daten vollständig übertragen wurden. FTP sieht dabei auch simultane Verbindungen vor. Die Kontrollverbindung muss während dem Datentransfer bestehen bleiben.

Ablauf einer FTP-Verbindung

Eine FTP-Verbindung durchläuft vier Phasen: Authentifizierung des Benutzers, Aufbau einer Kontrollverbindung, Aufbau eines Datenkanals und Beenden der Verbindung.

Zunächst baut der Client die Verbindung zum FTP-Server auf. Alle FTP-Implementierungen müssen dabei die Standard-Ports 20 und 21 unterstützen. Verbindungen zu Nicht-Standard-Ports darf nur die Client-Seite initiieren.

Sobald die Verbindung zu Stande gekommen ist, gibt der FTP-Server Informationen über das System aus. Der Server verlangt vom Client die Übermittlung der Benutzerkennung, nimmt diese vom Client entgegen und fordert ihn dann auf, das Passwort zu übermitteln.

Eine Besonderheit stellt anonymes FTP dar: In diesem Fall ist der Zugriff für alle Anwender freigeschaltet. Als Username wird dabei immer "anonymous" verwendet, das Passwort ist frei wählbar. Es gehört jedoch zum guten Stil, hier seine E-Mail-Adresse einzugeben.

Nach erfolgreicher Anmeldung kann sich der Client in der Verzeichnisstruktur bewegen, Verzeichnisse oder Dateien löschen, und Daten zwischen beiden Rechnern übertragen. Alle Aktionen sind dabei abhängig von den Rechten des jeweils eingeloggten Benutzer.

Nachdem der Client alle gewünschten Aktionen ausgeführt hat, schließt der Client die Verbindung. Auch der Server kann Verbindungen trennen, wenn beispielsweise die Kontrollverbindung abreißt.

Resuming

Bei der Übertragung von Dateien ist besonders wichtig, dass diese ohne Verlust auf Empfängerseite ankommen. Diese Aufgaben übernimmt das TCP-Protokoll. Eine Fehlerkontrolle durch FTP findet nicht statt. Dennoch ist in der FTP-Spezifikation ein Mechanismus vorgesehen, der die Wiederaufnahme von unterbrochenen Übertragungen ermöglicht. Diese Funktion wird häufig als Resuming bezeichnet.

Die Restart-Markierungen sind in der Headerbeschreibung der einzelnen Datenpakete abgelegt. Versucht nun der Client, den Transfer über das Restart-Kommando wieder aufzunehmen, so antwortet der FTP-Server mit einem Restart Marker Reply. Der Server übermittelt die zuletzt gesetzte Markierung. Beide gleichen die Markierungen über das MARK-Kommando ab. Anschließend nimmt der Client meist über den RETRIEVE-Befehl die Übertragung wieder auf.

Übertragungsarten

Für die Übertragung von Dateien sind drei Transferarten vorgesehen: Stream-, Block- und Compressed-Modus. Jeder Datentransfer wird nach der vollständigen Übertragung durch eine End-of-File-Markierung (EOF) abgeschlossen. Bei der Übertragung im Block- oder Compressed-Modus kommt nach jedem Datensatz die End-of-Record-Markierung (EOR) zum Einsatz.

Der Stream-Modus überträgt die Daten wie an einem Strang vom FTP-Server zum Client beziehungsweise in umgekehrter Richtung. In der Praxis ist der Block-Modus weitaus wichtiger. Hierbei teilt der FTP-Server die angeforderte Datei in Datenblöcke ein. Jeder Datenblock ist mit einem Header versehen, der unter anderem Angaben über die Gesamtlänge der Daten enthält. Besondere Bedeutung erhalten die Header-Informationen bei der Resuming-Funktion: Im Header sind die für die Wiederaufnahme der Datenübertragung notwendigen Restart-Markierungen enthalten.

Der Compressed-Modus überträgt Daten in komprimierter Form. Er dient insbesondere der Reduzierung von großen Datenmengen, setzt aber höhere Ansprüche an Client und Server, da die Daten auf beiden Seiten zunächst komprimiert und nach der Übertragung dekomprimiert werden müssen.

Der Compressed-Modus versucht die Informationen in optimierter Form zu übermitteln: Die Kompression besteht im Wesentlichen aus einer Run-Length-Kodierung: Identische, direkt aufeinander folgende Bytes fasst der Algorithmus zu einer zwei-Byte-großen Information zusammen. Sich nicht wiederholende Daten bleiben von diesem Mechanismus unberührt. Eine stärkere Kompression, zum Beispiel nach dem LZW-Verfahren, ist nicht vorgesehen.

Zudem unterscheidet man zwischen drei Transfermodi: ASCII, EBCDIC und Image. Der ASCII-Modus dient insbesondere der Übertragung von Textdateien. Alle FTP-Implementierungen müssen den ASCII-Modus als Standardmodus unterstützen. EBCDIC (Extended Binary Communication Data Interchange Code) verwendet im Unterschied zum ASCII-Modus lediglich einen anderen Zeichensatz. Für den Transfer von Binärdaten ist der Image-Mode vorgesehen. FTP-Implementierungen einigen sich vor der Übertragung auf einen dieser Modi.

Sicherheit bei FTP

Die FTP-Spezifikation sieht bis auf die einfache Benutzer-Authentifizierung, die Kennung und Passwort unverschlüsselt zwischen Client und Server übermittelt, keinerlei Sicherheitsfunktionen vor.

Um der Vielzahl von Sicherheitsrisiken zu begegnen, die den Dateitransfer berühren, wurden sicherheitsspezifische Erweiterungen eingeführt. Sie sind in RFC 2228 (FTP Security Extensions) definiert. Diese Erweiterungen stellen vielfältige Sicherungsfunktionen zur Verfügung, besonders für die Benutzer-Authentifizierung, Integrität, Vertraulichkeit der Daten- und Kontrollkanäle durch Verschlüsselung von Befehlen, Replys und der Daten.

Im Mittelpunkt der Sicherheitserweiterungen steht die Benutzer-Authentifizierung. Sie beginnt damit, dass der Client dem Server mitteilt, welchen Sicherheitsmechanismus er verwenden will. Dazu wird der AUTH-Befehl verwendet. Der Server akzeptiert diesen Mechanismus oder aber lehnt ihn ab, wenn er diesen nicht unterstützt. Der Client kann dabei mehrere Mechanismen testen, um eine von beiden Seiten unterstützte Methode zu finden. Je nach Sicherheitsprotokoll benötigt der Server weitere Informationen vom Server. Diese protokollabhängigen Informationen überträgt der Client mit dem ADAT-Befehl an den Server. Je nach Protokoll wird der ADAT-Befehl mehrfach verwendet, so lange, bis alle nötigen Parameter zwischen Client und Server ausgetauscht sind.

Dieses Aushandeln dient lediglich der Abstimmung der implementierten Sicherungsfunktionen. Verfügt beispielsweise der FTP-Server über einen RSA -Schlüsselpaar, der Client aber nicht, so kann zwar der Client den Server authentifizieren, der Server den Client dagegen nicht. Haben sich beide Seiten auf ein gemeinsames Verschlüsselungssystem geeinigt, können auch sichere Übertragungskanäle für die Übermittlung der Steuerkommandos und der Daten erzeugt werden.

FTP-Befehle

FTP-Client und FTP-Server tauschen Text-Basierte Kommandos aus. Nachfolgend finden Sie eine Auflistung der wichtigsten FTP-Befehle.

Befehle für die Zugriffskontrolle

USER Username USER ist in den meisten Fällen der erste Befehl nachdem die Verbindung zwischen Client und Server aufgebaut ist. Der Server benötigt diese Information, damit der User auf das Dateisystem zugreifen kann. In der Regel fordert der Server vom Client anschließend die Übermittlung des Passwortes.

PASS Passwort Mit diesem Befehl sendet der Client das zum Usernamen gehörende Passwort zum Server. Dieses Kommando setzt immer die vorhergehende Übermittlung einer Benutzerkennung mit dem USER-Befehl voraus. In RFC 959 ist kein Mechanismus für die gesicherte Übermittlung des Passwortes vorgesehen. Solche Funktionen sind erst in den FTP Security Extensions definiert.

ACCT Account Manche Sites verlangen die Angabe des Account-Namen, wenn beispielsweise bestimmte Aktionen, wie das Speichern von Daten, auf Serverseite durchgeführt werden sollen. Der Befehl sendet den Account-Namen des Benutzers nochmals an den Server. Das Kommando hängt nicht notwendigerweise mit dem Kommando USER zusammen.

AUTH (Authentication/Security Mechanism) Dient der Authentifizierung von Client und Server. Beide Seiten verständigen sich mit dem Befehl über die unterstützten Sicherheitsmechanismen.

ADAT (Authentication/Security Data) Über diesen Befehl tauschen Client und Server für einen Sicherheitsmechanismus notwendige Daten aus.

PBSZ (Protection Buffer Size) Legt die maximale Größe der verschlüsselten Datenblöcke fest.

PROT (Data Channel Protection Level) Dieser Befehl zeigt die Art des Datenkanalschutzes an.

CCC (Clear Command Channel) Hebt die Sicherheitsmechanismen für den Kontrollkanal auf.

SMNT (Structure Mount) Über diesen Befehl kann der Benutzer eine Dateisytemstruktur erzeugen, ohne ein erneutes Login durchführen zu müssen.

REIN (Reinitialize) Dieses Kommando hebt die Berechtigung des Users auf. Nach dem Befehl ist ein erneuter Login mit USER und PASS notwendig. Bereits gestartete Datentransfers sind von dem Befehl nicht betroffen.

QUIT (Logout) Beendet die Verbindung zwischen Client und Server. Wie bei REIN gilt auch hier: Aktuelle Datentransfers bleiben aktiv. Nach dem Ende eines Downloads schließt der Server automatisch die Verbindung.

Servicebefehle

RETR (Retrieve)Überträgt eine Datei von Server zum Client. Status und Inhalt der Quelle bleiben unberührt.

STOR (Store)Mit diesem Befehl nimmt der Server eine Datei entgegen und legt sie Server-seitig ab. Befindet sich die Datei bereits auf dem Server, so wird die bereits existierende überschrieben. Andernfalls wird eine neue Datei erzeugt.

ALLO (Allocate) Mit diesem Befehl reserviert der Client beim Server für den folgenden Datentransfer ausreichend Speicherplatz.

REST (Restart) Mit diesem Befehl setzt der Server eine Markierung, die zum erneuten Datentransfer verwendet werden kann.

ABOR (Abort) Der Server bricht alle zuvor entgegengenommenen Servicebefehle ab, auch die damit verbundenen Datenübertragungen.

CWD (Change Working Directory) CWD erlaubt es dem Benutzer, in ein anderes Verzeichnis zu wechseln. Die Funktionsweise ist dabei analog zum DOS/Unix CD-Befehl.

DELE (Delete) Löscht eine Datei auf dem Server.

RMD (Remove Directory) Löscht ein Verzeichnis auf dem Server.

MKD (Make Directory) Erzeugt Server-seitig ein Verzeichnis.

PWD (Print Working Directory) Gibt die Bezeichnung des aktuellen Verzeichnis aus.

LIST (List) Übermittelt eine Liste der Dateien im aktuellen Verzeichnis an den FTP-Client.

NLST (Name List) Sendet eine Verzeichnis-Listing an den Client.

SYST (System) Mit diesem Befehl kann das Betriebssystem des FTP-Servers abgerufen werden.

STAT (Status) Übermittelt den Status eines Systems.

HELP Gibt die Hilfetexte des Servers aus.

(mhe)