Instalar y configurar un servidor FTP en GNU/Linux es sumamente sencillo, rápido y fiable. Es posible que en algún momento de vuestra vida, hayáis necesitado instalar un servidor de FTP en vuestra casa ó en una empresa para que los trabajadores puedan subir y descargar ficheros necesarios para el trabajo del día a día.
En este tutorial, voy a enseñaros cómo instalar el servidor de FTP ProFTPD en GNU/Linux y cómo realizar una configuración básica con usuarios anónimos y usuarios con cuentas en el sistema.
Seguid leyendo si queréis aprender a configurar vuestro primer servidor de FTP...
¿QUÉ ES UN SERVIDOR FTP?
El Protocolo de transferencia de archivos (en inglés File Transfer Protocol o FTP) 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 él o para enviarle archivos, independientemente del sistema operativo utilizado en cada equipo.
El servicio FTP es ofrecido por la capa de aplicación del modelo de capas de red TCP/IP al usuario, utilizando normalmente el puerto de red 20 y el 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 este tráfico, acceder al servidor y/o apropiarse de los archivos transferidos.
Para solucionar este problema son de gran utilidad aplicaciones como FTP sobre TLS ño las recientes SCP y SFTP, incluidas en el paquete SSH, que permiten transferir archivos pero cifrando todo el tráfico.
El protocolo FTP permite transferir ficheros de forma rápida y sencilla
1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL
- Un equipo con GNU/Linux
- Conexión a Internet (por si necesitamos instalar algún programa)
- Cliente FTP
2.- INSTALAR PROFTPD
Para instalar el servidor de FTP es tan sencillo como lanzar el siguiente comando. Debes estar seguro de que tienes conexión a Internet y los repositorios bien configurados:
raul@ns1:~$ sudo apt-get install proftpd-basic
Es necesario realizar las operaciones con usuario root o con sudo.
3.- CONFIGURACIÓN BÁSICA (USUARIOS DE SISTEMA)
ProFTPD instala un fichero de configuración por defecto. Lo que tenemos que hacer es guardar una copia de seguridad del fichero proftpd.conf y crear nuestro propio fichero proftpd.conf. Es posible que tengamos que revisar algo del fichero de ejemplo, por eso es útil hacer una copia de seguridad. Para crear un respaldo del fichero, basta con cambiarle el nombre de la siguiente forma:
raul@ns1:~$ sudo mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bck
Ahora crearemos nuestro propio fichero con cualquier editor de texto y lo guardaremos como proftpd.conf ubicado en /etc/proftpd/ con la siguiente configuración básica para que arranque el servidor:
ServerName "Debian"
ServerType standalone
DefaultServer on
UseIPv6 off
Para aplicar los cambios, es necesario reiniciar el servicio de ProFTPD con el siguiente comando:
raul@ns1:~$ sudo /etc/init.d/proftpd restart
Ahora, es momento de probar el acceso a nuestro servidor utilizando una cuenta de usuario existente en el sistema. En este ejemplo, utilizaré la cuenta del usuario raul. Las capturas de pantalla se corresponden al cliente gráfico Filezilla. Necesitaremos los siguientes datos: ip del servidor (172.26.1.133), nombre de usuario (raul) y contraseña (contraseña):
Acceso con usuario de sistema sin DefaultRoot
En la captura anterior, se puede ver que el acceso el servidor funciona correctamente, pero .... ¿veis algún problema? Correcto. El problema es que el usuario tiene acceso a todo el sistema de ficheros, y normalmente esto no interesa.
Sistema de ficheros raíz
Para solventar este problema, es necesario añadir la siguiente línea en el fichero de configuración y posteriormente reiniciar el servidor para que se apliquen los cambios:
DefaultRoot ~
Acceso con DefaultRoot
4.- CONFIGURACIÓN BÁSICA (USUARIO ANONYMOUS)
El directorio raíz del servidor ProFTPD se encuentra ubicado en /srv/ftp (puede cambiar en función de la distribución de GNU/Linux). Un usuario anónimo tendrá acceso de solo lectura en dicho directorio, pero podrá subir ficheros en un subdirectorio que crearemos llamado uploads. Para ello, crearemos el directorio uploads y le daremos los permisos correctos del usuario y grupo de ProFTPD:
raul@ns1:~$ sudo mkdir /srv/ftp/upload
raul@ns1:~$ sudo chown ftp.nogroup /srv/ftp/upload
Para conseguir el funcionamiento descrito en el párrafo anterior, deberemos añadir la siguiente configuración, donde básicamente tenemos 2 directorios con 2 permisos diferentes (el raíz y uploads). En la raíz no podrá escribir, pero en uploads sí podrá. El usuario anonymous heredará los permisos a nivel de sistema de ficheros del usuario ftp y del grupo nogroup. Otra opción muy importante es RequireValidShell con valor no/off. Con ese parámetro se le indica a ProFTPD que no es necesario que anonymous tenga una cuenta creada en el sistema.
<Anonymous ~ftp>
User ftp
Group nogroup
UserAlias anonymous ftp
RequireValidShell off
<Directory *>
<Limit WRITE>
Deny All
</Limit>
</Directory>
<Directory upload>
<Limit STOR,MKD>
Allow all
</Limit>
</Directory>
</Anonymous>
Ahora, si probamos a acceder con el usuario anonymous y crear un directorio llamado "Nuevo directorio" en la raíz, veremos que efectivamente da error. Si intentamos subir un fichero llamado "vv" también dará error. Sin embargo, dentro del directorio /uploads podremos crear tanto directorios como subir ficheros:
Acceso con usuario anonymous
Los límites de parámetros, abarcan los siguientes comandos:
- ALL
Abarca: todos los comandos de FTP (pero no LOGIN) - DIRS
Abarca: CDUP, CWD, LIST, MDTM, MLSD, MLST, NLST, PWD, RNFR, STAT, XCUP, XCWD, XPWD - LOGIN
Abarca: login de clientes - READ
Abarca: RETR, SIZE - WRITE
Abarca: APPE, DELE, MKD, RMD, RNTO, STOR, STOU, XMKD, XRMD
5.- CONFIGURACIÓN FINAL
A continuación pongo el contenido completo del fichero proftpd.conf descrito en este tutorial.
ServerName "Debian"
ServerType standalone
DefaultServer on
UseIPv6 off
DefaultRoot ~
<Anonymous ~ftp>
User ftp
Group nogroup
UserAlias anonymous ftp
RequireValidShell off
<Directory *>
<Limit WRITE>
Deny All
</Limit>
</Directory>
<Directory upload>
<Limit STOR,MKD>
Allow all
</Limit>
</Directory>
</Anonymous>
ENJOY!