Ubuntu 16.04 Xenial Xerus
Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
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.
vsftpd kann direkt aus den Ubuntu-Quellen installiert werden. Dazu ist lediglich das folgende Paket zu installieren [1]:
vsftpd
mit apturl
Paketliste zum Kopieren:
sudo apt-get install vsftpd
sudo aptitude install vsftpd
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.
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:
sudo service vsftpd restart
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
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
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
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.
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.
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
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.
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.
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 Passswort 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. |
Option | Standardwert | Beschreibung |
anon_max_rate | 0 | Die maximale Übertragungsgeschwindigkeit in byte/sekunde für anonyme Benutzer. 0 bedeudet unlimitiert. |
local_max_rate | 0 | Die maximale Übertragungsgeschwindigkeit in byte/sekunde für lokale Benutzer. 0 bedeudet 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. |
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. |
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.
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
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.pem -out /etc/ssl/private/vsftpd.pem
Hierbei einfach alle Fragen beantworten, anschließend steht das Zertifikat zur Verfügung.
Je nach Ubuntu-Version wird vsftpd über SysVinit, Upstart oder ggf. auch systemd gesteuert. Details zum Thema Dienste steuern sowie zu den Unterschieden findet man im Wiki unter Dienste. Hier sind die Befehle für SysVinit (so war es unter Ubuntu 16.04.01 konfiguriert):
# Allgemein sudo service vsftpd {start|stop|restart} # Beispiel: vsftp starten sudo service vsftpd start
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.
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.
(Referenz: Forum Link uu-Forum) entweder
patchen siehe http://forum.ubuntuusers.de/topic/12-04lts-server-vsftpd-2-3-5-500-oops-vsftpd-r/3/#post-4557407
oder
Rechte ändern - Konfiguration so ändern, dass wieder schreiben möglich ist...
oder
Unterordner verwenden - Änderungen nur in einem Unterordner erlauben
einfach
allow_writeable_chroot=YES
in die vsftpd.conf einfügen.
das ermöglicht aber wieder das Beschreiben des root und ist ein mögliches Sicherheitsrisiko!
Hierzu wird zunächst ein Unterordner angelegt. Anschließend werden die rechte so geändert, sodass 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
FTP-Server/FTPS-Server einrichten - Tutorial: Grundeinrichtung, Absicherung mit Zertifikaten, separate FTP User anlegen, Schreibzugriffe anpassen (FTP-Wurzelverzeichnis) sowie Client Zugriffsmöglichkeiten.
Diese Revision wurde am 21. Dezember 2016 21:33 von Dalai erstellt.