FTP-Server mit vSFTPd und TLS auf Ubuntu 22.04 einrichten

vSFTPd oder Very Secure FTP Daemon ist eine freie und quelloffene FTP-Server-Software. Es ist ein FTP-Daemon für Unix-ähnliche Betriebssysteme und steht unter der GNU General Public License. vSFTPd ist einer der meistgenutzten FTP-Daemons, er ist schnell und ressourcenschonend, sicher durch PAM- und SSL-Integration und stabil. vSFTPd hat sich aufgrund seiner Ausgereiftheit das Vertrauen großer Unternehmen wie RedHat, SUSE, Debian, Gnome, KDE usw. erworben.

vSFTPd kann mit IPv6 betrieben werden und unterstützt auch virtuelle IP-Konfigurationen und virtuelle Benutzer. Er kann als eigenständiger Daemon oder mit dem inetd ausgeführt werden. Für die Benutzerverwaltung bietet vSFTPd eine Funktion, mit der der Benutzer seine eigene Konfiguration vornehmen kann, wie z. B. Beschränkungen pro Quell-IP, Rekonfigurierbarkeit und Bandbreitendrosselung. Außerdem unterstützt vSFTPd ein Plug-in-Authentifizierungsmodul (PAM) für virtuelle Benutzer und bietet außerdem eine Sicherheitsintegration mit SSL/TLS.

In diesem Tutorial zeige ich dir, wie du einen FTP-Server mit VSFTPD (Very Secure FTP Daemon) auf einem Ubuntu 22.04 Server einrichtest. In diesem Beitrag erfährst du auch, wie du den vSFTPd mit TLS/SSL-Zertifikaten absicherst.

Voraussetzungen

Bevor du mit dieser Anleitung beginnst, solltest du die folgenden Voraussetzungen erfüllen:

  • Einen Ubuntu 22.04 Server.
  • Ein Nicht-Root-Benutzer mit Root-/Administrator-Rechten.
  • Ein FTP-Client ist auf dem lokalen Rechner installiert.

Installation des vSFTPd-Pakets

Das Standard-Repository von Ubuntu bietet mehrere FTP-Daemons, darunter auch das vSFTPd-Paket. Dies erleichtert dem Administrator die Installation und Einrichtung eines FTP-Servers, ohne dass ein zusätzliches Repository oder ein Drittanbieter-Repository benötigt wird.

Der erste Schritt besteht darin, vSFTPd auf dem Ubuntu-Server zu installieren. Doch bevor du das Paket installierst, musst du den Paketindex für dein System aktualisieren und auffrischen. Gib den folgenden Befehl ein, um das Ubuntu-Repository zu aktualisieren und zu aktualisieren.

sudo apt update

Installiere nun das vSFTPd-Paket mit dem folgenden Befehl. Gib Y ein, um die Installation zu bestätigen und drücke ENTER, um fortzufahren. Die Installation von vSFTPd beginnt nun.

sudo apt install vsftpd

vsftpd installieren

Nachdem die vSFTPd-Installation abgeschlossen ist, führe den folgenden Befehl aus, um den vSFTPd-Dienst zu überprüfen und zu verifizieren. Du solltest sehen, dass der vSFTPd-Dienst„aktiviert“ ist, d.h. er wird beim Systemstart automatisch ausgeführt. Außerdem ist der aktuelle Status des vSFTPd-Dienstes „running“.

sudo systemctl is-enabled vsftpd
sudo systemctl status vsftpd

start vsftpd

VSFTPD-Server konfigurieren

In diesem Abschnitt erstellst du die SSL/TLS-Zertifikate, um vSFTPd über TLS zu aktivieren. Anschließend bearbeitest du die vSFTPd-Konfigurationsdatei „/etc/vsftpd.conf“, um einen sicheren FTP-Server zu erstellen.

Führe den Befehl openssl aus, um das selbstsignierte SSL/TLS-Zertifikat für den vSFTPd-Server zu erzeugen. Du wirst nach einigen Informationen zu deinem Zertifikat gefragt, die du unbedingt eingeben musst. Das Zertifikat wird unter„/etc/ssl/private/vsftpd.pem“ gespeichert.

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

selbstsigniertes ssl erzeugen

Als Nächstes erstellst du ein Backup der Standardkonfiguration von vsFTPd, bevor du die Datei mit dem folgenden Befehl bearbeitest.

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Sobald die Originaldatei kopiert ist, öffne die vSFTPd-Konfigurationsdatei „/etc/vsftpd.conf“ mit dem folgenden Befehl.

sudo nano /etc/vsftpd.conf

Stelle sicher, dass die Option„anonymous_enable“ auf„NO“ gesetzt ist, um den anonymen Zugriff auf den FTP-Server zu deaktivieren.

anonymous_enable=NO

Dekommentiere die Option „local_enable„, um den Benutzern den Zugriff auf den FTP-Server und die Anmeldung zu ermöglichen. Diese Option muss aktiviert werden, wenn du virtuelle Benutzer einrichten willst, damit sich ein normales Benutzerkonto in der Datei /etc/passwd auf dem FTP-Server anmelden kann.

