Burn, FTP, burn!

Dieser Artikel ist im original auf www.pro-linux.de/t_netzwerk/burn-ftp-burn.html erschienen. Vielen Dank an die Autoren Sven Höxter und Stephan Rottmann


Einleitung

Ich verstehe wirklich nicht, warum FTP jenseits von Anonymous FTP-Servern

überhaupt noch verwendet wird, da es mindestens eineinhalb

lebendige und verschlüsselte Alternativen gibt. Die »ganze«

Alternative, die ich sehe ist, FTPS (beschrieben in

RFC 2228), die halbe

ist das SSH-Subsystem SFTP. Ich zähle SFTP nur als eine halbe

Alternative, da es einige Nachteile gegenüber FTPS aufweist. Dieser

Artikel versucht zu erklären, warum ich eine Lösung mit FTPS

einer mit SFTP vorziehe und wie man mit Proftpd einen FTPS-Server

installiert und konfiguriert. Außerdem erwähne ich natürlich

passende Clients, damit der Server auch genutzt werden kann.


FTPS vs. SFTP

Der wohl größte Unterschied zwischen FTPS und SFTP ist, dass FTPS als TLS-Erweiterung für FTP entwickelt wurde, während SFTP als SSH-Subsystem nur einen FTP-ähnlichen Service zur Verfügung stellt, der auf das SSH-Protokoll aufsetzt. Der große Vorteil von SFTP ist, dass es sich einfacher durch NAT-Gateways hindurch verwenden läßt als FTPS. SFTP hat aber auch einige Nachteile:

SSH/SFTP besitzt keine eingebaute chroot-Funktion, so dass ein Workaround mit Programmen wie der scponly shell und scpjailer nötig ist
Selbstgebaute chroots mit scponly und scpjailer sind nur umständlich zu pflegen
chroots benötigen viel Festplattenplatz, wenn man sie für große Userzahlen benötigt
eine Authentifikation über eine SQL-Datenbank oder ein LDAP-System erfordert noch ein zusätzliches PAM-Modul

 

Proftpd ermöglicht mit seinen vielfältigen Modulen die Nutzung von LDAP oder einer SQL-Datenbank zur Authentifizierung und besitzt standardmäßig eine chroot-Funktion mit integriertem ls-Support und vieles mehr. Clientseitig gibt es mehr FTP-Programme, die FTPS implementiert haben als SFTP. Kommandozeilenliebhaber finden mit lftp ein sehr komfortables Clientprogramm (sowohl für FTPS wie auch SFTP - vorausgesetzt, man möchte unbedingt SFTP verwenden), GUI-Nutzer können z.B. kasablanca verwenden. Auch wenn ich selbst kein Windows verwende, möchte ich an dieser Stelle kurz erwähnen, das es auch für Windows eine Reihe FTP-Programme gibt, die FTPS implementiert haben: SmartFTP, FlashFXP, WS_FTP Pro und noch einige andere.

 


3) Installation von Proftpd mit mod_tls

Die meisten aktuellen Linux Distributionen haben Proftpd bereits paketiert und mit mod_tls übersetzt. Um herauszufinden, ob die eigene Proftpd-Version mit mod_tls übersetzt wurde oder nicht, wird Proftpd auf der Kommandozeile mit dem Parameter -l aufgerufen.

 

~$ /usr/sbin/proftpd -l

Compiled-in modules:

mod_core.c

...

mod_tls.c

...

 

Für alle anderen hier der kurze Weg, um Proftpd 1.2.10 aus dem Quellcode mit mod_tls zu übersetzen:

Download Proftpd 1.2.10 Quellcode als Tarball:
ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2

Entpacken: tar -jxf proftpd-1.2.10.tar.bz2

konfigurieren, übersetzen und als Root installieren:
cd proftpd-1.2.10
./configure --with-modules=mod_tls && make
make install (als root)

Die resultierende Binärdatei proftpd sollte sich jetzt in /usr/local/sbin befinden und das Modul mod_tls enthalten. Wer genug Geld hat, kann sich z.B. bei Thawte oder anderen sein SSL-Zertifikat signieren lassen, aber ich denke mal, das ist für die meisten User nicht erschwinglich und für den kleinen FTP-Server zu Hause auch übertrieben. Hier also der kurze Weg, um sich ein selbst signiertes Zertifikat zu erstellen.

Wichtig: In dem Feld für CN (common name) muss der FQDN eingetragen werden. In meinem Fall ist dies voyager.home.hoaxter.de.

 

# cd /usr/local/etc

# mkdir ftpcert

# openssl genrsa 1024 > host.key

# chmod 400 host.key

# openssl req -new -x509 -nodes -sha1 -days 365 -key host.key > host.cert

 

Eine andere Alternative ist es, eine eigene CA einzurichten und mit diesen Keys zu signieren. Eine detailliertere Beschreibung dazu findet sich in der Apache mod_ssl FAQ.

Jetzt ist nur noch die Proftpd-Konfiguration, in unserem Fall die Datei /usr/local/etc/proftpd.conf, mit dem bevorzugten Editor anzupassen. Eine sehr minimalistische Version der Konfiguration sieht in etwa so aus:

 

# cat /usr/local/etc/proftpd.conf

ServerName "ProFTPD mod_tls Demo"

ServerType standalone

DefaultServer on

Port 21

Umask 022

MaxInstances 30

User nobody

Group nogroup

DefaultRoot ~

AllowOverwrite on

 

# TLS

<IfModule mod_tls.c>

TLSEngine on

TLSLog /var/log/proftpd/proftpd_tls.log

TLSProtocol TLSv1

TLSRequired off

TLSVerifyClient off

TLSRSACertificateFile /usr/local/etc/ftpcert/host.cert

TLSRSACertificateKeyFile /usr/local/etc/ftpcert/host.key

</IfModule>

 

Detaillierte Informationen zur Konfiguration des Proftpd-Servers finden sich auf der Proftpd-Homepage www.proftpd.org und auf TJs privater Proftpd-Internetseite www.castaglia.org/proftpd/. Unser neuer Proftpd Server ist nun bereit, uns Dateien über FTPS anzubieten.


Anmerkungen:

Auf Wunsch von Usern noch einige Anmerkungen:

  • bei Verwendung von mod_tls unbedingt die Versionen ab 1.3.1RC3 nehmen. Bei älteren Versionen ist ein Exploit möglich
  • wenn man mod_tls selber kompilieren möchte, sind neben dem "libssl" Paketen auch die "libssl-dev" Developerpakete nötig