Servidor de archivos FTP en Linux

FTP (File Transfer Protocol, Protocolo de Transferencia de Archivos) es un protocolo de red que permite transferir archivos de forma rápida y sencilla entre ordenadores. Se utiliza para compartir archivos y directorios, pudiendo establecer autentificación de usuarios (con nombre y contraseña) y permisos sobre los elementos compartidos. Los servidores FTP se usan principalmente para tres cosas:

  1. subir las páginas web al hosting.
  2. como servidor de archivos de libre acceso (denominado FTP anónimo). Los FTP anónimos son servidores FTP a los que puede conectarse cualquiera empleando como usuario anonymous y como password cualquier dirección de correo (servirá cualquier secuencia de caracteres que incluya "@").
  3. hacer backup (copia de seguridad).

Este protocolo se implementa con arquitectura cliente-servidor, por lo que necesita:

  • un servidor FTP que se esté ejecutando en la máquina remota, y que por defecto, estará escuchando en los puertos 20 y 21 TCP (el puerto 20 se utiliza para la transmisión de datos y el puerto 21 para los comandos de control).
  • un cliente FTP para conectarnos al servidor.

Un problema del protocolo FTP es que no cifra los datos, por lo que es vulnerable a la captura de la información transmitida, especialmente las contraseñas de acceso. Si necesitamos conexiones FTP seguras disponemos de servidores FTP encriptados, como SFTP (FTP sobre SSH) o FTPS (FTP sobre SSL).

  Que gasolina usar 91 o 95 octanos

En Linux hay muchos servidores FTP, vamos a ver un par de ellos:

  • VS-FTPd: ligero y fácil de configurar, es considerado el servidor FTP más rápido y seguro.
  • ProFTPd: muy configurable y bien documentado.

Equivalencias en Windows: MS-FTP.

Servidor FTP VS-FTPd

VS-FTPd (Very Secure FTP Daemon, vsftpd.beasts.org, paquete vsftpd), ligero y fácil de configurar, es considerado el servidor FTP más rápido y seguro.

El archivo de configuración de VS-FTPd es /etc/vsftpd.conf. Veamos algunas de sus principales directivas, por ejemplo, para el caso de un servidor web que da hosting a varios sitios web:

  • no permitir acceso anónimo al servidor:
    anonymous_enable=NO
  • permitimos acceso a los usuarios locales (excepto los que figuren en /etc/ftpusers):
    local_enable=YES
  • damos permisos de escritura a los usuarios:
    write_enable=YES
  • impedimos a los usuarios locales salir de su directorio personal:
    chroot_local_user=YES

Grabamos los cambios y reiniciamos el demonio vsftpd:

# /etc/init.d/vsftpd restart

Por último, tenemos que crear y securizar los usuarios que usarán el servidor FTP para que tengan los mínimos permisos. En nuestro ejemplo los usuarios son los webmaster de los sitios web alojados:

  • crearemos el grupo ftp al cual asociaremos los usuarios del servidor FTP:
    # groupadd ftp
  • creamos los usuarios del servidor FTP (el shell /bin/false debe existir y figurar en /etc/shells):
    # useradd -g ftp -d /var/www/domain1 -c "Webmaster domain1"
      -s /bin/false webmaster1
  • y asignamos password a los usuarios:
    # passwd webmaster1

Probaremos a conectarnos desde un cliente FTP (por ejemplo con un navegador, con ftp://<IP_del_servidor>). Introduciremos el usuario y su contraseña y comprobaremos que nos redirige al directorio de su web, que podemos subir y bajar archivos al servidor y que no podemos subir de nivel en el árbol de directorios.

  Resetear un iPhone

Servidor FTP ProFTPd

ProFTPd (proftpd.org, paquete proftpd), es uno de los servidores más utilizados en Linux, es muy configurable y está bien documentado.

Durante la instalación nos preguntará si queremos ejecutar ProFTPd como demonio independiente o mediante inetd (escogeremos standalone) y se creará el usuario ftp, con directorio personal /home/ftp, shell /bin/false y sin contraseña. El directorio /home/ftp sólo contiene el archivo welcome.msg, cuyo contenido se muestra al conectarse.

El archivo de configuración de ProFTPd es /etc/proftpd/proftpd.conf. Veamos algunas de sus principales directivas:

  • directorio al que entrará el usuario (por defecto es su directorio personal "~"):
    DefaultChdir ~
  • directorio donde se encierra el servidor, de modo que no se pueda acceder a directorios superiores. Esto equivale a chrootear el server. Nunca debemos poner el directorio raíz ("/"), ya que los usuarios tendrán acceso a todo el sistema.
    DefaultRoot ~
  • mostrar o no los links (off/on).
    ShowSymlinks off
  • si queremos aplicar directivas sólo a un directorio, las pondremos dentro de un bloque Directory:
    <Directory [directorio]>
        directivas...
    </Directory>
  • para indicarle a ProFTPd que un directorio debe ser tratado como un directorio de acceso anónimo y aplicarle directivas específicas, usaremos:
    <Anonymous [directorio]>
        directivas...
    </Anonymous>
  • podemos especificar quién puede hacer qué:
    <Limit [LOGIN] [READ] [WRITE] [STOR] [ALL]>
        quién...
    </Limit>
  • para limitar el acceso usaremos:
    <Limit LOGIN>
        quién...
    </Limit>

Grabamos los cambios y reiniciamos el demonio proftpd:

# /etc/init.d/proftpd restart

Para probar el servidor nos conectaremos con un cliente FTP (ftp://<IP_del_servidor>), nos loguearemos con usuario y contraseña y comprobaremos que accedemos a la carpeta personal, que podemos subir y bajar archivos al servidor y que no podemos escalar en el árbol de directorios.

  Asistente todo en uno para descargar todos los firmware y saber si mi iPhone, iPad o iPod se pueden desbloquear

Comandos de ProFTPd

ProFTPd proporciona varios comandos útiles.

  • El comando ftpwho nos permite ver qué usuarios están conectados en un momento dado, qué están haciendo y desde cuándo están conectados:
    $ ftpwho
    standalone FTP daemon [2178], up for 2 hrs 22 min
        2420 francis [2m 36s] 2m 01s idle
    Service class           - 1 user
  • El comando ftptop monitoriza ProFTPd en tiempo real:
    $ ftptop
  • Para expulsar a un usuario del servidor FTP, miraremos el ID de su proceso con cualquiera de los dos comandos anteriores (ftpwho o ftptop) y mataremos el proceso. Por ejemplo, para tirar al usuario francis, cuyo ID es 2420, haremos:
    # kill -9 2420

Frontales gráficos para configurar ProFTPd

  • GProFTPd (gadmintools.org, paquete gproftpd): frontal para configurar ProFTPd escrito en GTK.