Installare un server vsFTPd con utenti virtuali su MySQL

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

Introduzione

Tra i vari server FTP disponibili in Debian, VSFTPD è a mio parere quello più snello, sicuro e prestazionale; inoltre, come ulteriore garanzia, è il server FTP scelto da Red Hat e consigliato da IBM.
In questa guida vedremo come installare un server VSFPD con un backend su database MySQL. Questa configurazione si adatta ad esempio alle seguenti esigenze:

  • abbiamo bisogno di più utenti FTP che non si intralcino tra loro
  • non vogliamo che gli utenti FTP siano anche utenti del server
  • vogliamo gestire le home directory degli utenti in modo personalizzato

Questo è ad esempio il caso di un service provider, che vuole fornire accesso FTP ai propri utenti.

Prerequisiti

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 di VSFTPD

L'installazione di VSFTPD è semplice:

# apt-get install vsftpd libpam-mysql

VSFTPD non ha un supporto built-in per MySQL, per cui le libpam-mysql sono fondamentali per permettere a vsftpd di leggere gli utenti presenti su mysql.
Aggiungiamo anche un utente di sistema per VSFTPD, che ci servirà in seguito:

# useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Questo sarà l'utente di sistema con i cui permessi girerà il demone, aumentando la sicurezza del server.

Creazione di un database per VSFTPD

Il nostro demone FTP è già in funzione, ma non è ancora collegato ad alcun database MySQL. Quindi apriamo la shell di MySQL e creiamo il nostro database vsftpd, con proprietario un utente vsftpd e password ftpdpass:

# mysql -u root -p
CREATE DATABASE vsftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

sostituendo ovviamente la stringa ftpdpass con la password che vogliamo utilizzare.
Ora che abbiamo il database dobbiamo creare la tabella per memorizzare gli utenti virtuali del nostro server FTP. Restando sempre nella shell di MySQL diamo quindi i seguenti comandi:

USE vsftpd;
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
`homedir` VARCHAR( 900 ) NOT NULL ,
`active` int(11) NOT NULL,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;
quit;

Il database è stato creato. Per la normale amministrazione del database e per la creazione degli utenti virtuali potremo d'ora in poi servirci di phpMyAdmin, se lo abbiamo installato; altrimenti dovremo continuare ad utilizzare la shell di MySQL.

Configurazione di VSFTPD

Facciamo prima di tutto una copia di backup del file originale di configurazione di VSTFPD, quindi creiamone uno personalizzato e editiamolo:

# cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
# cat /dev/null > /etc/vsftpd.conf
# nano /etc/vsftpd.conf

Il nostro file di configurazione avrà come contenuto:

listen=YES
nopriv_user=vsftpd
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

# Impedisco la visualizzazione di messaggi
dirmessage_enable=NO
#force_dot_files=NO

rsa_cert_file=/etc/ssl/certs/vsftpd.pem

#hide_ids=YES
listen_port=21
connect_from_port_20=YES
local_enable=YES
local_umask=022
max_login_fails=3
max_per_ip=4
pam_service_name=vsftpd
user_config_dir=/etc/vsftpd/user_conf
ftpd_banner=Welcome here
force_dot_files=yes

# I file caricati hanno proprietario www-data
chown_uploads=YES
chown_username=www-data


############################ 
#Configuro la gabbia chroot
############################
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
#user_sub_token=$USER

# Mappo gli utenti verso un utente locale
virtual_use_local_privs=YES
write_enable=YES
guest_enable=YES

# Ogni utente viene mappato come vsftpd
guest_username=vsftpd
 

##################
#Gestione dei LOG
##################

log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log
dual_log_enable=YES
xferlog_enable=YES
xferlog_std_format=YES




Guida scritta da: Ferdybassi 09:40, 16 aug 2013 (CET) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized