Protocolo de comunicación | |
Objetivo | Transferencia de archivos |
---|---|
Desarrollador (es) | Abhay Bhushan para RFC 959 |
Introducido | 16 de abril de 1971 |
Capa OSI | Capa de aplicación |
Puerto (s) | 21 para control, 20 para transferencia de datos |
RFC (s) | RFC 959 |
Conjunto de protocolos de internet |
---|
Capa de aplicación |
Capa de transporte |
Capa de internet |
Capa de enlace |
|
El Protocolo de transferencia de archivos ( FTP ) es un protocolo de comunicación estándar que se utiliza 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 independientes entre el cliente y el servidor. [1] Los usuarios de FTP pueden autenticarse con un protocolo de inicio de sesión de texto sin cifrar, 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 protege el nombre de usuario y la contraseña, y cifra el contenido, FTP a menudo está protegido conSSL / TLS ( FTPS ) o reemplazado por 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 . [2] [3] Desde entonces, se han desarrollado muchos clientes FTP y utilidades de automatización para equipos de escritorio , servidores, dispositivos móviles y hardware, y el FTP se ha incorporado a aplicaciones de productividad, como los editores HTML .
En enero de 2021, la compatibilidad con el protocolo FTP se desactivó en Google Chrome 88, [4] y se desactivó en Firefox 88.0. [5] En julio de 2021, Firefox 90 eliminó el FTP por completo, [6] y Google hizo lo mismo en octubre de 2021, eliminando el FTP por completo en Google Chrome 95. [7]
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 ejecutaba en NCP , el predecesor de TCP / IP . [2] El protocolo fue reemplazado posteriormente por una versión TCP / IP, RFC 765 (junio de 1980) y RFC 959 (octubre de 1985), la especificación actual. Varias normas propuestas modifican RFC 959 , por ejemplo, RFC 1579 (febrero de 1994) habilita FTP compatible con cortafuegos (modo pasivo), RFC 2228 (junio de 1997) propone extensiones de seguridad, RFC 2428 (septiembre de 1998) agrega soporte para IPv6 y define un nuevo tipo de modo pasivo. [8]
FTP puede ejecutarse en modo activo o pasivo , lo que determina cómo se establece la conexión de datos. [9] (Este sentido de "modo" es diferente al del comando MODE en el protocolo FTP, y corresponde a los comandos PORT / PASV / EPSV / etc.) En ambos casos, el cliente crea una conexión de control TCP desde un puerto N aleatorio, generalmente sin privilegios , al puerto de comando del servidor FTP 21.
Ambos modos se actualizaron en septiembre de 1998 para admitir IPv6 . En ese momento, se introdujeron más cambios en el modo pasivo, actualizándolo al modo pasivo extendido . [11]
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 (por ejemplo, <Se necesita una cuenta para almacenar el archivo>). [1] 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 fue diseñado originalmente 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 par y otro impar 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, [12] : 15 pero el protocolo FTP nunca se modificó para usar solo un puerto, y continuó usando dos para compatibilidad con versiones anteriores. .
FTP normalmente transfiere datos haciendo que el servidor se conecte de nuevo 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. [13] 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 utilizan el comando PASV, lo que hace que se establezca la conexión de datos desde el cliente FTP al servidor. [13] 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. [13]
Al transferir datos a través de la red, se definen cuatro tipos de datos: [2] [3] [8]
Un Borrador de Internet vencido definió un TIPO U para transferir archivos de texto Unicode usando UTF-8 ; [14] 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 vs pasivo (ver arriba), y los modos establecidos por el comando MODE del protocolo FTP (ver abajo).
Para archivos de texto (TIPO A y TIPO E), se proporcionan tres opciones de control de formato diferentes para controlar cómo se imprimirá el archivo:
Estos formatos fueron principalmente relevantes para las impresoras de línea ; la mayoría de los clientes / servidores FTP actuales solo admiten el control de formato predeterminado de N.
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:
La mayoría de los clientes y servidores FTP actuales solo admiten STRU F. STRU R todavía se utiliza en aplicaciones de transferencia de archivos de mainframe y miniordenadores.
La transferencia de datos se puede realizar en cualquiera de estos tres modos: [1] [2]
La mayoría de los clientes y servidores FTP actuales no implementan MODE B o MODE C; Los clientes y servidores FTP para sistemas operativos de mainframe y miniordenadores 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 fue descrito en un Borrador de Internet , pero no estandarizado. [15]
GridFTP define modos adicionales, MODO E [16] y MODO X, [17] como extensiones del MODO B.
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. [18] [19]
Para recuperar una marca de tiempo de un archivo remoto, existe el 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 [20]
El inicio de sesión FTP utiliza un esquema normal de nombre de usuario y contraseña para otorgar acceso. [2] El nombre de usuario se envía al servidor mediante el comando USER y la contraseña se envía mediante el comando PASS. [2] Esta secuencia no está encriptada "en el cable", por lo que puede ser vulnerable a un ataque de rastreo de red . [21] Si el servidor acepta la información proporcionada por el cliente, el servidor enviará un saludo al cliente y comenzará la sesión. [2] 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 acceso limitado para dichas sesiones. [2]
Un host que proporciona un servicio FTP puede proporcionar acceso FTP anónimo . [2] Los usuarios normalmente inician sesión en el servicio con una cuenta "anónima" (en minúsculas y distingue entre mayúsculas y minúsculas en algunos servidores FTP) cuando se les solicita el nombre de usuario. Aunque a los usuarios se les suele pedir que envíen su dirección de correo electrónico en lugar de una contraseña, [3] en realidad no se realiza ninguna verificación de los datos proporcionados. [22] Muchos hosts FTP cuyo propósito es proporcionar actualizaciones de software permitirán inicios de sesión anónimos. [3]
HTTP esencialmente corrige los errores en FTP que lo hacían incómodo de usar 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 otros indicadores, 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 números de puerto aleatorios para todas las transferencias, es la razón por la que los firewalls 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 sola conexión de cliente a servidor en números de puerto 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 de enviar todos los comandos requeridos 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 a -establecer la sesión de nuevo cada vez. Por el contrario, HTTP originalmente eliminó la conexión después de cada transferencia porque hacerlo era muy barato. Si bien HTTP ha ganado 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 la conexión y confundiendo la descarga. La conexión HTTP única solo está inactiva entre solicitudes y es normal y se espera que dichas conexiones se interrumpan después de un tiempo de espera.
Los navegadores web más comunes pueden recuperar archivos alojados en servidores FTP, aunque es posible que no admitan extensiones de protocolo como FTPS . [3] [23] Cuando se proporciona una URL de FTP, en lugar de HTTP , el contenido accesible en el servidor remoto se presenta de una manera similar a la que se usa para otro contenido web. FireFTP es una extensión del navegador diseñada como un cliente FTP con todas las funciones, podría ejecutarse 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. [24] A partir de 2019, Mozilla estaba discutiendo propuestas, incluida la eliminación solo de la compatibilidad con implementaciones de FTP antiguas que ya no están en uso para simplificar su código. [25] [26] En abril de 2021, Mozilla lanzó Firefox 88.0, que deshabilitó el soporte FTP de forma predeterminada. [27] En julio de 2021, Firefox 90 eliminó por completo la compatibilidad con FTP. [6]
La sintaxis de la URL de FTP se describe en RFC 1738 , tomando la forma: (las partes entre corchetes son opcionales). ftp://[user[:password]@]host[:port]/url-path
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: [email protected]/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 contraseña en la documentación de los navegadores (por ejemplo, Firefox [28] e Internet Explorer [29] ). De forma predeterminada, la mayoría de los navegadores web utilizan el modo pasivo (PASV), que atraviesa más fácilmente los cortafuegos de los usuarios finales.
Ha existido alguna variación en la forma en que los diferentes navegadores tratan la resolución de rutas en los casos en que existe un directorio de inicio no raíz para un usuario. [30]
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 permiten no solo descargar un archivo desde un servidor FTP, sino también ver la lista de archivos en un servidor FTP. [31] [32]
FTP no fue diseñado para ser un protocolo seguro y tiene muchas debilidades de seguridad. [33] En mayo de 1999, los autores de RFC 2577 enumeraron una vulnerabilidad a los siguientes problemas:
FTP no cifra su tráfico; todas las transmisiones son en texto sin cifrar y los nombres de usuario, contraseñas, comandos y datos pueden ser leídos por cualquier persona capaz de realizar la captura de paquetes ( rastreo ) en la red. [2] [33] 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 cifrado como TLS o SSL. [8]
Las soluciones comunes a este problema incluyen:
FTP sobre SSH es la práctica de tunelizar una sesión FTP normal a través de una conexión Secure Shell. [33] Debido a que FTP usa múltiples conexiones TCP (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 cada extremo establece nuevas conexiones TCP (canales de datos) y, por lo tanto, no tiene protección de confidencialidad o integridad .
De lo contrario, es necesario que el software de 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 canales de datos FTP. Los paquetes de software que admiten este modo incluyen:
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 . FTPS implícito es un estándar obsoleto para FTP que requería el uso de una conexión SSL o TLS. Se especificó utilizar puertos diferentes a los de FTP simple.
El protocolo de transferencia de archivos SSH (cronológicamente el segundo de los dos protocolos abreviado SFTP) transfiere archivos y tiene un conjunto de comandos similar para los usuarios, pero utiliza el protocolo Secure Shell (SSH) para transferir archivos. A diferencia de FTP, cifra tanto los comandos como los datos, lo que evita que las contraseñas y la información confidencial se transmitan abiertamente a través de la red. No puede interoperar con el software FTP.
El Protocolo de transferencia de archivos trivial (TFTP) es un FTP simple de pasos de bloqueo que permite a un cliente obtener un archivo o colocarlo en un host remoto. Uno de sus usos principales es en las primeras etapas de arranque desde una red de área local , porque TFTP es muy simple 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 sólidos, como el Protocolo de transferencia de archivos. TFTP se estandarizó por primera vez en 1981 y la especificación actual para el protocolo se puede encontrar en RFC 1350 .
El Protocolo simple de transferencia de archivos (el primer protocolo abreviado SFTP), según lo definido por 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 estatus de Histórico . Se ejecuta a través del puerto 115 y, a menudo, recibe las iniciales 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 ID de usuario y contraseña, carpetas jerárquicas y administración de archivos (incluido el cambio de nombre , eliminación , carga , descarga , descarga con sobrescritura y descarga con anexo ).
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 posibles resultados: éxito, fracaso o para indicar un error o una respuesta incompleta:
El segundo dígito define el tipo de error:
El tercer dígito del código de respuesta se utiliza para proporcionar detalles adicionales para cada una de las categorías definidas por el segundo dígito.