Installare un server vsFTPd con utenti virtuali su MySQL: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
nessun oggetto della modifica
Nessun oggetto della modifica
(22 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 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.
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.
<br/>
<br/>
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 <tt>vsftpd</tt>, con proprietario un utente <tt>vsftpd</tt> e password <tt>ftpdpass</tt>:
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 <tt>ftpdpass</tt> con la password che vogliamo utilizzare.
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 74: Riga 75:


# Disabilito FTP anonimo
# Disabilito FTP anonimo
nopriv_user=vsftpd
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


# Impedisco la visualizzazione di messaggi
# Imposto la visualizzazione di messaggi
dirmessage_enable=NO
dirmessage_enable=YES
#force_dot_files=NO
#force_dot_files=NO


Riga 96: Riga 96:
connect_from_port_20=YES
connect_from_port_20=YES


Abilito utenti locali e/o virtuali
# 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
# Definisco il sistema di autenticazione
Riga 110: Riga 118:
# Imposto il banner di benvenuto
# Imposto il banner di benvenuto
ftpd_banner=EasyLAB Doc FTP Server
ftpd_banner=EasyLAB Doc FTP Server
orce_dot_files=yes
#force_dot_files=yes


# I file caricati hanno proprietario www-data
# I file caricati hanno proprietario www-data
Riga 122: Riga 130:
chroot_local_user=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
secure_chroot_dir=/var/run/vsftpd
#user_sub_token=$USER
user_sub_token=$USER
allow_writeable_chroot=YES
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


# Senza il server sarebbe read-only
# Attivo gli utenti virtuali
write_enable=YES
 
# Attivo gli utentivirtuali
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 150: 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 <tt>vsftpd.conf</tt> è <tt>user_config_dir</tt>, che abbiamo impostato a <tt>/etc/vsftpd/user_conf</tt>. 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.
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 162: 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</tt>, ma nel database che abbiamo creato. Innanzitutto creiamo una copia di backup del file di configurazione, quindi ne impostiamo uno personalizzato:
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 181: 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 <tt>libpam-ldap</tt> e lasciate tutte le impostazioni di default, a meno che non abbiate un server OpenLDAP attivo sulla macchina.
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 196: Riga 207:
USE vsftpd;
USE vsftpd;
</pre>
</pre>
Creeremo un utente chiamato <tt>testuser</tt> con password <tt>secret</tt>:
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 244: Riga 255:
</pre>
</pre>
<pre>
<pre>
# Turn on SSL
# Abilito SSL
ssl_enable=YES
ssl_enable=YES
# Abilito SSL
allow_anon_ssl=YES
allow_anon_ssl=YES


Riga 253: Riga 262:
# NO = permetto anche comunicazioni non crittate
# NO = permetto anche comunicazioni non crittate
force_local_data_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
force_local_logins_ssl=NO


# Permetto TLS v1
# Permetto TLS v1
Riga 273: Riga 282:
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.pem
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.pem
</pre>
</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 ==
== Bibliografia ==

Menu di navigazione