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

Vai alla navigazione Vai alla ricerca
nessun oggetto della modifica
Nessun oggetto della modifica
 
(27 versioni intermedie di 5 utenti non mostrate)
Riga 1: Riga 1:
__TOC__
{{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.
<br/><br/>
 
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>
e decommentiamo la linea <code>Include /etc/proftpd/sql.conf</code>:
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 250: Riga 276:
Per popolare il database abbiamo due strade.
Per popolare il database abbiamo due strade.


=== shell mysql> ===
=== 1) shell mysql> ===
Colleghiamoci alla shell di MySQL:
Colleghiamoci alla shell di MySQL:
<pre>
<pre>
Riga 273: Riga 299:
quit;
quit;
</pre>
</pre>
Si noti che insieme agli utenti sono state create due regole per lo spazio su disco, con una quota impostata a 15MB.
<br/>
Da notare che per inserire la password è stata usata la funzione di MySQL ''ENCRYPT'', che utilizza la chiamata di sistema ''crypt()'' presente sul sistema operativo, quindi di fatto utilizza lo stesso metodo di cifratura utilizzato da Linux per cifrare le password degli utenti di sistema.
=== 2) phpMyAdmin ===
In alternativa alla linea di comando, possiamo creare i nostri utenti collegandoci all'interfaccia web phpMyAdmin e aprendo il database ''proftpd''.<br/>
Una volta aperto, troveremo al suo interno alcune tabelle; quelle che ci interessano nella creazione e nella gestione degli utenti sono però solo due:
* ''ftpquotalimits''
* ''ftpuser''
Vediamone il contenuto.
==== ftpuser ====
I campi da riempire sono i seguenti (i restanti campi sono utilizzati da ProFTPD e/o da MySQL, quindi non riempiteli!):
* ''userid'': il nome dell'utente FTP virtuale (es: esempio-it)
* ''passwd'': la password dell'utente
* ''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)
* ''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
==== ftpquotalimits ====
I campi da riempire sono i seguenti (i restanti campi sono utilizzati da ProFTPD e/o da MySQL, quindi non riempiteli!):
* ''name'': il nome dell'utente FTP virtuale (es: esempio-it)
* ''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
* ''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_out_avail'': limite di download in bytes. 0 significa senza limite
* ''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_out_avail'': numero limite di file scaricabili. 0 significa senza limite
* ''files_xfer_avail'': numero limite di file trasferibili. 0 significa senza limite
==== Altre tabelle ====
La tabella ''ftpquotatallies'' è utilizzata da Proftpd per gestire le quotas e non va modificata.


Si noti che insieme agli utenti sono state create due regole per lo spazio su disco, con una quota impostata a 15MB.
== 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]]
6

contributi

Menu di navigazione