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?
Von Sven Höxter und Stephan
Rottmann
1.
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.
2. 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:
wget
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
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.
4. Zurück zum
Client
4.1.
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) [192.168.88.94]
<--- 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.
| |
Kasablanca
connect screen |
Alles funktioniert wie gewünscht.
4.2.
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
| |
Copyright (C) Sven Höxter und Stephan Rottmann
Erschienen auf Pro-Linux, letzte Änderung
2006-02-19
|