Servidor FTP

El protocolo de transferencia de archivos (File Transfer Protocol o FTP en ingles) es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol), basado en la arquitectura cliente-servidor. Desde un equipo cliente se puede conectar a un servidor para descargar archivos desde el o para enviarle archivos, independientemente del sistema operativo utilizado en cada equipo.

El servidor FTP es ofrecido por la capa de aplicación del modelos de capas de red TCP/IP al usuario, utilizando normalmente el puerto de red 20 y 21. Un problema básico de FTP es que está pensado para ofrecer la máxima velocidad en la conexión, pero no la máxima seguridad, ya que todo el intercambio de información, desde el login y password del usuario en el servidor hasta la transferencia de cualquier archivo, se realiza en texto plano sin ningún tipo de cifrado, con lo que un posible atacante puede capturar trafico, acceder al servidor y/o apropiearse de los archivos transferidos.

Para solucionar este problema son de grán utilidad aplicaciones como FTP sobre TLS o las SCP y SFTP, incluidas en el paquete SSH, que permiten transferir archivos pero cifrando todo el tráfico.


Para poder subir y bajar archivos hacia nuestro servidor necesitamos instalar un software que sea capaz de ofrecernos este servicio.

A continuación vamos a instalar y configurar el software Proftpd (pueden usar otros si lo prefieren).

sudo apt-get install proftpd-core

Durante la instalación veremos una pantalla como esta:

Seleccionamos la opción independiente para que nos haga funcionar el servidor FTP como servidor independiente.

Una vez instalado vamos a añadir una línea al archivo de configuración de proftpd.conf con la que haremos que cuando un usuario se conecte a nuestro servidor con una cuenta propia no pueda navegar por más directorios que los suyos propios. Esto último no es exclusivamente necesario pero así nos aseguramos de que nadie nos tocará nada en el disco duro si no lo permitimos.

Editamos el archivo proftpd.conf

sudo nano /etc/proftpd/proftpd.conf

y buscamos cerca del principio del archivo la linea como la siguiente:

# DefaultRoot ~

Debemos descomentarla, quitando el signo "#" al principio. Una vez hagamos esto guardamos el archivo de configuración y salimos del editor nano pulsando la tecla F2, después la Y y luego Enter.

Ahora solo nos queda reiniciar el servidor Proftpd y empezar a subir y bajar archivos desde donde queramos.

sudo /etc/init.d/proftpd restart

Si accedemos a nuestra cuenta FTP debemos teclear algo como lo siguiente:

ftp://localhost/

cambiando localhost por la ip del servidor y esto debería solicitar el usuario y contraseña, le indicamos la de nuestro sistema. Con nuestro usuario podremos navegar por nuestro directorio personal exclusivamente y tendremos permisos suficientes para hacer lo que nos venga en gana en nuestro directorio estemos donde estemos.

Usuarios Virtuales

Por defecto el sistema pedirá usuario y contraseña que exista en el sistema para acceder al directorio, si deseamos crear otros usuarios adicionales que no sean usuarios del sistema debemos hacer lo siguiente:

Al archivo de configuración de ProFTPD debemos tener disponibles (sin #) las siguientes líneas:

sudo nano /etc/proftpd/proftpd.conf

Añadir o dejar disponibles:

Include /etc/proftpd/modules.conf

DefaultRoot ~

RequireValidShell off

AuthUserFile /etc/proftpd/ftpd.passwd

DefaultRoot ~ ya lo teníamos habilitado, RequireValidShell off se debe habilitar ya que el usuario no existe realmente en el sistema y por tanto no tiene shell disponible y la línea AuthUserFile /etc/proftpd/ftpd.passwd debe ser añadida ya que ahi el sistema encontrará a este usuario virtual.

Creación de Usuarios Virtuales

La carpeta principal de FTP es /srv/ftp, por este motivo, la usaremos para crear los directorios de nuestros usuarios virtuales, ya que estos no poseen un directorio home como los usuarios reales del sistema. Crearemos los usuarios virtuales Alfa y Beta por lo que les crearemos sus directorios.

sudo mkdir /srv/alfa /srv/beta

Modificaremos los usuarios, grupo y permisos de estos directorios.

sudo chown ftp.nogroup /srv/alfa /srv/beta

sudo chmod 777 /srv/alfa /srv/beta

Crearemos el archivo de usuarios indicados en la sección ftpvirtuales, para ir añadiendo los usuarios virtuales que creemos.

sudo touch /etc/proftpd/ftpd.passwd

Una vez configurado todo, procedemos a crear a los 2 usuarios virtuales, debemos asignarles un \textbf{UID} y \textbf{GID} que no exista en el sistema, se pueden ver los asignados en /etc/passwd; tambien hay que indicarle el $HOME del usuario y que la shell a utilizar sea /bin/false.

sudo ftpasswd --passwd --name=alfa --uid=1200 --gid=1200 --home=/srv/alfa --shell=/bin/false

sudo ftpasswd --passwd --name=beta --uid=1201 --gid=1201 --home=/srv/beta --shell=/bin/false

Al crear los usuarios se les pedirá asignar una contraseña de acceso.

Operaciones sobre Usuarios Virtuales

Bloquear y Desbloquear al usuario alfa

sudo ftpasswd --passwd --name=alfa --lock

sudo ftpasswd --passwd --name=alfa --unlock

Borrar al usuario alfa

sudo ftpasswd --passwd --name=alfa --delete-user

Cambiar contraseña al usuario alfa

sudo ftpasswd --passwd --name=alfa --change-password