Category Archives: Ftp

Installazione di PureFTPd con Mysql su Debian

In questa breve guida vediamo come installare PureFTPD su Debian, utilizzando gli utenti di un database MySQL invece che quelli di sistema.

Installare MySQL
Come prima cosa è necessario installare MySQL sul proprio server, se non è ancora presente.
aptitude install mysql-server mysql-client
Nella fase di installazione saranno chieste alcune informazioni come la password di root per accedere a MySQL e il server web utilizzato.

Installare PureFTPd
L’installazione di PureFTPd con il supporto MySQL risulta essere molto semplice su Debian, esiste infatti un pacchetto con queste caratteristiche chiamato pure-ftpd-mysql.
aptitude install pure-ftpd-mysql

Terminata l’installazione, è possibile creare l’utente di sistema a cui saranno mappati tutti gli utenti virtuali presenti sul database.
groupadd -g 2001 ftpgroup

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

Creare il database per PureFTPd
La fase successiva consiste nel creare un database e un utente MySQL che saranno utilizzati da 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;

La stringa ftpdpass può essere sostituita con la password che si vuole utilizzare per l’utente pureftpd.

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)
) TYPE=MyISAM;

quit;

Configurare PureFTPd
A questo punto è possibile configurare PureFTPd in modo che venga utilizato il database creato.

Il file /etc/pure-ftpd/db/mysql.conf dovrà essere quindi simile al seguente.

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”)

La stringa ftpdpass deve essere sostituita con la password impostata in precedenza per l’utente MySQL pureftpd.

Dopo che si sono salvate le modifiche, bisogna creare il file /etc/pure-ftpd/conf/ChrootEveryone che contiene solamente la stringa yes.

echo “yes” > /etc/pure-ftpd/conf/ChrootEveryone

In questo modo viene effettuato il chroot di ogni utente virtuale all’interno della propria home.

Bisogna quindi creare anche il file CreateHomeDir, all’interno del quale è presente la stringa yes, che specifica che deve essere creata una home per ogni utente che effettua l’accesso.

echo “yes” > /etc/pure-ftpd/conf/CreateHomeDir

A questo punto bisogna configurare PureFTPd come demone standalone modificando il paramentro STANDALONE_OR_INETD presente nel file /etc/default/pure-ftpd-common.

vi /etc/default/pure-ftpd-common

# VIRTUALCHROOT:
# whether to use binary with virtualchroot support
# valid values are “true” or “false”
# Any change here overrides the setting in debconf.
VIRTUALCHROOT=false

Inoltre bisogna commentare la riga ftp all’interno del file /etc/inetd.conf

vi /etc/inetd.conf

#:STANDARD: These are standard services.
#ftp stream tcp nowait root

Fatto questo è possibile riavviare Inetd e PureFTPd.
/etc/init.d/openbsd-inetd restart
/etc/init.d/pure-ftpd-mysql restart

Inserire le utenze del database
Per utilizzare la configurazione specificata, è necessario inserire le utenze all’interno del database
mysql -u root -p

USE pureftpd;

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (‘exampleuser’, ’1′, MD5(‘secret’), ’2001′, ’2001′, ‘/home/prova’, ’100′, ’100′, ”, ‘*’, ’50′, ’0′);

In questo esempio viene creato l’utente exampleuser che ha password secret, uid e gid 2001 che corrispondono a quello dell’utente di sistema creato in precedenza e una quota di 50 mb.

Nel momento in cui ci si collega al server con l’utente exampleuser viene creata automaticamente la directory /home/prova.

FTP – Modalità attiva e modalità passiva

Il protocollo Ftp ha bisogno di più porte di rete per funzionare in modo corretto.
Quando un client FTP si connette a un server FTP, sul server viene aperta la porta 21, chiamata porta di comando, attraverso la quale vengono inviati i comandi al server.
I dati richiesti vengono inviati al client utilizzando un’altra porta, chiamata porta dati.
Il numero della porta dati e il funzionamento del collegamento cambia a seconda della modalità FTP

FTP supporta due modalità, attiva e passiva.
La modalità attiva è quella originale utilizzata dal protocollo ftp per il trasferimento dei dati, quando si utilizza questa modalità, viene aperto un collegamento dalla porta 20 sul server a una porta random superiore a 1024 sul client.
Questo significa che per il funzionamento del trasferimento dei dati è necessario che il client sia abilitato a accettare connessioni sulle porte superiori alla 1024 e questo è solitamente impedito dai firewall.

La modalità passiva permette di superare questo problema, quando si utilizza questa modalità, il server che riceve la richiesta da un client risponde fornendo l’indirizzo ip e una porta random superiore alla 1024 sul server.
Il client si connette quindi a questa porta per il trasferimento dei dati.

Usare Vsftpd con ssl

Vsftpd supporta l’utilizzo di connessioni sicure tramite ssl, in questo modo l’accesso e i dati trasmessi vengono crittografati.

In questo breve articolo viene spiegato come configurare vsftpd in modo da utilizzare ssl. Il presupposto è un’installazione funzionante di vsftpd.

Come prima cosa è necessario creare il certificato
# cd /etc/vsftpd/
# /usr/bin/openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

A questo punto possiamo modificare il file di configurazione
# vi /etc/vsftpd/vsftpd.conf

In cui impostiamo le seguenti opzioni
# Abilitazione SSL
ssl_enable=YES
# Abilitazione all’accesso per l’utente anonimo
allow_anon_ssl=YES
# Forza tutte le connessioni degli utenti a utilizzare SSL per il trasferimento dei dati
force_local_data_ssl=YES
# Forza l’utilizzo di ssl per l’accesso
force_local_logins_ssl=YES
# Impostazione relativa all’utilizza del protocollo TLS v1
ssl_tlsv1=YES
# Impostazione relativa all’utilizza del protocollo SSL v2
ssl_sslv2=NO
# Impostazione relativa all’utilizza del protocollo SSL v3
ssl_sslv3=NO
# Specifica dove si trova il certificato
rsa_cert_file=/etc/vsftpd/vsftpd.pem

A questo punto è necessario riavviare il servizio
#service vsftpd restart

Per connettersi sarà necessario utilizzare un client che supporti SSL.

Eseguendo queste semplici operazioni, Vsftpd è stato configurato per l’utilizzo di ssl.