2.2+Servidores+de+FTP,+SFTP,+TFTP

El Modelo FTP
 

 El siguiente modelo representa el diagrama de un servicio FTP.

 En el modelo, el intérprete de protocolo (IP) de usuario inicia la conexión de control en el puerto 21. Las órdenes FTP estándar las genera el PI de usuario y se transmiten al proceso servidor a través de la conexión de control. Las respuestas estándar se envían desde el PI del servidor al PI de usuario por la conexión de control como respuesta a las órdenes.

 Estas órdenes FTP especifican parámetros para la conexión de datos (puerto de datos, modo de transferencia, tipo de representación y estructura) y la naturaleza de la operación sobre el sistema de archivos (almacenar, recuperar, añadir, borrar, etc.). El proceso de transferencia de datos (DTP) de usuario u otro proceso en su lugar, debe esperar a que el servidor inicie la conexión al puerto de datos especificado (puerto 20 en modo activo o estándar) y transferir los datos en función de los parámetros que se hayan especificado.

 Vemos también en el diagrama que la comunicación entre cliente y servidor es independiente del sistema de archivos utilizado en cada computadora, de manera que no importa que sus sistemas operativos sean distintos, porque las entidades que se comunican entre sí son los PI y los DTP, que usan el mismo protocolo estandarizado: el FTP.

 También hay que destacar que la conexión de datos es bidireccional, es decir, se puede usar simultáneamente para enviar y para recibir, y no tiene por qué existir todo el tiempo que dura la conexión FTP. Pero tenía en sus comienzos un problema, y era la localización de los servidores en la red. Es decir, el usuario que quería descargar algún archivo mediante FTP debía conocer en qué máquina estaba ubicado. La única herramienta de búsqueda de información que existía era Gopher, con todas sus limitaciones.

Primer buscador de información
Gopher significa 'lanzarse sobre' la información. Es un servicio cuyo objetivo es la localización de archivos a partir de su título. Consiste en un conjunto de menús de recursos ubicados en diferentes máquinas que están intercomunicadas. Cada máquina sirve una área de información, pero su organización interna permite que todas ellas funcionen como si se tratase de una sola máquina. El usuario navega a través de estos menús hasta localizar la información buscada, y desconoce exactamente de qué máquina está descargando dicha información. Con la llegada de Internet, los potentes motores de búsqueda (Google) dejaron el servicio Gopher, y la localización de los servidores FTP dejó de ser un problema. En la actualidad, cuando el usuario se descarga un archivo a partir de un enlace de una página web no llega ni a saber que lo está haciendo desde un servidor FTP. El servicio FTP ha evolucionado a lo largo del tiempo y hoy día es muy utilizado en Internet, en redes corporativas, Intranets, etc. Soportado por cualquier sistema operativo, existe gran cantidad de software basado en el protocolo FTP.

