Proftpd con autenticazione mysql

Dom, 26/12/2004 - 15:44

Proftpd con autenticazione mysql

Inviato da Incubus 0 commenti

Configurare il demone proftp perchè autentichi attingendo le informazioni da un database mysql

In questo documento non viene spiegato come configurare il server mysql o quello ftp ma solo come interfacciare il server ftp a quello mysql. La configirazione dei 2 demoni, per l'uso comune, è estremamente semplice e lascio all'utente la briga di perdere 10 minuti a demone per configurarli ad-hoc secondo le loro esigenze specifiche.

SCOPO
Configurare un demone ftp (nel nostro caso proftpd) perchè l'autenticazione degli utenti avvenga tramite un un database mysql.

VANTAGGI
Gli utenti ftp non devono esistere sul sistema per potersi autenticare

SVANTAGGI
La gestione di utenti, password, uid, gid, home e shell può risultare piuttosto laboriosa se fatta "a mano" ma esistono apposite interfacce web che ne facilitano la gestione.

INSTALLAZIONE
L'unico pacchetto di cui abbiamo bisogno è:
proftpd-mysql
Automaticamente verrà installato proftpd-common
Se è già installato proftpd, vi consiglio di fare un backup del file di configurazione.

Gli altri pacchetti che dovrete già avere installati e configurati sono
mysql-server
mysql-client
mysql-common

CONFIGURAZIONE MYSQL
Per prima cosa logghiamoci sul database mysql come amministratori:

$ mysql -u root -p

Creiamo ora il database:

mysql> CREATE DATABASE proftpd;

creiamo quindi l'utente, la password e i permessi per il nuovo utente:

mysql> GRANT CREATE,DROP,SELECT,DELETE,UPDATE,ALTER ON proftpd.* TO proftpd@localhost IDENTIFIED BY 'password';

Ovviamente 'password' è la password per l'accesso al database per l'utente 'proftpd'.
Ora usciamo con il comando
quit
e logghiamoci con il nuovo utente per assicurarci che tutto sia corretto:

mysql>mysql -u proftpd -p

Questa volta ci verrà chiesta la password che abbiamo specificato per l'utente 'proftpd'.
Ora creiamo le tabelle per l'autenticazione degli utenti e i relativi gruppi:

mysql>
mysql> CREATE TABLE groups (
groupname varchar(30) NOT NULL default '',
gid int(11) NOT NULL default '0',
members varchar(255) default NULL
) TYPE=MyISAM;

mysql> CREATE TABLE users (
userid varchar(30) NOT NULL default '',
passwd varchar(30) NOT NULL default '',
uid int(11) default NULL,
gid int(11) default NULL,
homedir varchar(255) default NULL,
shell varchar(255) default NULL,
UNIQUE KEY uid (uid),
UNIQUE KEY userid (userid)
) TYPE=MyISAM

CONFIGURAZIONE PROFTPD
Il file di configurazione di profpd è /etc/proftpd.conf, basta editarlo con l'editor preferito e aggiungere le seguenti righe:

mysql>AuthOrder mod_sql.c mod_auth_unix.c

Queste definiscono l'ordine di autenticazione degli utenti: prima viene eseguito il controllo nel database mysql, poi sul sistema; nella sezione è necessario aggiungere le seguenti righe:

mysql>SQLAuthenticate on

#Utente e password per la connessione al database da cui attingere gli utenti ftp
SQLConnectInfo database@host utente password

#Ordine da seguire per l'autenticazione
SQLAuthTypes Crypt Backend Plaintext

SQLNegativeCache on

RequireValidShell off

#Log file autenticaziopne tramite database
SQLLogFile /var/log/proftpd/mysql.log

A questo punto basta dare il reload del demone ftp per far leggere i cambiamenti:


# /etc/init.d/proftpd reload

UN ESEMPIO
Ipottizziamo la home del demone ftp sia /home/ftp, creiamo qui la cartella incoming/ (che ospiterà i file uploadati dagli utenti anonimi), pub/ (che conterrà i file messi a disposizione degli utenti anonimi) e users/ (che conterrà le home degli utenti virtuali). Diamo a incoming/ i permessi 755, come owner e gruppo ftp:nogroup.

Creiamo l'utente 'foobar': per prima cosa creiamo la sua home in users/ e diamo come permessi, proprietario e gruppo gli stessi assegnati prima. Creiamo poi la voce nel database:

mysql> INSERT INTO users VALUES ('foobar', PASSWORD('foobar'), 1004, 65534, "/home/ftp/sers/foobar", "/bin/false");

A questo punto abbiamo aggiunto l'utente 'foobar' con password 'foobar' (che viene crittata) che ha per home /home/ftp/users/foobar (ma lui nn si accorgerà di questo visto che è in ambiente chroot).

Sfruttando i campi uid, gid e group del database, e 'giocando' con uid e gid di file e cartelle sul sistema, è possibile restringere l'accesso a determinate cartelle della gabbia chroot a determinati utenti del sistema ftp.

CREDITS
Autore: Incubus
E-Mail: incubus@gl-como.net
Membro del Gruppo Linux Como: http://www.gl-como.net