Hosting Virtuale · 6 min read · Nov 26, 2025

Hosting Virtuale Con PureFTPd E MySQL (Inclusi Gestione Quota E Larghezza Di Banda) Su Fedora 20

Hosting Virtuale Con PureFTPd E MySQL (Inclusi Gestione Quota E Larghezza Di Banda) Su Fedora 20

Versione 1.0
Autore: Falko Timme, aggiornato da Srijan Kishore

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 larghezza di banda in upload/download con questa configurazione. Le password saranno memorizzate in modo crittografato come stringhe MD5 nel database.

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 impazzire con la riga di comando.

Questo tutorial è basato su Fedora 20. Dovresti già aver configurato un sistema Fedora 20 di base.

Questo howto è inteso come una guida pratica; non copre gli aspetti 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.

2 Installa MySQL E phpMyAdmin

Tutto questo può essere installato con un solo comando:

yum install mysql mysql-server phpMyAdmin httpd

Ora configuriamo phpMyAdmin. Modifichiamo la configurazione di Apache in modo che phpMyAdmin consenta connessioni non solo da localhost (commentando tutto nel blocco e aggiungendo la riga Require all granted):

vi /etc/httpd/conf.d/phpMyAdmin.conf

| # phpMyAdmin - Browser MySQL basato sul web scritto in php # # Consente solo localhost per impostazione predefinita # # Ma consentire phpMyAdmin a chiunque altro oltre a localhost dovrebbe essere considerato # pericoloso a meno che non sia adeguatamente protetto da SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin # # # Apache 2.4 # # Require ip 127.0.0.1 # Require ip ::1 # # # # # Apache 2.2 # Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # Require all granted # Apache 2.4 Require ip 127.0.0.1 Require ip ::1 # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 # Queste directory non richiedono accesso tramite HTTP - prese dall'originale # tarball upstream di phpMyAdmin # Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None # Questa configurazione impedisce a mod_security nelle directory di phpMyAdmin di # filtrare SQL ecc. Questo potrebbe compromettere la tua implementazione di mod_security. # # # # SecRuleInheritance Off # # |

Poi creiamo i collegamenti di avvio del sistema per MySQL e Apache (in modo che entrambi si avviino automaticamente ogni volta che il sistema si avvia) e avviamo entrambi i servizi:

systemctl enable mysqld.service  
systemctl start mysqld.service

Se ricevi un errore come questo:

[root@server1 ~]# systemctl enable mysqld.service  
Failed to issue method call: No such file or directory  
[root@server1 ~]#

Si verifica a causa di questo bug, quindi procedi come segue:

[root@server1 ~]# ln -s '/usr/lib/systemd/system/mysqld.service' '/etc/systemd/system/multi-user.target.wants/mysqld.service'  
[root@server1 ~]# ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
systemctl start mysqld.service  
systemctl start mariadb.service
systemctl enable httpd.service   
systemctl start httpd.service

Crea una password per l’utente root di MySQL (sostituisci yourrootsqlpassword con la password che desideri utilizzare):

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation

NOTA: ESEGUIRE TUTTE LE PARTI DI QUESTO SCRIPT È RACCOMANDATO PER TUTTI I SERVER MySQL
IN USO IN PRODUZIONE! PER FAVORE LEGGI ATTENTAMENTE OGNI PASSO!

Per accedere a MySQL per metterlo in sicurezza, avremo bisogno della password
attuale per l’utente root. Se hai appena installato MySQL, e
non hai ancora impostato la password per root,
la password sarà vuota, quindi
dovresti semplicemente premere invio qui.

Inserisci la password attuale per root (premi invio per nessuna): <– INVIO
OK, password utilizzata con successo, procedendo…

Impostare la password per root garantisce che
nessuno possa accedere all’utente root di MySQL
senza la corretta autorizzazione.

Impostare la password per root? [Y/n] <– INVIO
Nuova password: <– yourrootsqlpassword
Reinserisci la nuova password: <– yourrootsqlpassword
Password aggiornata con successo!
Ricaricamento delle tabelle di privilegio..
… Successo!

Per impostazione predefinita, un’installazione di MySQL
ha un utente anonimo, che consente a chiunque
di accedere a MySQL senza dover avere
un account utente creato per loro.
Questo è inteso solo per testare,
e per rendere l’installazione
un po’ più fluida.
Dovresti rimuoverli
prima di passare a un ambiente di produzione.

Rimuovere utenti anonimi? [Y/n] <– INVIO
… Successo!

Normalmente, root dovrebbe
esere autorizzato a connettersi
solo da ‘localhost’.
Questo garantisce che
qualcuno non possa indovinare
la password di root dalla rete.

Negare l’accesso remoto a root? [Y/n] <– INVIO
… Successo!

Per impostazione predefinita, MySQL
viene fornito con un database
chiamato ‘test’ a cui chiunque può
accedere.
Questo è anche inteso solo per testare,
e dovrebbe essere rimosso
prima di passare a un ambiente di produzione.

Rimuovere il database di test
e l’accesso ad esso? [Y/n] <– INVIO

  • Eliminazione del database di test…
    … Successo!
  • Rimozione dei privilegi
    sul database di test…
    … Successo!

Ricaricare le tabelle di privilegio
assicurandosi che tutte le modifiche
fatte finora
entreranno in vigore immediatamente.

Ricaricare le tabelle di privilegio ora? [Y/n] <– INVIO
… Successo!

Pulizia…

Tutto fatto! Se hai completato
tutti i passaggi sopra,
la tua installazione di MySQL
dovrebbe ora essere sicura.

Grazie per aver utilizzato MySQL!

[root@server1 ~]#

3 Installa PureFTPd Con Supporto MySQL

Il pacchetto PureFTPd di Fedora supporta vari backend, come MySQL, PostgreSQL, LDAP, ecc. Pertanto, tutto ciò che dobbiamo fare è installare il normale pacchetto PureFTPd:

yum install pure-ftpd

Poi creiamo un gruppo ftp (ftpgroup) e un utente (ftpuser) a cui tutti i nostri utenti virtuali saranno mappati. 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 "utente pureftpd" -g ftpgroup ftpuser

4 Crea Il Database MySQL Per PureFTPd

Ora creiamo un database chiamato pureftpd e un utente MySQL chiamato 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 di 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. Più avanti puoi utilizzare phpMyAdmin per amministrare il tuo server PureFTPd.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.