====== FTP (File Transfer Protocol)-Server ======
Das [[wpde>Ftp]]-Protokoll ist eine effiziente Möglichkeit um Dateien
* vom Server zum Client (Download),
* vom Client zum Server (Upload)
* oder clientgesteuert zwischen zwei Servern (FXP) zu übertragen.
Das Protokoll ist **unverschlüsselt**, es sollte nur für anonymes Herunterladen benutzt werden, da die Zugangsdaten mitgehört werden könnten. Es ist aber eine **verschlüsselte Variante** (FTPs) möglich (mit [[netzwerke:ssl-und-tls|SSL oder TLS]]), die viele gute FTP-Clients beherrschen.
FTP verwendet für die Steuerung und Datenübertragung jeweils separate Verbindungen: Eine FTP-Sitzung beginnt, indem vom Client zum Control Port des Servers (der Standard-Port dafür ist Port 21) eine TCP-Verbindung aufgebaut wird. Über diese Verbindung werden Befehle zum Server gesendet. Die Datenübertragung findet pro Vorgang auf einer separaten TCP-Verbindung statt.
===== Modi =====
Es gibt zwei Modi
* Beim **aktiven FTP** (auch "Active Mode") öffnet der Client einen zufälligen Port und teilt dem Server diesen sowie die eigene IP-Adresse mittels des PORT-Kommandos mit. Dies ist typischerweise ein Port des Clients, der jenseits 1023 liegt, kann aber auch ein anderer Server sein. Die Kommunikation mit Befehlen erfolgt ausschließlich auf dem Control Port.
* Beim **passiven FTP** (auch "Passive Mode") sendet der Client ein PASV-Kommando, der Server öffnet einen Port und übermittelt diesen mitsamt IP-Adresse an den Client. Hier wird auf Client Seite ein Port jenseits 1023 verwendet und auf Server Seite FTP-Port -1, d.h. im Normalfall 20.
===== Verschlüsselung =====
* **explizites SSL**, d. h. das FTP-Programm aktiviert //nachdem// die TCP-Verbindung steht aber //vor// einer Aktion (z. B. Login) erstmal SSL, die Kommunikation läuft ganz normal über Port 21 (Steuerung) bzw. 20 (Daten). Somit werden sensible Daten bei der Übertragung geschützt und FTP-Programme die das nicht können können werden weiterhin unterstützt und können parallel auf den gleichen Ports arbeiten.
Dieser Modus wird von wenigen FTP-Programmen unterstützt, z. B. [[software:Filezilla]].
* **implizites SSL** bedeuted, das gleich während des Verbindungsaufbaus eine [[netzwerke:ssl-und-tls|SSL/TLS]]-geschützte Verbindung aufgebaut wird. Dieser Modus wird von vielen FTP-Programmen unterstützt, z. B. [[software:Filezilla]]. Normalerweise lauscht man bei dieser Variante auf Port 990 TCP.
Siehe auch:
* [[wpde>FTP über SSL]]
* [[http://wiki.vpslink.com/Configuring_vsftpd_for_secure_connections_(TLS/SSL/SFTP)|Configuring vsftpd for secure connections (TLS/SSL/SFTP)]]
===== Links =====
[[http://www.informatik.hu-berlin.de/Infosys/ftp_anleitung.html]]
[[http://www.htl-steyr.ac.at/~morg/pcinfo/network/ftpcommands.html]]
[[http://www.uni-koeln.de/rrzk/ftp/transfer/unix.html]]
===== FTP-Clients =====
FTP-Clients gibt für jedes Betriebssystem in rauen Mengen.
* [[wpde>Filezilla]] ist für Windows, Linux, Mac OS erhältlich und sehr zu empfehlen.
==== Kommandozeile ====
* ftp
* lftp: [[http://www.linux.com/feature/122169|CLI Magic: Quick and easy backup with lftp]]
* ncftp : komfortablerer Textclient als ''ftp''
* [[http://yafc.sourceforge.net/|yafc]] - Bookmarks, Rekursiv hoch- und runterladen, Tab-Vervollständigung auch bei den Remote-Ordner
==== grafische Clients ====
* gftp ([[linux:Gnome]])
* [[software:Filezilla]]
==== webclients ====
FTP-Client die auf einem Webserver laufen.
* [[http://sourceforge.net/projects/phpwebftp/|phpWebFTP]]
* [[http://www.agency4net.de/downloads/webftp-client/|AGENCY4NET WEBFTP]]
===== FTP-Server (daemons) =====
* [[server:vsftp]] Ein kleiner und effizienter FTP Server, bei dem von Grund auf hoher Wert auf die Sicherheit gelegt wurde.
* [[server:pure-ftpd]]: ebenfalls ein guter ftp-daemon, bietet z.B. das einsperren ("chrooten") von Benutzern an.
* proftpd
* [[https://code.google.com/p/pyftpdlib/|Python FTP server library (pyftpdlib)]] - FTP-Implementierung in [[programmiersprachen:Python]].
===== FTP-Mounten =====
aptitude install curlftpfs
* **fallweise** verbinden: curlftpfs USERNAME:PASSWORT@SERVER.tld /media/mein_ftp
* **permanent** hinterlegen:
* Ohne Zugangsdaten:curlftpfs#ftp.host.com /media/mein_ftp fuse rw,uid=1000,user,noauto 0 0
* Mit Zugangsdaten:
# Passwort systemweit lesbar!!!
curlftpfs#USER:PASSWORD@SERVER.tld /media/mein_ftp fuse rw,uid=1000,user,noauto 0 0
* Besser eine Datei ''.netrc'' mit den Zugangsdaten anlegen (im Home-Ordner des Benutzers der mounted):
machine SERVER.tld
login USER
password PASSWORD
==== Links ====
* [[http://www.exanto.de/sftp-und-ftp-unter-linux-mounten.html|SFTP und FTP unter Linux mounten]]
* [[http://curlftpfs.sourceforge.net/|curlftpfs Homepage]]