Hosting Virtuale · 5 min read · Jan 30, 2026

Hosting Virtuale Con PureFTPd E MySQL (Incluso Gestione Di Quota E Larghezza Di Banda) Su Ubuntu 14.04LTS

Questo documento descrive come installare un server PureFTPd che utilizza utenti virtuali da un database MySQL invece di veri utenti di sistema. Questo è molto più performante e consente di avere migliaia di utenti ftp su una singola macchina. Inoltre, mostrerò l’uso di limiti di quota e di upload/download con questa configurazione. Le password saranno memorizzate criptate come stringhe MD5 nel database. Questo tutorial è basato su Ubuntu 14.04.

Per l’amministrazione del database MySQL puoi utilizzare strumenti basati sul web come phpMyAdmin che saranno anche installati in questo howto. phpMyAdmin è un’interfaccia grafica comoda che significa che non devi armeggiare con la riga di comando.

Questo howto è inteso come una guida pratica; non copre i fondamenti teorici. Questi sono trattati in molti altri documenti sul web.

Questo documento viene fornito senza garanzia di alcun tipo! Voglio dire che questo non è l’unico modo per impostare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguo. Non rilascio alcuna garanzia che questo funzionerà per te!

1 Nota Preliminare

In questo tutorial utilizzo il nome host server1.example.com con l’indirizzo IP 192.168.0.100. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato.

Assicurati di essere loggato come root (digita in

sudo su

per diventare root), perché dobbiamo eseguire tutti i passaggi di questo tutorial come utente root.

2 Installa MySQL E phpMyAdmin

Tutto questo può essere installato con un solo comando:

apt-get install mysql-server mysql-client phpmyadmin apache2

Ti verranno poste queste domande:

Nuova password per l’utente MySQL “root”: <– yourrootsqlpassword
Ripeti la password per l’utente MySQL “root”: <– yourrootsqlpassword
Server web da riconfigurare automaticamente: <– apache2
Configurare il database per phpmyadmin con dbconfig-common? <– No

3 Installa PureFTPd Con Supporto MySQL

Per Ubuntu 14.04 è disponibile un pacchetto pure-ftpd-mysql preconfigurato. Installalo in questo modo:

apt-get install pure-ftpd-mysql

Poi creiamo un gruppo ftp (ftpgroup) e un utente (ftpuser) a cui verranno mappati tutti i nostri utenti virtuali. Sostituisci il gruppo e l’ID utente 2001 con un numero che è libero sul tuo sistema:

groupadd -g 2001 ftpgroup  
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

4 Crea Il Database MySQL Per PureFTPd

Ora creiamo un database chiamato pureftpd e un utente MySQL di nome pureftpd che il demone PureFTPd utilizzerà in seguito per connettersi al database pureftpd:

mysql -u root -p
CREATE DATABASE pureftpd;  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';  
FLUSH PRIVILEGES;

Sostituisci la stringa ftpdpass con qualsiasi password tu voglia utilizzare per l’utente MySQL pureftpd. Ancora nella shell MySQL, creiamo la tabella del database di cui abbiamo bisogno (sì, c’è solo una tabella!):

USE pureftpd;
CREATE TABLE ftpd (  
User varchar(16) NOT NULL default '',  
status enum('0','1') NOT NULL default '0',  
Password varchar(64) NOT NULL default '',  
Uid varchar(11) NOT NULL default '-1',  
Gid varchar(11) NOT NULL default '-1',  
Dir varchar(128) NOT NULL default '',  
ULBandwidth smallint(5) NOT NULL default '0',  
DLBandwidth smallint(5) NOT NULL default '0',  
comment tinytext NOT NULL,  
ipaccess varchar(15) NOT NULL default '*',  
QuotaSize smallint(5) NOT NULL default '0',  
QuotaFiles int(11) NOT NULL default 0,  
PRIMARY KEY (User),  
UNIQUE KEY User (User)  
) ENGINE=MyISAM;
quit;

Come avrai notato, con il comando quit; siamo usciti dalla shell MySQL e siamo tornati nella shell Linux.

A proposito, (presumo che il nome host del tuo sistema server ftp sia server1.example.com) puoi accedere a phpMyAdmin all’indirizzo http://server1.example.com/phpmyadmin/ (puoi anche utilizzare l’indirizzo IP invece di server1.example.com) in un browser e accedere come utente pureftpd. Poi puoi dare un’occhiata al database. In seguito puoi utilizzare phpMyAdmin per amministrare il tuo server PureFTPd.

5 Configura 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 is VERY RECOMMENDABLE uppon 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 la home directory di un utente quando l’utente accede e la home directory non esiste ancora.

Infine, crea il file /etc/pure-ftpd/conf/DontResolve che contiene di nuovo semplicemente la stringa yes:

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

Questo farà in modo che PureFTPd non cerchi nomi host, il che può accelerare significativamente le connessioni e ridurre l’uso della larghezza di banda.

Successivamente, riavviamo PureFTPd:

service pure-ftpd-mysql restart
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.