Pure-ftpd: Gestione utenti con mysql su debian

In questo tutorial vediamo come installare e configurare pure-ftp su una macchina debian e fargli gestire gli utenti mediante un database mysql.

Partiamo dal vedere gli strumenti necessari (abbastanza ovvi):

  • Installazione di mysql server
  • Installazione di pureftpd
  • Installazione di un client mysql (va bene anche phpmyadmin, se non volete usare la linea di comando).

Prima di tutto quindi vediamo di installare i pacchetti necessari (ovviamente dovete essere loggati come utente root):

apt-get install mysql-server mysql-client pure-ftpd-mysql

In questo caso utilizzeremo il client da linea comando di mysql per tutte le operazioni riguardanti il database. In fase di installazione mysql vi chiederá di settare una password per l’utente root del database (N.B: si tratta di un utente diverso dall’utente root della macchina!! Questo serve solo per l’amministrazione del database)

Pureftpd logo

Al termine dell’installazione dei pacchetti necessari, iniziamo con l’aggiuingere gruppo e utente che verranno utilizzati dal server per salvare i files:

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

Dove i numeri sono gli id rispettivamente per gruppo e utente, se dovessero essere gia utilizzate scegliete altri numeri a vostro piacimento sopra 1000. Ora dobbiamo creare un database e un utente mysql che serviranno al demone di pure-ftp per gestire gli utenti (creiamo un utente specifico, perchè non vogliamo che il server utilizzi privilegi di amministratore del database, per evitare possibili falle di sicurezza).

Se avete phpmyadmin accedete via interfaccia web come utente root e create un utente con relativo database dal menu “Privilegi”. Se non lo avete, o non volete usarlo, allora dobbiamo accedervi via cli, date il comando:

mysql -u root -p

Vi verrá chiesta una password, che sará quella che avete settato in fase di installazione di mysql. Quindi prima di tutto creiamo il database:

CREATE DATABASE pureftp

Poi creiamo un utente che abbia i diritti di scrittura/lettura su questo database:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftp.* TO 'pureftp'@'localhost' IDENTIFIED BY 'ftppass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftp.* TO 'pureftp'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';

Dove ftpdpass é la password che decidete di settare per l’utente pureftp. Infine aggiorniamo la tabella dei privilegi (per permettere agli utenti appena creati di accedere al db):

FLUSH PRIVILEGES

A questo punto possiamo passare alla creazione della tabella che conterrá gli utenti del nostro server (ce ne basta una soltanto).

Sempre dalla cli di mysql, entriamo prima nel database appena creato con il comando:

USE pureftp

Dopo di che creiamo la tabella:

CREATE TABLE users (
User varchar(16) NOT NULL,
Password varchar(64) NOT NULL,
Uid int(11) NOT NULL default '-1',
Gid int(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL,
QuotaFiles int(11) NOT NULL default '10000',
QuotaSize int(11) NOT NULL default '1000',
ULBandwidth int(11) NOT NULL default '500',
DLBandwidth int(11) NOT NULL default '500',
PRIMARY KEY  (User)
)
FLUSH PRIVILEGES;

Come potete vedere la struttura della tabella è abbastanza chiara, per ogni utente vengono salvate username, password,  e altre informazioni utilizzate da pureftp.

Il campo Dir indica la directory nel quale l’utente verrá ridirezionato quando fa il login.

Mentre Uid e Gid sono lo user id e il group id dei file che verranno salvati dall’utente sul server, in questo caso dobbiamo inserire uid e gid di ftpuser e ftpgroup (nel nostro articolo 1002 per entrambi).

Le altre informazioni sono la quota massima per un file, la porzione di spazio sul server allocata e la bandwidth disponibile.

Infine non ci resta che da configurare il server pureftp. Editiamo il file /etc/pure-ftpd/db/mysql.conf. E modifichiamo le seguenti righe:

MYSQLUser       pureftp
MYSQLPassword   pure_ftp_password
MYSQLDatabase   pureftp
MYSQLCrypt      md5

Alcune di queste righe sono commentate, e andranno decommentate. Ovviamente accertatevi che sono decommentate anche le righe (almeno):

  • MYSQLGetDir
  • MYSQLGetPW
  • MYSQLGetUID
  • MYSQLGetGID

Che contengono le query per l’accesso alle informazioni nel database (normalmente non vi servirá di modificarle). Vi sono anche altre opzioni, con delle query riguardanti altri fattori, potete decidere se decommentarle o meno (leggete prima la documentazione magari).

Siamo quasi al termine ora  creiamo alcuni file che contengono altre informaizoni di configurazione con i seguenti comandi:

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

Questa opzione forzerá gli utenti che si loggano all’interno della loro home dir, in modo che non potranno vedere il resto del file system (vi consiglio vivamente di attivarla).

L’altra opzione che andiamo a settare è quella di creare la home dir, nel caso che l’utente venga creato e questa non esista (per home dir intendiamo la directory definita nel campo Dir della tabella users):

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

Infine facciamo in modo che il server non risolva gli hostname:

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

A questo punto la configurazione è completa. Riavviamo il server

service pure-ftpd-mysql restart

Non ci resta che inserire un utente, facciamo di nuovo accesso a mysql, questa volta possiamo usare l’utente pureftp:

mysql -u pureftp -p

La password è quella che è stata definita quando abbiamo creato l’utente pureftp in mysql,  e la insert avrá la forma seguente:

INSERT INTO `users` (`User`, `Password`, `Uid`, `Gid`, `Dir`, `QuotaFiles`, `QuotaSize`, `ULBandwidth`, `DLBandwidth`) VALUES
('testuser', md5('testpassword)', 1002, 1002, '/var/vhosts/testuserdir/', 100000, 100000, 500, 500);

Dove prestate attenzione al campo dove inseriamo la password, dal momento che il server è stato configurato per cifrare le pwd con md5, dobbiamo fare lo stesso nel database, quindi quando si inserisce la password dobbiamo convertirla in md5 (in questo modo non viene salvata in chiaro), se ci dimentichiamo di convertirla con la funzione md5(‘text’) non riusciremo a fare login sul server.

Bene detto questo possiamo provare a fare login sul server tramite un qualsiasi client ftp.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.