original in de Mario M. Knopf
Mario beschäftigt sich leidenschaftlich gerne
mit Linux, Netzwerken
und sicherheitsrelevanten Themen. Nebenbei betreut er in seiner
Freizeit die beiden Webpräsenzen neo5k.org und linuxwallpapers.de.
FTP benutzt als Transportprotokoll das verbindungsorientierte TCP (Transmission Control Protocol), welches sicherstellt, daß die Daten auch wirklich beim Empfänger ankommen. Somit braucht sich FTP nicht um einen möglichen Paketverlust bzw. eine Fehlerkontrolle bei der Dateiübertragung kümmern. Grob formuliert sorgt TCP also dafür, daß jedes einzelne Datenpaket nur einmal ankommt - fehlerfrei bei der Übertragung und in der richtigen Reihenfolge.
Bei der Dateiübertragung unterscheidet man drei Transferarten, wobei der Abschluß des Transfers im Stream-Modus durch ein End-of-File (EOF), bei den beiden anderen Übertragungsarten durch ein End-of-Record (EOR) gekennzeichnet wird.
Des Weiteren gibt es zwei verschiedene Transfermodi:
Der ASCII-Modus dient zur Übertragung von Textdateien, wohingegen der Binary-Modus beispielsweise zum Transfer von Programmen oder dergleichen dient. Der Benutzer muß den Transfermodus für gewöhnlich nicht explizit auswählen, da mittlerweile alle FTP-Clients die zu übertragende Datei erkennen und automatisch umschalten.
Da die Übermittlung der Benutzerkennung und des Passworts zur Authentifizierung nicht verschlüsselt wird, ist es sehr wichtig, ausdrücklich auf dieses potentielle Sicherheitsrisiko hinzuweisen. Aus diesem Grund machte man sich Gedanken über die Sicherheit von FTP. Im Oktober 1997 wurde schließlich das RFC 2228 [2] veröffentlicht, welches sicherheitsspezifische Erweiterungen für das File Transfer Protocol definiert.
Der Name vsftpd steht für "Very Secure FTP Daemon", welcher auch gleich eines der Hauptanliegen des Entwicklers Chris Evans wiederspiegelt. Bei der Entwicklung und dem Design des FTP-Servers wurde von Anfang an sehr viel Wert auf Sicherheit gelegt.
Als Beispiel hierfür kann die Tatsache genannt werden, daß vsftpd im chroot-Modus betrieben wird. chroot bedeutet, daß einem Programm (in diesem Fall vsftpd) ein neues Wurzelverzeichnis (/) zugewiesen wird und es somit nicht mehr auf Programme oder Dateien außerhalb dieses Verzeichnisses zugreifen darf - es wird sozusagen in einem Gefängnis eingesperrt. Sollte nun ein potentieller Angreifer den FTP-Server kompromittieren, ist er vom übrigen System abgeschottet und kann dadurch keinen größeren Schaden anrichten. Wer weiterführende Informationen zu chroot sucht, sollte sich den Artikel unter [3] ansehen. Wer sich jedoch besonders für die Implementierung und das Design der diversen Sicherheitsmechanismen von vsftpd interessiert, dem sei [4] empfohlen.
Durch diese umfangreichen Merkmale - wobei der Anspruch an die Sicherheit des FTP-Dienstes höchste Priorität genießen sollte - hebt sich vsftpd deutlich von anderen FTP-Servern ab. Als Negativbeispiel sei hier der WU-FTPD [5] genannt, welcher in den vergangenen Jahren ständig durch diverse Sicherheitslücken auffiel.
Hat man sich die Quellen beschafft, entpackt man den Tarball, wechselt in das soeben enstandene Verzeichnis und führt make aus. Nachfolgend werden die dazu benötigten Befehle demonstriert:
neo5k@phobos> tar xzvf
vsftpd-x.x.x.tar.gz
neo5k@phobos> cd vsftpd-x.x.x
neo5k@phobos> make
neo5k@phobos> mkdir /var/ftp
neo5k@phobos> useradd -d /var/ftp ftp
neo5k@phobos> chown root.root /var/ftp
neo5k@phobos> chmod og-w /var/ftp
neo5k@phobos> make install
Jetzt werden normalerweise die Manpages und das Programm an den richtigen Ort im Dateisystem kopiert. Wenn es wider Erwarten zu Komplikationen kommt, hilft jedoch auch ein manuelles Kopieren der Dateien.neo5k@phobos> cp vsftpd /usr/sbin/vsftpd
neo5k@phobos> cp vsftpd.conf.5 /usr/share/man/man5
neo5k@phobos> cp vsftpd.8 /usr/share/man/man8
neo5k@phobos> cp vsftpd.conf /etc
# Kommentarzeile
# Anonymen FTP-Zugriff erlauben?
YES/NO
anonymous_enable=NO
# Anonymen Upload erlauben? YES/NO
anon_upload_enable=NO
# Dürfen anonyme User Verzeichnisse erstellen?
YES/NO
anon_mkdir_write_enable=NO
# Dürfen anonyme User andere Schreiboperationen wie
Umbenennen oder Löschen durchführen? YES/NO
anon_other_write_enable=NO
# Anmeldung von lokalen Usern erlauben? YES/NO
local_enable=YES
# Sollen lokale Benutzer in ihrem Homeverzeichnis
eingesperrt werden? YES/NO
chroot_local_user=YES
# Die maximal erlaubte Datentransferrate in Bytes/Sekunde
für lokal angemeldete User. Vorgabe = 0 (unbegrenzt)
local_max_rate=7200
# Schreibrechte prinzipiell erlauben? YES/NO
write_enable=YES
# Nachrichten bei Verzeichniswechsel anzeigen?
YES/NO
dirmessage_enable=YES
# Bannermeldung, welche der sich anmeldende User
sieht.
ftpd_banner="Welcome to neo5k's FTP service."
# Protokollierung aktivieren? YES/NO
xferlog_enable=YES
# Sämtliche FTP-Aktivitäten protokollieren? YES/NO
# Achtung! Durch diesen Eintrag können sehr große
Datenmengen entstehen.
log_ftp_protocol=NO
# Versichern, daß Verbindungen nur an Port 20 (ftp-data)
zustande kommen. YES/NO
connect_from_port_20=YES
# Unterbrechung (time out) bei Leerlaufzeiten (idle
sessions)
idle_session_timeout=600
# Zeit, nach der eine Datenverbindung unterbrochen
wird.
data_connection_timeout=120
# Zugriff wird über Pluggable Authentication Modules (PAM)
geregelt.
pam_service_name=vsftpd
# Standalone-Betrieb? YES/NO - abhängig vom Betriebsmodus
(inetd, xinetd, Standalone)
# Des Autors FTP-Dienst wird per xinetd gestartet, deswegen
lautet der Wert hier NO.
listen=NO
neo5k@phobos> vi /etc/inetd.conf
#
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd
ftp stream tcp nowait root /usr/sbin/tcpd vsftpd
# vsftp daemon.
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
per_source = 5
instances = 200
no_access = 192.168.1.3
banner_fail = /etc/vsftpd.busy_banner
log_on_success += PID HOST DURATION
log_on_failure += HOST
nice = 10
}
# Soll der vsftp-Daemon im
Standalone-Betrieb laufen? YES/NO
listen=YES
neo5k@phobos> /usr/sbin/vsftpd &
Sofern die Einstiegspfade richtig gesetzt sind, genügt zum Starten auch ein schlichtesneo5k@phobos> vsftpd &
Durch die nächste Eingabe kann geprüft werden, ob die Einstiegspfade richtig gesetzt wurden:neo5k@phobos> echo $PATH
/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin
neo5k@phobos> ftp phobos Connected to phobos 220 "Welcome to neo5k's FTP service." Name (phobos:neo5k): testuser 331 Please specify the password. Password: 230 Login successful Remote system type is UNIX. Using binary mode to transfer files. ftp> ls -l 229 Entering Extended Passive Mode 150 Here comes the directory listing drwxr-xr-x 11 500 100 400 May 07 16:22 docs drwxr-xr-x 9 500 100 464 Feb 01 23:05 hlds drwxr-xr-x 39 500 100 4168 May 10 09:15 projects 226 Directory send OK. ftp>
Es versteht sich von selbst, daß diese Einführung nur einen kleinen Ausschnitt aus der Welt von vsftpd bieten kann, da der FTP-Server äußerst umfangreiche Konfigurationsmöglichkeiten zur Verfügung stellt. Wer sich nach diesem Artikel eingehender mit vsftpd beschäftigen möchte, sollte die Projektseite unter [6] besuchen und sich dort die umfangreiche Dokumentation zu Gemüte führen.