Installare un server FTP con utenti virtuali su MySQL

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca

Introduzione

Dopo aver installato Apache (Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5) e configurato i Virtual Host (Apache e Virtual Hosts: configurare Apache2 per ospitare più siti web) abbiamo adesso bisogno di permettere ai proprietari dei domini ospitati sui Virtual Host di accedere al loro spazio web via FTP senza causare danni agli altri Virtual Host e senza avere la possibilità di gironzolare per il nostro server.
Supponiamo quindi di avere una situazione del genere:

  • /var/www/www.esempio.it
  • /var/www/www.esempio.org

e di voler creare due utenti virtuali, senza accesso alla console:

  • esempio-it
  • esempio-org

che possano accedere via FTP solo alle directory del loro sito web.

Installazione ProFTPD

La scelta sul server FTP da utilizzare è caduta su ProFTPD, che ora dobbiamo configurare in modo opportuno per avere due utenti distinti che gestiscano i due siti. Per fare ciò creeremo due siti FTP virtuali, con l’ausilio di un database dedicato su MySQL.
Installiamo innanzitutto ProFTPD con il supporto per MySQL:

# apt-get install proftpd proftpd-mod-mysql

Ora creiamo un utente e un gruppo di sistema, che useremo per mappare tutti gli utenti virtuali che saranno utilizzati da ProFTPD:

# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "Utente ProFTPD" -g ftpgroup ftpuser

Sostituite ovviamente i numeri UID e GID con due valori che siano liberi sul vostro server.
Ora dobbiamo creare il database per ProFTPD, entrando in MySQL col comando:

$ mysql -u root -p

Creeremo un database chiamato proftpd e un utente MySQL chiamato proftpd, che sarà in seguito utilizzato da ProFTPD per connettersi al database server:

CREATE DATABASE proftpd;
GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON proftpd.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Ovviamente sostituite la stringa password con la password che volete assegnare al vostro utente MySQL.