FTP (File Transfer Protocol) è un protocollo di rete standard utilizzato per trasferire file da e verso una rete remota.
Ci sono molti server FTP open source disponibili per Linux. I più popolari e ampiamente utilizzati sono PureFTPd, ProFTPD e vsftpd. In questo tutorial, installeremo vsftpd (Very Secure Ftp Daemon). È un server FTP stabile, sicuro e veloce. Ti mostreremo anche come configurare vsftpd per limitare gli utenti alla loro home directory e crittografare l'intera trasmissione con SSL/TLS.
Sebbene questo tutorial sia scritto per Ubuntu 18.04, le stesse istruzioni si applicano a Ubuntu 16.04 e qualsiasi distribuzione basata su Debian, inclusi Debian, Linux Mint e OS elementare.
Per trasferimenti di dati più sicuri e veloci, usa SCPor SFTP.
Prerequisiti #
Prima di continuare con questo tutorial, assicurati di aver effettuato l'accesso come utente con privilegi sudo.
Installazione di vsftpd su Ubuntu 18.04 #
Il pacchetto vsftpd è disponibile nei repository di Ubuntu. Per installarlo, esegui semplicemente i seguenti comandi:
sudo apt update
sudo apt install vsftpd
Il servizio vsftpd si avvierà automaticamente al termine del processo di installazione. Verificalo stampando lo stato del servizio:
sudo systemctl status vsftpd
L'output sarà simile al seguente, mostrando 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 2018-10-15 03:38:52 PDT; 10min ago
Main PID: 2616 (vsftpd)
Tasks: 1 (limit: 2319)
CGroup: /system.slice/vsftpd.service
`-2616 /usr/sbin/vsftpd /etc/vsftpd.conf
Configurazione di vsftpd #
Il server vsftpd può essere configurato modificando il /etc/vsftpd.conf
file. La maggior parte delle impostazioni sono ben documentate all'interno del file di configurazione. Per tutte le opzioni disponibili, visita la pagina ufficiale 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, trova il anonymous_enable
e local_enable
direttive e verifica che la tua configurazione corrisponda alle righe seguenti:
anonymous_enable=NO
local_enable=YES
2. Abilitazione dei caricamenti #
Decommenta il write_enable
impostazione per consentire modifiche al filesystem come il caricamento e l'eliminazione di file.
write_enable=YES
3. Prigione di Chroot #
Per impedire agli utenti FTP di accedere a qualsiasi file al di fuori delle loro directory home, togliere il commento a chroot
impostazione.
chroot_local_user=YES
Per impostazione predefinita, per prevenire una vulnerabilità di sicurezza, quando chroot è abilitato, vsftpd rifiuterà di caricare file se la directory in cui sono bloccati gli utenti è scrivibile.
Usa uno dei metodi seguenti per consentire i caricamenti quando chroot è abilitato.
-
Metodo 1. - Il metodo consigliato per consentire il caricamento è mantenere chroot abilitato e configurare le directory FTP. In questo tutorial creeremo un
/etc/vsftpd.confftp
directory all'interno della home dell'utente che fungerà da chroot e dauploads
scrivibile directory per il caricamento dei file.user_sub_token=$USER local_root=/home/$USER/ftp
-
Metodo 2. - Un'altra opzione consiste nell'aggiungere la seguente direttiva nel file di configurazione vsftpd. Usa questa opzione se devi concedere l'accesso scrivibile al tuo utente alla sua home directory.
/etc/vsftpd.confallow_writeable_chroot=YES
4. Connessioni FTP passive #
vsftpd può utilizzare qualsiasi porta per connessioni FTP passive. Specificare l'intervallo minimo e massimo di porte e successivamente aprire l'intervallo nel nostro firewall.
Aggiungi le seguenti righe al file di configurazione:
/etc/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
5. Limitare l'accesso degli utenti #
Per consentire solo a determinati utenti di accedere al server FTP aggiungere le seguenti righe alla fine del file:
/etc/vsftpd.confuserlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Quando questa opzione è abilitata è necessario specificare esplicitamente quali utenti possono accedere aggiungendo i nomi utente a /etc/vsftpd.user_list
file (un utente per riga).
6. Protezione delle trasmissioni con SSL/TLS #
Per crittografare le trasmissioni FTP con SSL/TLS, dovrai disporre di un certificato SSL e configurare il server FTP per utilizzarlo.
Puoi 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 facilmente generare un certificato Let's EncryptSSL gratuito.
Genereremo un certificato SSL autofirmato utilizzando il openssl
comando.
Il comando seguente creerà una chiave privata a 2048 bit e un certificato autofirmato valido per 10 anni. Sia la chiave privata che il certificato verranno salvati in uno stesso file:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Una volta creato il certificato SSL, apri il file di configurazione vsftpd:
sudo nano /etc/vsftpd.conf
Trova il rsa_cert_file
e rsa_private_key_file
direttive, cambia i loro valori in pam
percorso del file e imposta ssl_enable
direttiva su YES
:
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Se non diversamente specificato, il server FTP utilizzerà solo TLS per effettuare connessioni sicure.
Riavvia il servizio vsftpd #
Una volta terminata la modifica, il file di configurazione vsftpd (esclusi i commenti) dovrebbe assomigliare a questo:
/etc/vsftpd.conflisten=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Salva il file e riavvia il servizio vsftpd per rendere effettive le modifiche:
sudo systemctl restart vsftpd
Apertura del firewall #
Se stai eseguendo un firewall UFW dovrai consentire il traffico FTP.
Per aprire la porta 21
(porta comando FTP), porta 20
(porta dati FTP) e 30000-31000
(Intervallo di porte passive), esegui i seguenti comandi:
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
Per evitare di essere bloccato, apri la porta 22
:
sudo ufw allow OpenSSH
Ricarica le regole UFW disabilitando e riattivando UFW:
sudo ufw disable
sudo ufw enable
Per verificare le modifiche esegui:
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)
Creazione utente FTP #
Per testare il nostro server FTP creeremo un nuovo utente.
- Se hai già un utente a cui desideri concedere l'accesso FTP, salta il primo passaggio.
- Se imposti
allow_writeable_chroot=YES
nel tuo file di configurazione salta il 3° passaggio.
-
Crea un nuovo utente chiamato
newftpuser
:sudo adduser newftpuser
-
Aggiungi l'utente all'elenco degli utenti FTP consentiti:
echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list
-
Crea l'albero delle directory FTP e imposta 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 potrà caricare i propri file su
ftp/upload
directory.
A questo punto, il tuo server FTP è completamente funzionante e dovresti essere in grado di connetterti al tuo server utilizzando qualsiasi client FTP che può essere configurato per utilizzare la crittografia TLS come FileZilla.
Disabilitazione dell'accesso alla shell #
Per impostazione predefinita, durante la creazione di un utente, se non specificato in modo esplicito, l'utente avrà accesso SSH al server.
Per disabilitare l'accesso alla shell, creeremo una nuova shell che stamperà semplicemente un messaggio che informa l'utente che il suo account è 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
Usa lo stesso comando per cambiare la shell di tutti gli utenti a cui vuoi dare solo accesso FTP.