El servidor de ftp elegido fue 
Proftpd,
para aprovechar una aplicación escrita en php que se llama 
ProMA (Proftpd MySQL Admin).
Proftpd se baja de su 
web
oficial, y el mod para SQL se baja de 
aquí,
o de google ;-) (aunque creo que en las últimas versiones de
proftpd ya viene incluído)
Debemos tener instaladas las fuentes de mysql (a ser posible las que
vienen con nuestra distribución, y especificarle las
rutas de las fuentes y de las bases de datos:
./configure
--with-modules=mod_sql:mod_sql_mysql --with-includes=/usr/include/mysql
--with-libraries=/usr/lib/mysql
make && make install
Tras esto, debemos configurar proftpd. Usaremos el fichero
proftpd.conf, el cual contendrá lo siguiente:
 
#
This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual
use.  It establishes a single server
# and a single anonymous login. 
It assumes that you have a user/group
# "nobody/nogroup" and "ftp" for
normal operation and anon.
ServerName                     
"Nombre de nuestro servidor"
ServerType    
           
        standalone   #
método de inicio; standalone o desde inetd
DeferWelcome                   
on   # Con esto activado, no mostraremos información sobre
nuestro equipo hasta que el usuario haga login
MultilineRFC2228 on   # No
activado por defecto, pero ésto aumentará la
compatibilidad con clientes
DefaultServer                  
on      # Tratar como default las conexiones para
las que no tengamos un "virtual host"
ShowSymlinks                   
on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin                   
welcome.msg     #mensaje de bienvenida
DisplayFirstChdir              
.message         #mensaje al cambiar de
directorio
ListOptions                    
"-l"            
         #opciones de "ls"
DenyFilter                     
\*.*/
# Port 21 is the standard FTP port.
Port                           
21
MaxClientsPerHost       3   #
Clientes máximos por ip
MaxClients           
        5   # Máximo
total de clientes
# To prevent DoS attacks, set the
maximum number of child processes
# to 30.  If you need to allow
more than 30 concurrent connections
# at once, simply increase this
value.  Note that this ONLY works
# in standalone mode, in inetd mode
you should use an inetd server
# that allows you to limit maximum
number of processes per service
# (such as xinetd)
MaxInstances 30
# Set the user and group that the
server normally runs at.
User                           
nobody
Group                          
nogroup
<Directory /home/ftp/*>
       
AllowOverwrite off
       
HideNoAccesson         #Bloquea el
listado de entradas para las que el usuario no tenga permisos
   <Limit READ>
        
AllowAll       #Permitimos leer a todo el
mundo en el directorio /home/ftp
   </Limit>
   <Limit Write>
        
DenyAll        #Impedimos la
escritura en el mismo
   </Limit>
</Directory>
<Directory /home/ftp/incoming/*>
       
AllowOverwrite   on
   <Limit STOR CMD MKD
WRITE>
        
AllowALL              
#Permitimos subir, crear directorios, etc
   </Limit>
   <Limit RETR
DELE>           
#Impedimos bajar o borrar
        
DenyALL
   </Limit>
</Directory>
TransferRate RETR 2:1024 user
!usuario      #Limitamos la velocidad de descarga a 2
KB/seg excepto para ficheros menores de 1 KB, o para "usuario"
TransferRate APPE,STOR 15:1024 user
usuario   #Limitamos velocidad de subida a 15 KB/s para
"usuario", excepto para menores de 1 KB
#    Deszonozco la manera de aplicar estas reglas a
varios usuarios, quizás añadiendo los necesarios a un
grupo, y estableciendo por grupos los "transfer rates"
<Global>
RootLogin off
RequireValidShell off
DefaultRoot     ~   #Con esto limitamos
que cada usuario vea como raíz su directorio personal
</Global>
UseReverseDNS off   #
Aceleramos las conexiones al evitar la resolución inversa
SyslogLevel    
info   
SystemLog      
/var/log/proftpd.log      #guardamos los logs en
este fichero
# SQL options
SQLConnectInfo       
proma@127.0.0.1 proftpd miclave    # 
basedatos@host usuario contraseña
SQLAuthenticate      
users*
SQLUserInfo          
users userid passwd uid gid homedir shell
SQLGroupInfo         
groups groupname gid members
SQLLog               
PASS updatecount
SQLNamedQuery        
updatecount UPDATE "count=count+1 WHERE userid='%u'" users
          SQLAuthTypes  Backend  
# The MySQL backend uses this
type to authenticate
MySQL 'PASSWORD()' encrypted passwords
   
       
#
Ejemplo: SQLAuthTypes Crypt Plaintext Empty (en este caso
intentaría autentificar usando la función crypt(3), luego
intentaría con texto plano, y luego comprobaría si la
clave es nula. En caso de no funcionar ninguno de los 3 métodos,
fallaría la autentificación
#Adicionalmente podemos usar "SQLHomedirOnDemand on", con lo que se
creará el directorio del usuario una vez se haga login. Esto
puede ser útil para que si cambiamos el directorio de un
determinado usuario en la base de datos, automáticamente se cree
dicho directorio.
# It is a very good idea to allow only filenames containing normal
# alphanumeric characters for uploads (and not shell code...)
PathAllowFilter ^[A-Za-z0-9._-]+$
# We don't want welcome.msg, .message, .ftpaccess or .htaccess files to
be uploaded
PathDenyFilter "welcome.msg|.message|(\.ftp)|(\.ht)[a-z]+$"  
#Solo admite una línea; las posteriores son ignoradas. Usamos el
operador OR para arreglar esto
# Do not allow to pass printf-Formats (security! see documentation!):
AllowFilter "^[a-zA-Z0-9@~ /,_.-]*$"
DenyFilter  "%"
Crear Base de Datos:
Ahora debemos crear la base de datos que proma usará.
Accedemos a mysql con el comando 
"mysql".
En caso de que mysql no nos deje acceder, podemos intentar lo siguiente:
mysql
-p   # Con ésto hacemos que mysql nos pida una clave
(en caso de que la hayamos establecido)
mysqld --skip-grant-tables -u mysql & #Con ésto ejecutamos
el servidor de mysql de forma que nos permite acceder desde
línea de comandos (debemos pararlo previamente si se
           
           
           
           
           
    # está ejecutando)
Una vez dentro, creamos la base de datos y accedemos a la misma
CREATE
DATABASE proma
USE
proma
Creamos las tablas necesarias:
CREATE TABLE users (
  userid varchar(255) NOT NULL UNIQUE,
  name varchar(255) NULL,
  mail varchar(255) NULL,
  uid int(11) NULL default '65534',
  gid int(11) NULL default '65534',
  passwd varchar(255) NOT NULL,
  shell varchar(255) NOT NULL default '/bin/nonexistent',
  homedir varchar(255) NOT NULL default
'/some/fancy/homedir',   # Aquí pondremos el
directorio por defecto para el ftp
  note text NULL default '',
  count int(11) NOT NULL default 0,
  admin int(1) NOT NULL default 0,
  closed int(1) NOT NULL default 0
);
Ahora creamos la cuenta de administrador:
INSERT
INTO
  users
SET
  userid = 'tu_id_admin',
  passwd = PASSWORD('tuclave'),
  name = 'The Boss',
  mail = 'ftpmaster@servidor',
  admin = 1;
Y por último damos permisos al
usuario proftpd para que acceda a la base de datos: (serán los
que use proftp para acceder)