ubuntuusers.de

vsftpd

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/service.png vsftpd 🇬🇧 ist ein FTP-Server, der sehr bewusst auf Sicherheit ausgelegt ist. So überprüft das Programm z.B. vor dem Start seine eigene Konfiguration und die Rechte aller Dateien auf die es zugreifen soll und verweigert den Start bei einer eventuell falschen Konfiguration.

Des Weiteren ist vsftpd der einzige FTP-Server im "main"-Zweig der Ubuntu-Distribution, d.h. er wird garantiert gepflegt und mit Sicherheitsupdates versorgt. Bei anderen FTP-Servern aus den "universe/multiverse"-Zweigen muss dies nicht der Fall sein.

Zu guter Letzt ist vsftpd sehr einfach einzurichten. Ohne umständliche Konfigurationsdateien zu wälzen, kann man die lokalen Benutzer auf ihr Homeverzeichnis zugreifen lassen oder einen anonymen FTP-Zugang einrichten.

Installation

vsftpd kann direkt aus den Ubuntu-Quellen installiert werden. Dazu ist lediglich das folgende Paket zu installieren [1]:

  • vsftpd

Paketliste zum Kopieren:

sudo apt-get install vsftpd 

Oder mit apturl installieren, Link: apt://vsftpd

Konfiguration

Nach der Installation muss die Konfigurationsdatei /etc/vsftpd.conf an die eigenen Bedürfnisse mit einem Editor [3] angepasst werden. Die Datei ist ausführlich kommentiert. Die wichtigsten Einstellungen werden trotzdem im folgenden erklärt.

Anonyme Logins zulassen

vsftpd ist von Haus aus so konfiguriert, dass anonyme Benutzer sich nicht einloggen dürfen. Durch Editieren der Datei /etc/vsftpd.conf kann der anonyme Zugriff aber leicht aktiviert werden. Anschließenden startet man nur den vsftp Dämon neu, wie im Abschnitt Server starten / stoppen beschrieben.

Lokale Benutzer zulassen

Die Standardeinstellung von vsftp ist, dass sich lokale Benutzer per ftp einloggen dürfen. Möchte man dies deaktivieren, so muss man die Option "local_enable=YES" wieder auskommentieren:

# Uncomment this to allow local users to log in.
#local_enable=YES

Zugriff auf Benutzer beschränken

Bestimmte Nutzer erlauben

Um nur bestimmten Benutzern den Login via FTP zu erlauben, müssen folgende Optionen gesetzt werden:

userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
Bestimmte Nutzer verbieten

Um bestimmten Benutzern den Login via FTP zu verbieten, müssen folgende Optionen gesetzt werden (In diesem Fall wird den restlichen Benutzern der Login gewährt):

userlist_deny=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list

Die Nutzer werden in beiden Fällen folgendermaßen in die Datei /etc/vsftpd.user_list eingetragen:

nutzer1
nutzer2
nutzer3

Globales Schreiben (de-)aktivieren

In der Basiskonfiguration darf kein Benutzer per ftp schreiben. Weder lokale Benutzer (wenn sie per "local_enable=YES" zugelassen wurden), noch anonyme Benutzer. Erst wenn die Option

# Uncomment this to enable any form of FTP write command.
write_enable=YES

aktiviert wurde, dürfen per ftp eingeloggte Benutzer schreiben.

Anonymen Benutzern das Schreiben, Löschen und Herunterladen erlauben

Achtung!

Diesen Schritt sollte man nur tun, wenn der FTP-Server keinen Zugang zum Internet hat, sonst muss man sich nicht wundern, wenn der Server früher oder später im Internet entdeckt und für illegale Zwecke missbraucht wird.

Damit anonyme User auf dem FTP-Server Dateien erstellen, löschen und herunterladen können, müssen noch folgende Optionen in die /etc/vsftpd.conf [3] eingetragen werden:

anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_world_readable_only=NO

Daten der anonymen Benutzer werden in /home/ftp abgelegt. Anonyme Benutzer können jedoch nicht direkt in /home/ftp schreiben. Nur in einem Verzeichnis, das man mit den richtigen Rechten anlegen muss. Als Beispiel wird ein "upload"-Verzeichnis angelegt.

sudo mkdir -p /home/ftp/upload
sudo chmod 777 /home/ftp/upload 

Danach können anonyme Benutzer in /home/ftp/upload Daten ablegen.

Anonymen Benutzern das Erstellen von Verzeichnissen erlauben

Soll es anonymen Benutzern erlaubt sein Verzeichnisse anzulegen, so muss man ihnen dazu ebenfalls das Recht extra einräumen. Per Default ist diese Option deaktiviert.

# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES

Lokale Benutzer auf ihr Homeverzeichnis beschränken

Die letzte wichtige Option wäre es, die lokalen Benutzer auf ihr Homeverzeichnis - also /home/benutzername - zu beschränken.

# You may restrict local users to their home directories.  See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES

