Das File-Transfer-Protocol (FTP) gehört zu den ge­frag­tes­ten Da­tei­über­tra­gungs­tech­ni­ken und kommt oft beim Up- und Download von Dateien auf Webspaces zum Einsatz. Wir zeigen Ihnen, wie Sie einen solchen FTP-Server inklusive TLS-Ver­schlüs­se­lung unter Debian ein­rich­ten.

In­stal­la­ti­on eines Debian-FTP-Servers

Bevor Sie sich mit der Ein­rich­tung und Kon­fi­gu­ra­ti­on aus­ein­an­der­set­zen können, müssen Sie zunächst die passende Server-Software finden und in­stal­lie­ren. Für Linux exis­tie­ren diverse FTP-Server, die größ­ten­teils Open Source und in der Regel in den Pa­ket­ver­wal­tun­gen der je­wei­li­gen Linux-Dis­tri­bu­ti­on zu finden sind.

Eine der be­kann­tes­ten An­wen­dun­gen ist das GPL-li­zen­zier­te ProFTPD, das dank seines modularen Aufbaus hoch­gra­dig er­wei­ter­bar ist. Die Haupt-Kon­fi­gu­ra­ti­ons­da­tei funk­tio­niert auf Basis von Di­rek­ti­ven und Di­rek­ti­ven-Gruppen, die allen Ad­mi­nis­trie­ren­den vertraut vorkommen dürften, die sich mit Apache-Web­ser­vern auskennen. Auch Debian führt ProFTPD stan­dard­mä­ßig im Software-Re­po­si­to­ry. Die In­stal­la­ti­on 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
bash

Falls der FTP-Server bei einem System-Neustart au­to­ma­tisch starten soll, sollten Sie zu­sätz­lich den folgenden Befehl ausführen:

sudo systemctl enable proftpd
bash
Tipp

Sie möchten Daten speichern oder trans­fe­rie­ren? Dann jetzt Secure FTP Server mieten bei IONOS. Sichere Über­tra­gung dank SSH und SSL/TLS sowie tägliche Backups inklusive.

Um die In­stal­la­ti­on ab­zu­schlie­ßen, gilt es, im Anschluss zu ent­schei­den, ob man ProFTPD im Ser­ver­mo­dus (stan­da­lo­ne) oder als einen von inetd ge­steu­er­ten Dienst nutzen möchte. In erst­ge­nann­ten Fall kümmert sich der FTP-Server ei­gen­stän­dig um ein­ge­hen­de Anfragen. Bei der zweiten Variante nimmt der „Su­per­ser­ver“ inetd/xinetd die Anfragen entgegen und leitet diese an den FTP-Server weiter (das ist al­ler­dings nur in­ter­es­sant, wenn sehr wenig FTP-Traffic erwartet wird).

vServer / VPS
VPS un­schlag­bar günstig auf Dell En­ter­pri­se Servern
  • 1 Gbit/s, un­be­grenzt Traffic & mehr Cores
  • Min­des­tens 99,99% Ver­füg­bar­keit & ISO-zer­ti­fi­zier­te Re­chen­zen­tren
  • Aus­ge­zeich­ne­ter 24/7 Premium-Support mit per­sön­li­chem Berater

FTP-Server auf Debian: 5 Szenarien und der passende IONOS Server-Tarif

Sie sind unsicher, welche Hardware- und Netz­werk­kon­fi­gu­ra­ti­on Sie für Ihren Debian-FTP-Server benötigen? In der folgenden Tabelle haben wir drei mögliche Ein­satz­sze­na­ri­en für einen FTP-Server auf­ge­führt und den jeweils am besten ge­eig­ne­ten Server-Tarif von IONOS vor­ge­schla­gen.

FTP-Server-Szenario Passender IONOS-Tarif
Kleiner Webserver VPS Linux M
Größerer Webserver VPS Linux XL
En­ter­pri­se-FTP-Server Dedicated Server AMD Ryzen XXL-128 NVMe

Debian-FTP-Server-Tutorial: Die wich­tigs­ten Kon­fi­gu­ra­ti­ons­schrit­te

