El Protocolo de Transferencia de Ficheros (File Transfer Protocol o, para abreviar, FTP) es uno de los pilares de Internet junto con el acceso a páginas Web (http). Durante mucho tiempo ha sido el servicio TCP/IP de Internet más utilizado, debido a que cualquier distribución Linux (así como en otros Sistemas Operativos) incluye el software necesario, muy fácil de usar y configurar, y de reducido tamaño. Además de esto incluye muchas posibilidades y comandos como veremos a continuación, y ha evolucionado hacia programas más potentes con posibilidad de descarga de datos de directorios o sitios FTP completos y hasta un nivel configurable.
Tal y como se comenta en la documentación, "el Protocolo de Transferencia de Ficheros (FTP) es un protocolo de la familia TCP/IP usado para transferir ficheros entre máquinas que ejecutan TCP/IP (aunque hay programas estilo FTP para otros protocolos). Este protocolo permite transferir ficheros y manipular directorios en máquinas remotas. No está diseñado para permitir el acceso a otra máquina con el fin de ejecutar programas (para eso tenemos telnet), pero resulta la mejor utilidad para manipulación de ficheros.".
Cuando hablamos de FTP estamos hablando (para explicarlo de una manera sencilla) de la descarga o subida de ficheros en Internet entre 2 máquinas, y es lo que permite entrar en ftp.idsoftware.com, por ejemplo, y bajarse la última versión del ejecutable de Quake II para Linux. También nos permite, por ejemplo, entrar en nuestro directorio privado en nuestro Proveedor de Servicios de Internet para poner allí nuestra página Web con el fin de que sea accesible desde el exterior. Para hacer esto disponemos de múltiples posibilidades debido a la disponibilidad de software para ello en Linux, desde ftp hasta ncftp, wget, etc.. Comenzaremos hablando del programa ftp (lo que muchos habituales de Internet llaman "el típico ftp de toda la vida", conocido en las Universidades y sencillos terminales en modo texto cuando no se disponía (o no se necesitaba) del entorno gráfico.
[root@localhost sromero]# ftp juan.es Connected to ftp.juan.es. 220 Juan FTP server (Version wu-2-41) ready. Name (ftp.juan.es:sromero):_En ese momento el programa habrá accedido a la máquina remota, quien nos está pidiendo que nos identifiquemos (Name) con nuestro nombre de usuario (también podríamos haber entrado con ftp y abrir el servidor con open juan.es). Si no somos usuarios habituales de dicha máquina (no poseemos ninguna cuenta especial en la misma), tendremos que identificarnos como anonimo (anonymous) y como password o palabra clave dar nuestra dirección de correo electrónico, proceso conocido como login o ftp anónimo, y que nos permitirá entrar en la máquina remota si ésta tiene permitido el acceso anónimo. Así pues contestamos:
Name (ftp.juan.es:sromero) anonymous 331 Guest login ok, send your complete e-mail address as password. Password:Con lo que la máquina remota nos dará acceso a su sistema de ficheros ftp.
230- ¡Bienvenido al servidor FTP de Juanito! 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> _En ese momento nos percatamos de que la terminal de texto se ha quedado en espera de introducción de comandos por nuestra parte. Ante la pregunta de "¿qué puede hacerse ahora?" surge la respuesta: "estamos en un sistema Unix", con lo que nada nos impide (si están dentro de aquel sistema) desplazarnos entre los distintos subdirectorios (ls, cd, etc.):
ftp> ls 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 6 drwxr-xr-x 6 root root 1024 Jul 17 10:47 . drwxr-xr-x 6 root root 1024 Jul 17 10:47 .. drwxr-xr-x 2 root root 1024 Jul 17 10:47 bin drwxr-xr-x 2 root root 1024 Jul 17 10:47 etc drwxr-xr-x 2 root root 1024 Jul 17 10:47 lib drwxr-xr-x 2 root ftp 1024 Jul 31 09:17 pub 226 Transfer complete.A la vista de los directorios disponibles, vamos a pub/programas (como puede verse en el ejemplo de la figura 1),
como se nos había especificado.
ftp> cd pub 250 CWD command successful. ftp> cd programas 250 CWD command successful. ftp> ls 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 3 drwxr-xr-x 6 root root 1024 Jul 17 09:18 . drwxr-xr-x 6 root root 1024 Jul 17 09:18 .. drwxr-xr-x 6 root root 10221024 Jul 17 09:18 netscape.rpmEs posible hacer uso del comando get para descargar un fichero (o mget para múltiples ficheros), pero antes nótese que uno de los mensajes que se leyó al hacer el login fue "Using binary mode to transfer files", lo cual nos indica que hay 2 maneras de bajarse ficheros: los de formato texto y los binarios, y que debemos especificar el modo correcto para bajarse ficheros de cada tipo (el comando ascii especifica formato ascii mientras que binary especifica formato binario). En este caso no tendremos que teclear binary pues el sistema ya nos avisa de que por defecto se descargan ficheros en binario, de modo que ejecutamos get para obtener el fichero:
ftp> get netscape.rpmCon lo que obtendremos el fichero en nuestra máquina tras esperar el tiempo necesario y tras el cual nos avisará el propio programa de ftp. Pero... ¿y si cuando llevamos 1 hora de conexión necesitamos apagar el sistema o se corta la conexión? ¿Se habrá perdido una hora de teléfono?
Dicho de una manera sencilla: podemos comenzar a bajarnos un programa con get, cortar la descarga mediante CONTROL+C, salir del programa de ftp con quit, entrar al día siguiente y continuar con reget, repitiendo el proceso hasta completar la descarga o download del fichero.
!: Ejecuta la shell para permitirnos la entrada de comandos en nuestro Linux. Con exit volveremos de nuevo al programa de ftp matando el shell. Si se especifica tras la admiración un comando de Linux, éste será ejecutado en la shell abierta (ej: !ls). ascii: especifica tipo de transferencia de ficheros ASCII, en contraposición a ficheros binarios (no texto). bell: le indica al sistema que ejecute un pitido (bell) cuando se finalicen la ejecución de los comandos. binary: especifica tipo de transferencia binaria. bye, quit: termina la sesión ftp y sale. cd, dir, ls, list, mkdir, rmdir, pwd: órdenes básicas de acceso a directorios, equivalentes a la del Sistema Operativo. close: termina la sesión ftp sin salir del programa. delete y mdelete: borran uno o varios ficheros en la máquina remota. get y mget: recibir uno o varios ficheros de la máquina remota (ej: mget *.doc, get "datos.doc"). help, ?: imprimir información de ayuda del programa local. mode, type: especificar el modo de transferencia de ficheros. put y mput: enviar ficheros desde nuestra máquina a la máquina remota. open: conectar a un ftp remoto. remotehelp: obtener ayuda desde el servidor de ftp remoto. rename: renombrar fichero en la máquina remota. user y pass: especificar nuestro nuevo nombre y password. verbose: activar o desactivar modalidad informativa. lcd: Cambiar directorio local.Se puede obtener más información sobre estos comandos en la página man de ftp (man ftp)., aunque la mayoría de los comandos de ftp son bastante explicativos y suelen coincidir con sus equivalentes en Linux.
En lugar de identificarnos como anónimo (anonymous), lo hacemos con nuestro login y password (a veces necesitaremos utilizar los comandos user <nombre>, pass <password>) de acceso a nuestro servidor, con lo que tras la autentificación entramos al servidor dentro de nuestro directorio personal (si contratamos en su día el servicio de página Web), donde podremos preparar los directorios para nuestra página mediante los comandos mkdir y cd, que actúa sobre el servidor remoto, y lcd, que actúa cambiando de directorio en nuestra propia máquina. Una vez seleccionados lo directorios correctos, está disponible el comando put <nombrefichero> (o mput, para multiples ficheros) para subir la página (como otro fichero cualquiera) al servidor. Recuerde que la página principal de su Web debería llamarse index.html si quiere que haya alguna página por defecto en su dirección WWW, y que a partir de ésta debe estar la misma jerarquía de directorios que creó en su PC durante la creación de la misma.
Ncftp se utiliza de forma similar a ftp, pero con la salvedad de que es capaz de hacer logins automáticos (user anonymous y password email), que permite edición de líneas anteriormente escritas (history de comandos), que dispone de un modo visual (a pantalla completa) y en línea (al estilo ftp), con una barra de estado que nos informará en todo momento de qué hace el programa, que recuerda URLs (si entramos una vez en hyper.unc.edu.es, bastaría en otra conexión especificar open hyper o incluso open hy para que recuerde la URL completa), y con un comando get algo especial. El get que usa ncftp es capaz de saltarse los ficheros de los que ya disponemos, de coger múltiples ficheros (por ejemplo, get *), de bajar un programa a trozos sin necesidad de reget (mediante get -C nombre_fichero), bajarnos ficheros de X días de antigüedad o menos ( get -n X *.txt ), o incluso la posibilidad de hacer un get recursivo que entre en subdirectorios remotos y que restaure la misma jerarquía de directorios en nuestra máquina, así como los ficheros que contenga (get -R /pub/juegos). Todo ello con un tamaño en disco de 174.000 bytes para la versión 2.4.3 (ncftp-2.4.3-3.i386.rpm), lo que lo hace ideal para bajarse tutoriales completos sin tener que ir grabando página a página con el navegador, bajar cientos de imágenes de un directorio sin ir una por una, o subir multiples ficheros a una máquina remota (como cuando subimos nuestra página Web a nuestro ISP).
Wget es un programa que hace algo similar a get y reget pero desde la línea de comandos del Linux y que también sirve para direcciones http. La sintaxis de wget es la siguiente:
wget [opciones] dirección_de_InternetEntre las opciones disponibles las más útiles son:
-r : wget recursivo para bajarse todo el directorio. -c : para bajarse un fichero en varias sesiones o continuar desde donde se quedó si se corta la conexión.Un par de ejemplos de uso del programa podría ser:
[root@localhost sromero]# wget -c ftp.juan.es/pub/programas/netscape.rpm [root@localhost sromero]# wget -r ftp.juan.es/pub/fotos/paisajesOtro programa bastante interesante y similar a Wget (pero que trabaja en forma de caché-proxy) es WWWoffline, que permite descargar ficheros y páginas Web completas para navegar por ellas después en modo desconectado.
Para ello, y siguiendo la manera más sencilla posible, instalamos los paquetes anon-ftp y wu-ftpd y permitimos que estos habiliten la carga de los daemons necesarios en memoria (cosa que los paquetes rpm harán automáticamente al instalarlos con el parámetro -i):
[root@localhost sromero]# rpm -i anonftp-2.5-1.rpm [root@localhost sromero]# rpm -i wu-ftpd-2.4.2b16-4.rpmSi no disponemos de dichos paquetes los podemos obtener del ftp de RedHat (ftp.redhat.com), del subdirectorio pub/manhattan/contrib/i386, en formato rpm, para convertirlo a otros formatos de instalación (deb o tar.gz) mediante el script alien si fuera necesario. El primer paquete contiene la estructura básica de un servidor ftp mientras que el segundo contiene el servidor de ftp (un daemon) propiamente dicho.
El primero de los paquetes creará en /home/ftp una estructura de directorios que será el directorio raíz de nuestro ftp, siendo por defecto los siguientes:
[root@localhost home/ftp]# ls bin etc lib pubEste directorio (/home/ftp) será el directorio raíz de los usuarios de nuestro ftp, es decir, que cuando el usuario realice un dir al directorio raíz estará viendo los mismos directorios que nosotros en /home/ftp. La forma de añadir o quitar programas a nuestro ftp resulta, pues, muy sencilla, y se reduce a añadir programas y directorios en el directorio /home/ftp/pub, que es de donde los usuarios remotos deben coger los ficheros. En este subdirectorio crearemos los distintos directorios (ej: juegos, fotos, tutoriales, etc.) e incluiremos los ficheros que queremos que sean accesibles desde el exterior. Tras esto y un reset ya tendremos instalado nuestro servidor de ftp.
A la hora de decirle a alguien que puede entrar en nuestro servidor, recordemos que un usuario "de a pie" no suele disponer de una dirección de Internet propia (como ftp.netscape.com o ftp.idsoftware.com), sino que de lo único de que disponemos es (a menos que hayamos contratado nuestro propio dominio y dns) de una dirección IP a través de la cual somos accesibles desde el exterior. Si queremos que alguna persona del IRC (o, en general, cualquier usuario de Internet) entre en nuestro ftp, le deberemos comunicar nuestra IP ya que es perfectamente posible acceder a un ordenador remoto especificando la dirección IP en lugar del nombre. Para averiguar nuestra dirección IP basta con extraerla del archivo /var/log/messages, de los datos de la última conexión (al final del fichero):
<fecha> localhost pppd[393]: Remote message: <fecha> localhost pppd[393]: local IP address 195.5.78.128Si estamos dentro del IRC otra manera de obtener nuestra dirección IP es mediante comandos del IRC (como /whois, /dns, etc.) con nuestro nick identificativo (/whois Jose). Dicha IP se la comunicaremos a la persona que quiere entrar en nuestro ftp para que pueda hacerlo mediante la orden ftp <dir_IP>:
[pepe@OtraMaquina home]# ftp 195.5.78.128Obviamente, parece muy incómodo tener que especificar cada vez nuestra nueva dirección IP, pero esto es así debido a que las direcciones IP asignadas por nuestro servidor varían en cada conexión, con las excepciones de que hayamos contratado una dirección IP fija (en cuyo caso no variará y todo el mundo podrá acceder a nuestro ftp usando la misma dirección) o de que hayamos contratado un nombre de dominio (como ftp.miftp.org), de manera que se pueda acceder al mismo desde esta notación nominal (mucho más sencillo).
Mediante el anterior comando, cualquier persona conectada a Internet (y mientras lo estemos nosotros), podrá acceder a nuestra jerarquía de directorios /home/ftp, y subir o descargar ficheros, así como utilizar todos los comandos de ftp que hemos visto en el presente artículo, y desde cualquiera de los clientes de ftp comentados (incluyendo, por ejemplo, Netscape) convirtiendo a nuestro ordenador en un servidor de ftp como otro cualquiera.
Si queremos testear si hemos configurado correctamente el ftp, podemos hacer un ftp sobre nuestra propia máquina de manera que se active nuestro servidor y podamos testear el servicio. Para ello especificaremos nuestra dirección IP de loopback (la dirección IP de nuestra máquina, 127.0.0.1), o el nombre de nuestra máquina (por ejemplo, localhost):
[root@localhost sromero]# ftp 127.0.0.1 [root@localhost sromero]# ftp localhostEn principio no debemos tener ningún problema en el test, aunque en caso de obtener un mensaje de "Connection refused", será necesario comprobar la existencia de la siguiente línea en el archivo de seguridad /etc/inetd.conf:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -aEl objetivo de esto es permitir que nuestra máquina sea accesible vía FTP desde el exterior.
Figura 1: "Sesion de trabajo con el programa ftp."
Santiago Romero