Configurare proftpd con MySQL

Questo mini how-to senza pretese, spiega come ho configurato il proftpd con MySQL.
Questa configurazione ha preso spunto da un link in cui veniva fornita la
struttura del database più una base di configurazione valida per la versione 1.2.4.

Successivamente con la versione 1.2.5 è stato necessario variare il file di
configurazione per adattarlo al cambiamento del mod_sql (4.08 del 2002-06-08)

Il sistema operativo che utilizzo è FreeBSD (4.5 & 4.6) e parto dal presupposto
che il proftpd sia già stato installato dai ports con i comandi:

# cd /usr/ports/ftp/proftpd
# make -DWITH_MYSQL
# make install

Uno shell fittizio Per prima cosa creo uno shell fittizio aggiungendo al file /etc/shells la riga /sbin/nologin

User/Group ftp/ftp Inoltre devono esistere (eventualmente lo creo) lo user “ftp” e il relativo gruppo “ftp” i quali dovrebbero avere UID=1000 e GID=1000. Se i UID e GID non dovessero essere questi, variare di conseguenza le configurazioni.

Creazione del database

Come prima cosa creiamo il database. La struttura l’ho trovata da qualche parte e per
ora non ho il link (mi riprometto di cercarla meglio).
Comunque ecco la struttura:

CREATE DATABASE proftpd
# Table structure for table 'ftpusers'
CREATE TABLE `ftpusers` (
`loginallowed` char(1) NOT NULL default 'Y',
`username` varchar(60) NOT NULL default 'NULL',
`uid` int(11) unsigned default '1000',
`gid` int(11) unsigned default '1000',
`groupname` varchar(50) default 'ftp',
`password` varchar(30) default 'NULL',
`homedir` varchar(50) default 'NULL',
`shell` varchar(15) NOT NULL default '/sbin/nologin',
`count` int(11) unsigned default '0',
`fretr` int(10) unsigned default '0',
`bretr` int(10) unsigned default '0',
`bstor` int(10) unsigned default '0',
`fstor` int(10) unsigned default '0',
`ftime` timestamp(14) NOT NULL,
`faddr` varchar(255) default 'NULL',
`fhost` varchar(255) default 'NULL',
`fcdir` varchar(255) default 'NULL',
PRIMARY KEY (`username`)
)

proftpd.conf per la versione 1.2.4

Creiamo il file /usr/local/etc/proftpd.conf

ServerName "FTP SERVER"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
User nobody
Group nogroup

# Il param PassivePorts
# serve insieme al firewall (IPFW) per 
# permettere le connessioni attraverso
#il firewall stesso (v. config/links)
PassivePorts 49152 49999

SQLDoGroupAuth       on
SQLAuthTypes         Plaintext Backend
SQLConnectInfo       proftpd@localhost:3306 user password 
SQLHomedirField      homedir
SQLLogDirs           off
SQLLoginCountField   count
SQLUserTable         ftpusers
SQLUsernameField     username
SQLWhereClause       "LoginAllowed = 'y'"
SQLGroupTable        ftpusers
SQLGroupnameField    groupname
SQLGroupMembersField username
SQLAuthoritative     off
SQLDefaultGID        1000
SQLDefaultUID        1000
SQLPasswordField     password


TransferLog /var/log/xfer/xferlog
DefaultRoot ~ ftp# Normally, we want files to be overwriteable.
<Directory /*>
AllowOverwrite on
</Directory>

proftpd.conf per la versione 1.2.5

Creiamo il file /usr/local/etc/proftpd.conf

#
ServerName "FTP SERVER"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
User nobody
Group nogroup
PassivePorts 49152 49999

SQLAuthenticate     on
SQLUserInfo         ftpusers username password NULL NULL homedir shell
SQLAuthTypes        Plaintext Backend
SQLConnectInfo      proftpd@localhost:3306 user password
SQLUserWhereClause  "LoginAllowed = 'Y'"
SQLDefaultGID       1000
SQLDefaultUID       1000
SQLGroupInfo        ftpusers groupname gid username
#SQLLog PASS updatelogin
#SQLNamedQuery updatelogin UPDATE "count=count+1 WHERE username='%u'" ftpusers

TransferLog /var/log/xfer/xferlog
DefaultRoot ~ ftp# Normally, we want files to be overwriteable.
<Directory /*>
AllowOverwrite on
</Directory>