Hosting Virtuale · 6 min read · Jan 20, 2026

Hosting Virtuale Con PureFTPd E MySQL (Incluso Gestione Di Quota E Larghezza Di Banda) Su Debian Lenny - Pagina 2

5 Configurare PureFTPd

Modifica /etc/pure-ftpd/db/mysql.conf. Dovrebbe apparire così:

cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig  
cat /dev/null > /etc/pure-ftpd/db/mysql.conf  
vi /etc/pure-ftpd/db/mysql.conf

| MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5 è MOLTO RACCOMANDATO rispetto al cleartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") |

Assicurati di sostituire la stringa ftpdpass con la vera password per l’utente MySQL pureftpd nella riga MYSQLPassword! Si prega di notare che utilizziamo md5 come metodo MYSQLCrypt, il che significa che memorizzeremo le password degli utenti come una stringa MD5 nel database, che è molto più sicura rispetto all’uso di password in chiaro!

Poi crea il file /etc/pure-ftpd/conf/ChrootEveryone che contiene semplicemente la stringa yes:

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

Questo farà sì che PureFTPd chroot ogni utente virtuale nella sua home directory, quindi non sarà in grado di navigare in directory e file al di fuori della sua home directory.

Crea anche il file /etc/pure-ftpd/conf/CreateHomeDir che contiene di nuovo semplicemente la stringa yes:

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

Questo farà sì che PureFTPd crei una home directory per l’utente quando l’utente accede e la home directory non esiste ancora.

Ora dobbiamo configurare PureFTPd come un demone standalone (attualmente è controllato da inetd). Per fare ciò, apriamo /etc/default/pure-ftpd-common e cambiamo il valore del parametro STANDALONE_OR_INETD in standalone:

vi /etc/default/pure-ftpd-common

| # Configurazione per pure-ftpd # (questo file è sorgente da /bin/sh, modifica di conseguenza) # STANDALONE_OR_INETD # i valori validi sono "standalone" e "inetd". # Qualsiasi modifica qui sovrascrive l'impostazione in debconf. STANDALONE_OR_INETD=standalone # VIRTUALCHROOT: # se utilizzare un binario con supporto virtualchroot # i valori validi sono "true" o "false" # Qualsiasi modifica qui sovrascrive l'impostazione in debconf. VIRTUALCHROOT=false # UPLOADSCRIPT: se questo è impostato e il demone è eseguito in modalità standalone, # pure-uploadscript verrà eseguito anche per avviare il programma indicato di seguito # per gestire gli upload. vedere /usr/share/doc/pure-ftpd/README.gz o # pure-uploadscript(8) # esempio: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl UPLOADSCRIPT= # se impostato, pure-uploadscript avvierà $UPLOADSCRIPT in esecuzione come il # uid e gid dati UPLOADUID= UPLOADGID= |

Successivamente, modifichiamo /etc/inetd.conf e commentiamo la riga ftp:

vi /etc/inetd.conf

| [...] #:STANDARD: Questi sono servizi standard. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper [...] |

Dopo, riavviamo Inetd e PureFTPd:

/etc/init.d/openbsd-inetd restart  
/etc/init.d/pure-ftpd-mysql restart

6 Popolare Il Database E Testare

Per popolare il database puoi usare la shell MySQL:

mysql -u root -p
USE pureftpd;

Ora creiamo l’utente exampleuser con lo stato 1 (il che significa che il suo account ftp è attivo), la password secret (che sarà memorizzata crittografata utilizzando la funzione MD5 di MySQL), l’UID e GID 2001 (usa l’userid e groupid dell’utente/gruppo che hai creato alla fine del passo due!), la home directory /home/www.example.com, una larghezza di banda di upload e download di 100 KB/sec. (kilobyte al secondo), e una quota di 50 MB:

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');
quit;

Ora apri il tuo programma client FTP sulla tua workstation (qualcosa come WS_FTP o SmartFTP se sei su un sistema Windows o gFTP su un desktop Linux) e prova a connetterti. Come hostname utilizzi server1.example.com (o l’indirizzo IP del sistema), il nome utente è exampleuser e la password è secret.

Se riesci a connetterti - congratulazioni! Se no, qualcosa è andato storto.

Ora, se esegui

ls -l /home