Nach der In­stal­la­ti­on können Sie damit beginnen, ProFTPD ein­zu­rich­ten. Die hierfür not­wen­di­ge Kon­fi­gu­ra­ti­ons­da­tei proftpd.conf befindet sich im Ver­zeich­nis /etc/proftpd/. Um sie zu be­ar­bei­ten, öffnen Sie sie mit dem Editor Ihrer Wahl. Mit dem Debian-Stan­dard­pro­gramm nano gelingt dies bei­spiels­wei­se durch folgendes Terminal-Kommando:

sudo nano /etc/proftpd/proftpd.conf
bash

In den ver­schie­de­nen Zeilen finden Sie die wich­tigs­ten Ein­stel­lungs­mög­lich­kei­ten und Funk­tio­nen des Debian-FTP-Servers. Jede Kom­po­nen­te erhält dabei eine eigene Zeile und erfordert fest de­fi­nier­te Werte: Geht es bei­spiels­wei­se darum, ob eine Funktion genutzt werden soll, sind entweder der Wert „on“ (Funktion aktiviert) oder der Wert „off“ (Funktion de­ak­ti­viert) möglich. Zu­sätz­lich kann einer Zeile das Rau­te­zei­chen (#) vor­an­ge­stellt werden, um sie „aus­zu­kom­men­tie­ren“. Der ProFTPD-Server ignoriert die Zeile dann komplett, weshalb diese Notation auch eine weitere Option darstellt, um Funk­tio­nen zu de­ak­ti­vie­ren.

Tipp

Statt der proftpd.conf-Datei können Sie auch eine eigene Kon­fi­gu­ra­ti­ons­da­tei nutzen und im Ver­zeich­nis /etc/proftpd/conf.d/ ablegen. Dieses Ver­zeich­nis bleibt bei Ak­tua­li­sie­run­gen der FTP-Software unberührt – Sie ver­rin­gern also durch einen einfachen Schritt das Risiko, dass Ihre Ein­stel­lun­gen ver­lo­ren­ge­hen. Per Include-Direktive lassen sich die im conf.d-Ordner hin­ter­leg­ten Server-Spe­zi­fi­zie­run­gen dann pro­blem­los in die Haupt­da­tei einbinden (geschieht mit der Stan­dard­kon­fi­gu­ra­ti­on au­to­ma­tisch).

Grund­ein­stel­lun­gen: Ser­ver­na­me, FTP-Ver­zeich­nis und Co.

Bevor Sie bei der der Kon­fi­gu­ra­ti­on Ihres Debian-FTP-Servers ins Detail gehen, müssen Sie zunächst das Grund-Setup anpassen. Dabei handelt es sich um ele­men­ta­re Ein­stel­lun­gen wie die Angabe des Server-Host­na­mens oder des Ver­zeich­nis­ses, das Sie für den Upload und Download der Dateien be­reit­stel­len wollen. Ferner haben Sie diverse Kon­fi­gu­ra­ti­ons­mög­lich­kei­ten, die sich auf die po­ten­zi­el­len FTP-Nutzenden beziehen, wie in der folgenden Beispiel-Kon­fi­gu­ra­ti­on deutlich wird:

# Angabe von Hostname und Willkommensnachricht
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-Kon­fi­gu­ra­ti­on wird den Nutzenden der Zugriff auf ein spe­zi­fi­sches Ver­zeich­nis verliehen. Das ist unter anderem dann sinnvoll, wenn diese bei­spiels­wei­se an der Pflege eines Web­auf­tritts beteiligt sind und daher weit­rei­chen­de Zu­griffs­rech­te benötigen. Besteht die Funktion des Linux-FTP-Servers hingegen darin, den Nutzenden lediglich einen Spei­cher­ort für ihre Dateien zu bieten, sollten Sie ProFTPD so ein­rich­ten, dass der Zugriff auf das Home-Ver­zeich­nis be­schrä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 de­fi­nie­ren. 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 zu­ge­las­se­ner Shells ein:

sudo sh -c 'echo "/bin/false" >> /etc/shells'
bash

An­schlie­ßend können Sie ein erstes Nut­zer­kon­to erstellen:

sudo adduser user1 --shell /bin/false --home /home/user1
bash

In diesem Beispiel erstellen Sie einen Account mit dem Namen „user1“ und legen im gleichen Schritt auch sein Home-Ver­zeich­nis an. Ab­schlie­ßend vergeben Sie für den Account ein Passwort und be­stä­ti­gen das Profil. Damit dieser neu angelegte Account sich nun auch wirklich mit dem Debian-FTP-Server verbinden und Dateien in sein ex­klu­si­ves Ver­zeich­nis hoch- bzw. her­un­ter­la­den kann, geben Sie sein Home-Ver­zeich­nis 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 Ver­zeich­nis auf ver­schie­de­ne Arten ein, um es zum privaten Ablageort für die Dateien von user1 zu machen. Mit dem Umask-Befehl (022) wird der be­sit­zen­de Account mit allen Rechten aus­ge­stat­tet. Andere Nutzende dürfen Dateien hingegen lediglich lesen und sie nur dann ausführen, wenn der be­sit­zen­de Account die not­wen­di­ge Be­rech­ti­gung erteilt. Die de­ak­ti­vier­te Direktive Al­lo­wO­ver­wri­te ver­hin­dert, dass beim Upload von Dateien bereits ge­spei­cher­te Daten über­schrie­ben 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.

Tipp

Anstatt das Ausführen sämt­li­cher FTP-Befehle zu verbieten, können Sie auch einzelne Ope­ra­tio­nen un­ter­bin­den. Auf diese Weise lässt sich bei­spiels­wei­se auch ein Ver­zeich­nis erzeugen, in das Nutzende lediglich Dateien hochladen können. Eine aus­führ­li­che Übersicht über die ver­schie­de­nen Ein­stel­lungs­mög­lich­kei­ten finden Sie in den Online-Manuals.

Anonymen Zugriff erlauben

Wenn Sie Ihren Debian-FTP-Server so ein­rich­ten wollen, dass dieser als Server für öf­fent­li­che Downloads dient, möchten Sie in den meisten Fällen auch, dass Nutzende anonym auf die be­reit­ge­stell­ten Dateien zugreifen können. Hierfür de­fi­nie­ren Sie zunächst mithilfe von chmod die not­wen­di­gen Zu­griffs­rech­te für das spätere Download-Ver­zeich­nis, das wir hier bei­spiel­haft /home/ftpdown­load genannt haben:

sudo chmod 755 -R /home/ftpdownload
bash

Der Account, der das Ver­zeich­nis besitzt, hat also die kom­plet­ten Rechte (7 = Lesen, Schreiben und Ausführen), während die Grup­pen­be­nut­zer 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 kon­fi­gu­rie­ren:

<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 hin­zu­fü­gen:

sudo adduser ftp ftpgroup
bash

SSL/TLS-Ver­schlüs­se­lung ein­rich­ten

Das FTP-Protokoll überträgt sowohl An­mel­de­infor­ma­tio­nen als auch die ver­sen­de­ten Daten im Klartext. Wenn Sie einen privaten ProFTPD-Server ein­rich­ten wollen, der nicht für alle zu­gäng­lich sein soll, ist es folglich emp­feh­lens­wert, den Log-in zu ver­schlüs­seln. Dies können Sie mithilfe der freien Software OpenSSL ein­rich­ten. Das Kryp­to­gra­phie-Toolkit ist stan­dard­mä­ßig in der Debian-Pa­ket­ver­wal­tung enthalten und bereits in­stal­liert. Al­ter­na­tiv lässt sich die In­stal­la­ti­on auf dem bekannten Weg durch­füh­ren:

sudo apt install openssl
bash

Schritt 1: Zer­ti­fi­kat und Schlüssel ge­ne­rie­ren

An­schlie­ßend nutzen Sie OpenSSL, um ein Zer­ti­fi­kat zu erstellen. Da Sie dieses irgendwo ablegen müssen, legen Sie zunächst den passenden Ordner im ProFTPD-Ver­zeich­nis an:

sudo mkdir /etc/proftpd/ssl
bash

Zer­ti­fi­kat (proftpd.cert.pem) und Schlüssel (proftpd.key.pem) mit einer Le­bens­dau­er von einem Jahr für Ihren Linux-FTP-Server ge­ne­rie­ren Sie nun unter Angabe dieses Ab­la­ge­or­tes mit folgendem Befehl:

openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
bash

Zu­sätz­lich ist die Angabe einiger In­for­ma­tio­nen notwendig, um das Zer­ti­fi­kat ord­nungs­ge­mäß zu re­gis­trie­ren:

  • Country Name (2 letter code): Län­der­code, z. B. „DE“ für Deutsch­land
  • State or Province Name (full name): Bun­des­land/Region, z. B. „Bayern
  • Locality Name (eg, city): Stadt, z. B. „München
  • Or­ga­niza­ti­on Name (eg, company): Name des Un­ter­neh­mens bzw. Ihr Name
  • Or­ga­niza­tio­nal Unit Name (eg, company): Angabe der Abteilung (insofern vorhanden), z. B. „IT
  • Common Name (eg, YOUR name): Angabe der zu schüt­zen­den Domain, z. B. „ftp.example.com.
  • Email Address: E-Mail-Adresse
Dedicated Server
De­di­zier­te Server mit mo­derns­ten Pro­zes­so­ren
  • 100 % En­ter­pri­se-Hardware
  • Kon­fi­gu­rier­ba­re Hardware-Aus­stat­tung
  • ISO-zer­ti­fi­zier­te Re­chen­zen­tren

Schritt 2: SSL/TLS in ProFTPD ak­ti­vie­ren

Nachdem Sie Ihr eigenes Zer­ti­fi­kat samt Private-Key erstellt haben, müssen Sie die Ver­schlüs­se­lungs­tech­nik für den ProFTPD-Server ak­ti­vie­ren. Hierfür hält die Debian-FTP-Server-Software das Modul mod_tls bereit. Für die Ak­ti­vie­rung sind An­pas­sun­gen in der tls.conf von Nöten. Öffnen Sie die Kon­fi­gu­ra­ti­ons­da­tei 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 fol­gen­der­ma­ß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-Ver­schlüs­se­lung für Ihren Debian-FTP-Server aktiviert, sondern im gleichen Schritt auch die wich­tigs­ten Ein­stel­lun­gen gemacht. So ist die Log-Datei für die Auf­zeich­nun­gen der FTP-Ver­bin­dun­gen (TLSLog) ebenso definiert wie die Pfade zu Zer­ti­fi­kat (TLSR­SA­Cer­ti­fi­ca­te­Fi­le) und Schlüssel (TLSR­SA­Cer­ti­fi­ca­te­Key­Fi­le). Ferner sind auch die möglichen Protokoll-Versionen (TLS­Pro­to­col) angegeben. Die letzten beiden Zeilen bewirken, dass das Modul die vom Client prä­sen­tier­ten Zer­ti­fi­ka­te nicht ve­ri­fi­ziert (TLS­Ve­ri­f­y­Cli­ent) und dass die Ver­schlüs­se­lung Grund­vor­aus­set­zung für den Ver­bin­dungs­auf­bau ist (TLS­Re­qui­red). Nach einem Neustart des ProFTPD-Servers sind die Neu­ein­stel­lun­gen wirksam:

sudo /etc/init.d/proftpd restart
bash

Schritt 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 Be­nut­zen­de einen FTP-Client, der den ver­schlüs­sel­ten Ver­bin­dungs­auf­bau un­ter­stützt. Einer der pro­mi­nen­tes­ten Vertreter ist FileZilla, der nicht nur für Debian und andere Linux-Dis­tri­bu­tio­nen, sondern auch für macOS und Windows verfügbar ist. Damit stellt das Open-Source-Programm die optimale Lösung dar, um von ver­schie­de­nen Platt­for­men auf den FTP-Server zu­zu­grei­fen.

Im Ser­ver­ma­na­ger von FileZilla geben Sie bei der Auswahl des Ser­ver­typs statt FTP die ge­si­cher­te Variante FTPS („FTP durch ex­pli­zi­tes TLS/SSL“) an. Beim ersten Ver­bin­dungs­auf­bau mit dem Server ist es zudem notwendig, das Zer­ti­fi­kat zu ak­zep­tie­ren.

Falls die TLS-Ver­bin­dung 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 an­schlie­ßend den Server neu starten:

sudo systemctl restart proftpd
bash
Tipp

Das SSH File Transfer Protocol verwendet SSH statt TLS/SSL und stellt eine schlanke, nut­zer­freund­li­che Al­ter­na­ti­ve zu FTPS dar.

ProFTPD-Kon­fi­gu­ra­ti­on – Tipps und Tricks

Bei den hier vor­ge­stell­ten Kon­fi­gu­ra­ti­ons­mög­lich­kei­ten handelt es sich nur um eine kleine Auswahl. Die fa­cet­ten­rei­che FTP-Software lässt noch we­sent­lich spe­zi­fi­sche­re und kom­ple­xe­re Szenarien für die Kon­fi­gu­ra­ti­on des eigenen Servers zu. Die of­fi­zi­el­le Website von ProFTPD bietet zu diesem Thema zahl­rei­che nützliche Infos. Die frei ver­füg­ba­re Online-Do­ku­men­ta­ti­on be­inhal­tet unter anderem einige Beispiel-Setups, aus­führ­li­che How-tos, FAQs sowie Er­klä­run­gen zu den einzelnen Di­rek­ti­ven. Ferner gibt es dort In­for­ma­tio­nen zu den ver­schie­de­nen Standard- und Zu­satz­mo­du­len.

Mögliche Fehler bei der Server-Kon­fi­gu­ra­ti­on

In einigen Fällen kann ein Neustart des ProFTPD-Servers dazu führen, dass Sie folgende Feh­ler­mel­dung 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 Kom­pi­la­ti­on von ProFTPD au­to­ma­tisch als SSL/TLS-Be­stand­teil aktiviert wurde. Wenn Sie die SSL/TLS-Ver­schlüs­se­lung ein­ge­rich­tet haben, sorgt das Modul in der Theorie (und sofern gewünscht) für die Zwi­schen­spei­che­rung der ver­schlüs­sel­ten FTP-Sitzungen. Da Sie das Session-Caching jedoch stan­dard­mä­ßig nicht benötigen, haben Sie auch nicht die not­wen­di­gen Ein­stel­lun­gen getätigt, damit das Modul funk­tio­niert – was wiederum zu der Feh­ler­mel­dung durch ProFTPD führt. Die Lösung dieses Problems ist simpel: Sie kom­men­tie­ren das Modul bzw. den La­de­pro­zess des Moduls in der Kon­fi­gu­ra­ti­ons­da­tei aus:

# LoadModule mod_tls_memcache.c

Neben dem Caching-Modul-Problem zählt auch ein feh­ler­haf­ter Ver­bin­dungs­auf­bau zu den Kom­pli­ka­tio­nen, die nach der Ein­rich­tung des Debian-FTP-Servers auftreten können. Um diesem Problem auf den Zahn zu fühlen, können Sie auf ver­schie­de­ne Analyse-Optionen zu­rück­grei­fen:

1. Testen, ob der ProFTPD-Server läuft:

sudo service proftpd status
bash

2. Testen, ob der ProFTPD-Server auf dem TCP-Port 21 lauscht, um ein­ge­hen­de FTP-Anfragen zu re­gis­trie­ren:

sudo netstat -tlp|grep proftpd
bash

3. Feh­ler­mel­dun­gen im ProFTPD-Log über­prü­fen:

sudo tail -20 /var/log/proftpd/proftpd.log
bash

4. Feh­ler­mel­dun­gen im TLS-Log über­prü­fen:

sudo tail -20 /var/log/proftpd/tls.log
bash

5. Ver­bin­dungs­tests auf Port 21 mit telnet:

sudo telnet [IP-Adresse] 21
bash

6. Ver­bin­dungs­tests auf Port 21 mit TLS:

sudo openssl s_client -connect  [IP-Adresse]:21 -starttls ftp
bash
Zum Hauptmenü