Home > Server > Raspberry Pi als FTP-Server betreiben

Raspberry Pi als FTP-Server betreiben

Der Raspberry Pi eignet sich wegen seines minimalen Stromverbrauchs bestens um über das File Transfer Protokol (FTP) Dateien auszutauschen oder über das Internet zwischen FTP-Servern zu übertragen. In diesem Artikel zeige ich euch wie ihr euren Raspberry Pi unter Raspbian zum FTP-Server macht und über das Internet Dateien hoch- bzw. runterladen könnt.

raspberry-pi-ftp-server

 

Der Ftp Server ProFTPD

Als FTP-Server Software möchte ich ProFTP verwenden, der Server ist ein sehr weit verbreiteter FTP-Server für Linux und Unix-Plattformen, der die Standards FTP, SFTP, und FTPS unterstützt. ProFTPD besitzt im Vergleich zu anderer FTP-Server Software vielfältige Konfigurationsmöglichkeiten und eignet sich daher auch für komplexere Projekte. Zusätzlich ist ProFTP in den Standard-Quellen von Raspbian verfügbar sodass keine extra Arbeit notwendig ist.

FTP-Server auf dem Raspberry Pi installieren

Nachdem wir uns via SSH auf dem Raspberry Pi angemeldet haben aktualisieren wir via APT erst mal die Quellen und veraltete Pakete.

Danach installieren wir direkt das ProFTPD Paket

Nach dem Start der Installation wird direkt abgefragt ob der FTP-Server als Dienst von inet.d oder als eigenständiger Dienst (Standalone) gestartet werden soll, ich wähle in diesem Beispiel die Methode via Standalone. Der unterschied ist das beim Standalone Betrieb der FTP-Server alle Verbindungen selber handhabt anstelle über den inet.d zu gehen und für jede Verbindung einen neuen Prozess zu starten. Des Weiteren müssen wir keine anderen Konfigurationen anpassen.

proftpd

Nach Abschluss der Installation unseres FTP-Servers können wir mit der Konfiguration beginnen, alle Konfigurationsdateien befinden sich unter /etc/proftd/, auch die wichtigste proftpd.conf in welcher wir die Basiseinstellungen vornehmen.

proftpd-config

Wir öffnen also die Konfigurationsdatei proftpd.conf mit dem Editor Nano

Ich deaktiviere den IPv6 Support indem ich das on durch off ersetze, da ich in meinem Heimnetz kein IPv6 verwende ändere ich den ServerName in raspberrypi

proftpd-configdatei

Gespeichert wird bei Nano wie immer mit STRG+X, Y und Enter. Weitere Parameter könnt ihr nach Bedarf anpassen eine Beschreibung der Parameter findet ihr auf der Projektseite.

Da wir bei einem Update von proFTPD nicht möchten das unsere speziellen Konfigurationen überschrieben oder verändert werden legen wir hierfür eine extra Konfigurationsdatei unter /etc/proftd/conf.d/ an, diese werden bei einem Update nicht überschrieben.

In die proftp-custom.conf fügen wir folgenden Inhalt ein. Das bewirkt das Benutzer keine valide Shell benötigen und Mitglied der Gruppe ftpuser sein müssen um sich anmelden zu dürfen.

Dann erstellen wir uns noch einen Benutzer für den FTP Zugriff, da wir nicht mit dem Benutzer pi zugreifen möchten. Wir erstellen ein eigenen Benutzer, ohne gültiger Login Shell und mit dem Homeverzeichnis /var/www/upload/ . Folglich landen alle Dateien die dieser Benutzer hochgeladen hat unter /var/www/upload/ ein Zugriff auf andere Dateien und Verzeichnisse ist in dieser Konfiguration nicht möglich (anders würde ich das via Internet auch nicht empfehlen).

Tragt notwendige Informationen ein und wählt ein sicheres Passwort für den neuen Benutzer ftpuser

proftpd-user

