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
- Prerequisiti
- Passaggio 1 - Installa vsftpd
- Passaggio 2: configurazione del firewall
- Passaggio 3 - Configurazione di vsftpd
- 1. Accesso all'FTP
- 2. Abilitazione dei caricamenti di file
- 3. Prigione di Chroot
- 4. FTP passivo
- 5. Limitazione degli utenti
- Passaggio 1 - Aggiungi un nuovo utente.
- Passaggio 2 - Aggiungi l'utente all'elenco degli utenti FTP consentiti.
- 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.
-
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 directoryupload
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
-
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 comandoget
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
inYES
.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.