Proftpd

1 Proftpd+Mysql+Quotas

El servidor elegido es Proftpd, uno de los más utilizados en la web. La instalación se hizo sobre una distribución Debian 3.11

Lo primero es instalar los paquetes… en Debian existe un paquete específico para el servidor proftpd con apoyo de myql:

apt-get install proftpd-mysql mysql-server

El instalador nos preguntará si queremos arrancar el ftp como servicio de red (inetd) o como ’standalone’ (independent); elegiremos ‘independent’.

Si lo vamos a hacer des el código fuente deberemos desempaquetar el programa y configurarlo:

tar xvfz proftpd-1.2.8p.tar.gz
cd proftpd-1.2.8p
.(./configure –with-modules=mod_sql: mod_sql_mysql: mod_quotatab: mod_quotatab_sql --with-includes=/usr/include/mysql)
make
make install

Una vez instalado miramos si Proftpd tiene los módulos necesarios para seguir con la configuración. Para ver los módulos

 proftpd -l

Lo segundo es crear un usuario y grupo específico para el ftp que seran los propietarios de los archivos que se transfieran. Ya que los usuarios del ftp no son usuarios reales.

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "usuario proftpd " -g ftpgroup ftpuser

A continuación cambiamos la clave del root del mysql y creamos la base de datos y un usuario específico para esa base de datos:

 mysqladmin -u root password contraseña

Entramos en el MysSQL

 mysql -u root -p

Creamos la base de datos ftp y le damos los permisos al usuario proftpd

mysql > create database ftp;
mysql > GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password';
mysql > GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'password';
mysql > FLUSH PRIVILEGES;
recuerda cambiar password por la contraseña que tu elijas

Una vez creada la tabla procedemos a crear las tablas de la base de datos que contendrán la información de los usuarios que podrán acceder al ftp:

mysql > USE ftp;
mysql > CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';
mysql > CREATE TABLE ftpquotalimits (
name varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail int(10) unsigned NOT NULL default '0',
bytes_out_avail int(10) unsigned NOT NULL default '0',
bytes_xfer_avail int(10) unsigned NOT NULL default '0',
files_in_avail int(10) unsigned NOT NULL default '0',
files_out_avail int(10) unsigned NOT NULL default '0',
files_xfer_avail int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
mysql > CREATE TABLE ftpquotatallies (
name varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user',
bytes_in_used int(10) unsigned NOT NULL default '0',
bytes_out_used int(10) unsigned NOT NULL default '0',
bytes_xfer_used int(10) unsigned NOT NULL default '0',
files_in_used int(10) unsigned NOT NULL default '0',
files_out_used int(10) unsigned NOT NULL default '0',
files_xfer_used int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
mysql > CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '',
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
accessed datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';
mysql > quit;

Algunas aclaraciones al respecto. La tabla ftpgroup lista los usuarios de cada grupo, como solo habrá un grupo (inicialmente) no necesita más registros para comenzar a usar el servicio. La tabla ftuser guarda los usuarios, estadísticas y es la usada por Proftpd para comparar los datos de autentificación. Usando la directiva 'asdfasf' haremos que Proftpd cree el directorio raíz del usuario si este no existe. La tabla ftpquotalimits define los límites de cuota en disco y ftpquotatalities va guardando los datos de cada usuario para totalizar y comprobar que el límite no sobrepasa lo acordado en ftpquotalimits. Si el valor de algún campo de límite es '0' automáticamente se definirá como ilimitado.

Ahora configuraremos el proftp: Abre el fichero /etc/proftpd.conf

vi /etc/proftpd/proftpd.conf

Sitúate al final y añade todas estas líneas y sálvalo:

 DefaultRoot ~


# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users* groups*


# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  ftp@localhost proftpd password


# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID        500

# create a user's home directory on demand if it doesn't exist
SQLHomedirOnDemand on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off
RequireValidShell off

Reinicia el servidor ftp:

 /etc/init.d/proftpd restart

Si queremos poner un mensaje con el espacio disponible/usado por cada usuario añadir las siguientes líneas en el proftpd. (enviadas por Martin Mrajca)

SQLNamedQuery gettally  SELECT "ROUND((bytes_in_used/1048576),2) FROM ftpquotatallies WHERE name='%u'"

SQLNamedQuery getlimit  SELECT "ROUND((bytes_in_avail/1048576),2) FROM ftpquotalimits WHERE name='%u'"

SQLNamedQuery getfree   SELECT "ROUND(((ftpquotalimits.bytes_in_avail-ftpquotatallies.bytes_in_used)/1048576),2) FROM ftpquotalimits,ftpquotatallies WHERE ftpquotalimits.name = '%u' AND ftpquotatallies.name = '%u'"

SQLShowInfo   LIST    "226" "Used %{gettally}MB from %{getlimit}MB. You have %{getfree}MB available space."

Reiniciar el servidor porftpd de nuevo

 /etc/init.d/proftpd restart

Ahora vamos a crear un usuario de prueba:

$: mysql -u root -p
mysql > USE ftp;

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001, 'ftpuser');

INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('exampleuser', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);

INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'exampleuser', 'secret', 2001, 2001, '/home/www.example.com', '/sbin/nologin', 0, '', '');
quit;

