GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Hosting virtuale con PureFTPd e MySQL (incl. quota e gestione della 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 utenti del sistema reale. Questo è molto più performante e permette di avere migliaia di utenti ftp su una singola macchina. In aggiunta a ciò mostrerò l'uso della quota e dei limiti di larghezza di banda di upload/download con questa configurazione. Le password verranno archiviate crittografate come stringhe MD5 nel database. Questo tutorial è basato su Ubuntu 14.04.

Per l'amministrazione del database MySQL è possibile utilizzare strumenti web based come phpMyAdmin che verranno installati anche in questo howto. phpMyAdmin è una comoda interfaccia grafica che significa che non devi scherzare con la riga di comando.

Questo howto vuole essere una guida pratica; non copre le basi teoriche. Sono trattati in molti altri documenti nel Web.

Questo documento viene fornito senza garanzie di alcun tipo! Voglio dire che questo non è l'unico modo per creare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo in cui prendo. Non garantisco che questo funzionerà per te!

1 Nota preliminare

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

Assicurati di aver effettuato l'accesso come root (digita

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 "root" di MySQL:<-- yourrootsqlpassword
Ripeti la password per l'utente "root" di MySQL:<-- yourrootsqlpassword
Server Web da riconfigurare automaticamente:<-- apache2
Configurare il database per phpmyadmin con dbconfig-common? <-- No

3 Installa PureFTPd con il supporto MySQL

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

apt-get install pure-ftpd-mysql

Quindi 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 gratuito sul tuo sistema:

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

4 Creare 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 la password che desideri utilizzare per l'utente MySQL pureftpd. Sempre sulla 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 l'abbandono; comando abbiamo lasciato la shell MySQL e siamo tornati sulla shell Linux.

A proposito, (suppongo che il nome host del tuo sistema server ftp sia server1.example.com) puoi accedere a phpMyAdmin sotto http://server1.example.com/phpmyadmin/ (puoi anche usare l'indirizzo IP invece di server1 .example.com) in un browser e accedi come utente pureftpd. Quindi puoi dare un'occhiata al database. Successivamente puoi usare phpMyAdmin per amministrare il tuo server PureFTPd.

5 Configura PureFTPd

Modifica /etc/pure-ftpd/db/mysql.conf. Dovrebbe assomigliare a questo:

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 password reale per l'utente MySQL pureftpd nella riga MYSQLPassword! Tieni presente che utilizziamo md5 come metodo MYSQLCrypt, il che significa che memorizzeremo le password degli utenti come una stringa MD5 nel database che è molto più sicuro rispetto all'utilizzo di password in testo normale!

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

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

Questo renderà PureFTPd chroot ogni utente virtuale nella sua home directory in modo che non sarà in grado di sfogliare directory e file al di fuori della sua home directory.

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

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

Questo farà in modo che PureFTPd crei la home directory di un utente quando l'utente effettua il login e la home directory non esiste ancora.

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

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

Ciò farà in modo che PureFTPd non cerchi nomi host che possono accelerare notevolmente le connessioni e ridurre l'utilizzo della larghezza di banda.

Successivamente, riavviamo PureFTPd:

service pure-ftpd-mysql restart

6 Compila il database e verifica

Per popolare il database puoi usare la shell MySQL:

mysql -u root -p
USE pureftpd;

Ora creiamo l'utente esempioutente con lo stato 1 (il che significa che il suo account ftp è attivo), la password segreta (che verrà archiviata crittografata utilizzando la funzione MD5 di MySQL), l'UID e il GID 2001 (usa l'id utente e l'id di gruppo dell'utente/ gruppo che hai creato alla fine del secondo passaggio!), 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 postazione di lavoro (qualcosa come FileZilla, WS_FTP, SmartFTP o gFTP) e prova a connetterti. Come nome host utilizzi server1.example.com (o l'indirizzo IP del sistema), il nome utente è esempioutente e la password è segreta.

Se riesci a connetterti, congratulazioni! In caso contrario, qualcosa è andato storto.

Ora, se corri

ls -l /home

dovresti vedere che la directory /home/www.example.com (home directory dell'utente esempio) è stata creata automaticamente ed è di proprietà di ftpuser e ftpgroup (l'utente/gruppo che abbiamo creato alla fine del secondo passaggio):

[email protected]:~# ls -l /home/
total 4
drwxr-xr-x 2 ftpuser ftpgroup 4096 Apr 29 08:10 www.example.com
[email protected]:~# 

7 Amministrazione del database

Per la maggior parte delle persone è più facile se hanno un front-end grafico 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 una voce nella tabella ftpd, quindi spiegherò le colonne di questa tabella qui:

Tabella ftpd:

  • Utente:il nome dell'utente virtuale PureFTPd (ad es. utente di esempio).
  • stato: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'ID utente dell'utente ftp che hai creato alla fine del passaggio due (ad es. 2001).
  • GID:il groupid del gruppo ftp che hai creato alla fine del secondo passaggio (ad es. 2001).
  • Dir:la directory home dell'utente virtuale PureFTPd (ad es. /home/www.example.com). Se non esiste, verrà creato quando il nuovo utente accede per la prima volta tramite FTP. L'utente virtuale verrà imprigionato in questa home directory, ovvero non potrà accedere ad altre directory al di fuori della sua home directory.
  • ULBandwidth:carica la larghezza di banda dell'utente virtuale in KB/sec. (kilobyte al secondo). 0 significa illimitato.
  • DLBandwidth:scarica la larghezza di banda dell'utente virtuale in KB/sec. (kilobyte al secondo). 0 significa illimitato.
  • commento:puoi inserire qualsiasi commento qui (ad es. per la tua amministrazione interna) qui. Normalmente lasci questo campo vuoto.
  • ipaccess:inserisci qui gli indirizzi IP che possono connettersi a questo account FTP. * significa che qualsiasi indirizzo IP può connettersi.
  • QuotaSize:spazio di archiviazione in MB (non KB, come in ULBandwidth e DLBandwidth!) che l'utente virtuale può utilizzare sul server FTP. 0 significa illimitato.
  • QuotaFiles:quantità di file che l'utente virtuale può salvare sul server FTP. 0 significa illimitato.

8 FTP anonimo

Se vuoi creare un account ftp anonimo (un account ftp a cui tutti possono accedere senza password), puoi farlo in questo modo:

Per prima cosa crea un utente ftp (con la homedir /home/ftp) e un gruppo ftp:

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

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

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

Con questa configurazione, PureFTPd consentirà accessi anonimi.

Riavvia PureFTPd:

service pure-ftpd-mysql restart

Quindi creiamo la directory /home/ftp/incoming che consentirà agli utenti anonimi di caricare file. Daremo alla directory /home/ftp/incoming i 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à i 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 i caricamenti sono limitati a /home/ftp/incoming (e una volta che un file viene caricato in /home/ftp/incoming, non può essere letto né scaricato da lì; l'amministratore del server deve prima spostarlo in /home/ftp per renderlo disponibile ad altri).

  • PureFTPd:http://www.pureftpd.org/
  • MySQL:http://www.mysql.com/
  • phpMyAdmin:http://www.phpmyadmin.net/
  • Ubuntu:http://www.ubuntu.com/


Ubuntu
  1. Utenti virtuali e domini con Postfix, Courier, MySQL e SquirrelMail (Ubuntu 14.04LTS)

  2. Hosting virtuale con Proftpd e MySQL (quota inclusa) su Ubuntu 14.04LTS

  3. Installazione di Lighttpd con PHP5 (PHP-FPM) e supporto MySQL su Ubuntu 14.04LTS

  4. Utenti e domini virtuali con Postfix, Courier, MySQL e SquirrelMail (Ubuntu 13.10)

  5. Hosting virtuale con PureFTPd e MySQL (incl. Gestione di quote e larghezza di banda) su CentOS 7.0

Hosting virtuale con PureFTPd e MySQL (incl. quota e gestione della larghezza di banda) su Ubuntu 12.04

Hosting virtuale con vsftpd e MySQL su Ubuntu 12.04

Hosting virtuale con vsftpd e MySQL su Ubuntu 12.10

Hosting virtuale con PureFTPd e MySQL (incl. Quota e gestione della larghezza di banda) su Ubuntu 12.10

Hosting virtuale con Proftpd e MySQL (quota inclusa) su Ubuntu 12.10

Hosting virtuale con Proftpd e MySQL (quota inclusa) su Debian Lenny