Der Kommentar bezüglich der möglichen - sehr leichten - Schwachstelle wird in der FAQ 🇬🇧 von vsftpd beantwortet.

Wer den FTP-Nutzern dennoch den Zugriff auf Daten, die an anderer Stelle gespeichert sind, ermöglichen möchte, kommt mit einem Link zum entsprechenden Ordner nicht weit. Stattdessen kann man aber mit mount und der Option --bind den Ordner an gewünschter Stelle ein weiteres mal einbinden.

Weitere Optionen

Neben diesen Standardoptionen, die absolut ausreichen, einen einfachen FTP-Server einzurichten, gibt es noch weitere Optionen, die in der /etc/vsftpd.conf eingefügt werden können. Eine vollständige Liste aller Optionen bekommt man in der Man-Page der Konfigurationsdatei.

man vsftpd.conf 

Da die Hilfeseite auf englisch ist, folgt hier eine Aufstellung der wichtigsten Optionen. Alle aufgeführten Optionen können nach dem Muster option=WERT zur Konfiguration hinzugefügt werden. Ist eine Option nicht in der vsftpd.conf aufgeführt, so wird immer der in der zweiten Spalte angegebene Standardwert genutzt.

Logische Optionen

Option Standardwert Beschreibung
download_enable YES Falls man hier NO einsetzt, so sind nur Uploads möglich
force_anon_logins_ssl NO Wenn ssl_enable aktiviert ist, so werden anonyme Benutzer gezwungen, sich über eine SSL-Verbindung einzuloggen.
force_local_data_ssl NO Wenn ssl_enable aktiviert ist, so werden nicht-anonymen Benutzer gezwungen, sich über eine SSL-Verbindung einzuloggen.
force_local_logins_ssl NO Wenn ssl_enable aktiviert ist, so werden lokalen Benutzer gezwungen, sich über eine SSL-Verbindung einzuloggen.
ssl_enable NO Aktiviert die Möglichkeit, sich über SSL auf dem FTP-Server einzuloggen.
ssl_sslv2 NO Wenn ssl_enable aktiviert ist, so erlaubt diese Option auch Logins über SSLv2 zuzulassen.
userlist_enable NO Falls diese Option aktiviert ist, so werden Benutzer, die in userlist_file aufgeführt sind, vom FTP-Server abgelehnt, bevor sie ihr Passwort eingeben können. So wird verhindert, dass diese Benutzer ihr Passwort im Klartext übertragen.
userlist_deny YES Diese Option wird ausgewertet, wenn userlist_enable aktiviert ist. Ist diese Option auf NO gesetzt, so werden alle Benutzer abgelehnt, es sei denn sie werden in userlist_file aufgeführt. Diese Option dreht also userlist_enable logisch um.

Numerische Optionen

Option Standardwert Beschreibung
anon_max_rate 0 Die maximale Übertragungsgeschwindigkeit in byte/sekunde für anonyme Benutzer. 0 bedeutet unlimitiert.
local_max_rate 0 Die maximale Übertragungsgeschwindigkeit in byte/sekunde für lokale Benutzer. 0 bedeutet unlimitiert.
ftp_data_port 20 Angabe für den FTP-Data-Port.
listen_port 21 Angabe für den FTP-Control-Port.
max_clients 0 Maximale Anzahl der Client, die am FTP-Server angemeldet sein dürfen.
max_per_ip 0 Maximale Anzahl der Verbindungen von einer IP.
pasv_min_port 0 Minimale Portnummer, die bei einer passiven Übertragung genutzt wird.
pasv_max_port 0 Maximale Portnummer, die bei einer passiven Übertragung genutzt wird.
local_unmask 077 Wert für die umask bei neu erstellten Ordnern und Dateien.

String Optionen

Option Standardwert Beschreibung
anon_root /home/ftp Verzeichnis, in das anonyme Benutzer geleitet werden.
userlist_file /etc/vsftpd.user_list Name und Pfad zur Datei, die ausgelesen wird, wenn die Option userlist_enable aktiviert ist.

Überwachen

Über Log-Datei

vsftp schreibt ein ausführliches Log über alle Logins und Schreibvorgänge. Dieses findet man unter /var/log/vsftpd.log. Möchte man z.B. die aktuellen Aktivitäten ansehen, so kann man in einem Terminal [2] mit dem Befehl

sudo tail -f /var/log/vsftpd.log 

den Verlauf des Logs begutachten.

Über System-Prozessliste

Ist die logische Option setproctitle_enable=YES in der Konfigurationsdatei /etc/vsftpd.conf gesetzt, schreibt vsftpd Statusinformationen in die System-Prozessliste. Der folgende Befehl in einem Terminal [2] zeigt diese Statusinformationen annähernd in Echtzeit an:

watch ps -C vsftpd -o user,pid,stime,cmd 

SSL-Zertifikat erzeugen