Ahora vamos a crear un usuario de prueba:

Hemos creado un usuario exampleuser para probar el servicio. Agreguemos ahora una cuota para ese usuario de 15Mb:

Si queremos cambiarle la cuota tenemos que entrar a la base de datos y ejecutar :

update ftpquotalimits set bytes_in_avail=0 where name like 'ftpottn'

Hemos creado un usuario llamado ‘exampleuser’, con contraseña ’secret’, al que previamente le hemos asignado una cuota de disco y capacidad para subir y bajar archivos. Esto luego lo podremos hacer con cualquier gestor de base de datos como phpmyadmin, mysqladmin o mysql administrator

Si estamos actualizando desde una versión anterior hay que cambiar la directiva SQLHomedirOnDemand on hay que cambiarla por CreateHome on

http://www.cyberciti.biz/tips/linux-installing-configuring-proftpd-ftp-server.html

proftpd + ssl/tls

Para poder configurar el soporte de transferencia encriptada de datos y autenticación en un servidor ftp, en este caso proftpd, es necesario compilar proftpd con el modulo mod_tls o en su defecto si utilizas una version superior a la 1.2.8, el soporte ya viene compilado y listo para utilizar, basta activar el soporte en el archivo de configuración (/etc/proftpd.conf).

Estos son los pasos para habilitar este servicio de manera de que soporte:

  • encriptación de datos de control y datos en si.
  • acepte sólo clientes con soporte ssl/tls

Lo primero, generar los certificados con el comando (ingresar los datos que se solicitan): openssl req -new -x509 -nodes -out ftpd-rsa.pem -keyout ftpd-rsa-key.pem

<Note>Al generar el certificado una de las preguntas es Common name: Hay que poner el nombre del equipo, por ejemplo, webserver.midominio.net o en su defecto localhost</note>

Esto genera dos archivos ftpd-rsa.pem , ftpd-rsa-key.pem que copiamos en /etc/ssl/certs.

Ahora, modificaremos el archivo de configuración /etc/proftpd.conf para habilitar el soporte y agregaremo las siguientes lineas:

# soporte TLS
# habilitar el modulo TLS
TLSEngine on
# logs
TLSLog /var/log/ftpd/tls.log
# Versión del protocolo a autilizar.
TLSProtocol SSLv23
# Si sólo permitimos el acceso con SSL
TLSRequired on
# Dónde se encuentran los certificados.
TLSRSACertificateFile /etc/ssl/certs/ftpd-rsa.pem
TLSRSACertificateKeyFile /etc/ssl/certs/ftpd-rsa-key.pem
# certificados de los usuarios
TLSVerifyClient off
# Si solicitamos el certificado del cliente.
TLSOptions NoCertRequest 

