Ricerca nel sito web

Come installare, configurare e proteggere il server FTP in CentOS 7 - [Guida completa]


FTP (File Transfer Protocol) è uno strumento standard tradizionale e ampiamente utilizzato per trasferire file tra un server e client su una rete, soprattutto dove non è necessaria alcuna autenticazione (consente agli utenti anonimi per connettersi a un server). Dobbiamo capire che l'FTP non è sicuro per impostazione predefinita, perché trasmette le credenziali e i dati dell'utente senza crittografia.

In questa guida descriveremo i passaggi per installare, configurare e proteggere un server FTP (VSFTPD sta per “Very Secure FTP Daemon“) in CentOS distribuzioni/RHEL 7 e Fedora.

Tieni presente che tutti i comandi in questa guida verranno eseguiti come root, nel caso in cui non utilizzi il server con l'account root, utilizza il comando sudo per ottenere i privilegi di root.

Passaggio 1: installazione del server FTP

1. L'installazione del server vsftpd è semplice, basta eseguire il seguente comando nel terminale.

yum install vsftpd

2. Al termine dell'installazione, il servizio verrà inizialmente disabilitato, quindi per il momento dobbiamo avviarlo manualmente e abilitarlo per l'avvio automatico anche al successivo avvio del sistema:

systemctl start vsftpd
systemctl enable vsftpd

3. Successivamente, per consentire l'accesso ai servizi FTP da sistemi esterni, dobbiamo aprire la porta 21, dove i demoni FTP sono in ascolto come segue:

firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

Passaggio 2: configurazione del server FTP

4. Ora passeremo ad eseguire alcune configurazioni per impostare e proteggere il nostro server FTP, iniziamo facendo un backup del file di configurazione originale /etc/vsftpd/vsftpd.conf :

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

Successivamente, apri il file di configurazione sopra e imposta le seguenti opzioni con questi valori corrispondenti:

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 FTP per consentire/negare l'accesso FTP agli utenti in base al file di elenco utenti /etc/vsftpd.userlist.

Per impostazione predefinita, agli utenti elencati in userlist_file=/etc/vsftpd.userlist viene negato l'accesso con l'opzione userlist_deny impostata su YES, se userlist_enable=SÌ.

Tuttavia, userlist_deny=NO modifica l'impostazione, il che significa che solo gli utenti esplicitamente elencati in userlist_file=/etc/vsftpd.userlist potranno accedere.

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   

Non è tutto, quando gli utenti accedono al server FTP, vengono posti in una prigione chroot, questa è la directory root locale che fungerà da directory home solo per la sessione FTP.

Successivamente, esamineremo due possibili scenari su come eseguire il chroot degli utenti FTP nella directory Home (root locale) per gli utenti FTP, come spiegato di seguito.

6. Ora aggiungi queste due opzioni seguenti per limitare gli utenti FTP alle loro directory Home.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES significa che gli utenti locali verranno inseriti in una prigione chroot, la loro directory home dopo l'accesso per impostazione predefinita.

Inoltre, per impostazione predefinita, vsftpd non consente la scrittura della directory jail chroot per motivi di sicurezza, tuttavia, possiamo utilizzare l'opzione allow_writeable_chroot=YES per sovrascrivere questa impostazione.

Salva il file e chiudilo.

Proteggere il server FTP con SELinux

7. Ora impostiamo il valore booleano SELinux di seguito per consentire all'FTP di leggere i file nella directory home di un utente. Tieni presente che inizialmente questo è stato fatto utilizzando il comando:

setsebool -P ftp_home_dir on

Tuttavia, la direttiva ftp_home_dir è stata disabilitata per impostazione predefinita, come spiegato in questa segnalazione di bug: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Ora utilizzeremo il comando semanage per impostare la regola SELinux per consentire all'FTP di leggere/scrivere la directory home dell'utente.

semanage boolean -m ftpd_full_access --on

A questo punto dobbiamo riavviare vsftpd per rendere effettive tutte le modifiche apportate finora:

systemctl restart vsftpd

Passaggio 4: test del server FTP

8. Ora testeremo il server FTP creando un utente FTP con il comando useradd.

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

Successivamente, dobbiamo aggiungere l'utente ravi al file /etc/vsftpd.userlist utilizzando il comando echo come segue:

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

9. Ora è il momento di verificare se le nostre impostazioni sopra funzionano correttamente. Iniziamo testando gli accessi anonimi, possiamo vedere dalla schermata qui sotto che gli accessi anonimi non sono consentiti:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. Testiamo anche se a un utente non elencato nel file /etc/vsftpd.userlist verrà concessa l'autorizzazione per accedere, il che non è il caso come nello screenshot sotto:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Ora esegui un controllo finale se un utente elencato nel file /etc/vsftpd.userlist, viene effettivamente inserito nella sua directory home dopo il login:

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

Attiva questa opzione solo se sai esattamente cosa stai facendo. È importante notare che queste implicazioni sulla sicurezza non sono specifiche di vsftpd, ma si applicano a tutti i demoni FTP che offrono anche di mettere gli utenti locali in chroot jail.

Pertanto, nella sezione successiva esamineremo un modo più sicuro per impostare una diversa directory root locale non scrivibile.

Passaggio 5: configurare diverse directory home utente FTP

12. Apri nuovamente il file di configurazione vsftpd e inizia commentando l'opzione non sicura di seguito:

#allow_writeable_chroot=YES

Quindi crea la directory root locale alternativa per l'utente (ravi, la tua probabilmente è diversa) e rimuovi i permessi di scrittura a tutti gli utenti in questa directory:

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

13. Successivamente, crea una directory sotto la radice locale in cui l'utente memorizzerà i suoi file:

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/ftp/files/

Quindi aggiungi/modifica le seguenti opzioni nel file di configurazione vsftpd con questi valori:

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. Ancora una volta, riavviamo il servizio con le nuove impostazioni:

systemctl restart vsftpd

14. Ora esegui nuovamente un test finale e verifica che la directory root locale dell'utente sia la directory FTP che abbiamo creato nella sua directory home.

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

Questo è tutto! In questo articolo, abbiamo descritto come installare, configurare e proteggere un server FTP in CentOS 7, utilizza la sezione commenti qui sotto per risponderci riguardo a questa guida/condividere qualsiasi informazione utile su questo argomento.

Lettura consigliata: installa ProFTPD Server su RHEL/CentOS 7

Nel prossimo articolo ti mostreremo anche come proteggere un server FTP utilizzando connessioni SSL/TLS in CentOS 7. Fino ad allora rimani connesso a TecMint.