GNU/Linux >> Linux Esercitazione >  >> Ubuntu

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

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

Se, tuttavia, devi utilizzare FTP con il tuo server, vsftpd (Very Secure FTP Daemon) è la 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.

Passaggio 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:configurazione del firewall

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

Per prima cosa, 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 la gamma 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)

Fase 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 più importante dell'FTP qui è di essere in grado di scrivere sul server. Decommenta la riga seguente per abilitare i caricamenti di file rimuovendo # davanti.

write_enable=YES

3. Prigione di Chroot

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

chroot_local_user=YES

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

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

  1. Metodo 1 - Questo metodo funziona utilizzando una directory diversa per i caricamenti FTP. Per questo tutorial creeremo un ftp directory all'interno della home dell'utente per fungere da chroot e una seconda directory scrivibile upload per caricare i file. Per ottenere ciò, aggiungi le seguenti righe in fondo al file.

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. Metodo 2 - Il secondo metodo consiste nel concedere semplicemente l'accesso scrivibile alla home directory nel suo insieme. Aggiungi la seguente riga per ottenere ciò.

    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 può utilizzare vsftpd. 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. Limitare gli utenti

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

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

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

Riavvia vsftpd per abilitare la configurazione.

$ sudo systemctl restart vsftpd

Fase 4:configurazione della directory utente

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 avevi impostato allow_writeable_chroot=YES nel file di configurazione precedente, 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:aggiungi l'utente all'elenco di utenti FTP consentiti.

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

Passaggio 3:crea FTP e directory di file

Questo passaggio è se desideri una directory diversa come radice FTP e una diversa per caricare i file per aggirare la limitazione della jail di 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

Verifica 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 vera directory scrivibile per i file.

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

Verifica i permessi.

$ 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 test.txt file da utilizzare per il test.

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

Passaggio 5:verifica dell'accesso FTP

Il nostro server FTP è completamente 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 non sono ammessi utenti anonimi.

Proviamo a connetterci come qualsiasi altro utente sudo. Non dovrebbe collegarsi altrettanto bene.

$ 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 finalmente 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 a upload directory e usa get comando per trasferire il file di prova 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>

Quindi, carichiamo il file con un nuovo nome usando il put comando 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, dobbiamo disporre di un certificato SSL e configurare vsftpd per utilizzarlo.

Se hai già un dominio o un sottodominio che punta al tuo server FTP, puoi creare un certificato SSL Let's Encrypt gratuito e usarlo.

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

Il comando seguente 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 i prompt che seguono o inserire i valori a tuo piacimento.

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

$ sudo nano /etc/vsftpd.conf

Trova le seguenti righe e commentale mettendo un cancelletto 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, cambia il valore di ssl_enable a 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 sono autoesplicative. 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 abbiamo bisogno di suite di crittografia High Encryption.

Riavvia il server per rendere effettive le impostazioni.

$ sudo systemctl restart vsftpd

Ora non sarai in grado di utilizzare FTP tramite 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 di Site Manager appena sopra la parola Host nella riga superiore.

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

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

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 la porta campo vuoto. Per l'opzione Crittografia, seleziona Richiedi FTP esplicito su TLS dal menu a tendina.

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

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

Puoi selezionare l'opzione Fidati sempre di questo certificato nelle sessioni future. in modo che non ti venga chiesto ogni volta all'accesso. Fai clic su Ok per procedere.

Ora puoi eseguire normali operazioni FTP.

Passaggio 8 - Disattiva l'accesso alla shell

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

Dovresti disabilitare l'accesso alla shell per l'utente FTP per migliorare la sicurezza. Per disabilitarlo, dobbiamo creare una nuova shell che stamperà un messaggio dicendo che l'account utente è limitato al solo accesso FTP.

Crea il /bin/ftponly shell 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 in /etc/shells file.

$ 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 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 per funzionare utilizzando SSL/TLS.

Se hai domande, chiedile nei commenti qui sotto.


Ubuntu
  1. Come installare un server FTP su CentOS 7 con VSFTPD

  2. Come installare un server FTP su Ubuntu con vsftpd

  3. Come installare e configurare un server NFS su Ubuntu 20.04

  4. Come installare il server FTP vsftpd e proteggerlo con TLS su Debian 11

  5. Installa Vsftpd con SSL/TLS su Ubuntu 20.04

Installa Vsftpd con SSL/TLS su Ubuntu 20.04

Come installare il server FTP vsftpd con TLS su Debian 10

Come installare il server VsFTPD con TLS su Ubuntu 18.04 LTS

Come installare e configurare Apache con Let's Encrypt TLS/SSL su Ubuntu 20.04

Come installare e configurare il server FTP VSFTPD su Ubuntu

Come installare e configurare VSFTPD su Ubuntu 14.04