Debian-FTP-Server: So installieren und konfigurieren Sie Ihren eigenen Server
Das File-Transfer-Protocol (FTP) gehört zu den gefragtesten Dateiübertragungstechniken und kommt oft beim Up- und Download von Dateien auf Webspaces zum Einsatz. Wir zeigen Ihnen, wie Sie einen solchen FTP-Server inklusive TLS-Verschlüsselung unter Debian einrichten.
Installation eines Debian-FTP-Servers
Bevor Sie sich mit der Einrichtung und Konfiguration auseinandersetzen können, müssen Sie zunächst die passende Server-Software finden und installieren. Für Linux existieren diverse FTP-Server, die größtenteils Open Source und in der Regel in den Paketverwaltungen der jeweiligen Linux-Distribution zu finden sind.
Eine der bekanntesten Anwendungen ist das GPL-lizenzierte ProFTPD, das dank seines modularen Aufbaus hochgradig erweiterbar ist. Die Haupt-Konfigurationsdatei funktioniert auf Basis von Direktiven und Direktiven-Gruppen, die allen Administrierenden vertraut vorkommen dürften, die sich mit Apache-Webservern auskennen. Auch Debian führt ProFTPD standardmäßig im Software-Repository. Die Installation erfolgt also auf dem üblichen Weg über das Terminal und mit folgenden Befehlen:
sudo apt update
sudo apt install proftpd
sudo apt install proftpd-mod-crypto
bashFalls der FTP-Server bei einem System-Neustart automatisch starten soll, sollten Sie zusätzlich den folgenden Befehl ausführen:
sudo systemctl enable proftpd
bashSie möchten Daten speichern oder transferieren? Dann jetzt Secure FTP Server mieten bei IONOS. Sichere Übertragung dank SSH und SSL/TLS sowie tägliche Backups inklusive.
Um die Installation abzuschließen, gilt es, im Anschluss zu entscheiden, ob man ProFTPD im Servermodus (standalone) oder als einen von inetd gesteuerten Dienst nutzen möchte. In erstgenannten Fall kümmert sich der FTP-Server eigenständig um eingehende Anfragen. Bei der zweiten Variante nimmt der „Superserver“ inetd/xinetd die Anfragen entgegen und leitet diese an den FTP-Server weiter (das ist allerdings nur interessant, wenn sehr wenig FTP-Traffic erwartet wird).
- Bis zu 1 Gbit/s Bandbreite & unbegrenzt Traffic
- Schneller NVMe-SSD-Speicher
- Kostenlose Plesk Web Host Edition
FTP-Server auf Debian: 5 Szenarien und der passende IONOS Server-Tarif
Sie sind unsicher, welche Hardware- und Netzwerkkonfiguration Sie für Ihren Debian-FTP-Server benötigen? In der folgenden Tabelle haben wir drei mögliche Einsatzszenarien für einen FTP-Server aufgeführt und den jeweils am besten geeigneten Server-Tarif von IONOS vorgeschlagen.
FTP-Server-Szenario | Passender IONOS-Tarif |
---|---|
Kleiner Webserver | VPS Linux M |
Größerer Webserver | VPS Linux XL |
Enterprise-FTP-Server | Dedicated Server AMD Ryzen XXL-128 NVMe |
Debian-FTP-Server-Tutorial: Die wichtigsten Konfigurationsschritte
Nach der Installation können Sie damit beginnen, ProFTPD einzurichten. Die hierfür notwendige Konfigurationsdatei proftpd.conf befindet sich im Verzeichnis /etc/proftpd/. Um sie zu bearbeiten, öffnen Sie sie mit dem Editor Ihrer Wahl. Mit dem Debian-Standardprogramm nano gelingt dies beispielsweise durch folgendes Terminal-Kommando:
sudo nano /etc/proftpd/proftpd.conf
bashIn den verschiedenen Zeilen finden Sie die wichtigsten Einstellungsmöglichkeiten und Funktionen des Debian-FTP-Servers. Jede Komponente erhält dabei eine eigene Zeile und erfordert fest definierte Werte: Geht es beispielsweise darum, ob eine Funktion genutzt werden soll, sind entweder der Wert „on“ (Funktion aktiviert) oder der Wert „off“ (Funktion deaktiviert) möglich. Zusätzlich kann einer Zeile das Rautezeichen (#) vorangestellt werden, um sie „auszukommentieren“. Der ProFTPD-Server ignoriert die Zeile dann komplett, weshalb diese Notation auch eine weitere Option darstellt, um Funktionen zu deaktivieren.
Statt der proftpd.conf-Datei können Sie auch eine eigene Konfigurationsdatei nutzen und im Verzeichnis /etc/proftpd/conf.d/ ablegen. Dieses Verzeichnis bleibt bei Aktualisierungen der FTP-Software unberührt – Sie verringern also durch einen einfachen Schritt das Risiko, dass Ihre Einstellungen verlorengehen. Per Include-Direktive lassen sich die im conf.d-Ordner hinterlegten Server-Spezifizierungen dann problemlos in die Hauptdatei einbinden (geschieht mit der Standardkonfiguration automatisch).
Grundeinstellungen: Servername, FTP-Verzeichnis und Co.
Bevor Sie bei der der Konfiguration Ihres Debian-FTP-Servers ins Detail gehen, müssen Sie zunächst das Grund-Setup anpassen. Dabei handelt es sich um elementare Einstellungen wie die Angabe des Server-Hostnamens oder des Verzeichnisses, das Sie für den Upload und Download der Dateien bereitstellen wollen. Ferner haben Sie diverse Konfigurationsmöglichkeiten, die sich auf die potenziellen FTP-Nutzenden beziehen, wie in der folgenden Beispiel-Konfiguration deutlich wird:
ServerName "hostname/ip-adresse"
DisplayLogin "Ihre Anmeldung auf dem Debian-FTP-Server war erfolgreich!"
# Allgemeingültige Log-in-Richtlinien
<Global>
# Nur den Zugriff mit Shells zulassen, die in /etc/shells definiert sind
RequireValidShell on
# Root-Log-in verweigern
RootLogin off
# Angabe des FTP-Verzeichnisses, auf das Nutzende zugreifen dürfen
DefaultRoot Verzeichnis-Path
</Global>
# Autorisierte Nutzende/Nutzergruppen für den FTP-Log-in definieren
<Limit LOGIN>
# Anmeldung ist nur für Nutzende der beispielhaften Gruppe ftpuser möglich.
# Anstelle einer langen Auflistung wird einfach die zugelassene Gruppe negiert (!)
DenyGroup !ftpuser
</Limit>
In dieser Basis-Konfiguration wird den Nutzenden der Zugriff auf ein spezifisches Verzeichnis verliehen. Das ist unter anderem dann sinnvoll, wenn diese beispielsweise an der Pflege eines Webauftritts beteiligt sind und daher weitreichende Zugriffsrechte benötigen. Besteht die Funktion des Linux-FTP-Servers hingegen darin, den Nutzenden lediglich einen Speicherort für ihre Dateien zu bieten, sollten Sie ProFTPD so einrichten, dass der Zugriff auf das Home-Verzeichnis beschränkt ist:
# Nutzenden lediglich den Zugriff auf ihr Home-Verzeichnis erlauben
DefaultRoot ~
FTP-User erstellen
Wenn Sie neue ProFTPD-Nutzende anlegen, sollten Sie immer /bin/false als Log-in-Shell definieren. Auf diese Weise sorgen Sie dafür, dass Nutzende nur auf den FTP-Server und nicht auf das gesamte System zugreifen können. Tragen Sie also mit folgendem Terminal-Befehl zunächst /bin/false in die Datei zugelassener Shells ein:
sudo sh -c 'echo "/bin/false" >> /etc/shells'
bashAnschließend können Sie ein erstes Nutzerkonto erstellen:
sudo adduser user1 --shell /bin/false --home /home/user1
bashIn diesem Beispiel erstellen Sie einen Account mit dem Namen „user1“ und legen im gleichen Schritt auch sein Home-Verzeichnis an. Abschließend vergeben Sie für den Account ein Passwort und bestätigen das Profil. Damit dieser neu angelegte Account sich nun auch wirklich mit dem Debian-FTP-Server verbinden und Dateien in sein exklusives Verzeichnis hoch- bzw. herunterladen kann, geben Sie sein Home-Verzeichnis in der proftpd.conf an:
<Directory /home /user1>
Umask 022
AllowOverwrite off
<Limit LOGIN>
AllowUser user1
DenyAll
</Limit>
<Limit ALL>
AllowUser user1
DenyAll
</Limit>
</Directory>
Dieses Code-Beispiel schränkt das Verzeichnis auf verschiedene Arten ein, um es zum privaten Ablageort für die Dateien von user1 zu machen. Mit dem Umask-Befehl (022) wird der besitzende Account mit allen Rechten ausgestattet. Andere Nutzende dürfen Dateien hingegen lediglich lesen und sie nur dann ausführen, wenn der besitzende Account die notwendige Berechtigung erteilt. Die deaktivierte Direktive AllowOverwrite verhindert, dass beim Upload von Dateien bereits gespeicherte Daten überschrieben werden können. Schließlich sind der FTP-Log-in (Limit LOGIN) und das Ausführen von FTP-Befehlen (Limit ALL) für alle Accounts außer user1 blockiert.
Anstatt das Ausführen sämtlicher FTP-Befehle zu verbieten, können Sie auch einzelne Operationen unterbinden. Auf diese Weise lässt sich beispielsweise auch ein Verzeichnis erzeugen, in das Nutzende lediglich Dateien hochladen können. Eine ausführliche Übersicht über die verschiedenen Einstellungsmöglichkeiten finden Sie in den Online-Manuals.
Anonymen Zugriff erlauben
Wenn Sie Ihren Debian-FTP-Server so einrichten wollen, dass dieser als Server für öffentliche Downloads dient, möchten Sie in den meisten Fällen auch, dass Nutzende anonym auf die bereitgestellten Dateien zugreifen können. Hierfür definieren Sie zunächst mithilfe von chmod die notwendigen Zugriffsrechte für das spätere Download-Verzeichnis, das wir hier beispielhaft /home/ftpdownload genannt haben:
sudo chmod 755 -R /home/ftpdownload
bashDer Account, der das Verzeichnis besitzt, hat also die kompletten Rechte (7 = Lesen, Schreiben und Ausführen), während die Gruppenbenutzer und alle anderen Nutzenden lediglich lesen und ausführen (5) können. Sind die Rechte definiert, lässt sich der anonyme Zugriff in der proftpd.conf-Datei konfigurieren:
<Anonymous ~ftp>
User ftp
Group ftpgroup
# Mögliche Log-in-Profile für Clients
UserAlias anonymous ftp
# Nutzer- und Gruppeneigenschaften verschleiern und maximale Client-Zahl
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
MaxClients 10
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>
Damit nun die Anmeldung auf dem Debian-FTP-Server mit dem Profil ftp gelingt, müssen Sie es der Gruppe ftpuser hinzufügen:
sudo adduser ftp ftpgroup
bashSSL/TLS-Verschlüsselung einrichten
Das FTP-Protokoll überträgt sowohl Anmeldeinformationen als auch die versendeten Daten im Klartext. Wenn Sie einen privaten ProFTPD-Server einrichten wollen, der nicht für alle zugänglich sein soll, ist es folglich empfehlenswert, den Log-in zu verschlüsseln. Dies können Sie mithilfe der freien Software OpenSSL einrichten. Das Kryptographie-Toolkit ist standardmäßig in der Debian-Paketverwaltung enthalten und bereits installiert. Alternativ lässt sich die Installation auf dem bekannten Weg durchführen:
sudo apt install openssl
bashSchritt 1: Zertifikat und Schlüssel generieren
Anschließend nutzen Sie OpenSSL, um ein Zertifikat zu erstellen. Da Sie dieses irgendwo ablegen müssen, legen Sie zunächst den passenden Ordner im ProFTPD-Verzeichnis an:
sudo mkdir /etc/proftpd/ssl
bashZertifikat (proftpd.cert.pem) und Schlüssel (proftpd.key.pem) mit einer Lebensdauer von einem Jahr für Ihren Linux-FTP-Server generieren Sie nun unter Angabe dieses Ablageortes mit folgendem Befehl:
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
bashZusätzlich ist die Angabe einiger Informationen notwendig, um das Zertifikat ordnungsgemäß zu registrieren:
- Country Name (2 letter code): Ländercode, z. B. „DE“ für Deutschland
- State or Province Name (full name): Bundesland/Region, z. B. „Bayern“
- Locality Name (eg, city): Stadt, z. B. „München“
- Organization Name (eg, company): Name des Unternehmens bzw. Ihr Name
- Organizational Unit Name (eg, company): Angabe der Abteilung (insofern vorhanden), z. B. „IT“
- Common Name (eg, YOUR name): Angabe der zu schützenden Domain, z. B. „ftp.example.com.“
- Email Address: E-Mail-Adresse
- 100 % Enterprise-Hardware
- Minutengenaue Abrechnung
- Nur bei uns: Cloud-Funktionen
Schritt 2: SSL/TLS in ProFTPD aktivieren
Nachdem Sie Ihr eigenes Zertifikat samt Private-Key erstellt haben, müssen Sie die Verschlüsselungstechnik für den ProFTPD-Server aktivieren. Hierfür hält die Debian-FTP-Server-Software das Modul mod_tls bereit. Für die Aktivierung sind Anpassungen in der tls.conf von Nöten. Öffnen Sie die Konfigurationsdatei und suchen nach dem folgenden Eintrag:
<IfModule mod_tls.c>
TLSEngine off
Weisen Sie der TLSEngine-Direktive den Wert „on“ zu und erweitern den Abschnitt darüber hinaus folgendermaßen (z. B. indem Sie Kommentar-Rauten löschen):
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1 TLSv1.1 TLSv1.2
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
</IfModule>
Auf diese Weise haben Sie nicht nur die SSL/TLS-Verschlüsselung für Ihren Debian-FTP-Server aktiviert, sondern im gleichen Schritt auch die wichtigsten Einstellungen gemacht. So ist die Log-Datei für die Aufzeichnungen der FTP-Verbindungen (TLSLog) ebenso definiert wie die Pfade zu Zertifikat (TLSRSACertificateFile) und Schlüssel (TLSRSACertificateKeyFile). Ferner sind auch die möglichen Protokoll-Versionen (TLSProtocol) angegeben. Die letzten beiden Zeilen bewirken, dass das Modul die vom Client präsentierten Zertifikate nicht verifiziert (TLSVerifyClient) und dass die Verschlüsselung Grundvoraussetzung für den Verbindungsaufbau ist (TLSRequired). Nach einem Neustart des ProFTPD-Servers sind die Neueinstellungen wirksam:
sudo /etc/init.d/proftpd restart
bashSchritt 3: Via SSL/TLS auf dem ProFTPD-Server anmelden
Wenn Sie SSL/TLS für ProFTPD (wie in diesem Debian-FTP-Server-Tutorial empfohlen) aktiviert haben, benötigen die Benutzende einen FTP-Client, der den verschlüsselten Verbindungsaufbau unterstützt. Einer der prominentesten Vertreter ist FileZilla, der nicht nur für Debian und andere Linux-Distributionen, sondern auch für macOS und Windows verfügbar ist. Damit stellt das Open-Source-Programm die optimale Lösung dar, um von verschiedenen Plattformen auf den FTP-Server zuzugreifen.
Im Servermanager von FileZilla geben Sie bei der Auswahl des Servertyps statt FTP die gesicherte Variante FTPS („FTP durch explizites TLS/SSL“) an. Beim ersten Verbindungsaufbau mit dem Server ist es zudem notwendig, das Zertifikat zu akzeptieren.
Falls die TLS-Verbindung in FileZilla nicht aufgebaut werden kann, könnte es eventuell notwendig sein, das mod_tls-Modul manuell zu laden. Tragen Sie hierfür die folgende Zeile am Anfang von proftpd.conf ein:
LoadModule mod_tls.c
Damit diese Änderung wirksam wird, müssen Sie anschließend den Server neu starten:
sudo systemctl restart proftpd
bashDas SSH File Transfer Protocol verwendet SSH statt TLS/SSL und stellt eine schlanke, nutzerfreundliche Alternative zu FTPS dar.
ProFTPD-Konfiguration – Tipps und Tricks
Bei den hier vorgestellten Konfigurationsmöglichkeiten handelt es sich nur um eine kleine Auswahl. Die facettenreiche FTP-Software lässt noch wesentlich spezifischere und komplexere Szenarien für die Konfiguration des eigenen Servers zu. Die offizielle Website von ProFTPD bietet zu diesem Thema zahlreiche nützliche Infos. Die frei verfügbare Online-Dokumentation beinhaltet unter anderem einige Beispiel-Setups, ausführliche How-tos, FAQs sowie Erklärungen zu den einzelnen Direktiven. Ferner gibt es dort Informationen zu den verschiedenen Standard- und Zusatzmodulen.
Mögliche Fehler bei der Server-Konfiguration
In einigen Fällen kann ein Neustart des ProFTPD-Servers dazu führen, dass Sie folgende Fehlermeldung erhalten:
mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled
In diesem Fall besteht das Problem darin, dass das Cache-Module mod_tls_memcache bei der Kompilation von ProFTPD automatisch als SSL/TLS-Bestandteil aktiviert wurde. Wenn Sie die SSL/TLS-Verschlüsselung eingerichtet haben, sorgt das Modul in der Theorie (und sofern gewünscht) für die Zwischenspeicherung der verschlüsselten FTP-Sitzungen. Da Sie das Session-Caching jedoch standardmäßig nicht benötigen, haben Sie auch nicht die notwendigen Einstellungen getätigt, damit das Modul funktioniert – was wiederum zu der Fehlermeldung durch ProFTPD führt. Die Lösung dieses Problems ist simpel: Sie kommentieren das Modul bzw. den Ladeprozess des Moduls in der Konfigurationsdatei aus:
# LoadModule mod_tls_memcache.c
Neben dem Caching-Modul-Problem zählt auch ein fehlerhafter Verbindungsaufbau zu den Komplikationen, die nach der Einrichtung des Debian-FTP-Servers auftreten können. Um diesem Problem auf den Zahn zu fühlen, können Sie auf verschiedene Analyse-Optionen zurückgreifen:
1. Testen, ob der ProFTPD-Server läuft:
sudo service proftpd status
bash2. Testen, ob der ProFTPD-Server auf dem TCP-Port 21 lauscht, um eingehende FTP-Anfragen zu registrieren:
sudo netstat -tlp|grep proftpd
bash3. Fehlermeldungen im ProFTPD-Log überprüfen:
sudo tail -20 /var/log/proftpd/proftpd.log
bash4. Fehlermeldungen im TLS-Log überprüfen:
sudo tail -20 /var/log/proftpd/tls.log
bash5. Verbindungstests auf Port 21 mit telnet:
sudo telnet [IP-Adresse] 21
bash6. Verbindungstests auf Port 21 mit TLS:
sudo openssl s_client -connect [IP-Adresse]:21 -starttls ftp
bash