Ricerca nel sito web

Come installare e configurare un server FTP (vsftpd) con SSL/TLS su Ubuntu 20.04


Questo tutorial esiste per queste versioni del sistema operativo

  • Ubuntu 18.04 (Castoro bionico)

Su questa pagina

  1. Prerequisiti
  2. Passaggio 1 - Installa vsftpd
  3. Passaggio 2: configurazione del firewall
  4. Passaggio 3 - Configurazione di vsftpd
    1. 1. Accesso all'FTP
    2. 2. Abilitazione dei caricamenti di file
    3. 3. Prigione di Chroot
    4. 4. FTP passivo
    5. 5. Limitazione degli utenti

    1. Passaggio 1 - Aggiungi un nuovo utente.
    2. Passaggio 2 - Aggiungi l'utente all'elenco degli utenti FTP consentiti.
    3. Passaggio 3 - Crea FTP e directory dei file

    FTP o File Transfer Protocol è un protocollo molto antico e noto per il trasferimento di file tra un client e un server. È anche un protocollo non sicuro ma solo se utilizzato senza TLS. In questo tutorial configureremo vsftpd per TLS che ci consente di utilizzare FTP in modo sicuro. FTP è stato spesso sostituito con protocolli più sicuri come SFTP o SCP in questi giorni.

    Se invece hai bisogno di usare FTP con il tuo server, vsftpd (Very Secure FTP Daemon) è una scelta perfetta.

    In questo tutorial impareremo come installare e configurare un server FTP usando vsftpd su un server basato su Ubuntu 20.04. Impareremo anche come proteggere la connessione utilizzando il protocollo SSL/TLS.

    Prerequisiti

    • Un server Ubuntu 20.04 con un utente non root con privilegi sudo.

    Passo 1 - Installa vsftpd

    Il primo passo è installare vsftpd.

    $ sudo apt update
    $ sudo apt install vsftpd
    

    Successivamente, dobbiamo eseguire il backup del file di configurazione originale in modo da poter iniziare con una nuova configurazione.

    $ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
    

    Passaggio 2: configurare il firewall

    In questo passaggio, configureremo il firewall UFW per consentire l'accesso alle porte FTP.

    Innanzitutto, controlliamo lo stato del firewall.

    $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    

    Come possiamo vedere, finora sono consentite solo le porte SSH. Apriamo le porte 20 (porta di comando FTP), 21 (porta dati FTP), 990 per quando utilizziamo TLS e le porte 35000-40000 per l'intervallo di porte passive di cui potremmo aver bisogno in futuro.

    $ sudo ufw allow 20:21/tcp
    $ sudo ufw allow 990/tcp
    $ sudo ufw allow 35000:40000/tcp
    $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    990/tcp                    ALLOW       Anywhere
    20:21/tcp                  ALLOW       Anywhere
    35000:40000/tcp            ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    20:21/tcp (v6)             ALLOW       Anywhere (v6)
    990/tcp (v6)               ALLOW       Anywhere (v6)
    35000:40000/tcp (v6)       ALLOW       Anywhere (v6)
    

    Passaggio 3: configurazione di vsftpd

    Ora esamineremo alcune impostazioni importanti affinché vsftpd funzioni.

    Inizia aprendo il file di configurazione.

    $ sudo nano /etc/vsftpd.conf
    

    1. Accesso FTP

    In questo tutorial, consentiremo l'accesso FTP solo agli utenti locali e disabiliteremo qualsiasi accesso anonimo. Per fare ciò, assicurati che le seguenti righe esistano e siano le seguenti.

    anonymous_enable=NO
    local_enable=YES
    

    2. Abilitazione dei caricamenti di file

    Lo scopo singolare più importante di FTP qui è essere in grado di scrivere sul server. Rimuovi il commento dalla riga seguente per abilitare il caricamento dei file rimuovendo # all'inizio.

    write_enable=YES
    

    3. Prigione Chroot

    FTP funziona meglio quando un utente è limitato a una determinata directory. vsftpd ottiene ciò utilizzando chroot jail. Quando chroot è abilitato per gli utenti locali, sono limitati alle loro home directory per impostazione predefinita. Per ottenere ciò, decommentare la seguente riga.

    chroot_local_user=YES
    

    Per prevenire qualsiasi vulnerabilità di sicurezza, chroot quando abilitato non funzionerà fintanto che la directory a cui gli utenti sono limitati è scrivibile.

    Per aggirare questa limitazione, abbiamo due metodi per consentire il caricamento dei file quando chroot è abilitato.

    1. Method 1 - This method works by using a different directory for FTP uploads. For this tutorial, we will create an ftp directory inside the user's home to serve as the chroot and a second writable directory upload for uploading the files. To achieve this, add the following lines at the bottom of the file.

      user_sub_token=$USER
      local_root=/home/$USER/ftp
      
    2. Method 2 - The second method is to simply grant writable access to the home directory as a whole. Add the following line to achieve this.

      allow_writeable_chroot=YES
      

    4. FTP passivo

    vsftpd può utilizzare qualsiasi porta per connessioni FTP passive. Possiamo specificare un intervallo per il numero di porta minimo e massimo che vsftpd può utilizzare. Queste sono le porte che abbiamo configurato in precedenza nel nostro firewall UFW.

    Aggiungi le seguenti righe per consentire le connessioni FTP passive.

    pasv_min_port=35000
    pasv_max_port=40000
    

    5. Limitazione degli utenti

    Per consentire solo a determinati utenti di accedere al server FTP, aggiungere le seguenti righe in fondo.

    userlist_enable=YES
    userlist_file=/etc/vsftpd.userlist
    userlist_deny=NO
    

    Con questa opzione abilitata, dobbiamo specificare quali utenti devono essere autorizzati a usare FTP e aggiungere i loro nomi utente nel file /etc/vsftpd.userlist.

    Riavvia vsftpd per abilitare la configurazione.

    $ sudo systemctl restart vsftpd
    

    Passaggio 4: configurazione della directory utenti

    Ai fini di questo tutorial, creeremo un nuovo account utente per le transazioni FTP. Se hai già un account utente per questo scopo, puoi saltare il passaggio 1. Inoltre, se in precedenza avevi impostato allow_writeable_chroot=YES nel file di configurazione, puoi saltare il passaggio 3.

    Passaggio 1: aggiungi un nuovo utente.

    $ sudo adduser testuser
    

    Imposta una password complessa e salta tutte le altre richieste.

    Passaggio 2: aggiungere l'utente all'elenco degli utenti FTP consentiti.

    $ echo "testuser" | sudo tee -a /etc/vsftpd.userlist
    

    Passaggio 3: creazione di FTP e directory dei file

    Questo passaggio è se si desidera una directory diversa come root FTP e un'altra diversa per il caricamento dei file per aggirare la limitazione della gabbia chroot.

    Crea la cartella FTP.

    $ sudo mkdir /home/testuser/ftp
    

    Imposta la sua proprietà.

    $ sudo chown nobody:nogroup /home/testuser/ftp
    

    Rimuovi i permessi di scrittura.

    $ sudo chmod a-w /home/testuser/ftp
    

    Verificare le autorizzazioni prima di procedere.

    $ sudo ls -al /home/testuser/ftp
    total 8
    dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
    drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
    

    Ora creiamo la directory scrivibile effettiva per i file.

    $ sudo mkdir /home/testuser/ftp/upload
    $ sudo chown testuser:testuser /home/testuser/ftp/upload
    

    Testare le autorizzazioni.

    $ sudo ls -al /home/testuser/ftp
    total 12
    dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
    drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
    drwxr-xr-x 2 testuser testuser 4096 Jun  7 13:10 upload
    

    Infine, aggiungiamo un file test.txt da utilizzare per il test.

    $ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt
    

    Passaggio 5: verifica l'accesso FTP

    Il nostro server FTP è perfettamente funzionante in questo momento. Possiamo fare un piccolo test prima di procedere.

    Proviamo ad accedere come utente anonimo.

    $ ftp -p 136.244.105.99
    Connected to 136.244.105.99.
    220 (vsFTPd 3.0.3)
    Name (136.244.105.99:default): anonymous
    530 Permission denied.
    ftp: Login failed.
    ftp>
    

    Chiudi la connessione.

    ftp> bye
    

    Funziona come previsto, ovvero gli utenti anonimi non sono ammessi.

    Proviamo a connetterci come qualsiasi altro utente sudo. Inoltre non dovrebbe connettersi.

    $ ftp -p 136.244.105.99
    Connected to 136.244.105.99.
    220 (vsFTPd 3.0.3)
    Name (136.244.105.99:default): sudo_user
    530 Permission denied.
    ftp: Login failed.
    ftp>
    

    Chiudi la connessione.

    ftp> bye
    

    Proviamo infine a connetterci come testuser che abbiamo creato per FTP.

    $ ftp -p 136.244.105.99
    Connected to 136.244.105.99.
    220 (vsFTPd 3.0.3)
    Name (136.244.105.99:default): testuser
    331 Please specify the password.
    Password: your_user's_password
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>
    

    Passiamo alla directory upload e utilizziamo il comando get per trasferire il file di test sulla nostra macchina locale.

    ftp> cd upload
    250 Directory successfully changed.
    ftp> get test.txt
    227 Entering Passive Mode (136,244,105,99,165,42).
    150 Opening BINARY mode data connection for test.txt (17 bytes).
    226 Transfer complete.
    16 bytes received in 0.0101 seconds (164.3719 kB/s)
    ftp>
    

    Successivamente, carichiamo il file con un nuovo nome usando il comando put per testare i permessi di scrittura.

    ftp> put test.txt upload.txt
    227 Entering Passive Mode (136,244,105,99,163,102).
    150 Ok to send data.
    226 Transfer complete.
    17 bytes sent in 0.000894 seconds (518.7988 kB/s)
    

    Chiudi la connessione.

    ftp> bye
    

    Passaggio 6: protezione delle trasmissioni tramite SSL/TLS

    Per crittografare le trasmissioni FTP, è necessario disporre di un certificato SSL e configurare vsftpd per utilizzarlo.

    Se disponi già di un dominio o sottodominio che punta al tuo server FTP, puoi creare un certificato SSL Lets Encrypt gratuito e utilizzarlo.

    Ai fini del nostro tutorial, utilizzeremo un certificato SSL autofirmato. Per crearne uno, usa il comando openssl.

    Il seguente comando creerà una chiave privata a 2048 bit e un certificato valido per 1 anno. Sia il certificato che la chiave verranno salvati nello stesso file.

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

    Puoi saltare le istruzioni che seguono o riempire i valori a tuo piacimento.

    Ora che il nostro certificato è stato creato, è il momento di aprire nuovamente il file di configurazione vsftpd.

    $ sudo nano /etc/vsftpd.conf
    

    Trova le seguenti righe e commentale mettendo un hash davanti a loro come segue.

    # rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    # rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    

    Ora, aggiungi le seguenti righe.

    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    rsa_private_key_file=/etc/ssl/private/vsftpd.pem
    

    Inoltre, modifica il valore di ssl_enable in YES.

    ssl_enable=YES
    

    Aggiungiamo qualche altra impostazione per migliorare la sicurezza SSL.

    allow_anon_ssl=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    require_ssl_reuse=NO
    ssl_ciphers=HIGH
    

    La maggior parte di queste impostazioni è autoesplicativa. Questi disabilitano SSL per gli utenti anonimi e richiedono SSL sia per il trasferimento dei dati che per gli accessi. Abbiamo anche disabilitato i protocolli SSL non sicuri e ci atterremo a TLSv1.0. Infine, abbiamo disabilitato il riutilizzo di SSL e richiediamo suite di crittografia ad alta crittografia.

    Riavvia il server per rendere effettive le impostazioni.

    $ sudo systemctl restart vsftpd
    

    Ora non sarai in grado di utilizzare FTP tramite la riga di comando. Dovrai connetterti utilizzando un client che supporti TLS.

    Passaggio 7: test di TLS con FileZilla

    Per il nostro tutorial, testeremo la funzionalità TLS utilizzando Filezilla.

    Quando apri Filezilla, fai clic sull'icona Site Manager appena sopra la parola Host nella riga superiore.

    Verrà aperta una nuova finestra. Fare clic sul pulsante Nuovo sito nell'angolo in basso a destra.

    Vedrai una nuova icona con il nome Nuovo sito. Puoi rinominarlo usando il pulsante Rinomina.

    Compila il campo Host con l'indirizzo IP del tuo server. Poiché la nostra porta FTP è 21, che è la porta predefinita per FTP, puoi lasciare vuoto il campo della porta. Per l'opzione Crittografia, seleziona Richiedi FTP esplicito su TLS dal menu a discesa.

    Inserisci il tuo nome utente e password FTP con quelli che abbiamo creato sopra. Fare clic sul pulsante Connetti per procedere.

    Una volta stabilita la connessione, vedrai un certificato del server simile al seguente.

    È possibile selezionare l'opzione Fidati sempre di questo certificato nelle sessioni future. in modo che non ti venga chiesto ogni volta che accedi. Fai clic su OK per procedere.

    È ora possibile eseguire le normali operazioni FTP.

    Passaggio 8: disabilitare l'accesso alla shell

    Questo passaggio è del tutto facoltativo. Per impostazione predefinita, quando si crea un utente FTP, se non specificato esplicitamente, l'utente avrà accesso SSH al server.

    Dovresti disabilitare l'accesso shell all'utente FTP per migliorare la sicurezza. Per disabilitarlo, dobbiamo creare una nuova shell che stamperà un messaggio che dice che l'account utente è 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
    

    Puoi usare lo stesso comando per cambiare la shell di tutti gli utenti a cui vuoi concedere l'accesso FTP.

    Conclusione

    Questo conclude il nostro tutorial in cui abbiamo installato e configurato vsftpd per installare un server FTP su un server basato su Ubuntu 20.04. Abbiamo anche configurato la nostra connessione FTP in modo che funzioni utilizzando SSL/TLS.

    Se hai domande, chiedile nei commenti qui sotto.