Introduzione

FTP (File Transfer Protocol) è un protocollo di rete client-server standard che consente agli utenti di trasferire file da e verso una rete remota.

Esistono diversi 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) su CentOS 8. È 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.

Per trasferimenti di dati più sicuri e veloci, utilizzare SCP o SFTP .

Prerequisiti

Prima di continuare con questo tutorial, assicurati di aver effettuato l'accesso come utente con privilegi sudo.

Se desideri installare e configurare VSFTPD su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Installare vsftpd su CentOS 8

Il pacchetto vsftpd è disponibile nei repository CentOS predefiniti. Per installarlo, emettere il seguente comando:

sudo yum install vsftpd

Una volta installato il pacchetto, avvia il demone vsftpd e abilita l'avvio automatico all'avvio:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd

Puoi verificare che il servizio vsftpd sia in esecuzione stampando il suo stato:

sudo systemctl status vsftpd

L'output sarà simile al seguente, a dimostrazione che il servizio vsftpd è attivo e in esecuzione:

● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-11-22 09:42:37 UTC; 6s ago
 Main PID: 29612 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─29612 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Configurare vsftpd

La configurazione del servizio vsftpd comporta la modifica del file/etc/vsftpd/vsftpd.conf di configurazione. Gran 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 verranno esaminate alcune importanti impostazioni necessarie per configurare un'installazione vsftpd sicura.

In questo tutorial utilizziamo nano, se preferite potete utilizzare vi installato di default sulla maggior parte delle distribuzioni.

sudo dnf install nano

Inizia aprendo il file di configurazione vsftpd:

sudo nano /etc/vsftpd/vsftpd.conf

Permettiamo l'accesso al server FTP solo gli utenti locali, trovare le direttive anonymous_enable e local_enable e verificare la corrispondenza della configurazione a righe sotto:

anonymous_enable=NO
local_enable=YES

Decommenta l'impostazione write_enable per consentire modifiche al filesystem come il caricamento e l'eliminazione di file.

write_enable=YES

Impedire agli utenti FTP di accedere a tutti i file al di fuori delle loro home directory (Jail chroot) togliere il commento alla direttiva chroot.

chroot_local_user=YES

Per impostazione predefinita, quando chroot è abilitato vsftpd rifiuta di caricare file se la directory in cui sono bloccati gli utenti è scrivibile. Questo per prevenire una vulnerabilità di sicurezza.

Utilizzare 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 una directory ftp all'interno della home dell'utente che fungerà da chroot e una directory uploads scrivibile per il caricamento dei file:

user_sub_token=$USER
local_root=/home/$USER/ftp

Metodo 2. - Un'altra opzione è quella di aggiungere la seguente direttiva nel file di configurazione vsftpd. Utilizzare questa opzione se è necessario concedere l'accesso scrivibile al proprio utente alla sua home directory:

allow_writeable_chroot=YES

Connessioni FTP passive

vsftpd può usare qualsiasi porta per connessioni FTP passive. Specificheremo l'intervallo minimo e massimo di porte e successivamente apriremo l'intervallo nel nostro firewall.

Aggiungi le seguenti righe al file di configurazione:

sudo nano /etc/vsftpd/vsftpd.conf
pasv_min_port=30000
pasv_max_port=31000

Limitare l'accesso utente

Per consentire solo a determinati utenti di accedere al server FTP aggiungere le seguenti righe dopo la riga userlist_enable=YES:

sudo nano /etc/vsftpd/vsftpd.conf
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

Quando questa opzione è abilitata, è necessario specificare esplicitamente quali utenti sono in grado di accedere aggiungendo i nomi utente al file /etc/vsftpd/user_list (un utente per riga).

Proteggere le trasmissioni con SSL / TLS

Per crittografare le trasmissioni FTP con SSL / TLS, è necessario disporre di un certificato SSL e configurare il server FTP per utilizzarlo.

È possibile 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 SSL Let's Encrypt gratuito.

In questo tutorial, genereremo un certificato SSL autofirmato (Self-Signed SSL Certificate) usando il comando openssl.

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/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

Una volta creato il certificato SSL, apri il file di configurazione vsftpd:

sudo nano /etc/vsftpd/vsftpd.conf

Trova le direttive rsa_cert_file e rsa_private_key_file, modifica i loro valori nel percorso del file pam e imposta la direttiva ssl_enable su YES:

rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

Se non diversamente specificato, il server FTP utilizzerà solo TLS per stabilire connessioni sicure.

Riavviare il servizio vsftpd

Una volta terminata la modifica, il file di configurazione di vsftpd (esclusi i commenti) dovrebbe assomigliare a questo:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
tcp_wrappers=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

Salvare e chiudere il file premendo CTRL+X, seguito da Y per salvare le modifiche e quindi ENTER se stai utilizzando nano.

Riavviare il servizio vsftpd per rendere effettive le modifiche:

sudo systemctl restart vsftpd

Aperire il firewall

Se si esegue un firewall, è necessario consentire il traffico FTP.

Per aprire la porta 21(porta comando FTP), la porta 20( porta dati FTP) e la porta 30000-31000(intervallo porte passive), immettere i seguenti comandi:

sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp

Ricarica le regole del firewall digitando:

firewall-cmd --reload

Creare un 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 si imposta allow_writeable_chroot=YES nel file di configurazione, saltare il 3° passaggio.

Crea un nuovo utente chiamato newftpuser:

sudo adduser newftpuser

Successivamente, dovrai impostare la password dell'utente:

sudo passwd newftpuser

Aggiungi l'utente all'elenco degli utenti FTP consentiti:

echo "newftpuser" | sudo tee -a /etc/vsftpd/user_list

Creare la struttura di directory FTP e impostare 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 sarà in grado di caricare i suoi file nella directory ftp/upload.

A questo punto il tuo server FTP è perfettamente funzionante e dovresti essere in grado di connetterti al tuo server con qualsiasi client FTP che può essere configurato per usare la crittografia TLS come FileZilla.

Disabilitare l'accesso alla shell

Per impostazione predefinita, quando si crea un utente, se non specificato esplicitamente, l'utente avrà accesso SSH al server.

Per disabilitare l'accesso alla shell, creeremo una nuova shell che stamperà semplicemente un messaggio che dice all'utente che il suo account è limitato solo all'accesso FTP.

Esegui i seguenti comandi per creare la shell /bin/ftponly e renderla 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 dell'utente in /bin/ftponly:

sudo usermod newftpuser -s /bin/ftponly

Utilizzare lo stesso comando per modificare la shell per gli altri utenti a cui si desidera fornire solo l'accesso FTP.

Conclusione

In questo tutorial, hai imparato come installare e configurare un server FTP sicuro e veloce sul tuo sistema CentOS 8.