Ricerca nel sito web

Come installare e configurare il server FTP in Ubuntu


FTP (File Transfer Protocol) è un protocollo di rete standard relativamente vecchio e più utilizzato utilizzato per caricare/scaricare file tra due computer su una rete. Tuttavia, FTP inizialmente non è sicuro, poiché trasmette i dati insieme alle credenziali dell'utente (nome utente e password) senza crittografia.

Avvertenza: se prevedi di utilizzare FTP, valuta la possibilità di configurare la connessione FTP con SSL/TLS (coperto in prossimo articolo). Altrimenti è sempre meglio utilizzare FTP sicuro come SFTP.

Lettura consigliata: Come installare e proteggere il server FTP in CentOS 7

In questo tutorial, mostreremo come installare, configurare e proteggere un server FTP (VSFTPD nella sua interezza “Very Secure FTP Daemon“) in Ubuntu per avere una potente sicurezza contro le vulnerabilità FTP.

Passaggio 1: installazione del server VsFTP in Ubuntu

1. Innanzitutto, dobbiamo aggiornare l'elenco delle origini dei pacchetti di sistema e quindi installare il pacchetto binario VSFTPD come segue:

sudo apt-get update
sudo apt-get install vsftpd

2. Una volta completata l'installazione, il servizio verrà inizialmente disabilitato, quindi nel frattempo dobbiamo avviarlo manualmente e abilitarlo anche per l'avvio automatico al successivo avvio del sistema:

------------- On SystemD ------------- 
systemctl start vsftpd
systemctl enable vsftpd

------------- On SysVInit ------------- 
service vsftpd start
chkconfig --level 35 vsftpd on

3. Successivamente, se hai abilitato il firewall UFW (non è abilitato per impostazione predefinita) sul server, devi aprire le porte 21 e 20 dove sono in ascolto i demoni FTP, per consentire l'accesso ai servizi FTP da macchine remote, quindi aggiungere le nuove regole del firewall come segue:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw status

Passaggio 2: configurazione e protezione del server VsFTP in Ubuntu

4. Eseguiamo ora alcune configurazioni per impostare e proteggere il nostro server FTP, per prima cosa creeremo un backup del file di configurazione originale /etc/vsftpd/vsftpd.conf come COSÌ:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Successivamente, apriamo il file di configurazione vsftpd.

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

Aggiungi/modifica le seguenti opzioni con questi valori:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Ora configura VSFTPD per consentire/negare l'accesso FTP agli utenti in base al file di elenco utenti /etc/vsftpd.userlist.

Tieni presente che per impostazione predefinita, agli utenti elencati in userlist_file=/etc/vsftpd.userlist viene negato l'accesso con l'opzione userlist_deny=YES se userlist_enable=YES .

Tuttavia, l'opzione userlist_deny=NO stravolge il significato dell'impostazione predefinita, quindi solo gli utenti il cui nome utente è esplicitamente elencato in userlist_file=/etc/vsftpd.userlist potranno accedere al server FTP.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Importante: quando gli utenti accedono al server FTP, vengono inseriti in una jail chroot, questa è la directory root locale che fungerà da directory home per la sessione FTP soltanto.

Successivamente, esamineremo due possibili scenari su come impostare la directory chrooted jail (root locale), come spiegato di seguito.

6. A questo punto, aggiungiamo/modifichiamo/decommentiamo queste due opzioni seguenti per limitare gli utenti FTP alle loro directory Home.

chroot_local_user=YES
allow_writeable_chroot=YES

L'opzione chroot_local_user=YES significa soprattutto che gli utenti locali verranno inseriti in una prigione chroot, la loro directory home predefinita dopo il login.

E dobbiamo anche capire che VSFTPD non consente la scrittura della directory jail chroot, per impostazione predefinita per motivi di sicurezza, tuttavia, possiamo utilizzare l'opzione allow_writeable_chroot=YES per disabilitare questa impostazione.

Salva il file e chiudilo. Quindi dobbiamo riavviare i servizi VSFTPD affinché le modifiche sopra abbiano effetto:

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

Passaggio 3: testare il server VsFTP in Ubuntu

7. Ora testeremo il server FTP creando un utente FTP con il comando useradd come segue:

