File Transfer Protocol FTP. File Transfer Protocol. Fue diseñado para transferir archivos de manera eficiente mediante un modelo del tipo Cliente-Servidor entre dispositivos de Internet. Tiene en cuenta detalles respecto de la manera en se mueven los archivos, provee comandos para soporte de varias operaciones (por ejemplo para poder ver los contenidos de un directorio o borrar archivos) y opera apoyado sobre TCP. Se definió originalmente en la RFC-959 (Octubre de 1985), siendo uno de los primeros protocolos de Internet. Usa dos conexiones TCP como canales lógicos de conexión entre Servidor y procesos de usuario. Le agrega complejidad pero lo hace más flexible. La Conexión de Control: se crea al establecer la sesión FTP y se usa para intercambio de información de control. La Conexión de Datos: se crea cada vez que se intercambian datos entre Cliente y Servidor, finalizando al terminar el envío de un archivo.
FTP Programas C/S SERVIDOR: Los programas servidores FTP no suelen encontrarse en los ordenadores personales. Un usuario normalmente utilizará un cliente FTP para conectarse remotamente a un servidor, 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 SFTP (Secure File Transfer Protocol). CLIENTE: Es un programa en el ordenador del usuario que emplea el protocolo FTP para conectarse a un servidor. Se puede: enviar, recibir, renombrar o sobreescribir archivos. Hay clientes ya integrados en diversos programas, como por ejemplo en el Microsoft Explorer (ftp://username@yourdomainname.com ) o en el Windows Commander, SmarterFTP, WS_FTP, Filezilla, etc. Casi todos los navegadores integran un cliente FTP. Para utilizar un cliente FTP, se necesita conocer el nombre del archivo, el ordenador en que reside o servidor en el caso de descarga de archivos, el ordenador al que se quiere transferir el archivo en caso de querer subirlo desde el cliente al servidor, y la carpeta en la que se encuentra.
File Transfer Protocol FTP. Primero debe establecerse la Conexión de Control. El Servidor asume un rol pasivo en este contexto, escuchando en un port bien conocido: port 21. El Usuario inicia la conexión mediante la apertura de una conexión TCP sobre este port, desde un port efímero. Una vez establecida la conexión TCP, el Usuario puede comenzar a enviar comandos y recibir respuestas del Servidor por medio de este canal. Primero el Usuario debe autenticarse (secuencia de login FTP), para obtener un entorno de trabajo permitido (control de tipo de acceso) y usar los recursos permitidos dentro del Servidor.
FTP- Interacción Cliente-Servidor FTP utiliza dos conexiones TCP, una de control y otra de datos. Conexión de Control el Servidor hace un open pasivo en el port 21 y espera la conexión de algún Cliente. Sorprendentemente, la Conexión de Datos se crea cada vez que se transfiere un archivo entre Cliente y Servidor (TOS de IP en máxima velocidad ). El Cliente hace el open activo sobre la conexión de control, que se mantiene durante todo el tiempo en que Cliente y Servidor se comunican y se usa para la transferencia de comandos desde Cliente a Servidor y transporte de respuestas desde el Servidor (TOS de IP en mínimo retardo ).
FTP- Facilidades Acceso interactivo, que permite al usuario, entre otras cosas, listar archivos de un directorio o máquina. FTP provee un help para todos los comandos disponibles al usuario. Especificación de Formatos, de tal manera que el usuario puede trabajar especificando si un archivo es de texto o binario. Control de Autenticación de una sola vía, donde el Cliente se identifica frente al Servidor a través de un nombre de login y un password. Es decir que en el Servidor deberá existir un entorno apropiado para el Cliente. Para usar FTP se precisa una cuenta de login en el Servidor o usar un Servidor que permita FTP anonymous. La transferencia de archivos provista por FTP permite copiar archivos completos entre sistemas. FTP fue ideado para trabajar entre hosts diferentes, con diferentes SSOO, estructuras de archivos y quizás diferentes conjuntos de caracteres. En vez de usar NVT, como telnet, FTP maneja las diferencias soportando sólo un número limitado de archivos y de estructuras de archivos.
FTP Acceso de usuario Acceso de usuario mediante una cuenta 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 se debe introducir un nombre en el login y una contraseña que los identifica unívocamente. Cliente FTP basado en Web Se trata de un Cliente FTP al cual se puede acceder a través del 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. 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.
FTP Acceso anónimo Acceso anónimo. Los servidores FTP anónimos ofrecen sus servicios libremente a todos los usuarios, permiten acceder a sus archivos sin necesidad de tener un identificador de usuario o una cuenta. 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. Si un servidor posee servicio FTP anonymous solamente con teclear la palabra anonymous, cuando se le pregunte el usuario, tendrá acceso a ese sistema. No se necesita ninguna contraseña preestablecida, aunque normalmente se suele utilizar la dirección de correo electrónico propia. Así se consigue acceso a los archivos del FTP, aunque con menos privilegios que un usuario normal. Normalmente solo se podrá leer y copiar los archivos existentes, pero no modificarlos ni crear otros nuevos. 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. #/ ftp <server name> connected to server name... Name ( server name ): anonymous Password: midirección@hotmail.com welcome to server name...
FTP Acceso invitado Modos de Conexión Acceso de invitado. 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 o guest, que se puede contemplar como una mezcla de los dos anteriores. 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. Modos de conexión del cliente FTP FTP admite dos modos de conexión del cliente. Activo, 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. Pasivo o PASV, porque en este caso envía comandos tipo PASV. En ambos modos el cliente establece una conexión con el servidor mediante el puerto 21, que establece el canal de control.
FTP- Representación de Datos Se incluyen diferentes formatos de representación debido a que ciertos tipos de archivos usan diferentes representaciones en diferentes sistemas. Por ejemplo, los archivos de texto usan el código ASCII, pero pueden diferir en la manera de codificar los caracteres de control para indicar el final de línea o texto. Por ejemplo, en UNIX, se usa el (LF), en los computadores Apple (CR) y en Windows ambos (CR+LF). Por este motivo, FTP, considera 4 tipos de datos que determinan la representación de un archivo. EXTENSION DEL ARCHIVO txt (texto) html (página WEB) doc (documento) ps (poscript) hqx (comprimido) Z (comprimido) ZIP (comprimido) ZOO (comprimido) Sit (comprimido) pit (comrpimido) shar (comprimido) uu (comprimido) ARC (comprimido) tar (empaquetado) TIPO DE DATOS ascii ascii binario ascii ascii binario binario binario binario binario binario binario binario binario ASCII: Archivo de texto ASCII, con líneas terminadas con CR+LF. Cada sistema operativo lo trasladará a su propio formato. EBCDIC: Como ASCII, pero para archivos que usan caracteres EBCDIC IBM. Image: Sin estructura interna, transmitidos byte por byte, o modo caja negra. Local: Para manejo de archivos que guardan datos en bytes lógicos cuyo número de bits no es 8.
FTP- Control de Formato y Estructura de Datos. Para tipos ASCII y EBCDIC. Sirve para especificar la representación particular del formato vertical del archivo. Se ideó para manejo de archivos transferidos entre máquinas e impresoras. Obsoleto: Non Print: Default, sin formato vertical. Telnet Format: Caracteres de control vertical usados en Telnet. Carriage Control / FORTRAN: Caracteres de control FORTRAN. Especificación de la estructura de datos de archivos con 3 posibilidades: File Structure: Stream de bytes sin estructura interna. Formato default. Record Structure: Conjunto de registros secuenciales, cada uno delimitado por marcador end-of-record. Page Structure: Archivo de páginas indexadas. Obsoleto.
Transmisión de Datos (Conexión de Datos) Stream (Default): Los datos se envían sobre la conexión TCP como un flujo (stream) continuo de bytes sin estructurar. No se usa formato de mensaje ni campos en el header, por eso el final del archivo debe ser indicado mediante el cierre de la conexión por parte del TCP Tx. Es el modo más usado por ser el más sencillo, general y eficiente. Modo Bloque: El archivo se transmite como una serie de bloques de datos precedidos 3 bytes de cabecera. Los bytes de la cabecera contienen un campo contador y un código descriptor. El campo contador indica la longitud total del bloque de datos en bytes. El código descriptor define el último bloque del fichero (EOF), último bloque del registro (EOR), indicador de reinicio (para Recuperación de Errores y Reinicio) o datos sospechosos ( por ejemplo por que los datos transferidos pueden contener errores y no son fiables). Compressed: La RFC menciona métodos sencillos para comprimir caracteres que se repiten, como por ejemplo, los blancos. La información comprimida se transmite de un modo similar al previo. Obsoleto.
Comandos FTP Se envían a través de la conexión de control en NVT ASCII y requieren del par (CR,LF) al final de cada línea, o sea en cada comando o respuesta. Los únicos comandos Telnet permitidos de C -> S son <IAC, IP> y <IAC, DM> en modo URG y se usan para abortar una transferencia de archivo o requerir algo del Servidor cuando la transferencia está en progreso. También se pueden intercambiar comandos de opciones desde C -> S, pero el Servidor se restringe a contestar DONT o WONT. En algunos casos hay una relación directa entre los comandos que escribe el usuario y los que se transmiten por la conexión de control, pero en otras oportunidades un sólo comando de usuario genera múltiples comandos FTP. Los comandos más conocidos de C -> S son: Comando ABOR Descripción Aborta comandos FTP previos y cualquier transferencia de datos LIST filelist Lista archivos o directorios. PASS password Password en el S. PORT n1,n2,n3,n4,n5,n6 Dirección IP y port de C. QUIT Logoff del S. RETR file Get un archivo. STOR file Put un archivo. SYST S retorna tipo de sistema TYPE type Especificar tipo de archivo: A o I. USER username Nombre de Usuario en S
Comandos FTP Desde el punto de vista del usuario el sistema es interactivo. Una vez que el usuario invoca el Cliente, éste realiza la siguiente secuencia de manera repetida: lee una línea de entrada, realiza una búsqueda para extraer comandos y sus argumentos y, por último ejecuta el comando con los argumentos especificados. Por ejemplo, al iniciar la sesión el usuario invoca el comando ftp, el Cliente lo interpreta y presenta la línea: % ftp > Si el usuario escribiera help, el C presentaría un listado de comandos. Escribiendo help y el nombre del comando se obtiene mayor información del comando en cuestión.
Comandos FTP Existen comandos identificadores de control de acceso. Por ejemplo: USER ( nombre de usuario), PASS (contraseña), ACCT (cuenta), CDUP (cambios de directorios), etc. Existen comandos para enviar parámetros de la transferencia, por ejemplo el puerto, el tipo de datos, el modo de transmisión, etc. que tienen valores por defecto, pero mediante la utilización de estos comando podemos modificarlos. Ej: PORT, MODE, TYPE, STRU, PASV, etc.. Los comandos para utilizar los servicios que ofrece FTP definen la transferencia del fichero o la función del sistema de ficheros que requiere el usuario. El argumento normalmente será un nombre de ruta. Este clase de comandos sirven para interactuar con el servidor. Ej: STOR (almacenar ), RETR (recuperar), LIST (listar), RNFR (Renombrar de), RNTO (Renombrar a), ABOR (Interrumpir), etc.
Comandos FTP Transmitir un archivo de C <-> S. Transmitir un listado de archivos o directorios de S -> C. Las listas de archivos se transmiten sobre la conexión de datos sino se deberían transmitir como múltiples líneas sobre la conexión de control. Esto facilita la cuestión de límites respecto del tamaño y permite al Cliente colocar el listado en un archivo en lugar de presentarlo en pantalla. Recordar que la conexión de control está siempre presente, en cambio la de datos se establece a demanda. El modo normal de transmisión es stream y end-of-file se interpreta como cierre de conexión de datos. De este modo, se requiere una nueva conexión cada vez que se establece un archivo o se lista un directorio.
Respuestas FTP Son números de tres dígitos en ASCII, seguidos de un mensaje opcional, este último para interpretación entendible para el usuario ya que los Clientes generalmente presentan al usuario tanto el número como su interpretación. El protocolo SMTP usa las mismas convenciones de comandos y respuestas, donde los números presentan diferente significado según su posición, a saber: Respuesta 1yz; 125 Data Connection already open; transfer starting 2yz; 200 Command OK, 214 Help message, 221 Goodbye 3yz; 331 Userneme OK, password required 4yz; 425 Can t open data connection, 452 Error writing file 5yz; 500 Syntax error (unrecognized commands), 501 Syntax error (invalid arguments), 502 Unimplemented MODE type. X0z X1z X2z X3z X4z X5z Descripción Respuesta preliminar positiva. La acción se está comenzando pero se espera otra respuesta antes de enviar otro comando. Respuesta de completitud positiva. Puede enviarse un nuevo comando Respuesta intermedia positiva. El comando se ha aceptado pero debe enviarse otro. Respuesta de completitud negativa transitoria. La acción requerida no tuvo lugar, pero la condición de error es temporaria tal que el comando puede reeditarse más tarde. Respuesta de completitud negativa permanente. El comando no se aceptó y no se debería reintentar. Errores de Sintaxis Información Conexiones. Las respuestas se refieren a las conexiones de control o de datos. Autenticación y accounting. Respuestas para los comandos de login o accounting. No especificado. Estado del Sistema de Archivos.
Conexión FTP El procedimiento normal implica una serie de cuestiones respecto de los números de port: 1. Desde un port efímero (1035, por ejemplo) el C hace un open activo al port 21 del S, estableciéndose de esta manera la Conexión de Control. 2. La creación de la Conexión de Datos queda a cargo del C, ya que depende de los comandos que edite el usuario (get, put, ls). 3. La conexión de datos se levanta desde un port efímero de lado C. El C hace un open pasivo sobre el port elegido (1036, por ejemplo). 4. Mediante el comando PORT, el C envía el número de port efímero al S a través de la conexión de control. El comando va acompañado de 6 números en ASCII: 4 corresponden a la dirección IP del C y los dos siguientes al número de port (16 bits) (140.252.13.34,4,12). El número de port es (4)*256 + (12) =1036. 5. El S recibe el número de port en la conexión de control y edita un open activo desde el port 20 al port efímero (1036). 6. Generalmente el S también hace el active close de la conexión de datos, excepto que el C coloque un archivo en el S.
Modo Activo FTP Modo activo (también considerado modo normal) : se establecen dos conexiones distintas. En primer lugar se establece una conexión para la transmisión de comandos (desde cualquier puerto del C superior a 1024 hacia el puerto 21 del server) y por esa misma conexión, mediante un comando PORT se indica al server cuál es el puerto (distinto) de nuestro ordenador que está a la escucha de los datos. Entonces, si bajamos algún archivo, es el servidor el que inicia la transmisión de datos, desde su puerto 20 al puerto que le hemos indicado. Se llama modo activo porque la transmisión de datos es iniciada como proceso distinto desde el servidor, hacia el puerto que le hemos indicado.
Ejemplo de sesión FTP en modo activo. Esta sesión se inicia desde testbox1.slacksite.com (192.168.150.80), a testbox2.slacksite.com (192.168.150.90). El flag de debugging (-d) flag se usa del lado cliente para mostrar qué comandos se intercambian. Lo que está en rojo es la salida debugging que muestra los comandos reales FTP que se transmiten al server y las respuestas generadas por dichos comandos. La salida normal del server se muestra en negro y la entrada de usuario en negrita. Note que se edita el comando que especifica el port del cliente (192.168.150.80). Para hallar el número de port se debe multiplicar el quinto byte por 256 y al resultado agregarle el sexto byte: ( (14*256) + 178) = 3762. testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2 Connected to testbox2.slacksite.com. 220 testbox2.slacksite.com FTP server ready. Name (testbox2:slacker): slacker ---> USER slacker 331 Password required for slacker. Password: TmpPass ---> PASS XXXX 230 User slacker logged in. ---> SYST 215 UNIX Type: L8 Remote system type is UNIX. Using binary mode to transfer files. ftp> ls ftp: setsockopt (ignored): Permission denied ---> PORT 192,168,150,80,14,178 200 PORT command successful. ---> LIST 150 Opening ASCII mode data connection for file list. drwx------ 3 slacker users 104 Jul 27 01:45 public_html 226 Transfer complete. ftp> quit ---> QUIT 221 Goodbye.
Modo Pasivo FTP El hecho que el servidor inicie una conexión sobre el cliente tiene implicaciones de seguridad en cuanto al filtrado de los puertos. Por eso ha surgido un nuevo método FTP, conocido como modo pasivo. En este modo el cliente inicia las dos conexiones sobre el servidor. Cuando inicia una conexión FTP, el cliente abre dos puertos localmente (N > 1023 y N+1). El primer puerto contacta el puerto 21 del servidor, pero en vez de editar el comando PORT, se edita el comando PASV. Como resultado del mismo, el servidor abre un puerto aleatorio (P > 1023) y envía el comando PORT P al cliente. De este modo, el cliente inicia la conexión desde el port N+1 al port P en el servidor para la transferencia de datos.
Veamos un ejemplo de sesión FTP en modo pasivo testbox1: {/home/p-t/slacker/public_html} % ftp -d testbox2 Connected to testbox2.slacksite.com. 220 testbox2.slacksite.com FTP server ready. Name (testbox2:slacker): slacker ---> USER slacker 331 Password required for slacker. Password: TmpPass ---> PASS XXXX 230 User slacker logged in. ---> SYST 215 UNIX Type: L8 Remote system type is UNIX. Using binary mode to transfer files. ftp> passive Passive mode on. ftp> ls ftp: setsockopt (ignored): Permission denied ---> PASV 227 Entering Passive Mode (192,168,150,90,195,149). ---> LIST 150 Opening ASCII mode data connection for file list drwx------ 3 slacker users 104 Jul 27 01:45 public_html 226 Transfer complete. ftp> quit ---> QUIT 221 Goodbye.