Solltet ihr einen Fehler erhalten dass das Modul memcache nicht geladen werden kann “unable to register ‘memcache’ SSL session cache: Memcache support not enabled” müsst ihr noch das Memcache Modul deaktivieren. Öffnet hierzu die Datei Modules.conf in nano

Fügt vor die Zeile “LoadModule mod_tls_memcache.c” eine Raute ein (diese findet ganz am Ende der Datei).

Wieder speichern mit STRG+X,Y und Enter.

Danach starten wir unseren Server einmal neu um die Änderungen zu übernehmen.

Die Einrichtung ist nun abgeschlossen und Ihr könnt euch innerhalb eures Heimnetzes mit dem erstellten Benutzer ftpuser und dem vergebenen Passwort Dateien hochladen und von dort abholen. Die Dateien landen wie erwähnt in /var/www/upload/. Der Port ist der Standard FTP Port 21.

Ich verwende FileZilla als FTP Client, die IP-Adresse müsst ihr natürlich mit der IP-Adresse eures Raspberry Pi ersetzen.

filezilla

FTP-Server absichern

Bevor wir den FTP-Server über das Internet erreichbar machen sollten wir noch sicherstellen das die Übertragung verschlüsselt stattfindet, Problem bei FTP ist das im Standard Benutzer und Passwort als auch die Daten im Klartext übertragen werden und so für jeden lesbar sind. Wir sichern unseren Server daher mit einem eigens generierten SSL Zertifikat ab um dies zu verhindern.

Als erstes installieren wir die Tools um unser eigenes selbst signiertes Zertifikat erstellen zu können (die Methode mag Ubuntu Benutzern bekannt vorkommen)

Wir generieren dann ein Zertifikat (auch snakeoil genannt)

Euer privater Schlüssel des Zertifikats wird unter /etc/ssl/private/ssl-cert-snakeoil.key gespeichert, der öffentliche Teil für den FTP-Server landet unter /etc/ssl/certs/ssl-cert-snakeoil.pem. Euer privater Schlüssel muss unter allen Umständen geheim bleiben, das gewährleistet das nur der FTP-Server selbst die übertragenen Daten entschlüsseln kann.

Jetzt aktivieren wir noch das TLS Modul um FTP-Server um die Verschlüsselung zu aktivieren.

Wir fügen folgenden Inhalt ein. Das aktiviert die verschlüsselte Übertragung und sagt dem FTP-Server wo er die notwendigen Dateien findet.

Wir starten unseren Server einmal neu um die Änderungen zu übernehmen.

 

Wichtig! Da wir TLSRequired On gesetzt haben werden nur noch gesicherte Verbindungen angenommen, unverschlüsselte sind nicht möglich. Nicht alle FTP-Clients unterstützen FTP mit TLS, bei FileZilla müsst ihr einen neuen FTP-Server anlegen und folgendes einstellen um euch verbinden zu können.

filezilla-tls

Klappt das nicht könnt ihr TLSRequired auch auf off setzen, das kann ich aber nicht empfehlen!

FTP-Server über das Internet erreichbar machen

Euren FTP-Server auf dem Raspberry Pi könnt ihr nun über das Internet erreichbar machen. Hierzu sind zwei Schritte notwendig

Viel Spaß!

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (3 votes, durchschnittlich: 4,67 von 5)
Loading...

Über raspberry.tips

