[[Vorlage(Getestet, focal, bionic, jammy)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/service.png, 48, align=left)]] [https://security.appspot.com/vsftpd.html vsftpd] {en} 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]: {{{#!vorlage Paketinstallation 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 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 == {{{#!vorlage Warnung 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. {{{#!vorlage Befehl 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 [https://security.appspot.com/vsftpd/FAQ.txt FAQ] {en} 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. {{{#!vorlage Befehl 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 [:Rechte/#Standard-Einstellung-und-Maskierung: 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 muss allerdings zunächst aktiviert werden, in dem man in '''/etc/vsftpd.conf''' folgende Einstellung aktiviert: {{{# You may override where the log file goes if you like. The default is shown # below. xferlog_file=/var/log/vsftpd.log }}} Nach dem Neustart des Servers findet man die Log-Datei 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 {{{#!vorlage 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl # Allgemein sudo systemctl {start|stop|restart|status} 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: {{{#!vorlage Befehl systemctl is-enabled vsftpd.service }}} Den Server deaktivieren: {{{#!vorlage Befehl sudo systemctl disable vsftpd.service }}} Prüfen, ob der Server deaktiviert ist: {{{#!vorlage Befehl systemctl is-enabled vsftpd.service }}} Falls die Ausgabe lautet "disabled", ist der Server tatsächlich dauerhaft deaktiviert. Man kann auch den Status abfragen: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!code bash 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 [post:4561117:uu-Forum]) entweder - patchen siehe [post:4557407:] 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. {{{#!vorlage Warnung 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. {{{#!vorlage Befehl mkdir -p /home/BENUTZERNAME/upload chmod 550 /home/BENUTZERNAME chmod 750 /home/BENUTZERNAME/upload }}} = Links = * [https://security.appspot.com/vsftpd.html Projektseite] {en} * [https://security.appspot.com/vsftpd/FAQ.txt FAQ] {en} * [https://web.archive.org/web/20080609080118/archiv.debianhowto.de/de/vsftpd/ vsftpd HOWTO auf debianhowto.de] {de} * [https://ctaas.de/linux-install.htm#vsftpd_installieren_FTP-Server_FTPS-Server FTP-Server/FTPS-Server einrichten] {de} - Tutorial: Grundeinrichtung, Absicherung mit Zertifikaten, separate FTP User anlegen, Schreibzugriffe anpassen (FTP-Wurzelverzeichnis) sowie Client Zugriffsmöglichkeiten. # tag: Internet, Netzwerk, Server, FTP-Server, FTPS-Server