Reiniciamos el servicio y probamos conectandonos con ftp-ssl o el filezilla

Para ver como van pasando los datos podemos usar tcpdump de la siguiente manera: tcpdump dst portrange 20-21 -qX

Podemos hacer esta prueba conectandonos desde clientes con/sin soporte ssl/tls y ver como pasan los datos e identificar algunos textos como USER..

Otra forma es la siguiente:

openssl genrsa 1024 >host.key 
openssl req -new -x509 -nodes -sha1 -days 365 -key host.key >host.cert 
cat host.cert host.key > host.pem 
chmod 0400 host.key host.pem 

Y modificar el fichero /etc/proftpd.conf

TLSEngine on 
TLSLog /var/log/proftpd/proftpd_ssl.log 
TLSProtocol TLSv1 
# Are clients required to use FTP over TLS when talking to this server? 
TLSRequired off 
# Server's certificate 
TLSRSACertificateFile /etc/proftpd/host.cert 
# Key to the server certificate 
TLSRSACertificateKeyFile /etc/proftpd/host.key 
# CA the server trusts 
TLSCACertificateFile /etc/proftpd/host.pem 
# Authenticate clients that want to use FTP over TLS? 
TLSVerifyClient off 

Debido a las últimas actualizaciones del servidor proftpd algunos de los comandos han sido sustituidos por otrs nuevos y por tanto hay que hacer los siguientes cambios para que todo funcione correctamente: añadir la línea siguiente al inicio del proftpd.conf

include /etc/proftpd/modules.conf
comentar la línea SQLAutenthicate users* groups*
añadir AuthOrder mod_sql.c

El archivo de configuracion resultante de todo es el siguiente:

#
# /etc/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes reload proftpd after modifications.
#
include /etc/proftpd/modules.conf

ServerName                      "SERVIDOR FTP"
ServerType                      standalone
DeferWelcome                    off
UseIPV6                         off

MultilineRFC2228                on
DefaultServer                   on
ShowSymlinks                    on

TimeoutNoTransfer               600
TimeoutStalled                  600
TimeoutIdle                     1200

DisplayLogin                    welcome.msg
DisplayFirstChdir               .message
ListOptions                     "-l"

DenyFilter                      \*.*/



# Port 21 is the standard FTP port.
Port                            21

# 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

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask                           022  022
# Normally, we want files to be overwriteable.
AllowOverwrite                  on

# Delay engine reduces impact of the so-called Timing Attack described in
# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
# It is on by default.
#DelayEngine                    off

# Enjaulamos a los usuarios
DefaultRoot ~

# Usar SSL para encriptar las comunicaciones
TLSEngine on

    # logs
   TLSLog /var/log/ftpd/tls.log

    # Versión del protocolo a autilizar.
    TLSProtocol SSLv23

    # Si sólo permitimos el acceso con SSL
    TLSRequired off

# Server's certificate
TLSRSACertificateFile /etc/ssl/certs/ftpd-rsa.pem
TLSRSACertificateKeyFile /etc/ssl/certs/ftpd-rsa-key.pem

    #si le pedimos certificados a los usuarios
    TLSVerifyClient off

    # Si solicitamos el certificado del cliente.
    TLSOptions NoCertRequest

AuthOrder mod_sql.c
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
#SQLAuthenticate         users* groups*


# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  ftp@localhost proftpd password


# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID        500

# create a user's home directory on demand if it doesn't exist
SQLHomedirOnDemand on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_ou$

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM $

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %$

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off
RequireValidShell off

Configuración FTP privado

Si hemos decidio esta opcion deberemos de crear las cuentas de usuario antes. Las cuentas se crean como un usuario cualquiera de linux, es decir:

# su
# adduser <usuario>         #ej: adduser pepito
# passwd <usuario>          #ej: passwd pepito => pepitopassword

Acontinuacion deberemos de editar el archivo /etc/passwd y modificar la linea que hace referente al usuario pepito:

 vim /etc/passwd

Al editar el fichero, en el final de este nos aparecera una linea como esta(siguiendo el ejemplo anterior):

