- Protokolldefinition: unter anderem nach RFC 959
- well known port: 21 tcp als Steuerleitung (ftp), 20 tcp als Datenleitung (ftp-data)
- FTP baut eine Session mit Anmeldung auf, und ist damit das Gegenteil eines statuslosen Protokolls wie etwa HTTP.
Client und Server
Ein FTP-Server muss in der Regel installiert werden. Ein Kommandozeilen-Client ist auf Linux- und UNIX-Maschinen meist standardmäßig vorhanden.Server
Wird ein Server auf einer Linux- oder UNIX-Maschine installiert, erhält standardmäßig jeder Benutzer ein FTP-Account. Damit können die Dateien in seinem Heimatverzeichnis gelesen und geschrieben werden.Der Zugang wird über Benutzername und Kennwort geregelt und entspricht denen des Betriebssystems.
Zusätzlich kann ein Konto für den Benutzer anonymous eingerichtet werden. Das erlaubt einen Dateibereich ohne Passwort. Das Passwort wird zwar angefordert, aber ignoriert.
Client
Der FTP-Client wird über den Befehl ftp aufgerufen. Als Argument wird die IP-Adresse oder der Name des Servers angegeben.Ist der Server erreichbar, fragt er in zwei Schritten nach Benutzerkennung und Passwort.
$ ftp 192.168.0.50 Connected to 192.168.0.50. 220 (vsFTPd 3.0.3) Name (192.168.0.50:linux): bob 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>Damit befindet man sich in einer FTP-Kommandozeile und kann Dateien übertragen, Verzeichnisse erstellen, wechseln und löschen sowie Informationen über die Serverseite gewinnen. Mit dem Befehl quit kann man die FTP-Kommandozeile verlassen.
Die Befehle der Kommandozeile lauten:
- put dateiname: kopiere eine lokale Datei auf den Server
- get dateiname: hole eine Datei vom Server
- dir: Lasse alle Dateien auf dem Server anzeigen
- !dir: Lasse alle Dateien auf dem Client anzeigen
- cd verzeichnis: Wechsle auf dem Server in ein Verzeichnis
- lcd verzeichnis: Wechsle auf dem Client in ein Verzeichnis
- binary: Schalte auf Binärübertragung um
- ascii: Schalte auf Textübertragung um. Diese passt automatisch die Zeilenenden an, wenn beispielsweise mit MSDOS (Windows mit CR-LF) und UNIX (Linux mit LF) zwei unterschiedliche Systeme am Start sind.
- active: Schaltet in Aktiv-Modus
- passive: Schaltet in Passiv-Modus
- quit: Verlasse die FTP-Shell
In manchen Fällen wird auch der Browser (Firefox o.ä.) als FTP-Client verwendet, da FTP beim Übertragen von Dateien effizienter ist als HTTP.
Auf der Paketebene
Der Ablauf einer Kommunikation zwischen Client und Server erfolgt durch folgende Pakete:
- Der FTP-Client kontaktiert den FTP- Server an Port 21 über TCP als Steuerverbindung.
- Der Client authentifiziert sich über die Steuerverbindung.
- Der Client sendet Befehle über die Steuerverbindung.
- Wenn der Server den Dateiübertragungsbefehl empfängt, öffnet der Server eine zweite TCP-Datenverbindung über den Port 20 zum Client.
- Nach dem Übertragen einer Datei schließt der Server die Datenverbindung über die Steuerverbindung mit "out of band".
- Der FTP-Server behält den Status bei, die sich auf das aktuelles Verzeichnis und die bisherige Authentifizierung bezieht.
- Ist der Client wunschlos glücklich, meldet er sich ab.
Client-Befehle
Der Client sendet vierbuchstabige Befehle an den Server auf Paketebene.- USER Argument: Benutzername
- PASS Argument: Passwort
- LIST
- RETR Argument: Gewünschter Dateiname
- STOR Argument: Gesendeter Dateiname
- PORT Aktiver FTP-Modus
- PASV Passiver FTP-Modus
Serverantworten
- Statuscode und Phrase (etwa wie in HTTP)
- 331 Username OK, password required
- 125 data connection already open; transfer starting
- 425 Can’t open data connection
- 452 Error writing file
FTP Aktiv- und Passivmodus
Bei der Übertragung der Dateien wird im Standardfall (aktiv) die Anforderung von Dateien zunächst durch den Client initiiert. Das eigentliche Übertragen startet allerdings der Server. Diese Verdrehung der Richtung hat NATs fatale Folgen, die zu Zeiten der Entwicklung des Protokolls nicht abzusehen waren. Darum gibt es bei FTP nun einen Aktiv- und einen Passivmodus.Aktiv
Eine klassische Dateiverbindung läuft auf folgende Weise ab:
Der Client sendet über Port 12345 seinen Befehl an Port 21 des Servers. | --> | |
<-- | Der Server bestätigt den Befehl auf der Kontrollleitung | |
<-- | Der Server sendet Daten über Port 20 auf Port 12345 des Clients. | |
Der Client sendet an Server die Bestätigung. | --> |
Problem: Der Server sendet über den Port 20 scheinbar unaufgefordert an den Client. Das gibt Ärger mit der NAT.
Hintergrund: Heute verwenden die lokalen Netzwerke private IPv4-Adressen, da die internetfähigen IPv4-Adressen Mangelware sind. In der Regel hat nur der Router eine solch wertvolle IPv4-Adresse.
Damit trotzdem alle surfen können, beauftragt jeder PC die NAT im Router mit seiner Anfrage. Die NAT merkt sich den Auftraggeber, sendet die Anfrage mit seiner internetfähigen IP-Adresse an den Server und wartet auf die Antwort.
Erhält die NAT die Antwort, schaut sie in der NAT-Tabelle nach, wer die Anfrage beauftragt hat und schickt ihm das Ergebnis.
Kommt nun der FTP unaufgefordert mit seinen Daten über den Port 20 in die NAT, kann sie keinen Auftraggeber finden und wird das Paket verwerfen.
Passiv
Eine Lösung ist, dass die Initialisierung der Datenübertragung an den Client übergeben wird. Der Server meldet seine Bereitschaft zum Senden und den Port, über den er senden will und der Client fragt noch einmal explizit nach. Damit sind dann sowohl NAT als auch Firewall zufrieden.
Client sendet seinen Befehl an Port 21 des Servers. | --> | |
<-- | Server meldet dem Client, das er über Port 4321 Daten senden will. | |
Der Client initialisiert an Server die Rücksendung von Daten. | --> | |
<-- | Der Server sendet Daten über Porst 4321 an Port 12345 des Clients. |
Das Client-Server-Schema ist wieder hergestellt und die Firewall und das NAT müssen sich nicht aufregen.
Konkurrenz
Für das FTP-Protokoll stehen inzwischen einige Alternativen zur Verfügung.Up- und Download im Internet
Lange Zeit wurde FTP als effizientes Protokoll für den Up- und Download im Internet verwendet. Inzwischen ermöglicht HTTP 2.0 auch die effiziente Übertragung von binären Dateien ohne ein Umwandlung in Base64. HTTPS bietet überdies die Mögichkeit einer Verschlüsselung.Ebenfalls auf HTTP basieren Cloud-Lösungen wie beispielsweise NextCloud. Diese ermöglichen die sichere Auslagerung ohne Einbindung in das lokale Dateisystem.
scp, rsync Kopierbefehle über das Netzwerk
Zur Ablösung des Fernwartungstools telnet, mit dem man eine Shell auf einem fremden Rechner starten konnte, wurde SSH entwickelt. Dieses sorgt für eine Verschlüsselung und eine flexible Authentifizierung sowohl per User und Passwort als auch per Zertifikat. Darüber hinaus wird auch der Austausch des Zielrechners bemerkt (Man in the Middle-Angriff).Mithilfe der SSH-Bibliothek ist es auch möglich, Dateien über das Netzwerk zu übertragen. Diese Übertragung kann die gleichen Sicherheitsstandards erfüllen. Dazu gibt es die folgenden Werkzeuge:
- scp: Kopie von Dateien, Syntax analog zu dem UNIX-Befehl cp
- rsync: effiziente Synchronisation von Dateibeständen
- sftp: FTP-Ersatz
- tar: Das Datensicherungstool nutzt SSH, um die Dateien auf einem fremden Host zu sichern, ohne dass eine Dateisystemeinbindung erfolgen muss.
Windows-Netzwerk SMB
Im lokalen Netzwerk (LAN) wird oft SMB, auch bekannt als SAMBA oder Windows-Netzwerk eingesetzt.Dabei wird ein lokales Verzeichnis vom Server freigegeben, das vom Client als Dateisystem eingebunden wird, beispielsweise als Netzwerklaufwerk.
Das Einbinden als Dateisystem birgt ein hohes Risiko. Verschlüsselungstrojaner (Ransomvirus) zerstören alle erreichbaren Festplatteninhalte, auch Netzwerklaufwerke. Ist ein Netzwerkdateisystem zum Zeitpunkt der Aktivität eines Ransomvirus eingebunden, werden auch dessen Dateien verschlüsselt.
Gegenmaßnahmen
- Einschränkungen des Zugriffs durch Rechtebeschränkung
- Einbinden nur für die Dauer der Benutzung
- Gar keine Einbindung, sondern Verwendung von scp oder rsync
NFS, UNIX/Linux-Gegenstück zu SMB
Um Dateien zu zentralisieren bietet NFS im Gegensatz zu SMB alle Möglicheiten eines POSIX-Dateisystems. Das ist für UNIX-Derivate wie Linux, Mac oder BSD hochinteressant.Die Sicherheitsrisiken beim Einbinden einer NFS-Freigabe entsprechen weitgehend denen, die bei SMB genannt wurden.