Protocolo de transferencia de archivos (FTP)
El Protocolo de transferencia de archivos o FTP por sus siglas en inglés File Transfer Protocol es un protocolo de comunicación estándar utilizado para la transferencia de archivos informáticos desde un servidor a un cliente en una red informática. FTP se basa en una arquitectura de modelo cliente-servidor que utiliza conexiones de datos y control separadas entre el cliente y el servidor. Los usuarios de FTP pueden autenticarse con un protocolo de inicio de sesión de texto simple, normalmente en forma de nombre de usuario y contraseña, pero pueden conectarse de forma anónima si el servidor está configurado para permitirlo. Para una transmisión segura que proteja el nombre de usuario y la contraseña, y cifre el contenido, el FTP a menudo se asegura con SSL/TLS (FTPS) o se reemplaza con el Protocolo de transferencia de archivos SSH (SFTP).
Las primeras aplicaciones de cliente FTP fueron programas de línea de comandos desarrollados antes de que los sistemas operativos tuvieran interfaces gráficas de usuario y todavía se envían con la mayoría de los sistemas operativos Windows, Unix y Linux. Desde entonces, se han desarrollado muchos clientes FTP y utilidades de automatización para equipos de escritorio, servidores, dispositivos móviles y hardware, y FTP se ha incorporado a aplicaciones de productividad, como editores de HTML.
En enero de 2021, se deshabilitó la compatibilidad con el protocolo FTP en Google Chrome 88 y se deshabilitó en Firefox 88.0. En julio de 2021, Firefox 90 eliminó FTP por completo y Google hizo lo mismo en octubre de 2021, eliminando FTP por completo en Google Chrome 95.
Historia de los servidores FTP
La especificación original para el Protocolo de transferencia de archivos fue escrita por Abhay Bhushan y publicada como RFC 114 el 16 de abril de 1971. Hasta 1980, FTP se ejecutó en NCP, el predecesor de TCP/IP. Posteriormente, el protocolo fue reemplazado por una versión TCP/IP, RFC 765 (junio de 1980) y RFC 959 (octubre de 1985), la especificación actual. Varios estándares propuestos modifican el RFC 959, por ejemplo, el RFC 1579 (febrero de 1994) habilita FTP apto para firewall (modo pasivo), el RFC 2228 (junio de 1997) propone extensiones de seguridad, el RFC 2428 (septiembre de 1998) agrega soporte para IPv6 y define un nuevo tipo de modo pasivo.
Descripción general del protocolo
Comunicación y transferencia de datos
FTP puede ejecutarse en modo activo o pasivo, lo que determina cómo se establece la conexión de datos. (Este sentido de "modo" es diferente del comando MODE en el protocolo FTP.
- En modo activo, el cliente comienza a escuchar las conexiones de datos entrantes del servidor en el puerto M. Envía el comando FTP PORT M para informar al servidor en qué puerto está escuchando. El servidor luego inicia un canal de datos al cliente desde su puerto 20, el puerto de datos del servidor FTP.
- En situaciones en las que el cliente está detrás de un cortafuegos y no puede aceptar conexiones TCP entrantes, se puede utilizar el modo pasivo. En este modo, el cliente usa la conexión de control para enviar un comando PASV al servidor y luego recibe una dirección IP del servidor y un número de puerto del servidor del servidor, que luego el cliente usa para abrir una conexión de datos desde un puerto de cliente arbitrario al servidor. Dirección IP del servidor y número de puerto del servidor recibidos.
Ambos modos se actualizaron en septiembre de 1998 para admitir IPv6. Se introdujeron más cambios en el modo pasivo en ese momento, actualizándolo al modo pasivo extendido.
El servidor responde a través de la conexión de control con códigos de estado de tres dígitos en ASCII con un mensaje de texto opcional. Por ejemplo, "200" (o "200 OK") significa que el último comando fue exitoso. Los números representan el código de la respuesta y el texto opcional representa una explicación o solicitud legible por humanos (p. ej., <necesita cuenta para almacenar archivo>). Una transferencia en curso de datos de archivo a través de la conexión de datos se puede cancelar mediante un mensaje de interrupción enviado a través de la conexión de control.
FTP necesita dos puertos (uno para enviar y otro para recibir) porque originalmente fue diseñado para operar en el Programa de control de red (NCP), que era un protocolo simplex que utilizaba dos direcciones de puerto, estableciendo dos conexiones, para comunicaciones bidireccionales. Se reservó un puerto impar y uno par para cada aplicación o protocolo de la capa de aplicación. La estandarización de TCP y UDP redujo la necesidad del uso de dos puertos simplex para cada aplicación a un puerto dúplex, pero el protocolo FTP nunca se modificó para usar solo un puerto y continuó usando dos para compatibilidad con versiones anteriores.
NAT y cruce de cortafuegos
FTP normalmente transfiere datos haciendo que el servidor se vuelva a conectar al cliente, después de que el cliente envíe el comando PORT. Esto es problemático tanto para NAT como para firewalls, que no permiten conexiones desde Internet hacia hosts internos. Para los NAT, una complicación adicional es que la representación de las direcciones IP y el número de puerto en el comando PORT se refieren a la dirección IP y el puerto del host interno, en lugar de la dirección IP pública y el puerto del NAT.
Hay dos enfoques para resolver este problema. Una es que el cliente FTP y el servidor FTP usan el comando PASV, lo que hace que se establezca la conexión de datos desde el cliente FTP al servidor. Esto es ampliamente utilizado por los clientes FTP modernos. Otro enfoque es que NAT altere los valores del comando PORT, utilizando una puerta de enlace a nivel de aplicación para este propósito.
Tipos de datos
Al transferir datos a través de la red, se definen cuatro tipos de datos:
- ASCII (TIPO A): Utilizado para texto. Los datos se convierten, si es necesario, de la representación de caracteres del host emisor a "ASCII de 8 bits" antes de la transmisión y (nuevamente, si es necesario) a la representación de caracteres del host receptor. Como consecuencia, este modo es inapropiado para archivos que contienen datos que no sean texto sin formato.
- Imagen (TIPO I, comúnmente llamado modo binario): la máquina emisora envía cada archivo byte por byte y el destinatario almacena el flujo de bytes a medida que lo recibe. (Se ha recomendado la compatibilidad con el modo de imagen para todas las implementaciones de FTP).
- EBCDIC (TIPO E): se utiliza para texto sin formato entre hosts que utilizan el juego de caracteres EBCDIC.
- Local (TYPE L n): diseñado para admitir la transferencia de archivos entre máquinas que no utilizan bytes de 8 bits, por ejemplo, sistemas de 36 bits como DEC PDP-10. Por ejemplo, "TYPE L 9" se usaría para transferir datos en bytes de 9 bits, o "TYPE L 36" para transferir palabras de 36 bits. La mayoría de los clientes/servidores FTP contemporáneos solo admiten L 8, que es equivalente a I.
Un Borrador de Internet vencido definió un TIPO U para transferir archivos de texto Unicode usando UTF-8; aunque el borrador nunca se convirtió en un RFC, ha sido implementado por varios clientes/servidores FTP.
Tenga en cuenta que estos tipos de datos se denominan comúnmente "modos", aunque de manera ambigua esa palabra también se usa para referirse al modo de comunicación activo frente a pasivo (ver arriba) y los modos establecidos por el comando MODE del protocolo FTP (ver a continuación).
Para los archivos de texto (TIPO A y TIPO E), se proporcionan tres opciones de control de formato diferentes para controlar cómo se imprimiría el archivo:
- No impreso (TYPE AN y TYPE EN): el archivo no contiene ningún carácter de control de carro destinado a una impresora
- Telnet (TYPE AT y TYPE ET): el archivo contiene caracteres de control de transporte Telnet (o en otras palabras, ASCII C0) (CR, LF, etc.)
- ASA (TIPO AA y TIPO EA): el archivo contiene caracteres de control de transporte ASA
Estos formatos eran principalmente relevantes para las impresoras de línea; la mayoría de los clientes/servidores FTP contemporáneos solo admiten el control de formato predeterminado de N.
Estructuras de archivos
La organización de archivos se especifica mediante el comando STRU. Las siguientes estructuras de archivos se definen en la sección 3.1.1 de RFC959:
- Estructura F o FILE (orientada a flujo). Los archivos se ven como una secuencia arbitraria de bytes, caracteres o palabras. Esta es la estructura de archivos habitual en los sistemas Unix y otros sistemas como CP/M, MS-DOS y Microsoft Windows. (Sección 3.1.1.1)
- Estructura R o RECORD (orientada a registros). Los archivos se ven divididos en registros, que pueden tener una longitud fija o variable. Esta organización de archivos es común en los sistemas mainframe y de gama media, como MVS, VM/CMS, OS/400 y VMS, que admiten sistemas de archivos orientados a registros.
- Estructura P o PAGE (orientada a página). Los archivos se dividen en páginas, que pueden contener datos o metadatos; cada página también puede tener un encabezado que proporcione varios atributos. Esta estructura de archivos se diseñó específicamente para los sistemas TENEX y, por lo general, no es compatible con otras plataformas. RFC1123 sección 4.1.2.3 recomienda que esta estructura no se implemente.
La mayoría de los clientes y servidores FTP contemporáneos solo admiten STRU F. STRU R todavía se usa en aplicaciones de transferencia de archivos de mainframe y minicomputadora.
Modos de transferencia de datos
La transferencia de datos se puede realizar en cualquiera de los tres modos:
- Modo de transmisión (MODO S): los datos se envían como una transmisión continua, lo que evita que FTP realice ningún procesamiento. Más bien, todo el procesamiento se deja en manos de TCP. No se necesita un indicador de fin de archivo, a menos que los datos se dividan en registros.
- Modo de bloque (MODE B): diseñado principalmente para transferir archivos orientados a registros (STRU R), aunque también se puede usar para transferir archivos de texto orientados a secuencias (STRU F). FTP coloca cada registro (o línea) de datos en varios bloques (encabezado de bloque, recuento de bytes y campo de datos) y luego lo pasa a TCP.
- Modo comprimido (MODO C): amplía el MODO B con compresión de datos utilizando codificación de longitud de ejecución.
La mayoría de los clientes y servidores FTP contemporáneos no implementan el MODO B o el MODO C; Los clientes y servidores FTP para sistemas operativos de mainframe y minicomputadoras son la excepción.
Algunos programas de FTP también implementan un modo comprimido basado en DEFLATE, a veces llamado "Modo Z" después del comando que lo habilita. Este modo se describió en un Borrador de Internet, pero no estandarizado.
GridFTP define modos adicionales, MODO E y MODO X, como extensiones del MODO B.
Comandos adicionales
Las implementaciones más recientes de FTP admiten el comando Modify Fact: Modification Time (MFMT), que permite a un cliente ajustar ese atributo de archivo de forma remota, lo que permite la conservación de ese atributo al cargar archivos.
Para recuperar una marca de tiempo de un archivo remoto, hay un comando MDTM. Algunos servidores (y clientes) admiten una sintaxis no estándar del comando MDTM con dos argumentos, que funciona de la misma manera que MFMT
Acceso
El inicio de sesión FTP utiliza un esquema normal de nombre de usuario y contraseña para otorgar acceso. El nombre de usuario se envía al servidor con el comando USER y la contraseña se envía con el comando PASS. Esta secuencia no está cifrada "en el cable", por lo que puede ser vulnerable a un ataque de rastreo de red. Si la información proporcionada por el cliente es aceptada por el servidor, el servidor enviará un saludo al cliente y comenzará la sesión. Si el servidor lo admite, los usuarios pueden iniciar sesión sin proporcionar credenciales de inicio de sesión, pero el mismo servidor puede autorizar solo un acceso limitado para dichas sesiones.
FTP anónimo
Un host que proporciona un servicio FTP puede proporcionar acceso FTP anónimo. Los usuarios suelen iniciar sesión en el servicio con una cuenta 'anónima' (en minúsculas y que distingue entre mayúsculas y minúsculas en algunos servidores FTP) cuando se les solicita el nombre de usuario. Aunque normalmente se pide a los usuarios que envíen su dirección de correo electrónico en lugar de una contraseña, en realidad no se realiza ninguna verificación de los datos proporcionados. Muchos hosts FTP cuyo propósito es proporcionar actualizaciones de software permitirán inicios de sesión anónimos.
Diferencias de HTTP
HTTP esencialmente corrige los errores en FTP que hacían que su uso fuera inconveniente para muchas pequeñas transferencias efímeras como son típicas en las páginas web.
FTP tiene una conexión de control con estado que mantiene un directorio de trabajo actual y otras banderas, y cada transferencia requiere una conexión secundaria a través de la cual se transfieren los datos. En el modo "pasivo", esta conexión secundaria es de cliente a servidor, mientras que en el modo "activo" predeterminado, esta conexión es de servidor a cliente. Esta aparente inversión de roles cuando está en modo activo y los números de puerto aleatorios para todas las transferencias es la razón por la que los cortafuegos y las puertas de enlace NAT tienen tantas dificultades con FTP. HTTP no tiene estado y multiplexa el control y los datos a través de una única conexión del cliente al servidor en números de puerto bien conocidos, que pasa trivialmente a través de puertas de enlace NAT y es fácil de administrar para los firewalls.
La configuración de una conexión de control FTP es bastante lenta debido a los retrasos de ida y vuelta para enviar todos los comandos necesarios y esperar respuestas, por lo que es habitual abrir una conexión de control y mantenerla abierta para múltiples transferencias de archivos en lugar de soltar y volver. -establecer la sesión de nuevo cada vez. Por el contrario, HTTP originalmente cortó la conexión después de cada transferencia porque hacerlo era muy barato. Si bien HTTP obtuvo posteriormente la capacidad de reutilizar la conexión TCP para múltiples transferencias, el modelo conceptual sigue siendo de solicitudes independientes en lugar de una sesión.
Cuando FTP se transfiere a través de la conexión de datos, la conexión de control está inactiva. Si la transferencia tarda demasiado, el cortafuegos o NAT pueden decidir que la conexión de control está muerta y dejar de rastrearla, interrumpiendo efectivamente la conexión y confundiendo la descarga. La única conexión HTTP solo está inactiva entre solicitudes y es normal y esperado que dichas conexiones se interrumpan después de un tiempo de espera.
Soporte de software
Navegador web
Los navegadores web más comunes pueden recuperar archivos alojados en servidores FTP, aunque es posible que no admitan extensiones de protocolo como FTPS. Cuando se proporciona una URL de FTP, en lugar de HTTP, los contenidos accesibles en el servidor remoto se presentan de una manera similar a la que se utiliza para otros contenidos web. FireFTP es una extensión de navegador diseñada como un cliente FTP con todas las funciones, se podía ejecutar dentro de Firefox en el pasado, pero ahora se recomienda trabajar con Waterfox.
Google Chrome eliminó la compatibilidad con FTP por completo en Chrome 88. A partir de 2019, Mozilla estaba discutiendo propuestas, incluida la eliminación de la compatibilidad con implementaciones antiguas de FTP que ya no están en uso para simplificar su código. En abril de 2021, Mozilla lanzó Firefox 88.0 que deshabilitó la compatibilidad con FTP de forma predeterminada. En julio de 2021, Firefox 90 eliminó por completo la compatibilidad con FTP.
Sintaxis
La sintaxis de URL de FTP se describe en RFC 1738, tomando la forma: ftp://[user[:password]@]host[:port]/url-path
(las partes entre paréntesis son opcionales).
Por ejemplo, la URL ftp://public.ftp-servers.example.com/mydirectory/myfile.txt representa el archivo myfile.txt del directorio mydirectory en el servidor public.ftp-servers.example.com como un recurso FTP. La URL ftp://user001:secretpassword@private.ftp-servers.example.com/mydirectory/myfile.txt agrega una especificación del nombre de usuario y la contraseña que se deben usar para acceder a este recurso.
Se pueden encontrar más detalles sobre cómo especificar un nombre de usuario y una contraseña en la documentación de los navegadores (por ejemplo, Firefox e Internet Explorer). De manera predeterminada, la mayoría de los navegadores web usan el modo pasivo (PASV), que atraviesa más fácilmente los firewalls de los usuarios finales.
Ha existido alguna variación en la forma en que los diferentes navegadores tratan la resolución de ruta en los casos en que hay un directorio de inicio no raíz para un usuario.
Gestor de descargas
Los administradores de descargas más comunes pueden recibir archivos alojados en servidores FTP, mientras que algunos de ellos también brindan la interfaz para recuperar los archivos alojados en servidores FTP. DownloadStudio e Internet Download Accelerator no solo permiten descargar un archivo desde un servidor FTP, sino también ver la lista de archivos en un servidor FTP.
Seguridad
FTP no fue diseñado para ser un protocolo seguro y tiene muchas debilidades de seguridad. En mayo de 1999, los autores de RFC 2577 enumeraron una vulnerabilidad a los siguientes problemas:
- Ataque de fuerza bruta
- Ataque de rebote FTP
- captura de paquetes
- Robo de puertos (adivinar el próximo puerto abierto y usurpar una conexión legítima)
- Ataque de suplantación de identidad
- enumeración de nombre de usuario
- DoS o DDoS
FTP no cifra su tráfico; todas las transmisiones son en texto claro, y los nombres de usuario, las contraseñas, los comandos y los datos pueden ser leídos por cualquier persona capaz de realizar la captura de paquetes (olfateo) en la red. Este problema es común a muchas de las especificaciones del Protocolo de Internet (como SMTP, Telnet, POP e IMAP) que se diseñaron antes de la creación de mecanismos de encriptación como TLS o SSL.
Las soluciones comunes a este problema incluyen:
- Usar las versiones seguras de los protocolos inseguros, por ejemplo, FTPS en lugar de FTP y TelnetS en lugar de Telnet.
- Usar un protocolo diferente y más seguro que pueda manejar el trabajo, por ejemplo, el Protocolo de transferencia de archivos SSH o el Protocolo de copia segura.
- Usando un túnel seguro como Secure Shell (SSH) o una red privada virtual (VPN).
FTP sobre SSH
FTP sobre SSH es la práctica de tunelizar una sesión FTP normal a través de una conexión Secure Shell. Debido a que FTP usa múltiples conexiones TCP (algo inusual para un protocolo TCP/IP que todavía está en uso), es particularmente difícil hacer un túnel a través de SSH. Con muchos clientes SSH, intentar configurar un túnel para el canal de control (la conexión inicial de cliente a servidor en el puerto 21) protegerá solo ese canal; cuando se transfieren datos, el software FTP en cualquiera de los extremos establece nuevas conexiones TCP (canales de datos) y, por lo tanto, no tienen protección de confidencialidad o integridad.
De lo contrario, es necesario que el software del cliente SSH tenga un conocimiento específico del protocolo FTP, para monitorear y reescribir los mensajes del canal de control FTP y abrir de forma autónoma nuevos reenvíos de paquetes para los canales de datos FTP. Los paquetes de software que admiten este modo incluyen:
- Tectia ConnectSecure (Win/Linux/Unix) del paquete de software de SSH Communications Security
Derivados
FTPS
FTPS explícito es una extensión del estándar FTP que permite a los clientes solicitar el cifrado de sesiones FTP. Esto se hace enviando el comando "AUTH TLS". El servidor tiene la opción de permitir o denegar conexiones que no soliciten TLS. Esta extensión de protocolo se define en RFC 4217. El FTPS implícito es un estándar obsoleto para FTP que requería el uso de una conexión SSL o TLS. Se especificó que usara puertos diferentes al FTP simple.
Protocolo de transferencia de archivos SSH
El protocolo de transferencia de archivos SSH (cronológicamente el segundo de los dos protocolos abreviados como SFTP) transfiere archivos y tiene un conjunto de comandos similar para los usuarios, pero usa el protocolo Secure Shell (SSH) para transferir archivos. A diferencia de FTP, cifra tanto los comandos como los datos, evitando que las contraseñas y la información confidencial se transmitan abiertamente a través de la red. No puede interoperar con software FTP.
Protocolo trivial de transferencia de archivos
El protocolo trivial de transferencia de archivos (TFTP) es un FTP simple y de bloqueo que permite a un cliente obtener un archivo o colocarlo en un host remoto. Uno de sus principales usos es en las primeras etapas de arranque desde una red de área local, porque TFTP es muy sencillo de implementar. TFTP carece de seguridad y de la mayoría de las funciones avanzadas que ofrecen los protocolos de transferencia de archivos más robustos, como el Protocolo de transferencia de archivos. TFTP se estandarizó por primera vez en 1981 y la especificación actual del protocolo se puede encontrar en RFC 1350.
Protocolo simple de transferencia de archivos
El Protocolo simple de transferencia de archivos (el primer protocolo abreviado como SFTP), tal como lo define RFC 913, se propuso como un protocolo de transferencia de archivos (no seguro) con un nivel de complejidad intermedio entre TFTP y FTP. Nunca fue ampliamente aceptado en Internet, y ahora el IETF le asigna el estado Histórico. Se ejecuta a través del puerto 115 y, a menudo, recibe las iniciales de SFTP. Tiene un conjunto de comandos de 11 comandos y admite tres tipos de transmisión de datos: ASCII, binario y continuo. Para sistemas con un tamaño de palabra que es un múltiplo de 8 bits, la implementación de binario y continuo es la misma. El protocolo también admite el inicio de sesión con identificación de usuario y contraseña, carpetas jerárquicas y administración de archivos (incluidos cambiar el nombre, eliminar, cargar, descargar, descargar con sobrescribir y descargar con agregar).
Comandos FTP
Códigos de respuesta FTP
A continuación se muestra un resumen de los códigos de respuesta FTP que puede devolver un servidor FTP. Estos códigos han sido estandarizados en RFC 959 por el IETF. El código de respuesta es un valor de tres dígitos. El primer dígito se utiliza para indicar uno de los tres resultados posibles: éxito, fracaso o para indicar un error o una respuesta incompleta:
- 2yz – Respuesta exitosa
- 4yz o 5yz – Respuesta fallida
- 1yz o 3yz – Error o respuesta incompleta
El segundo dígito define el tipo de error:
- x0z – Sintaxis. Estas respuestas se refieren a errores de sintaxis.
- x1z – Información. Respuestas a solicitudes de información.
- x2z – Conexiones. Respuestas referentes a las conexiones de control y datos.
- x3z: autenticación y contabilidad. Respuestas para el proceso de inicio de sesión y procedimientos contables.
- x4z – No definido.
- x5z – Sistema de archivos. Estas respuestas transmiten códigos de estado del sistema de archivos del servidor.
El tercer dígito del código de respuesta se usa para proporcionar detalles adicionales para cada una de las categorías definidas por el segundo dígito.
Contenido relacionado
Open Shortest Path First (OSPF)
Túnel (informática)
Mensajería instantánea