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:
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:
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
:
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:
Metodo 2. - Un'altra opzione è abilitare la direttiva allow_writeable_chroot
:
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:
È 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:
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
:
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:
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 22
sia 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.