Oggi parleremo dicome realizzare un server FTP su una macchina Linux con CentOS 6 tramite vsftpd.
La sigla FTP significa File Transfert Protocol, si tratta di un protocollo utilizzato per la trasmissione di dati secondo il modello Client/Server.
Tramite Client FTP viene inviata la richiesta al Server, che provvederà a mettere a disposizione la risorsa che può essere condivisa o trasmessa.
Andremo a vedere la configurazione del server FTP tramite vsftpd e l’accesso alle risorse sia in maniera anonima che tramite login.
Per iniziare, andiamo ad installare il nostro server FTP tramite vsftpd:
1 | yum install vsftpd |
Avviamo il servizio e lo impostiamo che si avvi al boot:
1 2 3 | service vsftpd start chkconfig vsftpd on |
Il file di configurazione su cui andremo a lavorare è vsftpd.conf che si trova in /etc/vsftpd.
Il percorso di default dove andremo a mettere a disposizione i vari file è: /var/ftp
Accesso FTP con Download Anonimo
Una volta che abbiamo installato vsftpd e avviato il servizio abbiamo fatto un server FTP con accesso Anonimo.
Per accedere alle risorse da un altra macchina Linux usiamo il client lftp.
Nel caso non fosse installato lo installiamo tramite il seguente comando:
1 | yum install lftp |
A questo punto possiamo accedere alle risorse FTP del Server:
1 | lftp ip_server_ftp |
Nel nostro caso il sever ha ip 192.168.0.34:
1 | lftp 192.168.0.34 |
Chiunque può accedere alle risorse messe a disposizione tramite FTP che si trovano nel percorso /var/ftp con la possibilità di scaricare i file che interessano.
Il Download dei file presenti su FTP lo facciamo tramite il comando:
1 | get nomefile |
Se volessimo scaricare nella Home di michele (Utente presente sul Client) il file chiamato numeri daremo il seguente comando:
1 | get numeri |
E come vediamo il file viene scaricato sulla nostra Home:
Accesso FTP tramite Login con Upload e Download
Questa è probabilmente la configurazione maggiormente usata, cioè quella dove l’accesso alle risorse FTP è regolato da una Login che ci viene fornita.
Per fare questo andiamo a commetare i seguenti parametri nel file /etc/vsftpd/vsftpd.conf mettendo un # davanti:
1 2 3 4 5 | #anonymous_enable=YES #anon_upload_enable=YES #anon_mkdir_write_enable=YES |
Decommentiamo invece i seguenti parametri:
1 2 3 4 5 | local_enable=YES write_enable=YES chroot_local_user=YES |
L’ultimo parametro è per il chroot degli utenti di modo che saranno “jailed” nella loro home directory e non potranno cosi salire alla /:
Fatto ciò riavviamo il servizio vsftpd:
1 | service vsftpd restart |
A questo punto possiamo creare gli utenti (Sul server FTP ) o nel caso lo avessimo gia fatto decidiamo a chi dare l’accesso.
Ammettiamo di avere 2 utenti: giacomo e giulio
Vogliamo garantire l’accesso alle risorse FTP solamente all’utente giulio.
Per fare questo entra in gioco il file /etc/vsftpd/user_list dove di default vengono dichiarati gli utenti che NON devono accedere alle risorse FTP.
Nel nostro caso vogliamo che l’utente giacomo non possa accedere alle risorse FTP:
1 | echo giacomo >> /etc/vsftpd/user_list |
Riavviamo di nuovo il servizio vsftpd:
1 | service vsftpd restart |
A questo punto non resta che provare ad accedere da un client tramite lftp con l’opzione -u:
1 | lftp -u nome_utente ip_del_server |
Prima di procedere alla verifica della login, se avete abilitato SELinux dovete impostare a on il parametro ftp_home_dir:
1 | setsebool ftp_home_dir on |
Se lo vogliamo abilitare in maniera definitiva dobbiamo usare l’opzione -P:
1 | setsebool -P ftp_home_dir on |
Nel nostro caso sarà:
1 | lftp -u giulio 192.168.0.34 |
Infatti se proviamo ad accedere con l’utente giacomo non ci verrà dato l’accesso
L’upload di un file lo facciamo tramite il comando:
1 | put nomefile |
Nel caso in cui volessimo garantire l’accesso solamente ad un utente dobbiamo invertire il ruolo del file user_list ossia dichiarare al suo interno solamente chi PUO accedere alle risorse FTP.
Questo lo facciamo inserendo una stringa in fondo al file vsftpd.conf:
1 | echo “userlist_deny=NO” >> /etc/vsftpd/vsftpd.conf |
Non resta che inserire l’utente a cui vogliamo garantire l’accesso nel file user_list.
Nel nostro caso vogliamo garantire l’accesso solamente all’utente giacomo:
1 | echo “giacomo” >> /etc/vsftpd/user_list |
Riavviamo il servizio vsftpd:
1 | service vsftpd restart |
Come vedremo con l’utente giacomo non ci saranno problemi:
A tutti gli altri utenti non gli verrà consentito l’accesso:
Per concludere il file di log lo troviamo in /var/log/xferlog
Configurazione Iptables per Accesso al server FTP:
Se dobbiamo configurare iptables, non basterà inserire le regole della porta 20 e 21 ma dovremmo anche caricare 2 moduli:
nf_conntrack_ftp e ip_conntrack_ftp
Tramite inserimento nel file /etc/sysconfig/iptables-config:
1 | IPTABLES_MODULES=”nf_conntrack_ftp ip_conntrack_ftp” |
Riavviamo il servizio iptables e vedremo che i 2 moduli verrano caricati:
1 | service iptables restart |
Completiamo l’operazione inserendo le regole:
1 2 3 | iptables -A INPUT -p tcp –dport 20 -j ACCEPT iptables -A INPUT -p tcp –dport 21 -j ACCEPT |