Um gesicherte SSL-Verbindungen nutzen zu können muss nach der Installation noch ein Zertifikat erzeugt werden:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048  -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/private/vsftpd.pem 

Hierbei einfach alle Fragen beantworten, anschließend steht das Zertifikat zur Verfügung.

Server starten/stoppen

Manuell starten/stoppen

Das manuelle Starten und Stoppen erfolgt über systemctl, welches Teil von systemd ist:

# Allgemein
sudo systemctl {start|stop|restart} vsftpd 
# Beispiel: vsftpd starten
sudo systemctl start vsftpd  

Dies lässt sich automatisieren, indem die entsprechenden Programmstarter ins Verzeichnis /usr/share/applications/ (systemweit) bzw. ~/.local/share/applications/ (nur für den lokalen Benutzer) platziert werden:

/usr/share/applications/vsftpd-start.desktop

[Desktop Entry]
Name=vsFTPd server start
Comment=Starts Very Secure FTP Daemon
Exec=sudo systemctl start vsftpd.service
Terminal=true
Icon=/usr/share/icons/gnome/32x32/status/network-idle.png
Type=Application
Categories=System;

/usr/share/applications/vsftpd-stop.desktop

[Desktop Entry]
Name=vsFTPd server stop
Comment=Stop Very Secure FTP Daemon
Exec=sudo systemctl stop vsftpd.service
Terminal=true
Icon=/usr/share/icons/gnome/32x32/status/connect_no.png
Type=Application
Categories=System;

Dann lässt sich der vsftpd-Server über den Menüeintrag "Anwendungen → Systemwerkzeuge → vsFTPd server start" starten und über den Menüeintrag "Anwendungen → Systemwerkzeuge → vsFTPd server stop" stoppen (im aufpoppenden Terminal-Fenster muss noch ein Benutzer-Passwort für den Befehl sudo eingegeben werden).

Dauerhaft deaktivieren

Nach der Installation wird vsftpd automatisch beim Hochfahren des Computers gestartet. Es ist ratsam, den Server nicht permanent sondern nur dann laufen lassen, wenn er tatsächlich benötigt wird. Dafür soll man ihn dauerhaft deaktivieren:

Prüfen, ob der Server dauerhaft aktiviert ist:

systemctl is-enabled vsftpd.service  

Den Server deaktivieren:

sudo systemctl disable vsftpd.service 

Prüfen, ob der Server deaktiviert ist:

systemctl is-enabled vsftpd.service  

Falls die Ausgabe lautet "disabled", ist der Server tatsächlich dauerhaft deaktiviert.

Man kann auch den Status abfragen:

systemctl status vsftpd.service  

Beim deaktivierten Server sieht dann die Status-Ausgabe so aus:

● vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

Mit dem Befehl kann der vsftpd-Daemon wieder dauerhaft aktiviert werden:

sudo systemctl enable vsftpd.service 

FTP-Benutzer ohne Shellzugang

Möchte man nicht, dass die erstellten Benutzer auch via SSH auf den Rechner zugreifen können, so muss die Shell des Benutzers in der /etc/passwd auf /bin/false gesetzt werden. Zum Beispiel:

user:x:1000:1000::/srv/ftp/user:/bin/false

Wenn es danach Probleme beim FTP-Login geben sollte (530 Login incorrect), liegt das daran, dass /bin/false nicht als Shell im System hinterlegt ist. Dann muss die Shell noch in die Datei /etc/shells eingetragen werden.

Probleme

Fehler "refusing to run with writable root"

Ein mögliches Problem könnte diese Meldung sein:

1
500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Das ist kein Fehler sondern ein Sicherheitsfeature

  • > The official reason is “Disallow login with writable root directory because of possible glibc vulnerabilities”

Übersetzung: Login verweigern, sollte das root directory beschreibbar sein, wegen der möglichen Verwundbarkeiten der glibc Bibliothek.

Lösung "refusing to run with writable root"

(Referenz: Forum Link uu-Forum) entweder

oder

  • Rechte ändern - Konfiguration so ändern, dass wieder schreiben möglich ist...

oder

  • Unterordner verwenden - Änderungen nur in einem Unterordner erlauben

Rechte ändern

einfach

allow_writeable_chroot=YES

in die vsftpd.conf einfügen.

Achtung!

das ermöglicht aber wieder das Beschreiben des root und ist ein mögliches Sicherheitsrisiko!

Unterordner verwenden

Hierzu wird zunächst ein Unterordner angelegt. Anschließend werden die Rechte so geändert, so dass Dateien nur in dem Unterordner abgelegt werden können. Dies ermöglicht die Funktion ohne Sicherheitseinbußen.

mkdir -p /home/BENUTZERNAME/upload
chmod 550 /home/BENUTZERNAME
chmod 750 /home/BENUTZERNAME/upload 

Diese Revision wurde am 5. April 2020 16:22 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: FTPS-Server, FTP-Server, Internet, Server, Netzwerk