pepito:x:1007:100::/home/pepito:/bin/bash

Deberemos de modificarlo para que quede de asi:

pepito:x:1007:100::/home/ftp:/bin/false

Es decir, le decimos que su carpeta personal es donde tenemos el ftp, y su shell es una shell falsa(/bin/false). El password como os fijais aparece con un x, esto quiere decir que el password esta en el archivo /etc/shadow con una encriptacion MD5(mucho mas seguro que si ponemos el pasword en texto plano).

Asi lo haremos con todos los usuarios que queramos añadir.

Una vez listo los usuarios, continuaremos por donde nos hemos quedado con la edicion del archivo  proftpd.conf:

<Directory /home/ftp/>      	#Le decimos que el directorio del ftp es /home/ftp y 				#acontinucacion le damos unas características
Umask 077 077
AllowOverwrite off
</Directory>

Si ademas queremos tener nuestra carpeta de subida deberemos de añadir, debajo de </Directory> lo siguiente:

<Directory /home/ftp/subir>  #nuestro directorio de subida se encontrara en /home/ftp/subir
Umask 077 077
AllowOverwrite on
<Limit READ WRITE STOR>  #El directorio tendra acceso de lectura, escritura y grabacion para todos(Allow All), en estos caso es muy recomendable
AllowAll #usar dentro del limit el order, denny y allow para que solo ciertos usuarios pueden tener este privilegio, igual que cuando aceptavamos o denegabamos permisos a ciertas ip's
</Limit>  
</Directory>

Configuracion FTP Privado y anonimo:

Para configurar el ftp de esta forma hemos de haber seguido todos los pasos del punto anterior. Una vez hecho esto deberemos de editar al final del fichero proftpd.conf unas nuevas lineas:

<Anonymous /home/ftp>
AccessGrantMsg	"mensage"
User		 ftp
Group		 nogroup
UserAlias		 anonymous ftp
RequireValidShell 	off
MaxClients		 <numero>
MaxClientsPerHost	 <numero>
MaxClientsPerUser	 <numero>
<Limit LOGIN>	#Cualquier persona podra loguearse con la cuenta anonima aunque le ayamos denegado el acceso arriba, ya que
AllowAll	#la cuenta anonima tiene unas caracteristicas muy peculiares, si queremos que el efecto sea el mismo en la cuenta
</Limit>	#anonima tambien, deberemos de denegar aqui a las ip's que no queramos que puedan ser logueadas con anonymous

<Directory /home/ftp/>	 #Le decimos que el directorio del ftp es /home/ftp y acontinucacion le damos unas caracteristicas
Umask  077 077
 
AllowOverwrite off
</Directory>

<Directory /home/ftp/subir>	 #nuestro directorio de subida se encontrara en /home/ftp/subir
Umask	 077 077
AllowOverwrite on 
<Limit READ WRITE STOR>	#El directorio tendra acceso de lectura, escritura y grabación para todos(Allow All), en estos caso es muy recomendable
AllowAll	#usar dentro del limit el order, denny y allow para que solo ciertos usuarios pueden tener este privilegio
</Limit>
</Directory> 
</Anonymous>

Como me imagino que os habreis dado cuenta, la cuenta anónima es muy especial, ya que muchas de las características de esta cuenta, hay que ponerlas dentro de la etiqueta <Anonymous> </Anonymous>.

FTP unicamente anonimo

Deberemos de haber seguido todos los pasos anteriores pero omitiendo el punto 3. Acontinuación deberemos de usar una etiqueta limit, arriba de la etiqueta anonymous:

<Limit LOGIN>
DenyAll
</Limit>

Con esta etiqueta denegaremos cualquier intento de loguearse de cualquier usuario que este creado en /etc/passwd. Cuidado que no lleve a confusiones, en la etiqueta pone que deniaga a todos los usuarios la posibilidades de loguearse, pero el motivo de que la cuenta anonymous si que pueda, es debido a que dentro de esta, tenemos la etiqueta <Limit LOGIN> AllowAll </Limit>, ya que la cuenta anonima es independiente

