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 root@IP_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 nome_utente@IP_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 nome_utente@IP_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.