982
contributi
m (correzione link pacchetti esterni) |
|||
(27 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Lenny|Squeeze|Wheezy|Jessie}} | |||
== 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 28: | 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 38: | 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 70: | 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 100: | 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 129: | 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 140: | Riga 167: | ||
download_enable=YES | download_enable=YES | ||
local_root=/var/www/sitoweb | local_root=/var/www/sitoweb | ||
</pre> | |||
Impostiamo i permessi corretti: | |||
<pre> | |||
# chown -R vsftpd:www-data /var/www/sitoweb | |||
</pre> | </pre> | ||
== 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 160: | Riga 191: | ||
# 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 175: | Riga 206: | ||
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 195: | Riga 226: | ||
local_root=/var/www/testuser | local_root=/var/www/testuser | ||
</pre> | </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=NO | |||
# Permetto SSL v3 | |||
ssl_sslv3=NO | |||
# 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 |
contributi