In diesem Artikel werde ich demonstrieren, wie wir einen FTP-Server einrichten können auf dem Raspberry Pi die verwendet werden können, um Dateien auf Ihren Geräten zu teilen. Wir werden vsFTPd verwenden da es sehr stabil, sicher und ein sehr schneller FTP-Server ist. Ich werde auch zeigen, wie man vsFTPd konfiguriert, um Benutzer auf ihre HOME-Verzeichnisse zu beschränken, zusammen mit der Verschlüsselung der gesamten Verbindung mit SSL/TLS.
Wenn Sie diesem Material folgen möchten, müssen Sie das Raspberry Pi OS auf Ihrem Raspberry Pi installiert haben. Das Ausführen eines FTP-Servers erfordert keine grafische Benutzeroberfläche, daher empfehle ich, Raspberry Pi OS Lite mit aktiviertem SSH-Dienst zu installieren und den Fernzugriff zu ermöglichen.
Instalar oder vsFTPd ohne Raspberry Pi
Das vsftpd-Paket ist in den offiziellen Raspberry Pi OS-Repositories verfügbar, sodass es mit den folgenden Befehlen installiert werden kann:
sudo apt update
sudo apt install vsftpd
Nach der Installation wird der FTP-Serverdienst automatisch gestartet. Um den Status dieses Dienstes zu überprüfen, führen Sie Folgendes aus:
sudo systemctl status vsftpd
Die Rückgabe dieses Befehls sollte „Active:active (running) since…“ zurückgeben, etwa so:
vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-05-23 07:02:41 BST; 14s ago
...
Migration von CentOS 8 auf Rocky Linux 8/Alma Linux 8
FTP-Server mit vsFTPd konfigurieren
Die vsFTPd-Konfiguration erfolgt über die Datei /etc/vsftpd.conf .
Die meisten Einstellungen sind in der Konfigurationsdatei in englischer Sprache gut dokumentiert. Wenn Sie alle verfügbaren Optionen bewerten möchten, empfehle ich die offizielle Website unter:Manpage of VSFTPD.CONF
1. Zugang zum FTP-Server
Um sicherzustellen, dass nur Benutzer des lokalen Betriebssystems auf den FTP-Server zugreifen können, suchen Sie in der Konfigurationsdatei nach den Einträgen anonymous_enable und local_enable und belassen Sie sie wie folgt:
anonymous_enable=NO
local_enable=YES
2. Uploads aktivieren
Suchen Sie die Einstellung write_enable und kommentieren Sie sie aus, um Änderungen am Dateisystem zuzulassen und Benutzern das Hochladen und Entfernen von Dateien zu ermöglichen:
write_enable=YES
3. Chroot-Käfig
Um zu verhindern, dass FTP-Benutzer auf Dateien außerhalb ihres Home-Ordners zugreifen, müssen wir ein Chroot-Gefängnis erstellen und die Einstellung chroot_local_user auskommentieren :
chroot_local_user=YES
Wenn die Chroot-Funktion aktiviert ist, deaktiviert vsFTPd das Hochladen von Dateien, wenn das Benutzerverzeichnis gesperrt ist.
Verwenden Sie eine der folgenden Optionen, um die Chroot-Umgebung im Schreibmodus zu belassen.
Option 1 – der empfohlene Weg, um das Hochladen von Dateien zu ermöglichen und die Chroot aktiv zu lassen, indem die FTP-Verzeichnisse konfiguriert werden. Im folgenden Beispiel werde ich ein FTP-Verzeichnis im Home-Ordner des Benutzers erstellen, das als der von Chroot verwendete Ordner dient und es ermöglicht, dass die Dateien dorthin hochgeladen werden.
user_sub_token=$USER
local_root=/home/$USER/ftp
Option 2 – Eine weitere Alternative besteht darin, die Einstellung allow_writeable_chroot in der Datei vsftpd.conf hinzuzufügen. Diese Option aktiviert die Option, in den Home-Ordner der Benutzer zu schreiben.
allow_writeable_chroot=YES
4. Passive Verbindungen auf FTP-Server
Standardmäßig verwendet vsFTPd den aktiven Modus. Um den passiven Modus zu verwenden, legen Sie den minimalen und maximalen Bereich der verwendeten Ports fest.
pasv_min_port=30000
pasv_max_port=31000
vsFTPd kann jeden Port im passiven Modus verwenden. Wenn der passive Modus aktiviert ist, öffnet der FTP-Client eine Verbindung auf einem zufälligen Port, wenn er sich mit dem FTP-Server verbindet, und zwar in dem Intervall, das Sie in der Konfigurationsdatei festgelegt haben.
5. Beschränken Sie die Anmeldung auf bestimmte Benutzer
Wir können vsFTPd so konfigurieren, dass sich nur wenige Benutzer anmelden können. Um diese Konfiguration durchzuführen, fügen Sie der Einstellungsdatei die folgenden Zeilen hinzu:
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Wenn diese Einstellung aktiviert ist, müssen Sie angeben, welche Benutzer sich anmelden können, indem Sie ihre Benutzernamen in der Datei /etc/vsftpd.user_list hinzufügen, mit einem Benutzer pro Zeile.
6. Sichere Übertragung mit SSL/TLS
Um die FTP-Übertragung mit SSL/TLS zu verschlüsseln, müssen Sie über ein SSL-Zertifikat verfügen und den FTP-Server für dessen Verwendung konfigurieren. Wir können ein vorhandenes SSL-Zertifikat verwenden, das von einem zertifizierten Aussteller signiert wurde, oder ein selbstsigniertes Zertifikat erstellen.
Wenn Sie eine Domain oder Subdomain haben, die auf die IP Ihres FTP-Servers verweist, können Sie mit Let’s Encrypt ein kostenloses SSL-Zertifikat generieren. Wenn Sie es noch nie zuvor verwendet haben, folgen Sie der offiziellen Dokumentation:Erste Schritte – Let’s Encrypt – Kostenlose SSL/TLS-Zertifikate
In diesem Artikel generieren wir einen selbstsignierten Schlüssel mit dem Befehl openssl.
Führen Sie den folgenden Befehl aus, um einen selbstsignierten, 10-jährigen privaten 2048-Bit-Schlüssel (Zertifikat) zu erstellen, der 10 Jahre gültig ist. Öffentliche und private Schlüssel werden in derselben Datei gespeichert.
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Nachdem Sie die Schlüssel erstellt haben, öffnen Sie die vsFTPd-Einstellungsdatei erneut:
sudo nano /etc/vsftpd.conf
Suchen Sie die Einstellungen rsa_cert_file und rsa_private_key_file, indem Sie ihre Werte in die PEM-Datei ändern und die Einstellung ssl_enable auf YES setzen.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Wenn diese Einstellungen nicht korrekt konfiguriert sind, verwendet der FTP-Server nur TLS zum Sichern von Verbindungen.
Starten Sie den FTP-Server neu
Wenn die obigen Einstellungen vorgenommen werden, sollte die vsFTPd-Einstellungsdatei wie folgt aussehen (ohne die Kommentare):
listen=NO listen_ipv6=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_min_port=30000 pasv_max_port=31000 userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem ssl_enable=YES
Speichern Sie die Datei und starten Sie den vsFTPd-Dienst neu, damit die Änderungen an dieser Datei wirksam werden:
sudo systemctl restart vsftpd
Öffnen der Firewall
Wenn Sie die UFW-Firewall in Ihrer Distribution verwenden, müssen Sie den FTP-Verkehr freigeben, indem Sie die Ports 20 (FTP-Daten), 21 (FTP-Befehle) und 30000-31000 (Passivmodus-Ports) mit den folgenden Befehlen öffnen:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Lesen Sie jetzt die UFW-Regeln erneut, deaktivieren und aktivieren Sie sie erneut.
sudo ufw disable
sudo ufw enable
Erstellen Sie einen Benutzer für FTP
Um unseren FTP-Server zu testen, erstellen wir einen Benutzer.
- Wenn Sie bereits einen Benutzer haben, der verwendet werden soll, und Sie ihm nur Zugriff gewähren möchten, überspringen Sie den ersten Schritt.
- Wenn Sie allow_writeable_chroot=YES in Ihrer Konfigurationsdatei gesetzt haben, überspringen Sie den dritten Schritt.
01. Erstellen Sie einen Benutzer namens novouserftp:
sudo adduser novouserftp
Wenn Sie dazu aufgefordert werden, legen Sie das Passwort des Benutzers fest.
02. Fügen Sie den Benutzer der Liste derjenigen hinzu, die den FTP-Server verwenden können.
echo "novouserftp" | sudo tee -a /etc/vsftpd.user_list
03. Erstellen Sie ein FTP-Verzeichnis und setzen Sie die richtigen Berechtigungen.
sudo mkdir -p /home/novouserftp/ftp/upload
sudo chmod 550 /home/novouserftp/ftp
sudo chmod 750 /home/novouserftp/ftp/upload
sudo chown -R novouserftp: / home / novouserftp / ftp
Wie bereits erwähnt, kann der Benutzer Dateien in den Ordner ftp/upload seines Home-Verzeichnisses hochladen.
An diesem Punkt ist Ihr FTP-Server voll funktionsfähig und Sie können sich mit FTP-Clients wie FileZilla!
mit ihm verbindenShell-Zugriff deaktivieren
Wenn ein Benutzer erstellt wird und keine zusätzliche Konfiguration vorgenommen wird, hat dieser Benutzer standardmäßig SSH-Zugriff auf den Server. Um diesen Zugriff zu deaktivieren, erstellen Sie eine neue Shell, die nur eine Meldung anzeigt, die dem Benutzer mitteilt, dass dieses Konto nur auf FTP-Zugriff beschränkt ist.
Erstellen Sie die Shell /bin/ftponly und ausführbar machen.
echo -e '#!/bin/sh echo "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
Fügen Sie die neue Shell zur Liste der gültigen Shells in der Datei /etc/shells hinzu :
echo "/bin/ftponly" | sudo tee -a /etc/shells
Ändern Sie die erstellte Benutzer-Shell in /bin/ftponly:
sudo usermod novouserftp -s / bin / ftponly
Verwenden Sie diesen letzten Befehl für alle Benutzer, die nur Zugriff auf den FTP-Server haben werden.
Schlussfolgerungen
Hoffentlich ist klar, wie Sie einen schnellen und sicheren FTP-Server auf Ihrem Raspberry Pi-System installieren und konfigurieren.