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.
Inhaltsverzeichnis
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.
1 |
sudo apt-get -y update && sudo apt-get -y upgrade |
Danach installieren wir direkt das ProFTPD Paket
1 |
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.
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.
Wir öffnen also die Konfigurationsdatei proftpd.conf mit dem Editor Nano
1 |
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
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.
1 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 |
# Ftp user doesn't need a valid shell RequireValidShell off # Default directory is ftpusers home DefaultRoot ~ ftpuser # Limit login to the ftpuser group DenyGroup !ftpuser |
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).
1 |
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
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
1 2 |
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).
1 |
#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.
1 |
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.
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)
1 |
sudo apt-get install ssl-cert |
Wir generieren dann ein Zertifikat (auch snakeoil genannt)
1 |
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.
1 |
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.
1 2 3 4 5 6 7 8 9 10 |
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 |
Wir starten unseren Server einmal neu um die Änderungen zu übernehmen.
1 |
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.
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
- Eine dynamische DNS Adresse erstellen unter welcher euer PI aus dem Netz erreichbar ist
- Eine Portweiterleitung für Port 21 an eurem Router auf den Raspberry Pi einrichten (Weiterleitung der Daten aus dem Internet an den RasPi)
Viel Spaß!