4 069
contributi
(35 versioni intermedie di 5 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Lenny|Squeeze|Wheezy|Jessie|Stretch}} | |||
== Introduzione == | == Introduzione == | ||
Tra i vari server FTP disponibili in Debian, VSFTPD è a mio parere quello più snello, sicuro e prestazionale; inoltre, come ulteriore garanzia, è il server FTP scelto da Red Hat e consigliato da IBM. | Tra i vari server FTP disponibili in Debian, VSFTPD è a mio parere quello più snello, sicuro e prestazionale; inoltre, come ulteriore garanzia, è il server FTP scelto da Red Hat e consigliato da IBM. | ||
Riga 10: | Riga 11: | ||
== Prerequisiti == | == Prerequisiti == | ||
Dopo aver installato Apache ([[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]]) e configurato i Virtual Host ([[Apache e Virtual Hosts: configurare Apache2 per ospitare più siti web]]) abbiamo adesso bisogno di permettere ai proprietari dei domini ospitati sui Virtual Host di accedere al loro spazio web via FTP senza causare danni agli altri Virtual Host e senza avere la possibilità di gironzolare per il nostro server.<br/> | Dopo aver installato Apache ([[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5]] oppure [[Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5 - Stretch]]) e configurato i Virtual Host ([[Apache e Virtual Hosts: configurare Apache2 per ospitare più siti web]]) abbiamo adesso bisogno di permettere ai proprietari dei domini ospitati sui Virtual Host di accedere al loro spazio web via FTP senza causare danni agli altri Virtual Host e senza avere la possibilità di gironzolare per il nostro server.<br/> | ||
Supponiamo quindi di avere una situazione | Supponiamo quindi di avere una situazione in cui vogliamo creare due utenti virtuali, senza accesso alla console, che possano ad esempio accedere via FTP solo alle directory del loro sito web. | ||
che possano accedere via FTP solo alle directory del loro sito web. | |||
<br/> | <br/> | ||
Riga 34: | Riga 29: | ||
== Creazione di un database per VSFTPD == | == Creazione di un database per VSFTPD == | ||
Il nostro demone FTP è già in funzione, ma non è ancora collegato ad alcun database MySQL. Quindi apriamo la shell di MySQL e creiamo il nostro database < | Il nostro demone FTP è già in funzione, ma non è ancora collegato ad alcun database MySQL. Quindi apriamo la shell di MySQL e creiamo il nostro database <code>vsftpd</code>, con proprietario un utente <code>vsftpd</code> e password <code>ftpdpass</code>: | ||
<pre> | <pre> | ||
# mysql -u root -p | # mysql -u root -p | ||
Riga 44: | Riga 39: | ||
FLUSH PRIVILEGES; | FLUSH PRIVILEGES; | ||
</pre> | </pre> | ||
sostituendo ovviamente la stringa < | sostituendo ovviamente la stringa <code>ftpdpass</code> con la password che vogliamo utilizzare. | ||
<br/> | <br/> | ||
Ora che abbiamo il database dobbiamo creare la tabella per memorizzare gli utenti virtuali del nostro server FTP. Restando sempre nella shell di MySQL diamo quindi i seguenti comandi: | Ora che abbiamo il database dobbiamo creare la tabella per memorizzare gli utenti virtuali del nostro server FTP. Restando sempre nella shell di MySQL diamo quindi i seguenti comandi: | ||
Riga 76: | Riga 71: | ||
Il nostro file di configurazione avrà come contenuto: | Il nostro file di configurazione avrà come contenuto: | ||
<pre> | <pre> | ||
# Standalone server | |||
listen=YES | listen=YES | ||
# Disabilito FTP anonimo | |||
anonymous_enable=NO | anonymous_enable=NO | ||
anon_upload_enable=NO | #anon_upload_enable=NO | ||
anon_mkdir_write_enable=NO | #anon_mkdir_write_enable=NO | ||
anon_other_write_enable=NO | #anon_other_write_enable=NO | ||
# | # Imposto la visualizzazione di messaggi | ||
dirmessage_enable= | dirmessage_enable=YES | ||
#force_dot_files=NO | #force_dot_files=NO | ||
# Certificato per FTP via SSL | |||
rsa_cert_file=/etc/ssl/certs/vsftpd.pem | rsa_cert_file=/etc/ssl/certs/vsftpd.pem | ||
################################ | |||
# Configurazioni di base | |||
################################ | |||
#hide_ids=YES | #hide_ids=YES | ||
listen_port=21 | listen_port=21 | ||
connect_from_port_20=YES | connect_from_port_20=YES | ||
# Abilito le porte passive | |||
pasv_enable=YES | |||
pasv_min_port=60000 | |||
pasv_max_port=65000 | |||
pasv_addr_resolve=YES | |||
# Abilito utenti locali e/o virtuali | |||
local_enable=YES | local_enable=YES | ||
local_umask=022 | local_umask=022 | ||
max_login_fails=3 | max_login_fails=3 | ||
max_per_ip=4 | max_per_ip=4 | ||
# Senza il server sarebbe read-only | |||
write_enable=YES | |||
# Definisco il sistema di autenticazione | |||
pam_service_name=vsftpd | pam_service_name=vsftpd | ||
# Imposto la directory per le configurazioni speciali sugli utenti | |||
user_config_dir=/etc/vsftpd/user_conf | user_config_dir=/etc/vsftpd/user_conf | ||
ftpd_banner= | |||
force_dot_files=yes | # Imposto il banner di benvenuto | ||
ftpd_banner=EasyLAB Doc FTP Server | |||
#force_dot_files=yes | |||
# I file caricati hanno proprietario www-data | # I file caricati hanno proprietario www-data | ||
Riga 106: | Riga 125: | ||
############################ | ############################ | ||
#Configuro la gabbia chroot | #Configuro la gabbia chroot | ||
############################ | ############################ | ||
chroot_local_user=YES | chroot_local_user=YES | ||
secure_chroot_dir=/var/run/vsftpd | secure_chroot_dir=/var/run/vsftpd | ||
user_sub_token=$USER | |||
local_root=/home/vsftpd/$USER | |||
# Mappo gli utenti verso un utente locale | # Mappo gli utenti verso un utente locale | ||
virtual_use_local_privs=YES | virtual_use_local_privs=YES | ||
# Attivo gli utenti virtuali | |||
guest_enable=YES | guest_enable=YES | ||
# Ogni utente viene mappato come vsftpd | # Ogni utente viene mappato come vsftpd | ||
guest_username=vsftpd | guest_username=vsftpd | ||
nopriv_user=vsftpd | |||
################## | ################## | ||
Riga 134: | Riga 156: | ||
L'elenco delle direttive di VSFTPD con una spiegazione dettagliata del significato è presente sul sito ufficiale: [https://security.appspot.com/vsftpd/vsftpd_conf.html vsftpd.conf] | L'elenco delle direttive di VSFTPD con una spiegazione dettagliata del significato è presente sul sito ufficiale: [https://security.appspot.com/vsftpd/vsftpd_conf.html vsftpd.conf] | ||
<br/> | <br/> | ||
Una delle direttive specificate in < | Una delle direttive specificate in <code>vsftpd.conf</code> è <code>user_config_dir</code>, che abbiamo impostato a <code>/etc/vsftpd/user_conf</code>. Questo parametro dice a VSFTPD dove cercare le impostazioni specifiche per ogni utente ed è il modo più semplice per avere una home diversa per ognuno di loro, ma anche per poter avere più users con la stessa home. | ||
<br/> | <br/> | ||
Assicuriamoci quindi di creare la directory che conterrà le configurazioni specifiche: | Assicuriamoci quindi di creare la directory che conterrà le configurazioni specifiche: | ||
Riga 146: | Riga 168: | ||
local_root=/var/www/sitoweb | local_root=/var/www/sitoweb | ||
</pre> | </pre> | ||
Impostiamo i permessi corretti: | |||
<pre> | |||
# chown -R vsftpd:www-data /var/www/sitoweb | |||
</pre> | |||
{{Warningbox|Ricordarsi che da Debian Stretch 9 la directory root di Apache è diventata <tt>/var/www/html</tt>. Occorre tenerne conto quando si impostano i path degli utenti FTP}} | |||
== Connessione al database MySQL == | == Connessione al database MySQL == | ||
Come ultima cosa dobbiamo istruire il nostro VSFTPD affinchè non cerchi gli utenti in </etc/passwd</ | Come ultima cosa dobbiamo istruire il nostro VSFTPD affinchè non cerchi gli utenti in <code>/etc/passwd</code>, ma nel database che abbiamo creato. Innanzitutto creiamo una copia di backup del file di configurazione, quindi ne impostiamo uno personalizzato: | ||
<pre> | <pre> | ||
# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig | # cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig | ||
Riga 165: | Riga 192: | ||
# apt-get install libgcc1 lib32gcc1 libx32gcc1 libpam-ldap | # apt-get install libgcc1 lib32gcc1 libx32gcc1 libpam-ldap | ||
</pre> | </pre> | ||
Non preoccupatevi della configurazione di < | Non preoccupatevi della configurazione di <code>libpam-ldap</code> e lasciate tutte le impostazioni di default, a meno che non abbiate un server OpenLDAP attivo sulla macchina. | ||
<br/> | <br/> | ||
Alla fine di tutto riavviamo il nostro server: | Alla fine di tutto riavviamo il nostro server: | ||
Riga 180: | Riga 207: | ||
USE vsftpd; | USE vsftpd; | ||
</pre> | </pre> | ||
Creeremo un utente chiamato < | Creeremo un utente chiamato <code>testuser</code> con password <code>secret</code>: | ||
<pre> | <pre> | ||
INSERT INTO accounts (username, pass, homedir) VALUES('testuser', PASSWORD('secret'), '/var/www/testuser'); | INSERT INTO accounts (username, pass, homedir) VALUES('testuser', PASSWORD('secret'), '/var/www/testuser'); | ||
Riga 190: | Riga 217: | ||
# chown vsftpd:nogroup /home/vsftpd/testuser | # chown vsftpd:nogroup /home/vsftpd/testuser | ||
</pre> | </pre> | ||
Creiamo infine il file di configurazione per il nostro utente, in modo che vengano sovrascritte le impostazioni di default di VSFTPD sulle homedir: | |||
<pre> | |||
# nano /etc/vsftpd/user_conf/testuser | |||
</pre> | |||
con contenuto: | |||
<pre> | |||
dirlist_enable=YES | |||
download_enable=YES | |||
local_root=/var/www/testuser | |||
</pre> | |||
Se tutto è andato per il verso giusto, dovreste riuscire a puntare il vostro client FTP sul server appena installato ed effettuare il login con l'utente appena creato. | |||
== Configurazione di TLS == | |||
Il protocollo FTP è un protocollo estremamente insicuro, poichè tutti i dati viaggiano in chiaro. Fortunatamente è possibile aumentare la sicurezza del nostro server configurando TLS per crittare tutte le comunicazioni. Iniziamo installando OpenSSL: | |||
<pre> | |||
# apt-get install openssl | |||
</pre> | |||
Quindi creiamo il certificato da utilizzare per VSFTPD: | |||
<pre> | |||
# mkdir -p /etc/vsftpd/ssl | |||
# chmod 700 /etc/vsftpd/ssl | |||
# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/ssl/vsftpd.pem -out /etc/vsftpd/ssl/vsftpd.pem | |||
</pre> | |||
e inserendo le risposte che fanno al caso nostro: | |||
<pre> | |||
Country Name (2 letter code) [AU]: IT | |||
State or Province Name (full name) [Some-State]: Italy | |||
Locality Name (eg, city) []: Lodi | |||
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Ferdy FTP Server | |||
Organizational Unit Name (eg, section) []: Dipartimento IT | |||
Common Name (eg, YOUR name) []: serverferdy.local | |||
Email Address []: ferdy@xxxx.it | |||
</pre> | |||
Quindi modifichiamo il file di configurazione di VSFTPD e aggiungiamo la sezione: | |||
<pre> | |||
# nano /etc/vsftpd.conf | |||
</pre> | |||
<pre> | |||
# Abilito SSL | |||
ssl_enable=YES | |||
allow_anon_ssl=YES | |||
# YES = forzo SSL per tutte le comunicazioni | |||
# NO = permetto anche comunicazioni non crittate | |||
force_local_data_ssl=NO | |||
force_local_logins_ssl=NO | |||
# Permetto TLS v1 | |||
ssl_tlsv1=YES | |||
# Permetto SSL v2 | |||
ssl_sslv2=YES | |||
# Permetto SSL v3 | |||
ssl_sslv3=YES | |||
# Disabilito SSL session reuse (da usare con WinSCP) | |||
require_ssl_reuse=NO | |||
# Imposto il tipo di crittazione | |||
ssl_ciphers=HIGH | |||
# Il percorso del certificato | |||
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.pem | |||
</pre> | |||
Con un riavvio del server: | |||
<pre> | |||
# /etc/init.d/vsftpd restart | |||
</pre> | |||
rendiamo attive le modifiche. | |||
<br/> | |||
Da adesso sarà possibile configurare il nostro client FTP per utilizzare sessioni crittate.<br> | |||
Tramite uno script perl<sup>[[#Collegamenti esterni|[1]]]</sup> è possibile gestire facilmente le utenze. | |||
Il software mantiene allineato il database con i relativi file di configurazione necessario per ogni utente. | |||
== Collegamenti esterni == | |||
[1] [https://github.com/bogomips/syncFtp.pl script perl] <br/> | |||
== Bibliografia == | |||
* [http://www.howtoforge.com/virtual-hosting-with-vsftpd-and-mysql-on-debian-squeeze HowToForge] | |||
* [http://www.petrelli.biz/amministrazione-di-sistema/vsftpd-con-utenti-mysql-e-custom-homedir/ Petrelli] | |||
* [http://www.debianhelp.co.uk/vsftpd.htm DebianHelp] | |||
{{Autori | {{Autori |