local_enable=YES

Deaktiviere die Option„write_enable„, damit die Benutzer Dateien auf den FTP-Server schreiben und hochladen können.

write_enable=YES

Deaktiviere die Option „chroot_local_users“, um das Gefängnis für jeden FTP-Benutzer zu aktivieren. Dies erhöht die Sicherheit deines FTP-Servers, da jeder FTP-Benutzer nach dem Einloggen automatisch in sein Heimatverzeichnis gesetzt wird. Außerdem kann ein Benutzer nicht auf die Dateien eines anderen Benutzers zugreifen oder diese sehen oder auflisten.

chroot_local_users=YES

Füge die folgende Konfiguration hinzu, um virtuelle Benutzer auf dem vSFTPd-Server zu aktivieren. Die Variable„$USER“ wird aus der Systemumgebungsvariable übernommen, so dass jeder FTP-Benutzer sein eigenes Home-Verzeichnis hat und nach dem Einloggen automatisch im Verzeichnis„/home/username/chroot“ abgelegt wird.

user_sub_token=$USER
local_root=/home/$USER/chroot

Füge die folgende Konfiguration hinzu, um den Bereichs-Port für die PASV-Datenverbindung des vSFTPd-Servers einzurichten.

pasv_min_port=40000
pasv_max_port=50000

Füge nun die folgende Konfiguration hinzu, um virtuelle Benutzer auf dem vSFTPd-Server zu aktivieren. Nur die Benutzer, die in der Datei„/etc/vsftpd.userlist“ eingetragen sind, dürfen sich am FTP-Server anmelden.

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Ändere die Standard-SSL/TLS-Konfiguration von vSFTPd mit Hilfe der unten stehenden Konfiguration. Dadurch werden die FTP-Benutzer gezwungen, sowohl bei der Anmeldung als auch bei der Datenübertragung eine sichere TLS-Verbindung zu verwenden, die ebenfalls nur TLSv1 nutzt.

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
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 und schließe die Datei, wenn du fertig bist.

Als Nächstes erstellst du mit dem unten stehenden Befehl eine neue Datei für die FTP-Benutzerliste. Diese Datei wird für die Definition von FTP-Benutzern benötigt.

touch /etc/vsftpd.userlist

Führe abschließend den folgenden Befehl aus, um den vSFTPd-Dienst neu zu starten und die neuen Änderungen zu übernehmen. Überprüfe und verifiziere anschließend den vSFTPd-Dienst. Du solltest sehen, dass der vSFTPd-Dienst mit einer neuen Konfiguration läuft und zusätzlich SSL/TLS aktiviert ist.

sudo systemctl restart vsftpd
sudo systemctl status vsftpd

vsftpd konfigurieren

Einrichten der UFW-Firewall

Sobald der vSFTPd-Server konfiguriert ist, ist es an der Zeit, die UFW-Firewall-Regeln für deinen FTP-Server hinzuzufügen. Du musst die FTP-TCP-Ports „20“ und „21“ zur Firewall hinzufügen, außerdem den Bereich der PASV-Datenverbindungsports, den du mit„40000:50000“ konfiguriert hast.

Bevor du Firewall-Regeln hinzufügst, musst du sicherstellen, dass die UFW-Firewall aktiviert ist. Du kannst den Status der UFW-Firewall mit dem folgenden Befehl überprüfen. Wenn du die Liste der aktivierten Regeln erhältst, ist deine Firewall aktiv.

sudo ufw status

Wenn du eine Meldung wie„inaktiv“ erhältst, musst du die UFW-Firewall mit dem folgenden Befehl aktivieren. Du musst die Anwendungsregel„OpenSSH“ hinzufügen und dann die UFW-Firewall aktivieren.

sudo ufw allow "OpenSSH"
sudo ufw enable

Füge nun die Ports„20:21“ und„40000:50000“ des vSFTPd-Dienstes mit dem unten stehenden ufw-Befehl hinzu.

sudo ufw allow 20:21/tcp
sudo ufw allow 40000:50000/tcp

Führe den folgenden Befehl aus, um den Status der UFW-Firewall neu zu laden und zu überprüfen. Nun sollten die Ports „20:21“ und „40000:50000“ zur UFW-Firewall hinzugefügt werden.

sudo ufw reload
sudo ufw status

ufw firewall einrichten

Hinzufügen des FTP-Benutzers

An diesem Punkt hast du die Konfiguration eines sicheren FTP-Servers mit vSFTPd und aktiviertem SSL/TLS abgeschlossen und dein System mit der UFW-Firewall gesichert. Jetzt ist es an der Zeit, einen FTP-Benutzer einzurichten, der ein Linux-Benutzerkonto ist.