Servidor FTP
Un servidor FTP es un programa especial que se ejecuta en un equipo servidor normalmente conectado a Internet (aunque puede estar conectado a otros tipos de redes, LAN, MAN , etc.). Su función es permitir el intercambio de datos entre diferentes servidores/ordenadores.

 Por lo general, los programas servidores FTP no suelen encontrarse en los ordenadores personales, por lo que un usuario normalmente utilizará el FTP para conectarse remotamente a uno y así intercambiar información con él.

 Las aplicaciones más comunes de los servidores FTP suelen ser el alojamiento web, en el que sus clientes utilizan el servicio para subir sus páginas web y sus archivos correspondientes; o como servidor de backup (copia de seguridad) de los archivos importantes que pueda tener una empresa. Para ello, existen protocolos de comunicación FTP para que los datos se transmitan cifrados, como el <span class="mw-redirect" style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">SFTP <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">(//<span style="font-family: 'Arial','sans-serif';">Secure File Transfer Protocol //).

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 17.3333px;">Cliente FTP
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Cuando un navegador no está equipado con la función FTP, o si se quiere cargar archivos en un ordenador remoto, se necesitará utilizar un programa cliente FTP. Un cliente FTP es un programa que se instala en el ordenador del usuario, y que emplea el protocolo FTP para conectarse a un servidor FTP y transferir archivos, ya sea para descargarlos o para subirlos.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Para utilizar un cliente FTP, se necesita conocer el nombre del archivo, el ordenador en que reside (servidor, en el caso de descarga de archivos), el ordenador al que se quiere transferir el archivo (en caso de querer subirlo nosotros al servidor), y la carpeta en la que se encuentra.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Algunos clientes de FTP básicos en modo consola vienen integrados en los sistemas operativos, incluyendo Microsoft Windows, DOS, GNU/Linux y Unix. Sin embargo, hay disponibles clientes con opciones añadidas e interfaz gráfica. Aunque muchos navegadores tienen ya integrado FTP, es más confiable a la hora de conectarse con servidores FTP no anónimos utilizar un programa cliente.

<span style="color: #000000; font-family: 'Arial','sans-serif';">Acceso anónimo
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Los servidores FTP anónimos ofrecen sus servicios libremente a todos los usuarios, permiten acceder a sus archivos sin necesidad de tener un 'USER ID' o una cuenta de usuario. Es la manera más cómoda fuera del servicio web de permitir que todo el mundo tenga acceso a cierta información sin que para ello el administrador de un sistema tenga que crear una cuenta para cada usuario.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Si un servidor posee servicio 'FTP anonymous' solamente con teclear la palabra «anonymous», cuando pregunte por tu usuario tendrás acceso a ese sistema. No se necesita ninguna contraseña preestablecida, aunque tendrás que introducir una sólo para ese momento, normalmente se suele utilizar la dirección de correo electrónico propia.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Solamente con eso se consigue acceso a los archivos del FTP, aunque con menos privilegios que un usuario normal. Normalmente solo podrás leer y copiar los archivos que sean públicos, así indicados por el administrador del servidor al que nos queramos conectar.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Normalmente, se utiliza un servidor FTP anónimo para depositar grandes archivos que no tienen utilidad si no son transferidos a la máquina del usuario, como por ejemplo programas, y se reservan los servidores de páginas web (HTTP) para almacenar información textual destinada a la lectura en línea.

<span style="color: #000000; font-family: 'Arial','sans-serif';">Acceso de usuario
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Si se desea tener privilegios de acceso a cualquier parte del sistema de archivos del servidor FTP, de modificación de archivos existentes, y de posibilidad de subir nuestros propios archivos, generalmente se suele realizar mediante una cuenta de usuario. En el servidor se guarda la información de las distintas cuentas de usuario que pueden acceder a él, de manera que para iniciar una sesión FTP debemos introducir una <span class="mw-redirect" style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">autentificación <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">(en inglés: //<span style="font-family: 'Arial','sans-serif';">login //) y una contraseña (en inglés: //<span style="font-family: 'Arial','sans-serif';">password //) que nos identifica unívocamente.

<span style="color: #000000; font-family: 'Arial','sans-serif';">Cliente FTP basado en Web
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Un «cliente FTP basado en Web» no es más que un cliente FTP al cual podemos acceder a través de nuestro navegador web sin necesidad de tener otra aplicación para ello. El usuario accede a un servidor web (HTTP) que lista los contenidos de un servidor FTP. El usuario se conecta mediante HTTP a un servidor web, y el servidor web se conecta mediante FTP al servidor FTP. El servidor web actúa de intermediario haciendo pasar la información desde el servidor FTP en los puertos 20 y 21 hacia el puerto 80 HTTP que ve el usuario.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Siempre hay momentos en que nos encontramos fuera de casa, no llevamos el ordenador portátil encima y necesitamos realizar alguna tarea urgente desde un ordenador de acceso público, de un amigo, del trabajo, la universidad, etc. Lo más común es que no estén instaladas las aplicaciones que necesitamos y en muchos casos hasta carecemos de los permisos necesarios para realizar su instalación. Otras veces estamos detrás de un proxy o cortafuegos que no nos permite acceder a servidores FTP externos.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Al disponer de un cliente FTP basado en Web podemos acceder al servidor FTP remoto como si estuviéramos realizando cualquier otro tipo de navegación web. A través de un cliente FTP basado en Web podrás, crear, copiar, renombrar y eliminar archivos y directorios. Cambiar permisos, editar, ver, subir y descargar archivos, así como cualquier otra función del protocolo FTP que el servidor FTP remoto permita.

<span style="color: #000000; font-family: 'Arial','sans-serif';">Acceso de invitado
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">El acceso sin restricciones al servidor que proporcionan las cuentas de usuario implica problemas de seguridad, lo que ha dado lugar a un tercer tipo de acceso FTP denominado invitado (guest), que se puede contemplar como una mezcla de los dos anteriores.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> La idea de este mecanismo es la siguiente: se trata de permitir que cada usuario conecte a la máquina mediante su login y su password, pero evitando que tenga acceso a partes del sistema de archivos que no necesita para realizar su trabajo, de esta forma accederá a un entorno restringido, algo muy similar a lo que sucede en los accesos anónimos, pero con más privilegios.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 17.3333px;">Modos de conexión del cliente FTP
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">FTP admite dos modos de conexión del cliente. Estos modos se denominan //<span style="font-family: 'Arial','sans-serif';">activo // (o Estándar, o PORT, debido a que el cliente envía comandos tipo PORT al servidor por el canal de control al establecer la conexión) y //<span style="font-family: 'Arial','sans-serif';">pasivo // (o PASV, porque en este caso envía comandos tipo PASV). Tanto en el modo Activo como en el modo Pasivo, el cliente establece una conexión con el servidor mediante el puerto 21, que establece el canal de control.

<span style="color: #000000; font-family: 'Arial','sans-serif';">Modo activo
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">

<span style="font-family: 'Arial','sans-serif'; font-size: 13.3333px; text-decoration: none;">

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Modo activo.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> En modo Activo, el servidor siempre crea el canal de datos en su puerto 20, mientras que en el lado del cliente el canal de datos se asocia a un puerto aleatorio mayor que el 1024. Para ello, el cliente manda un comando PORT al servidor por el canal de control indicándole ese número de puerto, de manera que el servidor pueda abrirle una conexión de datos por donde se transferirán los archivos y los listados, en el puerto especificado.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Lo anterior tiene un grave problema de seguridad, y es que la máquina cliente debe estar dispuesta a aceptar cualquier conexión de entrada en un puerto superior al 1024, con los problemas que ello implica si tenemos el equipo conectado a una red insegura como Internet. De hecho, los cortafuegos que se instalen en el equipo para evitar ataques seguramente rechazarán esas conexiones aleatorias. Para solucionar esto se desarrolló el modo //<span style="font-family: 'Arial','sans-serif';">pasivo //.

<span style="color: #000000; font-family: 'Arial','sans-serif';">Modo pasivo
<span style="font-family: 'Arial','sans-serif'; font-size: 13.3333px; text-decoration: none;"> <span style="font-family: 'Arial','sans-serif'; font-size: 13.3333px; text-decoration: none;">

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Modo pasivo.

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Cuando el cliente envía un comando PASV sobre el canal de control, el servidor FTP le indica por el canal de control, el puerto (mayor a 1023 del servidor. Ej:2040) al que debe conectarse el cliente. El cliente inicia una conexión desde el puerto siguiente al puerto de control (ej: 1036) hacia el puerto del servidor especificado anteriormente (ej: 2040). <span style="font-family: 'Arial','sans-serif'; font-size: 13.3333px;">[|1]

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Antes de cada nueva transferencia tanto en el modo Activo como en el Pasivo, el cliente debe enviar otra vez un comando de control (PORT o PASV, según el modo en el que haya conectado), y el servidor recibirá esa conexión de datos en un nuevo puerto aleatorio (si está en modo pasivo) o por el puerto 20 (si está en modo activo). En el protocolo FTP existen 2 tipos de transferencia en ASCII y en binarios.

<span style="color: #000000; font-family: 'Arial','sans-serif';">Tipos de transferencia de archivos en FTP
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Es importante conocer cómo debemos transportar un archivo a lo largo de la red. Si no utilizamos las opciones adecuadas podemos destruir la información del archivo. Por eso, al ejecutar la aplicación FTP, debemos acordarnos de utilizar uno de estos comandos (o poner la correspondiente opción en un programa con interfaz gráfica): <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Adecuado para transferir archivos que sólo contengan caracteres imprimibles (archivos ASCII, no archivos resultantes de un procesador de texto), por ejemplo páginas HTML, pero no las imágenes que puedan contener. <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Este tipo es usado cuando se trata de archivos comprimidos, ejecutables para PC, imágenes, archivos de audio...
 * <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Tipo ASCII
 * <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Tipo Binario

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;"> Ejemplos de cómo transferir algunos tipos de archivo dependiendo de su extensión: <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">En la red existen diversas soluciones de software que desarrolla este tipo de tecnología, los más conocidos, son <span class="mw-redirect" style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">Filezilla <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">(software libre) y <span class="new" style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">CuteFTP <span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">(shareware).
 * ** Extensión de archivo ** ||  ** Tipo de transferencia **  ||
 * txt (texto) || ascii ||
 * html (página WEB) || ascii ||
 * doc (documento) || binario ||
 * ps (poscript) || ascii ||
 * hqx (comprimido) || ascii ||
 * Z (comprimido) || binario ||
 * ZIP (comprimido) || binario ||
 * ZOO (comprimido) || binario ||
 * Sit (comprimido) || binario ||
 * pit (comprimido) || binario ||
 * shar (comprimido) || binario ||
 * uu (comprimido) || binario ||
 * ARC (comprimido) || binario ||
 * tar (empaquetado) || binario ||

<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 17.3333px;">Guía de comandos FTP
<span style="color: #000000; font-family: 'Arial','sans-serif'; font-size: 13.3333px;">impresión de caracteres # a medida que se transfieren archivos, a modo de barra de progreso.
 * ** Comando y argumentos ** ||  ** Acción que realiza **  ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">open ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">servidor // || Inicia una conexión con un servidor FTP. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">close ** o **<span style="font-family: 'Calibri','sans-serif';">disconnect ** || Finaliza una conexión FTP sin cerrar el programa cliente. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">bye ** o **<span style="font-family: 'Calibri','sans-serif';">quit ** || Finaliza una conexión FTP y la sesión de trabajo con el programa cliente. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">cd ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">directorio // || Cambia el directorio de trabajo en el servidor. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">delete ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">archivo // || Borra un archivo en el servidor ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">mdelete ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">patrón // || Borra múltiples archivos basado en un patrón que se aplica al nombre. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">dir ** || Muestra el contenido del directorio en el que estamos en el servidor. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">get ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">archivo // || Obtiene un archivo ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">noop ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">No Operation // || Se le comunica al servidor que el cliente está en modo de no operación, el servidor usualmente responde con un «ZZZ» y refresca el contador de tiempo inactivo del usuario. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">mget ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">archivos // || Obtiene múltiples archivos ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">lcd ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">directorio // || Cambia el directorio de trabajo local. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">ls ** || Muestra el contenido del directorio en el servidor. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">prompt ** || Activa/desactiva la confirmación por parte del usuario de la ejecución de comandos. Por ejemplo al borrar múltiples archivos. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">put ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">archivo // || Envía un archivo al directorio activo del servidor. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">mput ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">archivos // || Envía múltiples archivos. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">pwd ** || Muestra el directorio activo en el servidor. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">rename ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">archivo // || Cambia el nombre a un archivo en el servidor. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">rmdir ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">directorio // || Elimina un directorio en el servidor si ese directorio está vacío. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">status ** || Muestra el estado actual de la conexión. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">bin ** o **<span style="font-family: 'Calibri','sans-serif';">binary ** || Activa el modo de transferencia binario. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">ascii ** || Activa el modo de transferencia en modo texto ASCII. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">! ** || Permite salir a línea de comandos temporalmente sin cortar la conexión. Para volver, teclear **<span style="font-family: 'Calibri','sans-serif';">exit ** en la línea de comandos. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">? ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">nombre de comando // || Muestra la información relativa al comando. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">? ** o **<span style="font-family: 'Calibri','sans-serif';">help ** || Muestra una lista de los comandos disponibles. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">append ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">nombre del archivo // || Continua una descarga que se ha cortado previamente. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">bell ** || Activa/desactiva la reproducción de un sonido cuando ha terminado cualquier proceso de transferencia de archivos. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">glob ** || Activa/desactiva la visualización de nombres largos de nuestro PC. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">literal ** || Con esta orden se pueden ejecutar comandos del servidor de forma remota. Para saber los disponibles se utiliza: **<span style="font-family: 'Calibri','sans-serif';">literal help **. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">mkdir ** || Crea el directorio indicado de forma remota. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">quote ** || Hace la misma función que **<span style="font-family: 'Calibri','sans-serif';">literal **. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">send ** //<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">nombre del archivo // || Envía el archivo indicado al directorio activo del servidor. ||
 * **<span style="font-family: 'Calibri','sans-serif'; font-size: 13.3333px;">user ** || Para cambiar nuestro nombre de usuario y contraseña sin necesidad de salir de la sesión ftp. ||