6
contributi
Nessun oggetto della modifica |
|||
(23 versioni intermedie di 5 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Jessie}} | |||
== Introduzione == | == Introduzione == | ||
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]]) 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/> | ||
Riga 16: | Riga 15: | ||
Installiamo innanzitutto ProFTPD con il supporto per MySQL: | Installiamo innanzitutto ProFTPD con il supporto per MySQL: | ||
<pre> | <pre> | ||
# apt-get install proftpd proftpd-mod-mysql | # apt-get install proftpd-basic proftpd-mod-mysql | ||
</pre> | |||
Per aumentare il tempo massimo prima che una connessione FTP vada in timeout per mancanza di attività possiamo aprire il file di configurazione: | |||
<pre> | |||
# vi /etc/proftpd/proftpd.conf | |||
</pre> | |||
e aumentare il valore della direttiva: | |||
<pre> | |||
TimeoutNoTransfer 1200 | |||
</pre> | |||
Consiglio inoltre di aggiungere le seguenti direttive: | |||
<pre> | |||
#Abilita resume per upload | |||
AllowStoreRestart on | |||
DeleteAbortedStores off | |||
#Abilita resume per il download | |||
AllowRetrieveRestart on | |||
</pre> | </pre> | ||
Ora creiamo un utente e un gruppo di sistema, che useremo per mappare tutti gli utenti virtuali che saranno utilizzati da ProFTPD: | Ora creiamo un utente e un gruppo di sistema, che useremo per mappare tutti gli utenti virtuali che saranno utilizzati da ProFTPD: | ||
Riga 37: | Riga 53: | ||
</pre> | </pre> | ||
Ovviamente sostituite la stringa <code>password</code> con la password che volete assegnare al vostro utente MySQL. | Ovviamente sostituite la stringa <code>password</code> con la password che volete assegnare al vostro utente MySQL. | ||
Già che siamo collegati alla shell di MySQL ne approfittiamo per creare anche tutte le tabelle che ci servono: | Già che siamo collegati alla shell di MySQL ne approfittiamo per creare anche tutte le tabelle che ci servono: | ||
<pre> | <pre> | ||
Riga 96: | Riga 112: | ||
=== /etc/proftpd/modules.conf === | === /etc/proftpd/modules.conf === | ||
Apriamo il file | Apriamo il file: | ||
<pre> | <pre> | ||
# vi /etc/proftpd/modules.conf | # vi /etc/proftpd/modules.conf | ||
Riga 115: | Riga 131: | ||
=== /etc/proftpd/proftpd.conf === | === /etc/proftpd/proftpd.conf === | ||
Apriamo il file | Apriamo il file: | ||
<pre> | <pre> | ||
# vi /etc/proftpd/proftpd.conf | # vi /etc/proftpd/proftpd.conf | ||
</pre> | </pre> | ||
decommentiamo la linea <code>Include /etc/proftpd/sql.conf</code>: | |||
<pre> | <pre> | ||
[...] | [...] | ||
Riga 132: | Riga 148: | ||
Include /etc/proftpd/sql.conf | Include /etc/proftpd/sql.conf | ||
[...] | [...] | ||
</pre> | |||
e cambiamo la linea: | |||
<pre> | |||
AuthOrder mod_auth_pam.c mod_auth_unix.c | |||
</pre> | |||
in: | |||
<pre> | |||
#AuthOrder mod_auth_pam.c mod_auth_unix.c | |||
AuthOrder mod_sql.c | |||
</pre> | </pre> | ||
Riga 290: | Riga 316: | ||
* ''uid'': il valore userid dell'utente di sistema ftp creato in precedenza (2001) | * ''uid'': il valore userid dell'utente di sistema ftp creato in precedenza (2001) | ||
* ''gid'': il valore groupid dell'utente di sistema ftp creato in precedenza (2001) | * ''gid'': il valore groupid dell'utente di sistema ftp creato in precedenza (2001) | ||
* ''homedir'': il percorso della home directory dell'utente FTP virtuale (<code>/var/www/www.esempio.it). Se non esiste sarà creata al momento della connessione. L'utente virtuale sarà chrooted in questa directory e non potrà uscirne | * ''homedir'': il percorso della home directory dell'utente FTP virtuale (<code>/var/www/www.esempio.it</code>). Se non esiste sarà creata al momento della connessione. L'utente virtuale sarà chrooted in questa directory e non potrà uscirne | ||
* ''shell'': la shell di sistema assegnata all'utente. Dato che non vogliamo permettere accesso al server, lasciamo il valore di default | * ''shell'': la shell di sistema assegnata all'utente. Dato che non vogliamo permettere accesso al server, lasciamo il valore di default | ||
Riga 297: | Riga 323: | ||
* ''name'': il nome dell'utente FTP virtuale (es: esempio-it) | * ''name'': il nome dell'utente FTP virtuale (es: esempio-it) | ||
* ''quota_type'': user o group. Normalmente useremo ''user'' | * ''quota_type'': user o group. Normalmente useremo ''user'' | ||
* ''per_session'': true o false. true significa che la quota limite è valida per una singola sessione: se l'utente effettua un logout e un nuovo login la quota si azzera. false significa che l'utente ha a disposizione la quota stabilita | * ''per_session'': true o false. ''true'' significa che la quota limite è valida per una singola sessione: se l'utente effettua un logout e un nuovo login la quota si azzera. ''false'' significa che l'utente ha a disposizione la quota stabilita | ||
* ''limit_type'': hard o soft. Un hard quota limit non permette eccezioni, mentre un soft quota limit può temporaneamente essere superato. Normalmente viene usato hard | * ''limit_type'': hard o soft. Un hard quota limit non permette eccezioni, mentre un soft quota limit può temporaneamente essere superato. Normalmente viene usato hard | ||
* ''bytes_in_avail'': limite di upload in bytes. 0 significa senza limite | * ''bytes_in_avail'': limite di upload in bytes. 0 significa senza limite | ||
* ''bytes_out_avail'': limite di download in bytes. 0 significa senza limite | * ''bytes_out_avail'': limite di download in bytes. 0 significa senza limite | ||
* ''bytes_xfer_avail'': limite di transfer bytes. | * ''bytes_xfer_avail'': limite di transfer bytes. È la quantità massima di bytes che un utente può uploadare o downloadare. 0 significa senza limite | ||
* ''files_in_avail'': numero limite di file uploadabili. 0 significa senza limite | * ''files_in_avail'': numero limite di file uploadabili. 0 significa senza limite | ||
* ''files_out_avail'': numero limite di file scaricabili. 0 significa senza limite | * ''files_out_avail'': numero limite di file scaricabili. 0 significa senza limite | ||
Riga 308: | Riga 334: | ||
==== Altre tabelle ==== | ==== Altre tabelle ==== | ||
La tabella ''ftpquotatallies'' è utilizzata da Proftpd per gestire le quotas e non va modificata. | La tabella ''ftpquotatallies'' è utilizzata da Proftpd per gestire le quotas e non va modificata. | ||
== Impostazione dei permessi corretti == | |||
Ora rimangono da impostare i permessi sulle directory dei due siti web, per far sì che gli utenti FTP possano scrivere al loro interno, dando l’autorizzazione in scrittura all’utente ftpuser creato in precedenza: | |||
<pre> | |||
# chown -R ftpuser:www-data /var/www/www.esempio.it | |||
# chown -R ftpuser:www-data /var/www/www.esempio.org | |||
# chmod -R 775 /var/www/www.esempio.it | |||
# chmod -R 775 /var/www/www.esempio.org | |||
</pre> | |||
== Test di connessione == | |||
Aprite il vostro client FTP preferito e connettetevi al vostro server utilizzando le credenziali seguenti: | |||
* ''Host'': ftp.esempio.it | |||
* Utente: esempio-it | |||
* ''Password'': passwordit | |||
* ''Porta'': 21 | |||
Provate a caricare un file e controllate eventuali messaggi di errore. | |||
Una volta completato l'upload, fate login come root sulla console del server e spostatevi nella DocumentRoot del sito www.esempio.it: | |||
<pre> | |||
# cd /var/www/www.esempio.it | |||
# ls -la | |||
</pre> | |||
Dovreste trovare listato anche il file che avete appena caricato. | |||
== FTP anonimo == | |||
È possibile creare anche un account ftp anonimo, cioè un account ftp che chiunque possa usare senza una password, in questo modo. | |||
<br/> | |||
Creiamo innanzitutto un utente, un gruppo di sistema e una home directory: | |||
<pre> | |||
# mkdir /var/www/anonymous_ftp | |||
# groupadd -g 2002 anonymous_ftp | |||
# useradd -u 2002 -s /bin/false -d /var/www/anonymous_ftp -m -c "Anonymous FTP User" -g anonymous_ftp anonymous_ftp | |||
</pre> | |||
Poi creiamo la directory <code>/home/anonymous_ftp/incoming</code> dove gli utenti anonimi potranno caricare i file: | |||
<pre> | |||
# mkdir /var/www/anonymous_ftp/incoming | |||
# chown anonymous_ftp:nogroup /var/www/anonymous_ftp/incoming | |||
</pre> | |||
Infine apriamo il file di configurazione <code>/etc/proftpd/proftpd.conf</code> e aggiungiamo le direttive: | |||
<pre> | |||
# vi /etc/proftpd/proftpd.conf | |||
</pre> | |||
<pre> | |||
[...] | |||
<Anonymous /var/www/anonymous_ftp> | |||
User anonymous_ftp | |||
Group nogroup | |||
# We want clients to be able to login with "anonymous" as well as "ftp" | |||
UserAlias anonymous anonymous_ftp | |||
# Cosmetic changes, all files belongs to ftp user | |||
DirFakeUser on anonymous_ftp | |||
DirFakeGroup on anonymous_ftp | |||
RequireValidShell off | |||
# Limit the maximum number of anonymous logins | |||
MaxClients 10 | |||
# We want 'welcome.msg' displayed at login, and '.message' displayed | |||
# in each newly chdired directory. | |||
DisplayLogin welcome.msg | |||
DisplayChdir .message | |||
# Limit WRITE everywhere in the anonymous chroot | |||
<Directory *> | |||
<Limit WRITE> | |||
DenyAll | |||
</Limit> | |||
</Directory> | |||
# Uncomment this if you're brave. | |||
<Directory incoming> | |||
# Umask 022 is a good standard umask to prevent new files and dirs | |||
# (second parm) from being group and world writable. | |||
Umask 022 022 | |||
<Limit READ WRITE> | |||
DenyAll | |||
</Limit> | |||
<Limit STOR> | |||
AllowAll | |||
</Limit> | |||
</Directory> | |||
</Anonymous> | |||
</pre> | |||
Riavviamo il servizio: | |||
<pre> | |||
# /etc/init.d/proftpd restart | |||
</pre> | |||
e verifichiamo che gli utenti anonimi possano ora effettuare il login. | |||
<br/> | |||
L'impostazione data prevede che gli utenti anonimi possano: | |||
* scaricare i file messi in <code>/var/www/anonymous_ftp</code> | |||
* caricare i file nella directory <code>/var/www/anonymous_ftp/incoming</code> | |||
Una volta che un file è stato caricato, nessuno può leggerlo o scaricarlo prima che un amministratore lo sposti nella directory <code>/var/www/anonymous_ftp</code> per renderlo disponibile a tutti. | |||
== Configurazione del Firewall == | |||
Se il server FTP è protetto da un firewall iptables occorre abilitare la direttiva PassivePorts: | |||
<pre> | |||
# nano /etc/proftpd/proftdp.conf | |||
</pre> | |||
in questo modo: | |||
<pre> | |||
PassivePorts 60000 65000 | |||
</pre> | |||
In questo modo abbiamo istruito ProFTPD a utilizzare uno specifico range di porte dinamiche per le transazioni FTP. Lo stesso range va abilitato nello script del nostro firewall: | |||
<pre> | |||
-A INPUT -m state --state NEW -m tcp -p tcp --dport 60000:65000 -j ACCEPT | |||
</pre> | |||
Un riavvio del demone FTP e dello script del firewall completerà l'opera. | |||
{{Autori | |||
| Autore = [[Utente:Ferdybassi|Ferdybassi]] 19:40, 8 nov 2010 (CET) | |||
|Verificata_da= | |||
: lula 19:00, 29 dec 2016 (CET) | |||
|Numero_revisori = 1 | |||
}} | |||
[[Categoria:FTP server]] |
contributi