sudo useradd -m -c "Aaron Kili, Contributor" -s /bin/bash aaronkilik
sudo passwd aaronkilik

Quindi, dobbiamo elencare esplicitamente l'utente aaronkilik nel file /etc/vsftpd.userlist con il comando echo e il comando tee come di seguito:

echo "aaronkilik" | sudo tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

8. Ora è giunto il momento di testare che le nostre configurazioni di cui sopra funzionino come richiesto. Inizieremo testando gli accessi anonimi; possiamo vedere chiaramente dall'output seguente che gli accessi anonimi non sono consentiti sul server FTP:

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : anonymous
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

9. Successivamente, testiamo se a un utente non elencato nel file /etc/vsftpd.userlist verrà concessa l'autorizzazione per accedere, il che non è vero dall'output che segue :

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : user1
530 Permission denied.
Login failed.
ftp> bye
221 Goodbye.

10. Ora effettueremo un test finale per determinare se un utente elencato nel file /etc/vsftpd.userlist, viene effettivamente inserito nella sua directory home dopo login. E questo è vero dall'output seguente:

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.102:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Avviso: l'impostazione dell'opzione allow_writeable_chroot=YES può essere così pericolosa da avere possibili implicazioni sulla sicurezza, soprattutto se gli utenti dispongono dell'autorizzazione di caricamento o ancora di più, accesso alla shell. Usalo solo se sai esattamente cosa stai facendo.

Dovremmo notare che queste implicazioni sulla sicurezza non sono specifiche di VSFTPD, ma possono influenzare anche tutti gli altri demoni FTP che offrono di mettere gli utenti locali in chroot jail.

Per questo motivo, nella sezione seguente, spiegheremo un metodo più sicuro per impostare una diversa directory root locale non scrivibile per un utente.

Passaggio 4: configurare le directory home dell'utente FTP in Ubuntu

11. Ora apri ancora una volta il file di configurazione VSFTPD.

sudo vi /etc/vsftpd.conf
OR
sudo nano /etc/vsftpd.conf

e commenta l'opzione non protetta utilizzando il carattere # come mostrato di seguito:

#allow_writeable_chroot=YES

Successivamente, crea la directory root locale alternativa per l'utente (aaronkilik, la tua probabilmente non è la stessa) e imposta le autorizzazioni richieste disabilitando le autorizzazioni di scrittura per tutti gli altri utenti in questa directory:

sudo mkdir /home/aaronkilik/ftp
sudo chown nobody:nogroup /home/aaronkilik/ftp
sudo chmod a-w /home/aaronkilik/ftp

12. Quindi, crea una directory sotto la radice locale con le autorizzazioni appropriate in cui l'utente memorizzerà i suoi file:

sudo mkdir /home/aaronkilik/ftp/files
sudo chown -R aaronkilk:aaronkilik /home/aaronkilik/ftp/files
sudo chmod -R 0770 /home/aaronkilik/ftp/files/

Successivamente, aggiungi/modifica le opzioni seguenti nel file di configurazione VSFTPD con i valori corrispondenti:

user_sub_token=$USER          # inserts the username in the local root directory 
local_root=/home/$USER/ftp    # defines any users local root directory

Salva il file e chiudilo. E riavvia i servizi VSFTPD con le impostazioni recenti:

------------- On SystemD ------------- 
systemctl restart vsftpd

------------- On SysVInit ------------- 
service vsftpd restart

13. Ora, eseguiamo un controllo finale e assicuriamoci che la directory root locale dell'utente sia la directory FTP che abbiamo creato nella sua directory Home.

ftp 192.168.56.102
Connected to 192.168.56.102  (192.168.56.102).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:aaronkilik) : aaronkilik
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Questo è tutto! Ricordati di condividere la tua opinione su questa guida tramite il modulo di commento qui sotto o eventualmente fornirci qualsiasi informazione importante riguardante l'argomento.

Ultimo ma non meno importante, non perdetevi il nostro prossimo articolo, in cui descriveremo come proteggere un server FTP utilizzando connessioni SSL/TLS in Ubuntu 16.04/16.10. Fino ad allora, rimanete sempre sintonizzati su TecMint.