Herzlich willkommen. In diesem Beitrag installieren wir einen FTP-Server für Linux-Distributionen unter Ubuntu 22.04 oder alternativ Debian 12. Dafür installieren wir die quelloffene Software vsftpd. Nach der Installation sichern wir den Zugriff mit einem selbst signierten SSL/TLS-Zertifikat ab, um die Verbindung zwischen dem FTP-Client und dem FTP-Server zu sichern.
Standardgemäß verfügt das Netzwerkprotokoll über relativ wenig Sicherheit. Mit OpenSSL und einer konfigurierten Firewall ändern wir das mit wenigen Handgriffen. Um auf den FTP-Server zugreifen zu können, werden wir auch einen Benutzer anlegen und bestimmte Berechtigungen für den Vollzugriff (Lesen/Schreiben/Ändern) einräumen. Somit sind eure Daten in der Regel ausreichend geschützt.
Inhaltsverzeichnis: vsftpd unter Linux Ubuntu/Debian installieren und konfigurieren
Ist FTP (File Transfer Protocol) überhaupt noch zeitgemäß?
Das File-Transfer-Protokoll (FTP) wurde im Jahr 1971 entwickelt. Also vor etwas über 50-Jahren. Es gilt als eines der ältesten Netzwerkprotokolle. Heute hat FTP aufgrund von neueren Technologien, das wären zum Beispiel: Webdav, FTPS, HTTPS und einige Cloud-basierte Speicherdienste, zunehmend an Bedeutung verloren.
Einige Anwendungen funktionieren heute aber noch einwandfrei mit FTP oder sie beherrschen schlichtweg kein alternatives Netzprotokoll für die Datenübertragung. Häufig können IP-Kameras mit dem File-Transfer-Protokoll sehr zuverlässig und sicher das Videomaterial auf einen entfernten Server übertragen. Es kann in der Praxis allerdings noch weitere Anwendungszwecke bzw. Gründe für die Installation eines eigenen FTP-Servers geben.
Funfact: Im Grunde waren FTP-Server die ersten Clouds, die Uploads und Downloads ortsungebunden über das lokale Netzwerk hinaus ermöglichten. Damals hatten wir allerdings noch keinen so Hype klingenden Begriff „Cloud“ dafür am Start und auch die Benutzerfreundlichkeit war für Endanwender eher ein Graus.
In dieser Anleitung installieren wir einen FTP-Server mit der Open-Source-Software „vsftpd“. Ausgeschrieben steht das Akronym für Folgendes: Very Secure File Transfer Protocol Daemon.
Was wird für die Installation eines FTP-Servers unter Ubuntu/Debian nach dieser Anleitung benötigt?
Für die Installation eines FTP-Servers mit der quelloffenen Software vsftpd könnt ihr, so wie ich in diesem Artikel, eine aktuelle Linux Ubuntu Distribution (22.04 LTS) oder alternativ Debian 12 verwenden. Die einzelnen Schritte und die Funktion wurden auf beiden Versionen erfolgreich von mir geprüft.
Das wird außerdem benötigt:
- Einen beliebigen DynDNS-Dienst, dessen Zugangsdaten in eurem Router konfiguriert werden und über dessen Domain ihr über das Internet auf eure dynamische IP-Adresse zugreifen könnt.
- Zugriff auf das Hostsystem mit Root-Berechtigungen.
- Zugang auf die NAT-Einstellungen eures Routers für die Freigabe der von dem FTP-Server verwendeten Ports.
Bevor wir mit der Installation beginnen ist es angebracht, die Paketquellen auf den neusten Stand zu bringen. Wir kombinieren zwei Befehle, um auch bereits installierte Pakete zu aktualisieren.
Zuerst wechseln wir für den Zeitraum der Installation auf den Root-Benutzer (nur Ubuntu):
sudo su
Das Repository und alle Paketquellen aktualisieren:
apt update -y && apt upgrade -y
Das vsftpd Paket über APT installieren: Schritt 1
Im ersten Schritt installieren wir den FTP-Daemon „vsftpd“. Die Open-Source-Software gehört schon seit etlichen Jahren zum Standard-Repository der meisten Linux Distributionen. Es ist eine der beliebtesten Methoden, um einen FTP-Server unter Ubuntu mit wenig Aufwand aufzusetzen.
Installation des FTP-Daemons:
apt install vsftpd -y
Sobald die Installation von dem vsftpd-Paket abgeschlossen ist, kann der automatische Systemstart aktiviert werden:
systemctl enable vsftpd
Starten kannst du die Software mit dem folgenden Befehl:
systemctl start vsftpd
Einen VSFTPD FTP-Server unter Linux konfigurieren: Schritt 2
Da ein FTP-Server nur dann wirklich sinnvoll eingesetzt werden kann, wenn wir eine Verbindung über das Internet ermöglichen, sollten wir einige Sicherheitsmaßnahmen treffen. Wir erstellen ein selbst signiertes SSL/TLS-Zertifikat mit OpenSSL. Das Zertifikat wird eine Gültigkeit von 10-Jahren haben. Dieser Zeitraum dürfte für die meisten Anwendungsszenarien ausreichend sein.
Generiere ein neues Zertifikat mit OpenSSL:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Nach der Absendung des Befehls müssen einige Fragen beantwortet werden. Die Antworten sind individuell und abhängig vom Projekt und dem Standort. Beantwortet die Fragen und teilt eure E-Mail-Adresse für die Zertifikatsgenerierung mit.
Jetzt müssen wir eine Kopie von der Konfigurationsdatei erstellen. Das ist sinnvoll, falls uns ein Fehler unterläuft oder wir den Ubuntu-FTP-Server mal an eine neue Umgebung anpassen müssen:
cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
Sobald die Konfigurationsdatei vom FTP-Server erfolgreich kopiert worden ist, können wir einen Editor, wie z. B. nano, verwenden und mit der eigentlichen Konfiguration beginnen:
nano /etc/vsftpd.conf
Bearbeitungshinweis: Die Datei ist ziemlich groß. Sie enthält einige Zeilen, die auskommentiert sind und manche Einstellungen sind von Beginn an aktiv. Verwende die Tastenkombination [STRG+W], um nach bestimmten Zeilen zum Editieren zu suchen.
Editiere die nachfolgenden Zeilen, wie angegeben:
anonymous_enable=NO
local_enable=YES
write_enable=YES
Wir haben den anonymen Zugriff ohne Benutzer Authentifizierung verboten und die Genehmigung für Benutzer zum Schreiben und Hochladen von Dateien aktiviert.
user_sub_token=$USER
local_root=/home/$USER/ftp
Hier haben wir die Systemvariable für die Benutzer verwendet und ein Verzeichnis für den FTP-Benutzer angegeben. Die Speicherung von Dateien erfolgt jetzt für jeden Benutzer getrennt im /home-Verzeichnis. Das ist sicherheitsrelevant.
pasv_min_port=1300
pasv_max_port=1310
Hier legen wir die PASV-Ports für die Datenverbindung fest. Das ist wichtig für die Funktionalität unseres Servers.
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
Mit diesen Zeilen aktivieren wir den Zugriff von Systembenutzern. So wird ein Fremdzugriff auf das Verzeichnis vom FTP-Server ausgeschlossen. Die Benutzer, die einen Zugriff auf den FTP-Server erhalten sollen, werde in der Datei /etc/vsftpd.userlist angelegt.
pasv_address=dein.dyndns.de
pasv_addr_resolve=yes
Ergänze die DynDNS-Domain mit deiner eigenen. Ohne diese Konfiguration wird ein Zugriff über einen dynamischen DNS-Dienst auf den FTP-Server nicht möglich sein. Abschließend müssen noch folgende Zeilen für das Zertifikat angepasst werden:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
Die restlichen Werte können per Copy-and-paste übernommen und eingefügt werden:
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
Speichere die Änderungen ab [STRG +S] und verlasse den Editor wieder [STRG+X]. Jetzt müssen wir noch die Datei für die FTP-Benutzer anlegen:
touch /etc/vsftpd.userlist
Abschließend starten wir den FTP-Server bzw. den vsftpd-Daemon einmal neu, damit die Änderungen wirksam werden:
systemctl restart vsftpd
UFW-Firewall konfigurieren: Schritt 3
In diesem Abschnitt installieren und konfigurieren wir die UFW-Firewall für den FTP-Server. Das trägt zur Härtung unseres Servers bei, da wir alle Anfragen an ungeöffneten Ports einfach ignorieren und nicht genehmigen. Unter Linux Ubuntu ist die Firewall bereits von Anfang an installiert.
Verwenden wir andere Distributionen, wie z. B. Debian 12, müssen wir zuerst eine Installation von der Uncomplicated Firewall durchführen. Alternativ kann auch iptables verwendet werden.
UFW-Firewall installieren:
apt install ufw -y
Die Firewall aktivieren:
ufw enable
Erlaube die folgenden Firewall-Regeln:
ufw allow "OpenSSH"
ufw allow 20:21/tcp
ufw allow 1300:1310/tcp
Lade die soeben erstellten Firewall-Regeln für den FTP-Server mit dem folgenden Befehl neu:
ufw reload
FTP-Benutzer anlegen und Berechtigungen für den Zugriff vergeben: Schritt 4
Damit sich ein FTP-Benutzer erfolgreich am FTP-Server anmelden kann, erstellen wir eine FTP-Shell für das Anlegen neuer Benutzer. Erstelle das dafür notwendige Skript mit dem folgenden Befehl:
echo -e '#!/bin/sh\necho "Shell für FTP-Benutzer."' | tee -a /bin/ftpshell
Dateiberechtigungen festlegen:
chmod a+x /bin/ftpshell
Jetzt muss die FTP-Shell noch in die Konfiguration für Shells hinzugefügt werden:
echo "/bin/ftpshell" >> /etc/shells
Jetzt können neue Benutzer für den Zugriff auf unseren Ubuntu FTP-Server erstellt werden. In diesem Artikel erstelle ich einen Benutzer mit dem Namen alex. Verwende dafür den folgenden Befehl:
useradd -m -s /bin/ftpshell alex
Lege ein Passwort für den soeben erstellen FTP-Benutzer fest:
passwd alex
FTP-Verzeichnisse auf dem Hostsystem erstellen: Schritt 5
Wir haben in der Konfiguration eingestellt, dass der FTP-Zugriff auf das gleichnamige Verzeichnis unter /home eines Benutzers erfolgt. Das erstellen wir mit dem folgenden Befehl:
mkdir -p /home/alex/ftp
Hinweis: Wir arbeiten wie im vorherigen Schritt mit einem Beispielbenutzer. Passe den Namen vom Verzeichnis entsprechend deinem eigenen Benutzer an!
Wir benötigen noch Berechtigungen auf das FTP-Dateiverzeichnis. Ohne diese würde der FTP-Benutzer keine Schreib oder Leseberechtigungen auf das Verzeichnis haben. Das erledigen wir mit dem folgenden Befehlen:
chown -R alex: /home/alex/ftp
chmod 750 /home/alex/ftp
Nun müssen wir nur noch unseren FTP-Benutzer zu den berechtigten Zugriffen auf den FTP-Server hinzufügen. Das erledigen wir mit diesem Befehl:
echo "alex" >> /etc/vsftpd.userlist
Anschließend starten wir den Dienst einmal neu:
systemctl restart vsftpd
Ports für den Ubuntu FTP-Server im Router freigeben: Schritt 6
Damit ein Zugriff auf den FTP-Server über das Internet erfolgen kann, müssen alle erforderlichen Ports für die IP-Adresse unseres Linux Ubuntu/Debian Servers geöffnet werden. Rufe dafür die NAT-Einstellungen deines Routers auf und gebe die folgenden Ports frei:
Externe Ports: 21, 20, 1300-1310
Installation eines FTP-Servers mit der Software vsftpd unter Linux Ubuntu 22.04 erfolgreich abgeschlossen
An diesem Punkt ist die Installation und Konfiguration eures Linux-Ubuntu und vsftpd basierten Servers abgeschlossen. Jetzt könnt ihr euch mit einem beliebigen FTP-Client am FTP-Server anmelden und Dateien hoch- und herunterladen, um die Verbindung und die Übertragungsgeschwindigkeit zu testen. Erreichbar ist der Server über die private und öffentliche IP-Adresse. Falls konfiguriert selbstverständlich auch über eure dynamische Domain (DynDNS).
Bei dem ersten Verbindungsversuch erscheint eine kurze Warnung, dass das Zertifikat unbekannt ist. Das war zu erwarten, weil es sich hierbei um ein selbst signiertes SSL/TLS-Zertifikat handelt. Setze z. B. bei FileZilla einen Haken in das Kontrollkästchen „Diesem Zertifikat zukünftig immer vertrauen“. Bestätige die OK-Schaltfläche. Anschließend wird eine Verbindung mit dem FTP-Server hergestellt.
Hier können neue Verzeichnisse angelegt und Dateien hochgeladen werden. Zur Demonstration habe ich drei Ordner mit den Namen „Bilder, Kamera aufnahmen und Musik“ erstellt. Bedenke, dass wir für jeden FTP-Benutzer einen neuen Benutzer anlegen müssen. Ganz genauso wie wir es in dieser Installationsanleitung mit dem Benutzer alex gemacht haben. Jeder Nutzer hat sein eigenes Verzeichnis.
Es kann vorkommen, dass FileZilla euch die folgende Nachricht ausgibt: „Vom Server gesendete Adresse für den Passiv-Modus ist nicht routingfähig. Benutze stattdessen die Serveradresse.“.
Wenn trotzdem alles funktioniert, kann diese Nachricht in der Regel ignoriert werden. Zur Beseitigung könnt ihr in der Navigation auf den Reiter Bearbeiten > Einstellungen und unter Passiver-Modus einen Haken in das Kontrollkästchen „Auf aktiven Modus zurückgreifen“ setzen. Bestätigt die Änderungen über die OK-Schaltfläche und überprüft erneut die Funktionalität eures Ubuntu-FTP-Servers.
Damit ist euer Server erfolgreich eingerichtet. Ich würde noch empfehlen, dass ihr Fail2Ban auf eurem Hostsystem installiert, um den FTP-Server noch besser vor Fremdzugriffen zu schützen. Eine Anleitung findet ihr hier: Installation und Konfiguration von Fail2Ban für Ubuntu/Debian.
Moin!
Eine tolle Anleitung. Man merkt du bist tief in der Materie drin. Mein Problem, ich habe und bekomme keine DynDNS-Domain, da ddnss.de gerade keine vergibt. Über die Lokale-IP des Servers kann ich nicht mit FileZilla zugreifen.
Fehler: WSAEADDRNOTAVAIL – Kann geforderte Adresse nicht zuweisen
Kann ich dann den Abschnitt „pasv_address“ einfach leer lassen und bekomme lokalen Zugriff?
Vielleicht hast du ja eine Idee.
Nochmals vielen Dank!
Guten Abend Alexander, ich als Linux Neuling finde deine Seite superhilfreich und gut erklärt, danke für deine Zeit und dein Wissen, was du mit uns teilst ;-).
Dein Tutorial habe ich auf Linux-Mint edge durchgearbeitet,soweit alles super, schön wäre es auch wenn es ein kleines update gäbe, z.B.
– user deaktivieren
– user Löschen
habe es testweise versucht über (etc/vsftpd.userlist) mit nano zuentvernen, jedoch ohne erfolg.
Beste Grüße Kilian
Ich habe den FTP-Server problemlos unter Linux installiert. Es scheint alles soweit zu funktionieren. Meine Frage ist aber, gibt es eine Alternative zu einer Installation von vsftpd? Ich finde die Software etwas eingestaubt und würde mich über einen Linux basierten FTP-Server mit einer grafischen Oberfläche für die Konfiguration erfreuen.