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.
-
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 scrivibileupload
per caricare i file. Per ottenere ciò, aggiungi le seguenti righe in fondo al file.user_sub_token=$USER local_root=/home/$USER/ftp
-
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.