Raspberry Pi - FTP Server installieren
FTP steht für File Transfer Protocol und ist ein Netzwerkprotokoll zur Übertragung von Dateien. FTP wird meistens dafür benutzt, um Dateien vom Client auf den Server hochzuladen, oder Dateien vom Server auf den Client herunterzuladen.
Der Server hinter dem FTP kann hierbei als alles Mögliche dienen:
- als Webserver
- als Dateiserver
- als Downloadserver
- oder einfach nur als ein Server zuhause, zum rumspielen und basteln
Ich für meinen Teil nutze meinen lokalen Server als Testserver und möchte meine Webanwendungen leichter bearbeiten können. Hierzu soll der FTP-Server dienen. Der FTP-Server ermöglicht es mir unter anderem, die Dateien direkt auf dem Server zu bearbeiten. Damit ist das runterladen - bearbeiten - hochladen, was mir so hart auf die Eier geht, endlich vorbei.
Als Software verwende ich ProFTPD.
ProFTPD is a high-performance, extremely configurable, and most of all a secure FTP server, featuring Apache-like configuration …
Installation
ProFTPD installieren
sudo apt install proftpd-basic
Konfiguration
Nach der Installation erstellen wir eine Konfigurationsdatei. Die Konfiguration bleibt von Updates der Software unberührt. Wir sind also auf der sicheren Seite. Der Inhalt des Verzeichnisses conf.d
, in dem wir die Konfiguration speichern, wird von der Software immer automatisch importiert.
sudo nano /etc/proftpd/conf.d/myftp.conf
Die Konfiguration bekommt folgenden Inhalt. Die Zeilen sind in der Konfiguration erklärt.
# Das Home-Verzeichnis ~ ist das Stammverzeichnis der Benutzer in den Gruppen myftp und rootDefaultRoot ~ myftp,root# Login wird nur Benutzern der Gruppe myftp erlaubt<Limit LOGIN> DenyGroup !myftp</Limit>
Damit diese Änderungen wirksam werden, muss der FTP-Server einmal neugestartet werden.
sudo systemctl restart proftpd
Gruppe “myftp” erstellen
Nachdem nur Benutzer der Gruppe myftp
Zugriff auf den FTP-Server erhalten, werden wir diese Gruppe als nächstes auf unserem Server anlegen.
sudo addgroup myftp
Nutzer der Gruppe hinzufügen
Alle Nutzer, die Zugriff erhalten sollen, müssen dann im nächsten Schritt der Gruppe hinzugefügt werden. Bei mir ist das der einzige Nutzer des Servers: makesmart
.
sudo adduser makesmart myftp
Login FTP
Schon jetzt kann man sich mit einem FTP-Client, wie FileZilla, auf dem Server einloggen. Die Daten für den FTP-Login sind die gleichen, wie die Daten die man für den SSH-Login verwendet. In meinem Fall lauten die Zugangsdaten:
Hostname | Benutzername | Passwort | Port |
---|---|---|---|
makesmart-server | makesmart | makesmart | 21 |
Auch wenn eine Verschlüsselung in einem geschlossenen lokalem Netzwerk nicht unbedingt notwenidg wäre, werden wir uns darum gleich noch kümmern.
Nach dem Einloggen befinden wir uns im Home-Verzeichnis des Nutzers, mit dem wir uns eingeloggt haben.
/home/makesmart
In dem Verzeichnis können wir Daten ablegen und bearbeiten, Ordner anlegen und löschen.
Erweitere Rechte
In meinem Fall wollte ich den FTP-Server installieren, um die Dateien meiner Webanwendungen direkt auf dem Server bearbeiten zu können. Das Verzeichnis befindet sich unter /var/www/html
. Wenn ich diesen Pfad über den FTP-Client aufrufe, kann ich die Dateien zwar sehen, aber weder löschen, noch bearbeiten oder gar neue erstellen …
Status: Lösche "/var/www/html/index.html"Befehl: DELE index.htmlAntwort: 550 index.html: Permission denied
Der Grund dafür sind die fehlenden Berechtigungen für den Ordner. Die Lösung ist sehr simple:
Wir machen unseren Nutzer makesmart
einfach zum Eigentümer den Ordners.
sudo chown -R makesmart:makesmart /var/www/html
Jetzt können wir, neben dem Home-Verzeichnis, auch die Daten im Ordner /var/www/html
frei verwalten.
Status: Lösche "/var/www/html/index.html"Status: Empfange Verzeichnisinhalt für "/var/www/html"...Status: Anzeigen des Verzeichnisinhalts für "/var/www/html" abgeschlossen
Verbindung verschlüsseln
Wie bereits erwähnt, ist eine Verschlüsselung im lokalen Netzwerk nicht unbedingt erforderlich. Wer aber auf der sicheren Seite sein möchte, kann die folgende Anleitung verwenden, um die Verbindung zu verschlüssen.
Für die Verschlüsselung wird ein SSL-Zertifikat benötigt. Wie man ein solches Zertifikat selbst generieren, und für einen Apache2-Webserver verwenden kann, habe ich bereits in einem Tutorial gezeigt.
Die gleichen Befehle können genutzt werden, um ein eigenes Zertifikat für den FTP-Server zu erstellen.
OpenSSL installieren
sudo apt-get install openssl
Ordner für die Zertifikate anlegen
sudo mkdir /etc/ssl/localcerts
Zertifikat erstellen
sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/localcerts/proftpd.pem -keyout /etc/ssl/localcerts/proftpd.key
Der Parameter -days 365
bedeutet, dass das Zertifikat 1 Jahr lang gültig ist.
Die beiden Pfade bestimmen den Speicherort und den Namen der Zertifikate.
Es wird nach euren Daten gefragt, die ihr Eingeben müsst. Es spielt dabei keine Rolle, ob die Daten der Wahrheit entsprechen, oder nicht. Sie dienen nur zum Füllen der Informationen des Herausgebers des Zertifikats (ihr).
Rechte der Zertifikate anpassen
sudo chmod 600 /etc/ssl/localcerts/proftpd*
Anschließend muss nochmal die zu Beginn erstellte .conf-Datei myftp.conf
bearbeitet werden.
sudo nano /etc/proftpd/conf.d/myftp.conf
Fügt am Ende folgende Zeilen ein. Die Zeilen bestimmten die Pfade der Zertifikate und einige Einstellungen zu TLS. Unter anderem wird mit der Zeile TLSRequired on
die Verbindung via TLS erzwungen.
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1.2 TLSRSACertificateFile /etc/ssl/localcerts/proftpd.crt TLSRSACertificateKeyFile /etc/ssl/localcerts/proftpd.key TLSVerifyClient off TLSOptions NoSessionReuseRequired TLSRequired on</IfModule>
Wenn alles soweit eingerichtet wurde, kann der FTP-Server neugestartet werden.
sudo systemctl restart proftpd
Login SFTP
Absofort ist zum Login der Port 22
erforlderlich, ansonsten wird die Verbindung abgelehnt.
Hostname | Benutzername | Passwort | Port |
---|---|---|---|
makesmart-server | makesmart | makesmart | 22 |
Status: Verbinde mit makesmart-server...Status: Connected to makesmart-serverStatus: Eming directory /home/makesmartStatus: Anzeigen des Verzeichnisinhalts für "/home/makesmart" abgeschlossen
Auch hier gilt: Da wir das Zertifikat selbst ausgestellt haben, gelten wir … leider … als nicht vertrauenswürdige Quelle. Das Zertifikat ist aber vollwertig und macht das was es soll.
Zusammenfassung
Wir haben also einen FTP-Zugang geschaffen, für alle Nutzer in der Gruppe myftp
.
Um einem Nutzer Zugriff zu gewähren, muss man ihn einfach zur Gruppe hinzufügen.
sudo adduser makesmart myftp
Das Standardverzeichnis ist das Home-Verzeichnis des jeweiligen Nutzers. /home/makesmart
Falls der Nutzer root-Rechte hat, hat er ebenfalls Zugriff auf das Wurzelverzeichnis /
.
Ein Login mit dem Benutzer root
nicht möglich.
Um einem Nutzer den Zugang zum FTP-Server zu entziehen, muss man ihn einfach aus der Gruppe myftp
entfernen.
sudo deluser makesmart myftp
Viel Spaß bei euren Projekten,
cooper