13 Kommentare

  1. ich habe nun nur das problem, dass mein ftpuser keine rechte hat irgend was zu schreiben, also ich kann keine orner erstellen und keine dateien hochladen… ich habe aber nicht /var/www… als home gesetzt sondern meinen 64GB USB-Stick unter dem Moutpoint /USB-FTP ich weiß nicht woran das liegt…

  2. Falls jemand Interesse daran hat aus dem Internet auf den ftp Server zuzugreifen kann es zu Problemen mit den PassivPorts kommen. Wenn man diese in der proftpd.conf festlegt und im Router weiterleitet sollte das aber kein Problem mehr sein.
    Die Ausführung über PassivPorts findet ihr auf dieser http://www.proftpd.org/docs/howto/NAT.html Seite.

  3. Herzlichen Dank für diese äusserst gut strukturierte Anleitung. Man kann alles 1:1 abarbeiten und muss nicht mal sonderlich nachdenken. DAS ist Luxus! :D

  4. Gute Doku. Ordentlich und verständlich erklärt.
    Vielen Danke dafür.

  5. Ha, endlich mal ein gute Doku. Bin sehr froh. Vielles versucht mit mehrere Programme, nichts davon gelungen.
    Dane vielmals fur deine Arbeit, alles hat geklappt.

  6. Vielen Dank erstmal für diese super Anleitung.
    Ich habe jedoch das Problem, das ich keine Schreibrechte habe, d.h. ich kann mittels FTP-Programm keine Ordneranlegen, Dateien draufspielen usw.
    Der “Überordner” der mir im FTP-Programm angezeigt wird hat auch absolut keine Rechte, alles 0.

    Wie kann ich dies denn ändern?

    Danke im Vorraus…..

  7. Super Anleitung, FileZilla (Version 3.16.0) kommt inzwischen mit dem Umschalten von unverschlüsselt auf verschlüsselt klar (neuer Tab und Zertifikat bestätigen).

  8. Hi,
    wirklich sehr gut erklärt, bin “fast” durch und hänge jetzt nach dem Schritt

    “Wir starten unseren Server einmal neu um die Änderungen zu übernehmen. sudo service proftpd restart”

    Ich erhalte folgende Meldung: “Failed to restart proftp.service: Unit proftp.service failed to load: No such file or directory”

    Ich erhalte die Meldung auch, wenn ich den Befehl im Verzeichnis /etc/proftpd ausführe, dachte erst es liegt am ausführen im Root..

    Vielen Dank schonmal, Franz

    • ;-) Der Fehler ist mir auch passiert :-) Das “d” ist das Geheimnis :-) Du hast sicherlich
      “sudo service proftp restart” und nicht
      “sudo service proftpd restart” versucht, stimmt’s? Zumindest sagt das Deine Fehlermeldung “proftp.service”

  9. Coaster-Moritz

    Auch ich finde dieses Tutorial sehr gelungen und es hat soweit alles geklappt. Doch wenn ich mit TLS mit FileZilla verbinden möchte, bekomme ich ein Connection-Timeout und die Meldung ‘Verzeichnisinhalt konnte nicht empfangen werden’. Wenn ich die Datei tls-custom.conf lösche, den server neu starte und normal verbinde, funktioniert es. Woran kann das liegen und wie kann ich das Problem beheben?

    • Coaster-Moritz

      PS: Nur bei TLSRequired ‘off’ einzutragen funktioniert nicht, aber wenn ich auch TLSEngine auf ‘off’ stelle, geht’s.

  10. Hallo,
    bis jetzt sehr gutes Tutorial, doch ich habe ein Problem, das auftritt dass ich mir (offensichtlich xD) nicht erklären kann.

    Bei dem Punkt “Danach starten wir unseren Server einmal neu um die Änderungen zu übernehmen.” habe ich nicht ein Schreibfehler Problem wie @Franz sondern bekomme nach dem eingeben des Befehls folgende Fehlermeldung “Job for proftpd.service failed. See ‘systemctl status proftpd.service’ and ‘journalctl -xn’ for details.”

    Wenn ich nun “systemctl status proftpd.service” eingebe bekomme ich diese Meldung:
    ● proftpd.service – LSB: Starts ProFTPD daemon
    Loaded: loaded (/etc/init.d/proftpd)
    Active: failed (Result: exit-code) since Sa 2016-10-15 18:31:51 CEST; 13min ago
    Process: 1505 ExecStop=/etc/init.d/proftpd stop (code=exited, status=0/SUCCESS)
    Process: 1905 ExecStart=/etc/init.d/proftpd start (code=exited, status=1/FAILURE)

    Bei “journalctl -xn” kommt “No journal files were found”

    Habe noch keine Idee wie ich weiter machen soll.
    Ich freu mich auf jede Antwort.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.