Opciones del Servidor

  • ServerName “Nombre_del_servidor_ftp” #Pondremos el que queramos, Servidor FTP es un ejemplo
  • ServerType standalone/inet #Nosotros usaremos standalone en vez de inetd
  • DeferWelcome on/off # off ya que no queremos mostrar ningun mensage de entrada
  • ServerIdent on/off “nombre” #Usaremos on “nombre”
  • MultilineRFC2228 on #on para que el servidor ftp sea compatible con todos los clientes ftp
  • DefaultServer onf #Usaremos on, toma las opciones defualt de un servidor ftp
  • ShowSymlinks on #on, para ver los links, si el link esta fuera de nuestro home no tendremos acceso a él
  • AllowOverwrite on/ #Usaremos on, permite sobreescribir ficheros existentes
  • TimeoutNoTransfer 600 #tiempo máximo en sg que puede estar un cliente en el ftp, sin transferencia de información
  • TimeoutStalled 90 #tiempo máximo en sg que puede estar cliente-servidor sin recibir información de una transferencia
  • TimeoutIdle 200 #tiempo máximo en sg que puedes estar un usuario sin hacer nada
  • DenyFilter \*.*/ #Es un filtro de proteccion para el ProFTPd
  • Port 21 #Puerto de escucha del servidor, usaremos el 21, ya que es el predeterminado
  • MaxInstances 30 #numero de conexiones al ftp que se pueden hacer a la vez(cuidado con los DOS)
  • AccessGrantMsg “mensage” #Mesanje a mostrar si la conexion del usuario ha sido correcta
  • AccessDenyMsg “mensage” #Mensaje a mostrar si la conexion del usuario ha sido incorrecta
  • LogFormat default “%h %l %u %t \”%r\“ %s %b” #Con LogFormat [nombre_formato] “formato”, el nombre_formato se lo ponemos nosotros
  • LogFormat auth “%v [%P] %h %t \”%r\“ %s” #para ser usado despues con ExtendedLog
  • LogFormat write “%h %l %u %t \”%r\“ %s %b”
  • TransferLog /var/log/proftpd/transfer #Loguea las transferencias que se realice con el servidor
  • ExtendedLog /var/log/proftpd.down_up_log WRITE,READ write #ExtendedLog es para loguear con una serie de caracteristicas
  • ExtendedLog /var/log/proftpd.auth_log AUTH auth #ExtendedLog [lugar_donde_se_guarda_el_log] [Que_logear] [nombre_formato]
  • ExtendedLog /var/log/proftpd.paranoid_log ALL default #WRITE(escritura),READ(lectura),AUTH(autentificacion, logging) y ALL(todo)
  • DefaultRoot # hacemos chroot en el home de nuestro usuario, es decir, no puede subir mas directorios
  • AuthUserFile “/etc/passwd” #Le decimos donde tenemos el archuvo de los usuarios
  • AuthGroupFile “/etc/group” #Le decimos donde tenemos el archivo de los grupos
  • MaxClients <numero> “mensage” #Maximo numero de clientes que pueden estar a la vez en en servidor ej: MaxClients 6 “Max %m usuarios”
  • MaxClientsPerHost <numero> “mensage” #Maximo numero de clientes por Host(ip) ej: MaxClientsPerHost “Solo 2 conexiones por HOST”
  • MaxClientsPerUser <numero> “mensage” #Maximo numero de clientes por usuario ej: MaxClientsPerUser 2 “Solo 2 conexiones por usuario” #El mensage aparece cuando superamos el numero permitido
  • RequireValidShell off #los usuarios no requieren, ni deben, de tener una shell “autentica”

Denegar acceso a ciertas ip

<Limit LOGIN>	 #Limitamos a quienes pueden intentar loguearse en el servidor
Order deny,allow           #en esta etiqueta le decimos el orden de lectura de la informacion, 1ºleere a quien denegamos y 2º a quien aceptamos
Deny from .pepito.com, xxx.xxx.xxx.xxx #La etiqueta Deny marca los host que queremos rechazar separados por una coma
 Allow from all #La etiqueta Allow es de quien vamos aceptar, en este caso all que representa a todas las ip's
</Limit> 

Mejoras de apariencia en el archivo proftpd.conf:

Si os habeis fijado en las opciones donde pone “mensage” cuando pongo ejemplos pongo en algunos sitios %X siendo X una letra. Esto son opciones del FTP. Entre muchas de las posibilidades que tenemos voy a destacar las siguientes:

  • %m: numero de usuarios conectados al ftp
  • %u: nombre del usuario que se ha logueado
  • %t: fecha/hora a la que se logueo el usuario

Carga de ProFTPd en el inicio y arrancar el demonio

Para que el ftp se cargue en el arranque de nuestra maquina deberemos de seguir los siguientes pasos:

Si hemos compilado el proftpd deberemos de introducir el script de carga, ya sea el /etc/init.d/proftpd o en /usr/local/sbin/proftpd donde corresponda, dependiendo de nuestra distribucion. Desde debian deberemos de poner lo siguiente:

 ln -s /etc/init.d/proftpd /etc/rcX.d/S20proftpd

Siendo X nuetro runlevel, si tenemos dudas de cual es nuestro runlevel, poner lo siguiente:

 cat /etc/inittab | grep id

El resultado sera algo parecido a esto(siendo la X el numero de nuestro runlevel): id:X:initdefault:

Para arrancar el servidor sin reiniciar deberemos de escribir lo siguiente:

 /etc/init.d/proftpd start

Para parar el servidor deberemos de introducir lo siguiente:

 /etc/init.d/proftpd stop

Para restaurar y volver a cargar una nueva coniguracion en proftpd.conf debremos de poner lo siguiente:

 /etc/init.d/proftpd restart

Como administrar el ftp:

Para ver que usuarios estan conectado, que esta haciendo en este momento y desde cuando estan conectados sobrara con poner cualquiera de las siguientes ordenes: Para ver la versión

proftpd -v 

para ver los módulos cargados

proftpd -l 

para comprobar la sintaxis

proftpd -td5 

# ftpwho # ftptop

Cada una tiene una característica, que dependiendo de gusto, le gustara mas una u otra. ftpwho es mas cuando queremos ver en un instante de tiempo, mientras que ftptop es mas un monitor que te informa en tiempo real de los cambios en tu servidor ftp, por lo que este es recomendable usarlo en una terminal aparte.

Para cerrar el servidor y no permitir que ningún usuario puede acceder al servidor  y mostrar un mensaje con el motivo podemos usar la herramienta ftpshut(para mas informacion man ftpshut):

su
ftpshut now "El servidor se encuentra cerrado por motivos técnicos"

Para expulsar a un usuario de nuestro servidor, sobrara con mirar el numero de proceso en el que esta y matar el proceso:

 ps aux | grep proftpd

Un ejemplo seria el siguiente

 ps aux | grep proftpd
pepito   4299   0.0  0.9  4432 2388 ?       S     23:07   0:00 [proftpd]
fulanito 4319  0.0  0.9  5432 3563 ?        S    23:57   0:00 [proftpd]
tontito   4681  0.0  0.9  6124 4341 ?        S    01:16   0:00 [proftpd]

Obtendremos una lista de todos los procesos(usuarios) que estan conectados y a su derecha su PID(en este ejemplo vamos a tirar a pepito):

 kill -9 4299 

Para saber mas información acuérdate de usar los log's del servidor que están en /var/log/.

Información extra:

Existe un gestor gráfico para el proftpd

apt-get install gproftpd

Manual completisimo de proftpf en ingles: aki http://proftpd.linux.co.uk/localsite/Userguide/linked/userguide.html Indice de todos los comandos a utilizar con su explicacion del proftpd: aki http://proftpd.linux.co.uk/localsite/Userguide/linked/part-reference.html

Referencias