Login
Login-Name Passwort


 
Newsletter
Werbung

So, 19. Februar 2006, 00:00

Burn, FTP, burn!

Telnet ist schon vor Jahren ausgestorben und wurde erfolgreich durch SSH ersetzt, aber ein Klartext-Dienst ist immer noch weit verbreitet und lebendig: FTP! Warum?

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.

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:

  1. Download Proftpd 1.2.10 Quellcode als Tarball:

    wget
    <a href="ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2"
    >ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2</a>
  2. Entpacken: tar -jxf proftpd-1.2.10.tar.bz2
  3. konfigurieren, übersetzen und als Root installieren:

    cd proftpd-1.2.10
    ./configure --with-modules=mod_tls && make
    su -c 'make install'
    

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.

$ su -
# cd /usr/local/etc
# mkdir ftpcert
# cd 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 http://www.proftpd.org/ und auf TJs privater Proftpd-Internetseite http://www.castaglia.org/proftpd/. Unser neuer Proftpd Server ist nun bereit, uns Dateien über FTPS anzubieten.

Zurück zum Client

lftp

Sowohl Debian GNU/Linux als auch Mandrake haben lftp für ihre Distribution fertig paketiert, so dass eine Installation nur ein apt-get install lftp oder urpmi lftp benötigt. Bei der Verwendung von Debian/woody empfehle ich die Verwendung des lftp-Backports von backports.org, da die Version aus woody noch ohne ssl-Unterstützung übersetzt wurde. Um lftp die Verwendung von FTPS beizubringen, müssen wir jetzt noch drei Zeilen in unsere ~/.lftprc eintragen.

set ftp:ssl-allow true
set ftp:ssl-force false
set ftp:ssl-protect-data true

Nun ist es an der Zeit, unseren neuen Proftpd-Server mit FTPS zu testen.

~$ lftp sven@voyager.home.hoaxter.de
lftp sven@voyager.home.hoaxter.de:~> debug 9
lftp sven@voyager.home.hoaxter.de:~> ls
---- Connecting to voyager.home.hoaxter.de (192.168.88.94) port 21
<--- 220 ProFTPD 1.2.10 Server (ProFTPD mod_tls Demo) &#91;192.168.88.94&#93;
<--- AUTH TLS
---> AUTH TLS
<--- 234 AUTH TLS successful
---> USER sven
Certificate depth: 0; subject:
/C=DE/ST=Germany/L=Leverkusen/O=voyager.home.hoaxter.de/OU=voyager.home.
hoaxter.de/CN=voyager.home.hoaxter.de/Email=sven@home.hoaxter.de;
issuer:
/C=DE/ST=Germany/L=Leverkusen/O=voyager.home.hoaxter.de/OU=voyager.home.
hoaxter.de/CN=voyager.home.hoaxter.de/Email=sven@home.hoaxter.de
WARNING: Certificate verification:
self signed certificate
<--- 331 Password required for sven.
---> PASS XXXX
<--- 230 User sven logged in.

Alles funktioniert wie gewünscht.

Kasablanca

Kasablanca ist ein KDE-basierter GUI-FTP-Client, der Dateitransfers per FXP und natürlich auch FTPS beherrscht. Kasablanca ist ein noch recht neues Programm und ich weiß nicht, welche Distributionen schon fertige Pakete anbieten. Der Einfacheit halber übersetze ich Kasablanca schnell aus dem Quellcode.

$ wget http://download.berlios.de/kasablanca/kasablanca-0.4.0.1.tar.gz
$ tar -zxf kasablanca-0.4.0.1.tar.gz
$ cd kasablanca-0.4.0.1
$ ./configure && make
$ su -c 'make install'
$ /usr/local/kde/bin/kasablanca
Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung