El Protocolo de transferencia de archivos ( FTP ) es un protocolo de comunicación estándar utilizado para la transferencia de archivos de computadora desde un servidor a un cliente en una red de computadoras . FTP se basa en una arquitectura de modelo cliente-servidor que utiliza conexiones de datos y control separadas entre el cliente y el servidor. [1] Los usuarios de FTP pueden autenticarse con un protocolo de inicio de sesión de texto sin formato , 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 encripte el contenido, FTP a menudo se protege 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 . [2] [3] Desde entonces, se han desarrollado muchos clientes FTP dedicados y utilidades de automatización para computadoras de escritorio , servidores, dispositivos móviles y hardware, y el FTP se ha incorporado a aplicaciones de productividad como editores HTML y administradores de archivos .
Los clientes FTP solían integrarse comúnmente en los navegadores web , donde se navegaba por los servidores de archivos con el prefijo URI " ". En 2021, Google Chrome y Firefox , [4] [5]ftp://
dos de los principales proveedores de navegadores web, dejaron de admitir FTP debido a que fue reemplazado por SFTP y FTPS, que son más seguros; aunque ninguno de ellos ha implementado los protocolos más nuevos. [6] [7]
La especificación original del 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 más tarde 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 firewall (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]
El 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 del del comando MODE en el protocolo FTP).
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 . [12]
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 se ejecutó correctamente. Los números representan el código de la respuesta y el texto opcional representa una explicación o solicitud legible para 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 interrumpir 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 sobre el Protocolo de Control de Red (NCP), que era un protocolo simplex que utilizaba dos direcciones de puerto , estableciendo dos conexiones, para comunicaciones bidireccionales. Se reservaban un puerto par y uno impar para cada aplicación o protocolo de capa de aplicación . La estandarización de TCP y UDP redujo la necesidad de usar dos puertos simplex para cada aplicación a un puerto dúplex, [13] : 15 pero el protocolo FTP nunca se modificó para usar solo un puerto, y continuó usando dos para compatibilidad con versiones anteriores.
Normalmente, el FTP transfiere datos haciendo que el servidor se vuelva a conectar con el cliente, después de que el cliente envíe el comando PORT. Esto es problemático tanto para los NAT como para los firewalls, que no permiten conexiones desde Internet hacia los hosts internos. [14] 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 al puerto del host interno, en lugar de a la dirección IP pública y al puerto del NAT.
Existen dos enfoques para resolver este problema. Uno es que el cliente FTP y el servidor FTP utilicen el comando PASV, que hace que se establezca la conexión de datos desde el cliente FTP al servidor. [14] Este método es ampliamente utilizado por los clientes FTP modernos. Otro enfoque es que el NAT altere los valores del comando PORT, utilizando una puerta de enlace a nivel de aplicación para este propósito. [14]
Al transferir datos a través de la red, se definen cinco tipos de datos: [2] [3] [8]
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 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.
La organización de los 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 contemporáneos sólo admiten STRU F. STRU R todavía se utiliza en aplicaciones de transferencia de archivos de mainframes y minicomputadoras.
La transferencia de datos se puede realizar en cualquiera de tres modos: [1] [2]
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 mainframes y minicomputadoras son la excepción a eso.
Algunos programas FTP también implementan un modo comprimido basado en DEFLATE , a veces llamado "Modo Z" por el comando que lo habilita. Este modo fue descrito en un borrador de Internet , pero no estandarizado. [16]
GridFTP define modos adicionales, MODO E [17] y MODO X, [18] como extensiones del MODO B.
Las implementaciones más recientes de FTP admiten el comando Modificar hecho: hora de modificación (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. [19] [20]
Para recuperar la 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 [21].
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á cifrada "en la red", por lo que puede ser vulnerable a un ataque de rastreo de red . [22] 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 un 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 con distinción entre mayúsculas y minúsculas en algunos servidores FTP) cuando se les solicita el nombre de usuario. Aunque normalmente se les pide a los usuarios 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. [23] Muchos hosts FTP cuyo propósito es proporcionar actualizaciones de software permitirán inicios de sesión anónimos. [3]
HTTP básicamente corrige los errores en FTP que hacían que su uso fuera incómodo para muchas pequeñas transferencias efímeras como las que 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 del cliente al servidor, mientras que en el modo "activo" predeterminado, esta conexión es del servidor al 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 firewalls y las puertas de enlace NAT tienen tantos problemas 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 conocidos, que pasa trivialmente a través de las 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 en el envío de todos los comandos necesarios y la espera de respuestas, por lo que es habitual activar una conexión de control y mantenerla abierta para múltiples transferencias de archivos en lugar de interrumpir y restablecer la sesión de nuevo cada vez. Por el contrario, HTTP originalmente interrumpía la conexión después de cada transferencia porque hacerlo era muy económico. Si bien HTTP ha adquirido posteriormente la capacidad de reutilizar la conexión TCP para múltiples transferencias, el modelo conceptual sigue siendo el de solicitudes independientes en lugar de una sesión.
Cuando el FTP está transfiriendo datos a través de la conexión, la conexión de control está inactiva. Si la transferencia demora demasiado, el firewall o NAT puede decidir que la conexión de control está inactiva y dejar de rastrearla, interrumpiendo efectivamente la conexión y confundiendo la descarga. La conexión HTTP única solo está inactiva entre solicitudes y es normal y esperado que dichas conexiones se interrumpan después de un tiempo de espera.
Muchos administradores de archivos tienden a tener implementado el acceso FTP, como el Explorador de archivos (anteriormente el Explorador de Windows) en Microsoft Windows . Este cliente solo se recomienda para transferencias de archivos pequeños desde un servidor, debido a las limitaciones en comparación con el software de cliente dedicado. [24] No es compatible con SFTP . [25]
Ambos administradores de archivos nativos para KDE en Linux ( Dolphin y Konqueror ) admiten FTP y SFTP. [26] [27]
En Android , el administrador de archivos Mis archivos del Samsung Galaxy tiene un cliente FTP y SFTP integrado . [28]
Durante mucho tiempo, la mayoría de los navegadores web más comunes podían recuperar archivos alojados en servidores FTP, aunque no todos tenían soporte para extensiones de protocolo como FTPS . [3] [29] Cuando se proporciona una URL FTP (en lugar de HTTP) , los contenidos accesibles en el servidor remoto se presentan de una manera similar a la utilizada para otro contenido web.
Google Chrome eliminó por completo la compatibilidad con FTP en Chrome 88, lo que también afectó a otros navegadores basados en Chromium , como Microsoft Edge . [30] Firefox 88 deshabilitó la compatibilidad con FTP de forma predeterminada, y Firefox 90 la eliminó por completo. [31] [4]
FireFTP es una extensión de navegador discontinuada que fue diseñada como un cliente FTP con todas las funciones para ejecutarse dentro de Firefox , pero cuando Firefox dejó de brindar soporte para FTP, el desarrollador de la extensión recomendó usar Waterfox . [32] Algunos navegadores, como Lynx basado en texto , aún admiten FTP. [33]
La sintaxis de la URL de FTP se describe en RFC 1738 y toma el formato: (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 del 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 una contraseña en la documentación de los navegadores (por ejemplo, Firefox [34] e Internet Explorer [35] ). De manera predeterminada, la mayoría de los navegadores web utilizan el modo pasivo (PASV), que atraviesa más fácilmente los firewalls del usuario final.
Ha habido algunas variaciones en cómo los distintos navegadores tratan la resolución de ruta en los casos en que hay un directorio de inicio que no es raíz para un usuario. [36]
La mayoría de los gestores de descarga más habituales pueden recibir archivos alojados en servidores FTP, mientras que algunos de ellos también ofrecen una interfaz para recuperar los archivos alojados en servidores FTP. DownloadStudio no sólo permite descargar un archivo de un servidor FTP, sino también ver la lista de archivos en un servidor FTP. [37]
LibreOffice declaró que su soporte FTP estaba obsoleto a partir de la versión 7.4, esto se eliminó más tarde en la versión 24.2. [38] [39]
FTP no fue diseñado para ser un protocolo seguro y tiene muchas debilidades de seguridad. [40] En mayo de 1999, los autores de RFC 2577 enumeraron una vulnerabilidad a los siguientes problemas:
FTP no encripta su tráfico; todas las transmisiones son en texto claro, y los nombres de usuario, contraseñas, comandos y datos pueden ser leídos por cualquier persona capaz de realizar captura de paquetes ( sniffing ) en la red. [2] [40] Este problema es común a muchas de las especificaciones del Protocolo de Internet (como SMTP , Telnet , POP e IMAP ) que fueron diseñadas antes de la creación de mecanismos de encriptación 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 sobre una conexión Secure Shell. [40] Debido a que FTP utiliza múltiples conexiones TCP (algo inusual para un protocolo TCP/IP que todavía se utiliza), es particularmente difícil tunelizar sobre 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 configura 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 cliente SSH tenga conocimientos específicos del protocolo FTP, para poder supervisar 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:
FTP sobre SSH no debe confundirse con el Protocolo de transferencia de archivos SSH (SFTP).
El FTPS explícito es una extensión del estándar FTP que permite a los clientes solicitar que las sesiones FTP se cifren. Esto se hace enviando el comando "AUTH TLS". El servidor tiene la opción de permitir o denegar las conexiones que no soliciten TLS. Esta extensión de protocolo está definida 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 utilizara puertos diferentes a los del FTP simple.
El protocolo de transferencia de archivos SSH (cronológicamente el segundo de los dos protocolos, abreviado como 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, encripta 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, aunque algunos programas de cliente FTP también ofrecen soporte para el protocolo de transferencia de archivos SSH.
El Protocolo trivial de transferencia de archivos (TFTP) es un protocolo FTP simple y con pasos fijos que permite a un cliente obtener un archivo de un host remoto o colocarlo en él. Uno de sus usos principales es en las primeras etapas del arranque desde una red de área local , ya que TFTP es muy fácil 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.
El Protocolo simple de transferencia de archivos (el primer protocolo abreviado SFTP), tal como se define en el 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 siglas 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 ID de usuario y contraseña, carpetas jerárquicas y administración de archivos (incluidos rename , delete , upload , download , download with overwrite y download with append ).
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:
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.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)Escrito para IE 6 y versiones anteriores. Puede funcionar con versiones más nuevas.