dovresti vedere che la directory /home/www.example.com (la home directory di exampleuser) è stata creata automaticamente, ed è di proprietà di ftpuser e ftpgroup (l’utente/gruppo che abbiamo creato alla fine del passo tre):

server1:~# ls -l /home  
total 8  
drwxr-xr-x 2 administrator administrator 4096 2009-02-16 13:18 administrator  
drwxr-xr-x 2 ftpuser       ftpgroup      4096 2009-06-05 16:09 www.example.com  
server1:~#

7 Amministrazione Del Database

Per la maggior parte delle persone è più facile avere un’interfaccia grafica per MySQL; quindi puoi anche usare phpMyAdmin (in questo esempio sotto http://server1.example.com/phpmyadmin/) per amministrare il database pureftpd.

Ogni volta che vuoi creare un nuovo utente, devi creare un’entrata nella tabella ftpd, quindi spiegherò qui le colonne di questa tabella:

Tabella ftpd:

  • User: Il nome dell’utente virtuale PureFTPd (es. exampleuser).
  • status: 0 o 1. 0 significa che l’account è disabilitato, l’utente non può accedere.
  • Password: La password dell’utente virtuale. Assicurati di utilizzare la funzione MD5 di MySQL per salvare la password crittografata come una stringa MD5:
  • UID: L’userid dell’utente ftp che hai creato alla fine del passo due (es. 2001).
  • GID: Il groupid del gruppo ftp che hai creato alla fine del passo due (es. 2001).
  • Dir: La home directory dell’utente virtuale PureFTPd (es. /home/www.example.com). Se non esiste, verrà creata quando il nuovo utente accede per la prima volta tramite FTP. L’utente virtuale sarà rinchiuso in questa home directory, cioè, non può accedere ad altre directory al di fuori della sua home directory.
  • ULBandwidth: Larghezza di banda di upload dell’utente virtuale in KB/sec. (kilobyte al secondo). 0 significa illimitato.
  • DLBandwidth: Larghezza di banda di download dell’utente virtuale in KB/sec. (kilobyte al secondo). 0 significa illimitato.
  • comment: Puoi inserire qui qualsiasi commento (es. per la tua amministrazione interna). Normalmente lasci questo campo vuoto.
  • ipaccess: Inserisci qui gli indirizzi IP che sono autorizzati a connettersi a questo account FTP. * significa che qualsiasi indirizzo IP è autorizzato a connettersi.
  • QuotaSize: Spazio di archiviazione in MB (non KB, come in ULBandwidth e DLBandwidth!) che l’utente virtuale è autorizzato a utilizzare sul server FTP. 0 significa illimitato.
  • QuotaFiles: numero di file che l’utente virtuale è autorizzato a salvare sul server FTP. 0 significa illimitato.

8 FTP Anonimo

Se vuoi creare un account ftp anonimo (un account ftp a cui chiunque può accedere senza una password), puoi farlo in questo modo:

Prima crea un utente ftp (con la homedir /home/ftp) e il gruppo ftp:

groupadd ftp  
useradd -s /bin/false -d /home/ftp -m -c "ftp anonimo" -g ftp ftp

Poi crea il file /etc/pure-ftpd/conf/NoAnonymous che contiene la stringa no:

echo "no" > /etc/pure-ftpd/conf/NoAnonymous

Con questa configurazione, PureFTPd permetterà accessi anonimi.

Riavvia PureFTPd:

/etc/init.d/pure-ftpd-mysql restart

Poi creiamo la directory /home/ftp/incoming che permetterà agli utenti anonimi di caricare file. Daremo alla directory /home/ftp/incoming permessi di 311 in modo che gli utenti possano caricare, ma non vedere o scaricare alcun file in quella directory. La directory /home/ftp avrà permessi di 555 che consentono di vedere e scaricare file:

cd /home/ftp  
mkdir incoming  
chown ftp:nogroup incoming/  
chmod 311 incoming/  
cd ../  
chmod 555 ftp/

Ora gli utenti anonimi possono accedere, e possono scaricare file da /home/ftp, ma gli upload sono limitati a /home/ftp/incoming (e una volta che un file è caricato in /home/ftp/incoming, non può essere letto né scaricato da lì; l’amministratore del server deve spostarlo in /home/ftp prima di renderlo disponibile ad altri).

9 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.