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.

sudo apt-get -y update & sudo apt-get -y upgrade

Danach installieren wir direkt das ProFTPD Paket

sudo apt-get install proftpd-basic

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

sudo nano /etc/proftpd/proftpd.conf

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.

sudo nano /etc/proftpd/conf.d/proftp-custom.conf

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.

# Ftp user doesn't need a valid shell
<Global>
    RequireValidShell off
</Global>

# Default directory is ftpusers home
DefaultRoot ~ ftpuser

# Limit login to the ftpuser group
<Limit LOGIN>
    DenyGroup !ftpuser
</Limit>

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).

sudo adduser ftpuser --shell /bin/false --home /var/www/upload

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

sudo nano /etc/proftpd/modules.conf

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

#LoadModule mod_tls_memcache.c

Wieder speichern mit STRG+X,Y und Enter.

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

sudo service proftpd restart

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)

sudo apt-get install ssl-cert

Wir generieren dann ein Zertifikat (auch snakeoil genannt)

sudo make-ssl-cert generate-default-snakeoil --force-overwrite

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.

sudo nano /etc/proftpd/conf.d/tls-custom.conf

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

<IfModule mod_tls.c>
        TLSEngine on
        TLSLog /var/log/proftpd/tls.log
        TLSProtocol TLSv1
        TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
        TLSVerifyClient off
        TLSRequired on
</IfModule>

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

sudo service proftpd restart

 

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ß!


wallpaper-1019588
I’m Living with an Otaku NEET Kunoichi!? – Trailer stellt Theme-Songs vor
wallpaper-1019588
Hell Teacher: Jigoku Sensei Nube – Neue Infos zum Anime enthüllt
wallpaper-1019588
[Session-Life] Weekly Watched 2024 November
wallpaper-1019588
DIY-Haustierspielzeug: Kreative Ideen, um Deinem Tier Freude und Abwechslung zu bieten