Servidor de archivos FTP

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).

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 user1 -s /bin/false user1
  • y asignamos password a los usuarios:
    # passwd user1

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.

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]>
        quien...
    </Limit>
  • para limitar el acceso usaremos:
    <Limit LOGIN>
        quien...
    </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.

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.

    GProFTPd

Artículos en la categoría "Servidores (software)"

  1. Monitorizar servidores con Nagios
  2. Monitorizar routers SNMP con MRTG
  3. Administración de máquinas Linux con Webmin
  4. Shell remoto con Telnet
  5. Servidor DNS Bind
  6. Servidor de IPs dinámicas DHCP
  7. Servidor de hora NTP
  8. Servidor proxy Squid
  9. Servidor de correo electrónico
  10. Servidor de terminales LTSP
  11. Servidor web Apache
  12. Soporte para PHP en Apache
  13. Soporte para CGI en Apache
  14. Analizador de logs de Apache
  15. Servidor de base de datos MySQL
  16. Servidor web Lighttpd
  17. Whois: Quién es el propietario de un dominio
  18. Servidor de archivos FTP
  19. Compartir archivos en Linux: NFS
  20. Compartir archivos en Windows: Samba
  21. Control de versiones: CVS y Subversion
  22. Servidor de streaming por Internet
  23. Servidor de streaming en red local

6 Comments:

  1. estupendo tutorial. Gracias

  2. Hola, quisiera saber como puedo listar varios directorios que se encuentran en discos diferents, probe hacer un enlace y no funciono, si me pudieras decir o indicar como agregar varios directorios estaria muy agradecido.

  3. hola como estan!!!
    alquien me podria decir como hacer que un servidor aqui en mi empresa fuera un ftp servidor y que las maquinas que estan en la red puedan copiar del servidor archivos a su maquina ???
    el sistema operativo es linux red hat

    gracias

  4. Hola amigos quiero ayuda para una pratica, tengo que crear un servidor de archivos y no se que SO utilizar para ello por favor alguno que me pueda ayudar para solucionar esto, de ante mano agradezco la ayuda.

    estas son caracteristicas del pc que tengo

    modelo: OptiPlex GX240
    Procesador: Intel(R) Pentium(R) 4 CPU 1.50GHz
    Velocidad reloj: 1500 MHz
    Fabricante del procesador: Intel
    Fabricante de la BIOS: Dell Computer Corporation
    Versión de la BIOS: A01
    Número de serie de la BIOS: D27Y111
    Fecha de instalación de la BIOS: 08/27/2001
    Fabricante de la placa base: Dell Computer Corporation
    Modelo de placa base: OptiPlex GX240
    Ranura de memoria 0: DIMM_A
    Capacidad: 256 Mb

    adaptador de red

    Adaptador de red 1: Controlador Fast Ethernet integrado 3Com 3C920 (compatible 3C905C-TX) – Minipuerto del administrador de paquetes
    Tipo de adaptador: Ethernet

    Almacenamiento
    Disco físico 1: WDC WD2500BB-98GUA0
    Capacidad: 232.89 Gb

    otros
    Teclado: Mejorado (clave 101 o clave 102)
    Tarjeta de sonido 1: Controlador de audio de Intel(r) 82801BA/BAM AC’97
    Puntero 1: Mouse compatible PS/2
    Interfaz USB 1: Controladora de host universal USB Intel(R) 82801BA/BAM – 2442
    Interfaz USB 2: Controladora de host universal USB Intel (R) 82801BA/BAM – 2444

    [email protected]

  5. Francisco Rodriguez

    Perdona pero creo que los enlaces están cruzados, el de proftpd apunta a vs-ftpd y viceversa.

    Gracias por el post, un saludo.

  6. Thanks, @Francisco Rodriguez. Update!