vsftpd - der Very Secure FTP Daemon, eine Einf�hrung

ArticleCategory:

System Administration

AuthorImage:[Ein Bild von Dir]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage

original in de Mario M. Knopf

AboutTheAuthor:

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.

Abstract:

Dieser Artikel soll eine grundlegende Einf�hrung zum "Very Secure FTP Daemon" darstellen. Beginnen m�chte ich mit einer allgemeinen Beschreibung von FTP und vsftpd. Danach sehen wir uns die Installation, Konfiguration und Startm�glichkeiten des vsftp-Daemons genauer an. Abschlie�end wird noch ein kurzer Funktionstest durchgef�hrt werden.

ArticleIllustration:[Das Titelbild des Artikels]

vsftp

ArticleBody:[The main part of the article]

Einleitung

Das File Transfer Protocol (FTP) dient zur plattformunabh�ngigen Datei�bertragung im Internet und basiert auf einer Server-Client-Architektur. RFC 959 [1] schreibt vor, da� FTP in zwei unterschiedliche Kan�le getrennt wird, wobei ein Kanal f�r die Daten (TCP-Port 20) und der andere zur Steuerung (TCP-Port 21) dient. �ber den Steuerkanal tauschen die beiden Seiten (Server und Client) Kommandos aus, welche dann den Datentransfer einleiten.
Eine FTP-Verbindung verl�uft in vier Schritten:

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.

vsftpd

vsftpd stellt einen FTP-Server f�r unixoide Betriebssysteme dar und l�uft somit auf Plattformen wie Linux, *BSD, Solaris, HP-UX und IRIX. Dabei unterst�tzt vsftpd viele Merkmale, die man bei anderen FTP-Servern unter Umst�nden schmerzlich vermisst. Einige davon sind beispielsweise:

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.

Installation

Die Installation des vsftp-Daemons verl�uft recht einfach, da jede gr��ere Distribution fertige RPM-Pakete zu vsftpd bereitstellt, welche in den meisten F�llen sogar schon installiert sind. Alternativ besorgt man sich �ber [6] die Quellen und �bersetzt das Programm manuell.

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

Zuvor sollte man jedoch �berpr�fen, ob der Benutzer "nobody" und das Verzeichnis "/usr/share/empty" existiert und gegebenenfalls neu anlegen. Plant man Zugriffsm�glichkeiten f�r anonyme Benutzer, mu� der User "ftp" mitsamt Homeverzeichnis "/var/ftp" angelegt werden. Letzteres erreicht man durch die Eingabe der folgenden beiden Befehle:

neo5k@phobos> mkdir /var/ftp
neo5k@phobos> useradd -d /var/ftp ftp

Aus Sicherheitsgr�nden sollte das Verzeichnis "/var/ftp" dem Benutzer "ftp" weder geh�ren, noch sollte dieser darin Schreibrechte besitzen. Wenn der Benutzer bereits existiert, gen�gen die n�chsten beiden Kommandos, um den Besitzer zu �ndern und anderen Benutzern die Schreibrechte zu entziehen:

neo5k@phobos> chown root.root /var/ftp
neo5k@phobos> chmod og-w /var/ftp

Sofern alle Voraussetzungen erf�llt sind, kann man den vsftp-Daemon installieren:

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

Da die Beispiel-Konfigurationsdatei nicht mit kopiert wird, diese aber den Einstieg erleichtert, mu� man auch hier noch einmal Hand anlegen:

neo5k@phobos> cp vsftpd.conf /etc

Konfiguration

Die Konfigurationsdatei zu vsftpd l��t sich unter "/etc/vsftpd.conf" finden. Wie bei den meisten Konfigurationsdateien werden auch bei vsftpd Kommentare mit einer einleitenden Raute gekennzeichnet.

# Kommentarzeile

Eine beispielhafte Konfiguration k�nnte so aussehen:

# 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

Starten des FTP-Dienstes

vsftpd l��t sich auf drei verschiedene Arten betreiben. Zum einen �ber inetd oder xinetd, zum anderen im Standalone-Betrieb.

inetd

Soll der FTP-Dienst via inetd betrieben werden, �ffnet man die Konfigurationsdatei "/etc/inetd.conf" mit einem Editor:

neo5k@phobos> vi /etc/inetd.conf

Dann sucht man sich die entsprechenden Zeilen zu den FTP-Diensten und entfernt nur noch das Kommentarzeichen vor dem vsftpd-Eintrag. Sollte kein entsprechender Eintrag vorhanden sein, kann man ihn auch manuell erstellen. Dabei ist zu beachten, da� nach den durchgef�hrten �nderungen der inetd zwingend neu gestartet werden mu�. Der Eintrag sollte dann so aussehen:

# ftp���stream���tcp���nowait���root���/usr/sbin/tcpd���in.ftpd
ftp���stream���tcp���nowait���root���/usr/sbin/tcpd���vsftpd

xinetd

Empfehlenswert ist es jedoch, den vsftp-Daemon per xinetd starten zu lassen, da dieser zahlreiche Erweiterungen gegen�ber inetd besitzt. Einige davon sind bspw. Protokollierung von Anfragen, Zugriffssteuerung, Bindung des Dienstes an bestimmte Netzwerkschnittstellen, et cetera. Eine sehr gute Einf�hrung zum Thema xinetd l��t sich unter [7] finden. Auch hier ist nach erfolgter Modifikation ein Neustart des xinetd n�tig. Die Konfiguration des xinetd k�nnte folgenderma�en aussehen:

# 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
}

Standalone-Betrieb

Zus�tzlich besteht die M�glichkeit, den vsftp-Daemon im Standalone-Modus zu betreiben. Dazu �ffnet man wieder die Datei "/etc/vsftpd.conf" und f�hrt die folgende �nderung durch:

# Soll der vsftp-Daemon im Standalone-Betrieb laufen? YES/NO
listen=YES

Nach erfolgtem Eintrag kann man den Daemon dann durch die nachfolgend genannte Eingabe starten.

neo5k@phobos> /usr/sbin/vsftpd &

Sofern die Einstiegspfade richtig gesetzt sind, gen�gt zum Starten auch ein schlichtes

neo5k@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

Nat�rlich sollte man beim Betrieb im Standalone-Modus darauf achten, da� der vsftp-Daemon weder per inetd noch xinetd gestartet wird.

Funktionstest

Hat man die Installation und Konfiguration erfolgreich hinter sich gelassen, kann man das erste Mal auf seinen FTP-Server zugreifen.
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>

Fazit

Wie man sehen konnte, ist der vsftp-Daemon weder schwer aufzusetzen noch schwierig zu konfigurieren. Trotzdem bietet er zahlreiche Funktionsmerkmale und ein hohes Ma� an Sicherheit.

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.

Links

[1] ftp://ftp.rfc-editor.org/in-notes/rfc959.txt [RFC 959 - File Transfer Protocol]
[2] ftp://ftp.rfc-editor.org/in-notes/rfc2228.txt [RFC 2228 - FTP Security Extensions]
[3] www.linuxfocus.org article 225, January2002 [chroot]
[4] http://vsftpd.beasts.org/DESIGN [Sicherheitsmechanismen von vsftpd]
[5] http://www.wu-ftpd.org/ [WU-FTPD]
[6] http://www.vsftpd.beasts.org/ [Home of vsftpd]
[7] www.linuxfocus.org article 175, November2000 [xinetd]