Hosting Virtuale · 6 min read · Jan 19, 2026

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

5 Configura PureFTPd

Modifica /etc/pure-ftpd/pure-ftpd.conf e assicurati che le righe ChrootEveryone, MySQLConfigFile e CreateHomeDir siano abilitate e appaiano così:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |

La configurazione ChrootEveryone 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. La riga CreateHomeDir farà sì che PureFTPd crei la home directory di un utente quando l’utente accede e la home directory non esiste ancora.

Poi modifichiamo /etc/pure-ftpd/pureftpd-mysql.conf. Dovrebbe apparire così:

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

| MYSQLSocket /var/lib/mysql/mysql.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 stringa MD5 nel database, che è molto più sicura rispetto all’uso di password in chiaro!

Ora creiamo i collegamenti di avvio del sistema per PureFTPd e avviamolo:

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

6 Popola Il Database E Testa

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 in 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 due):

[root@server1 system]# ls -l /home/  
total 4  
drwxr-xr-x 2 ftpuser ftpgroup 4096 Mag  2 02:35 www.example.com  
[root@server1 system]#  

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 (ad 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 stringa MD5:
  • UID: L’userid dell’utente ftp che hai creato alla fine del passo due (ad es. 2001).
  • GID: Il groupid del gruppo ftp che hai creato alla fine del passo due (ad es. 2001).
  • Dir: La home directory dell’utente virtuale PureFTPd (ad 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 in upload dell’utente virtuale in KB/sec. (kilobyte al secondo). 0 significa illimitato.
  • DLBandwidth: Larghezza di banda in download dell’utente virtuale in KB/sec. (kilobyte al secondo). 0 significa illimitato.
  • comment: Puoi inserire qui qualsiasi commento (ad 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 password), hai bisogno di un utente e di un gruppo chiamati ftp. Entrambi sono stati creati automaticamente quando hai installato il pacchetto pure-ftpd, quindi non è necessario crearli manualmente. Tuttavia, la home directory di ftp è /var/ftp per impostazione predefinita, ma mi piacerebbe creare la directory ftp anonima in /home/ftp (le normali directory ftp degli utenti sono anche in /home, ad es. /home/www.example.com). Ma naturalmente, puoi usare la directory /var/ftp per ftp anonimo, se lo preferisci.

Se vuoi usare /home/ftp, apri /etc/passwd e cambia la home directory dell’utente ftp da /var/ftp a /home/ftp (non farlo se vuoi usare /var/ftp):

vi /etc/passwd

| [...] #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin [...] |

Poi sposta /var/ftp in /home (non farlo se vuoi usare /var/ftp):

mv /var/ftp /home

Poi creiamo la directory /home/ftp/incoming che consentirà 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:

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

(Se vuoi usare /var/ftp invece, sostituisci /home/ftp con /var/ftp nei comandi sopra.)

Gli utenti anonimi potranno accedere, e saranno autorizzati a scaricare file da /home/ftp, ma i caricamenti saranno 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 agli altri).

Ora dobbiamo configurare PureFTPd per ftp anonimo. Apri /etc/pure-ftpd/pure-ftpd.conf e assicurati di avere le seguenti impostazioni:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] NoAnonymous no [...] AntiWarez no [...] AnonymousBandwidth 8 [...] AnonymousCantUpload no [...] |

(La configurazione AnonymousBandwidth è facoltativa - ti consente di limitare le larghezze di banda in upload e download per gli utenti anonimi. 8 significa 8 KB/sec. Usa qualsiasi valore tu voglia, o commenta la riga se non vuoi limitare le larghezze di banda.)

Infine, riavviamo PureFTPd:

systemctl restart pure-ftpd.service

9 Link

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.