Come configurare il server FTP con VSFTPD su Ubuntu 20.04

8 mar 2021 6 min di lettura
Come configurare il server FTP con VSFTPD su Ubuntu 20.04
Indice dei contenuti

Introduzione

Questo articolo descrive come installare e configurare un server FTP su Ubuntu 20.04 LTS Focal Fossa che utilizzi per condividere file tra i tuoi dispositivi.

FTP (File Transfer Protocol) è un protocollo di rete standard utilizzato per trasferire file da e verso una rete remota. Sono disponibili diversi server FTP open source per Linux. I più conosciuti e ampiamente utilizzati sono PureFTPd, ProFTPD e vsftpd. Installeremo vsftpd (Very Secure Ftp Daemon), un server FTP stabile, sicuro e veloce. Ti mostreremo anche come configurare il server per limitare gli utenti alla loro home directory e crittografare l'intera trasmissione con SSL/TLS.

Sebbene FTP sia un protocollo molto popolare, per trasferimenti di dati più sicuri e veloci, dovresti usare SCP o SFTP.

Se desideri installare VSFTPD su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh root@IP_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh nome_utente@IP_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh nome_utente@IP_DEL_SERVER -p PORTA

Installare vsftpd su Ubuntu 20.04

Il pacchetto vsftpd è disponibile nei repository di Ubuntu. Per installarlo, eseguire i seguenti comandi:

sudo apt update
sudo apt install vsftpd

Il servizio ftp verrà avviato automaticamente una volta completato il processo di installazione. Per verificarlo, stampare lo stato del servizio:

sudo systemctl status vsftpd

L'output dovrebbe mostrare 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 Mon 2021-03-08 20:07:47 CET; 19s ago
   Main PID: 182697 (vsftpd)
      Tasks: 1 (limit: 2286)
     Memory: 588.0K
     CGroup: /system.slice/vsftpd.service
             └─182697 /usr/sbin/vsftpd /etc/vsftpd.conf

Mar 08 20:07:47 TEST-SERVER-1 systemd[1]: Starting vsftpd FTP server...
Mar 08 20:07:47 TEST-SERVER-1 systemd[1]: Started vsftpd FTP server.

Configurare vsftpd

La configurazione del server vsftpd è archiviata nel file /etc/vsftpd.conf.

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

Nelle sezioni seguenti, esamineremo alcune importanti impostazioni necessarie per configurare un'installazione sicura di vsftpd.

Inizia aprendo il file di configurazione vsftpd:

sudo nano /etc/vsftpd.conf

1. Accesso FTP

Consentiremo l'accesso al server FTP solo agli utenti locali. Cerca le direttive anonymous_enable e local_enable e verifica la corrispondenza della configurazione delle righe sotto:

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

2. Abilitazione dei caricamenti

Individua e rimuovi il commento dalla direttiva write_enable per consentire le modifiche al file system, come il caricamento e la rimozione di file:

write_enable=YES
/etc/vsftpd.conf

3. Chroot jail

Per impedire agli utenti FTP locali di accedere ai file al di fuori delle loro directory home, rimuovere il commento dalla riga che inizia con chroot_local_user:

chroot_local_user=YES
/etc/vsftpd.conf

Per impostazione predefinita, per motivi di sicurezza, quando chroot è abilitato, vsftpd rifiuterà di caricare i file se la directory in cui sono bloccati gli utenti è scrivibile.

Usa una delle soluzioni seguenti per consentire i caricamenti quando il chroot è abilitato:

Metodo 1. - L'opzione consigliata è mantenere la funzione chroot abilitata 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 è abilitare la direttiva allow_writeable_chroot:

allow_writeable_chroot=YES
/etc/vsftpd.conf

Utilizzare questa opzione solo se è necessario concedere l'accesso in scrittura all'utente alla sua directory home.

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

È possibile 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. Limitazione dell'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 opzione è 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 generare rapidamente un certificato gratuito SSL Let's Encrypt.

Genereremo una chiave privata a 2048 bit e un certificato SSL autofirmato che sarà valido per dieci anni:

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

Sia la chiave privata che il certificato verranno salvati nello stesso file.

Una volta creato il certificato SSL, apri il file di configurazione vsftpd:

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 terminate le modifiche, il file di configurazione di 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
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
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
/etc/vsftpd.conf

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

sudo systemctl restart vsftpd

Aprire il firewall

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

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

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

Per evitare di essere bloccato, assicurati che la porta 22sia aperta:

sudo ufw allow OpenSSH

Ricarica le regole UFW disabilitando e riabilitando UFW:

sudo ufw disable
sudo ufw enable

Per verificare le modifiche eseguire:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
20:21/tcp                  ALLOW       Anywhere
30000:31000/tcp            ALLOW       Anywhere
OpenSSH                    ALLOW       Anywhere
20:21/tcp (v6)             ALLOW       Anywhere (v6)
30000:31000/tcp (v6)       ALLOW       Anywhere (v6)
OpenSSH (v6)               ALLOW       Anywhere (v6)

Creare un utente FTP

Per testare il server FTP, creeremo un nuovo utente.

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

Crea un nuovo utente denominato newftpuser:

sudo adduser newftpuser

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 propri file nella directory ftp/upload.

A questo punto, il tuo server FTP è completamente funzionante. Dovresti essere in grado di connetterti al server utilizzando qualsiasi client FTP che può essere configurato per utilizzare la crittografia TLS, come FileZilla.

Disabilitare l'accesso alla shell

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

Eseguire i seguenti comandi per creare il file /bin/ftponly e renderlo 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

Puoi usare 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 Ubuntu 20.04 LTS Focal Fossa.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.