Introduzione

Questo tutorial spiega come installare e configurare un server FTP su Raspberry Pi che utilizzi per condividere file tra i tuoi dispositivi. Useremo vsftpd, che è un server FTP stabile, sicuro e veloce. Ti mostreremo anche come configurare vsftpd per limitare gli utenti alla loro home directory e crittografare l'intera trasmissione con SSL/TLS.

Per questo progetto, dovresti avere Raspbian installato sul tuo Raspberry Pi. L'esecuzione di un server FTP non richiede un'interfaccia grafica, quindi la nostra raccomandazione è di utilizzare l'immagine Raspbian Lite e abilitare SSH.

Installare vsftpd su Raspberry Pi

Il pacchetto vsftpd è disponibile nei repository Raspbian standard. Per installarlo, esegui i seguenti comandi:

sudo apt update
sudo apt install vsftpd

Il servizio ftp verrà avviato automaticamente al termine del processo di installazione. Per verificarlo, stampare lo stato del servizio:

sudo systemctl status vsftpd

L'output sarà simile a quello riportato di seguito, mostrando che il servizio vsftpd è attivo e in esecuzione:

● vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 21 Oct 2020 16:55:23 GMT; 8s ago
...

Configurare vsftpd

I sensori del server vsftpd possono essere configurati modificando il file /etc/vsftpd.conf.

La maggior parte delle impostazioni sono ben documentate all'interno del file di configurazione. Per tutte le opzioni disponibili, visita la pagina ufficiale di vsftpd.

Inizia aprendo il file di configurazione vsftpd:

sudo nano /etc/vsftpd.conf

1. Accesso FTP

Per garantire che solo gli utenti locali possano accedere al server FTP, cercare le direttive anonymous_enable e local_enable e verificare la corrispondenza della configurazione a righe sotto:

anonymous_enable=NO
local_enable=YES
/etc/vsftpd.conf

2. Abilitare gli upload

Individua e rimuovi il commento dalla direttiva write_enable per consentire modifiche al filesystem, come il caricamento e la rimozione di file.

write_enable=YES
/etc/vsftpd.conf

3. Chroot Jail

Per impedire agli utenti FTP di accedere ai file al di fuori delle loro directory home, rimuovere il commento dalla direttiva chroot.

chroot_local_user=YES
/etc/vsftpd.conf

Quando la funzione chroot è attiva, vsftpd rifiuterà di caricare i file se la directory in cui sono bloccati gli utenti è scrivibile.

Utilizzare una delle soluzioni seguenti per rendere scrivibile l'ambiente chroot:

Metodo 1. - L'opzione consigliata per consentire il caricamento è mantenere chroot abilitato e configurare le directory FTP. In questo esempio, creeremo una directory ftp all'interno della home dell'utente, che servirà da chroot e una directory uploads scrivibile per il caricamento dei file.

user_sub_token=$USER
local_root=/home/$USER/ftp
/etc/vsftpd.conf

Metodo 2. - Un'altra opzione è aggiungere la seguente direttiva nel file di configurazione vsftpd. Usa questa opzione se devi concedere l'accesso scrivibile al tuo utente alla sua home directory./etc/vsftpd.conf

allow_writeable_chroot=YES

4. Connessioni FTP passive

Per impostazione predefinita, vsftpd utilizza la modalità attiva. Per utilizzare la modalità passiva, impostare l'intervallo minimo e massimo di porte:

pasv_min_port=30000
pasv_max_port=31000
/etc/vsftpd.conf

vsftpd può utilizzare qualsiasi porta per connessioni FTP passive. Quando la modalità passiva è abilitata, il client FTP apre una connessione al server su una porta casuale nell'intervallo che hai scelto.

5. Limitare l'accesso utente

Puoi configurare vsftpd per consentire l'accesso solo a determinati utenti. Per farlo, aggiungi le seguenti righe alla fine del file:

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
/etc/vsftpd.conf

Quando questa funzione è abilitata, è necessario specificare esplicitamente quali utenti possono accedere aggiungendo i nomi utente al file /etc/vsftpd.user_list (un utente per riga).

6. Protezione delle trasmissioni con SSL / TLS

Per crittografare le trasmissioni FTP con SSL/TLS, è necessario disporre di un certificato SSL e configurare il server FTP per utilizzarlo.

È possibile utilizzare un certificato SSL esistente firmato da un'autorità di certificazione attendibile o creare un certificato autofirmato.

Se hai un dominio o un sottodominio che punta all'indirizzo IP del server FTP, puoi facilmente generare un certificato SSL Let's Encrypt gratuito.

In questo tutorial, genereremo un certificato SSL autofirmato utilizzando il comando openssl.

Eseguire il comando seguente per creare una chiave privata a 2048 bit e un certificato autofirmato valido per 10 anni. Sia la chiave privata che il certificato verranno salvati in uno stesso file:

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Una volta creati i file, apri il file di configurazione:

sudo nano /etc/vsftpd.conf

Trova le direttive rsa_cert_file e rsa_private_key_file, modifica i loro valori nel percorso del file pam e imposta la direttiva ssl_enable su YES:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
/etc/vsftpd.conf

Se non diversamente specificato, il server FTP utilizzerà solo TLS per effettuare connessioni protette.

Riavviare il servizio vsftpd

Una volta terminata la configurazione del server, il file di configurazione vsftpd (esclusi i commenti) dovrebbe essere simile a questo:

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
/etc/vsftpd.conf

Salvare il file e riavviare il servizio vsftpd affinché le modifiche abbiano effetto:

sudo systemctl restart vsftpd

Aperire il firewall

Se stai utilizzando un firewall UFW , dovrai consentire il traffico FTP.

Per aprire la porta 21 (porta FTP), la porta 20 (porta FTP) e 30000-31000 (intervallo porte passive), eseguire i seguenti comandi:

sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp

Ricarica le regole UFW disabilitando e riabilitando UFW:

sudo ufw disable
sudo ufw enable

Creare un utente FTP

Per testare il server FTP, creeremo un nuovo utente.

  • Se hai già un utente a cui desideri concedere l'accesso FTP, salta il primo passaggio.
  • Se si imposta allow_writeable_chroot=YES nel file di configurazione, saltare il terzo passaggio.

Crea un nuovo utente denominato newftpuser:

sudo adduser newftpuser

Quando richiesto, impostare la password utente.

Aggiungi l'utente all'elenco degli utenti FTP consentiti:

echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list

Creare la struttura della directory FTP e impostare le autorizzazioni corrette:

sudo mkdir -p /home/newftpuser/ftp/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp

Come discusso nella sezione precedente, l'utente sarà in grado di caricare i file nella directory ftp/upload.

A questo punto, il tuo server FTP è completamente funzionante e dovresti essere in grado di connetterti al tuo server utilizzando qualsiasi client FTP come FileZilla.

Disabilitare l'accesso alla shell

Per impostazione predefinita, durante la creazione di un utente, se non specificato esplicitamente l'utente avrà accesso SSH al dispositivo. Per disabilitare l'accesso alla shell, crea una nuova shell che stamperà semplicemente un messaggio che informa l'utente che il suo account è limitato al solo accesso FTP.

Crea la shell /bin/ftponly e rendila eseguibile:

echo -e '#!/bin/sh\necho "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 in /bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

Usa lo stesso comando per cambiare la shell di tutti gli utenti a cui vuoi dare solo l'accesso FTP.

Conclusione

Ti abbiamo mostrato come installare e configurare un server FTP sicuro e veloce sul tuo sistema Raspberry Pi.