Wenn du einen FTP-Benutzer mit der Shell„/bin/false“ oder„/usr/sbin/nologin“ einrichtest, kann sich dein FTP-Benutzer nicht am FTP-Server anmelden. Das liegt daran, dass der vSFTPd-Dienst standardmäßig den PAM-Dienst verwendet und FTP-Benutzer eine gültige Shell benötigen.

Führe nun den folgenden Befehl aus, um eine Dummy-Shell für FTP-Benutzer zu erstellen: „/bin/ftpdummy„.

echo -e '#!/bin/sh\necho "Shell for FTP users only."' | sudo tee -a  /bin/ftpdummy
sudo chmod a+x /bin/ftpdummy

Füge die neue Shell „/bin/ftpdummy“ in die Konfigurationsdatei „/etc/shells“ ein. Jetzt kannst du neue FTP-Benutzer anlegen.

sudo echo "/bin/ftpdummy" >> /etc/shells

Einrichtung Dummyshell

In dieser Demo werden wir den Benutzer mit dem Namen„alice“ als FTP-Benutzer verwenden. Führe nun den folgenden Befehl aus, um einen neuen Benutzer mit dem Namen„alice“ und der Standardshell „/bin/ftpdummy“ zu erstellen. Dann kannst du ein Passwort für den neuen Benutzer einrichten; achte darauf, dass du ein sicheres Passwort verwendest.

sudo useradd -m -s /bin/ftpdummy alice
sudo passwd alice

Neuen Benutzer anlegen

Als Nächstes erstellst du mit dem unten stehenden Befehl ein neues„chroot„-Verzeichnis unter dem Home-Verzeichnis des Benutzers. Wenn sich der Benutzer „alice“ am FTP-Server anmeldet, wird das „chroot“-Verzeichnis zum Standard-Home-Verzeichnis.

mkdir -p /home/alice/chroot

Erstelle unter dem„chroot„-Verzeichnis ein weiteres Verzeichnis mit den Namen „data“ und „upload“. Beide Verzeichnisse werden von den FTP-Nutzern zum Hochladen ihrer Dateien verwendet.

mkdir -p /home/alice/chroot/{data,upload}

Führe nun den unten stehenden Befehl aus, um die korrekten Rechte und den Eigentümer des FTP-Datenverzeichnisses zu ändern. Das„chroot„-Verzeichnis muss die Berechtigung„550“ haben, aber die Verzeichnisse„data“ und„upload“ müssen die Berechtigung„750“ haben, damit der Benutzer Dateien in sie schreiben/ hochladen kann.

sudo chown -R alice: /home/alice/chroot
sudo chmod 550 /home/alice/chroot
sudo chown -R alice: /home/alice/chroot/{data,upload}
sudo chmod 750 /home/alice/chroot/{data,upload}

Als Nächstes fügst du den Benutzer„alice“ mit folgendem Befehl zur vSFTPd-Benutzerlistendatei „/etc/vsftpd.userlist“ hinzu. Dann kannst du den vSFTPd-Dienst neu starten, um die Änderungen zu übernehmen. Dein neuer FTP-Benutzer ist jetzt bereit.

echo "alice" >> /etc/vsftpd.userlist
sudo systemctl restart vsftpd

chroot und Datenverzeichnis einrichten

Verbindung mit dem FTP-Server herstellen

Du hast die Installation und Konfiguration des FTP-Servers mit vSFTPd auf dem Ubuntu-Server abgeschlossen. Jetzt kannst du dich beim FTP-Server anmelden und die Einstellungen überprüfen.

Vergewissere dich, dass du die FTP-Client-Anwendung auf deinem lokalen Rechner installiert hast. In dieser Demo werden wir „FileZilla“ verwenden, einen kostenlosen und quelloffenen FTP-Client, der auf Linux, Windows und macOS installiert werden kann.

Öffne deine FTP-Client-Software und gib die Host/IP-Adresse, den Benutzernamen und das Passwort deines FTP-Servers ein. Klicke dann auf die Schaltfläche„Schnellverbindung„.

Nun wirst du aufgefordert, das selbstsignierte Zertifikat des FTP-Servers zu akzeptieren. Wähle die Option„Vertrauen ... “ und klicke auf„OK„.

vertrauenswürdige Zertifikate

Nachdem du dich verbunden hast, wirst du im Chroot-Hauptverzeichnis des Gefängnisses eingeloggt und hast zwei Verzeichnisse„data“ und„upload„. Du kannst keine Dateien in das Chroot-Jail-Verzeichnis hochladen, aber du kannst Dateien in die Verzeichnisse„data“ und„upload“ hochladen.

Test-Upload-Dateien

Fazit

Herzlichen Glückwunsch! Mit diesem Beitrag hast du erfolgreich einen FTP-Server mit vSFTPD auf dem Ubuntu 22.04 Server eingerichtet. Außerdem ist dein FTP-Server durch TLS/SSL-Verbindungen gesichert und mit der UFW-Firewall abgesichert. Jetzt kannst du weitere FTP-Benutzer für deinen Client-Zugang hinzufügen.

Das könnte dich auch interessieren …