In questo articolo mostrerò come configurare un server FTP su Raspberry Pi che può essere utilizzato per condividere file tra i tuoi dispositivi. Useremo vsFTPd poiché è un server FTP molto stabile, sicuro e molto veloce. Dimostrerò anche come configurare vsFTPd per limitare gli utenti alle loro directory HOME, oltre a crittografare l'intera connessione utilizzando SSL/TLS.
Se vuoi seguire questo materiale, devi avere il sistema operativo Raspberry Pi installato sul tuo Raspberry Pi. L'esecuzione di un server FTP non richiede un'interfaccia grafica, quindi consiglio di installare Raspberry Pi OS Lite con il servizio SSH abilitato, abilitando l'accesso remoto.
Installa o vsFTPd senza Raspberry Pi
Il pacchetto vsftpd è disponibile dai repository ufficiali di Raspberry Pi OS, quindi può essere installato con i seguenti comandi:
sudo apt update
sudo apt install vsftpd
Dopo l'installazione, il servizio del server FTP si avvierà automaticamente. Per controllare lo stato di questo servizio, esegui:
sudo systemctl status vsftpd
Il ritorno da questo comando dovrebbe restituire "Attivo:attivo (in esecuzione) dal...", qualcosa come:
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
...
Come migrare da CentOS 8 a Rocky Linux 8/Alma Linux 8
Configura il server FTP con vsFTPd
La configurazione di vsFTPd avviene tramite il file /etc/vsftpd.conf .
La maggior parte delle impostazioni sono ben documentate, in inglese, nel file di configurazione. Se vuoi valutare tutte le opzioni disponibili, ti consiglio il sito ufficiale all'indirizzo:Manpage di VSFTPD.CONF
1. Accesso al server FTP
Per assicurarti che solo gli utenti del sistema operativo locale possano accedere al server FTP, cerca le voci anonymous_enable e local_enable nel file di configurazione, lasciandole come segue:
anonymous_enable=NO
local_enable=YES
2. Abilitazione dei caricamenti
Individua e decommenta l'impostazione write_enable per consentire le modifiche al file system, consentendo agli utenti di caricare e rimuovere file:
write_enable=YES
3. Gabbia Chroot
Per impedire agli utenti FTP di accedere ai file al di fuori della loro cartella home, dobbiamo creare una jail chroot, decommentando l'impostazione chroot_local_user :
chroot_local_user=YES
Quando la funzione chroot è abilitata, vsFTPd disabiliterà il caricamento dei file se la directory utente è bloccata.
Utilizzare una delle opzioni seguenti per lasciare l'ambiente in chroot in modalità di scrittura.
Opzione 1 – il modo consigliato per abilitare il caricamento dei file e lasciare attivo il chroot, configurando le directory FTP. Nell'esempio seguente, creerò una directory ftp all'interno della cartella home dell'utente, che fungerà da cartella utilizzata da chroot e consentirà di caricare i file al suo interno.
user_sub_token=$USER
local_root=/home/$USER/ftp
Opzione 2 – Un'altra alternativa consiste nell'aggiungere l'impostazione allow_writeable_chroot nel file vsftpd.conf. Questa opzione abiliterà l'opzione per scrivere nella cartella home degli utenti.
allow_writeable_chroot=YES
4. Connessioni passive su server FTP
Per impostazione predefinita, vsFTPd utilizza la modalità attiva. Per utilizzare la modalità passiva, imposta l'intervallo minimo e massimo di porte utilizzate.
pasv_min_port=30000
pasv_max_port=31000
vsFTPd può utilizzare qualsiasi porta in modalità passiva. Quando la modalità passiva è abilitata, il client FTP apre una connessione su una porta casuale durante la connessione al server FTP, all'intervallo impostato nel file di configurazione.
5. Limita l'accesso a determinati utenti
Possiamo configurare vsFTPd per consentire l'accesso solo a pochi utenti. Per eseguire questa configurazione, aggiungi le seguenti righe al file delle impostazioni:
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Quando questa impostazione è abilitata, devi specificare quali utenti potranno accedere, aggiungendo i loro nomi utente nel file /etc/vsftpd.user_list, con un utente per riga.
6. Trasmissione sicura con SSL/TLS
Per crittografare la trasmissione FTP con SSL/TLS, è necessario disporre di un certificato SSL e configurare il server FTP per utilizzarlo. Possiamo utilizzare un certificato SSL esistente firmato da un emittente certificato o creare un certificato autofirmato.
Se hai un dominio o un sottodominio che punta all'IP del tuo server FTP, puoi generare un certificato SSL gratuito utilizzando Let's Encrypt. Se non l'hai mai usato prima, segui la documentazione ufficiale:Guida introduttiva – Let's Encrypt – Certificati SSL/TLS gratuiti
In questo articolo, genereremo una chiave autofirmata utilizzando il comando openssl.
Eseguire il comando seguente per creare una chiave privata (certificato) a 2048 bit, autofirmata, valida per 10 anni. Le chiavi pubbliche e private verranno archiviate nello stesso file.
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Dopo aver creato le chiavi, apri nuovamente il file delle impostazioni vsFTPd:
sudo nano /etc/vsftpd.conf
Trova le impostazioni rsa_cert_file e rsa_private_key_file modificandone i valori nel file pem e imposta l'impostazione ssl_enable su YES.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Se queste impostazioni non sono configurate correttamente, il server FTP utilizzerà TLS solo per proteggere le connessioni.
Riavvia o server FTP
Quando vengono eseguite le impostazioni di cui sopra, il file delle impostazioni vsFTPd dovrebbe apparire così (senza i commenti):
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
Salva il file e riavvia il servizio vsFTPd per rendere effettive le modifiche a questo file:
sudo systemctl restart vsftpd
Apertura del firewall
Se utilizzi UFW Firewall nella tua distribuzione, devi rilasciare il traffico FTP, aprendo le porte 20 (dati FTP), 21 (comandi FTP) e 30000-31000 (porte in modalità passiva), utilizzando i seguenti comandi:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Ora, rileggi le regole UFW, disabilitandole e riattivandole.
sudo ufw disable
sudo ufw enable
Crea un utente per FTP
Per testare il nostro server FTP, creeremo un utente.
- Se hai già un utente che verrà utilizzato e vuoi solo concedergli l'accesso, salta il primo passaggio.
- Se hai impostato allow_writeable_chroot=YES nel tuo file di configurazione, salta il terzo passaggio.
01. Crea un utente chiamato novouserftp:
sudo adduser novouserftp
Quando richiesto, imposta la password dell'utente.
02. Aggiungi l'utente all'elenco di coloro che possono utilizzare il server FTP.
echo "novouserftp" | sudo tee -a /etc/vsftpd.user_list
03. Crea una directory FTP e imposta i permessi corretti.
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
Come discusso in precedenza, l'utente sarà in grado di caricare file nella cartella ftp/upload della propria home directory.
A questo punto, il tuo server FTP è completamente funzionante e puoi connetterti ad esso utilizzando client FTP come FileZilla!
Disabilita l'accesso alla shell
Per impostazione predefinita, quando viene creato un utente, se non viene eseguita alcuna configurazione aggiuntiva, questo utente ha accesso SSH al server. Per disabilitare questo accesso, crea una nuova shell che visualizzi solo un messaggio che dice all'utente che questo account è limitato al solo accesso FTP.
Crea la shell /bin/ftponly e rendilo eseguibile.
echo -e '#!/bin/sh echo "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo chmod a+x /bin/ftponly
Aggiungi la nuova shell all'elenco delle shell valide nel file /etc/shells :
echo "/bin/ftponly" | sudo tee -a /etc/shells
Cambia la shell utente creata in /bin/ftponly:
sudo usermod novouserftp -s / bin / ftponly
Usa quest'ultimo comando per tutti gli utenti che avranno accesso solo al server FTP.
Conclusioni
Speriamo che sia chiaro come installare e configurare un server FTP veloce e sicuro sul tuo sistema Raspberry Pi.