CONEXIÓN Y CONFIGURACIÓN DE INTERNET DESDE LINUX

Artículo 5: EL SERVICIO DE FTP

Autor: (c) Santiago Romero
Revista: NetOnline (Prensa Técnica) nº 16, Diciembre-1998




No es necesario utilizar el navegador de WWW para descargar programas de direcciones que comienzan por ftp://, ya que disponemos en nuestro sistema de herramientas mucho más potente para tales menesteres: los programas de ftp. En este artículo aprenderemos los comandos básicos así como la manera de instalar nuestro propio ftp anónimo para que otros accedan a nuestros ficheros desde el exterior.

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.


FTP EN LINUX

Si se necesita transferir un fichero a otra máquina de una red o recuperarlo desde otra (y la red bien puede ser Internet), lo que necesitamos es un programa como ftp. Ftp es un programa sencillo y que viene en cualquier distribución de Linux (en el caso del autor, el paquete instalado es ftp-0.10-2.rpm). Como la mejor manera de aprender es con ejemplos (antes de ver todas las posibilidades que ofrece) supongamos que un compañero nos comenta que es posible obtener la última version de Netscape Communicator en su ftp particular (luego veremos cómo instalar nuestro propio ftp para que cualquiera pueda acceder a él mientras se esté conectado a Internet). Para ello lo único que nos dice es que está en ftp://ftp.juan.es/pub/programas. Sería muy sencillo introducir esta URL (dirección de recurso de Internet) en Netscape Navigator para que éste nos haga de cliente de FTP, pero supongamos que no estamos dentro de XWindow (o que no nos apetece arrancar el navegador, o incluso que nos apetece bajarnos este fichero en varias sesiones, tal y como hacen GetRight y NetVampire para Windows, y que podremos hacer con ftp). Para conseguir nuestro objetivo hacemos:


 [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),

Programa ftp

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.rpm

Es 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.rpm

Con 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?


BAJAR FICHEROS EN VARIAS SESIONES

Nada nos impide continuar la descarga de un fichero otro día y desde el punto en que nos quedamos (sin perder ni un sólo bit) aunque se nos haya cortado la conexión en anteriores intentos. Para hacer esto disponemos del comando reget (con la misma sintaxis de uso que el comando get), el cual comprobará la existencia de un fichero con el mismo nombre que el que pretendemos bajarnos en el directorio actual de tal modo que en caso de existir continuará la descarga en el punto en que se quedo nuestro fichero incompleto, lo cual nos permitirá hacer de una manera muy cómoda y sencilla la descarga de grandes programas en varias sesiones, algo incluido en un programa con mucho tiempo y experiencia a sus espaldas y que algunos programas para Windows 95 pretenden vender como una gran novedad.

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.


MáS COMANDOS FTP

Otros comandos del ftp estándar son:

 !: 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.


SUBIR PAGINAS WEB

Una de las cosas que pregunta mucha gente en los diferentes canales del IRC o en las news consiste en la subida de su página Web (creada en casa) a su directorio personal en su proveedor para que sea accesible al resto de usuarios de Internet. Aún hay mucha gente que no sabe realizar este proceso con lo que deja su espacio (que suele ser de 2Mb o más, dependiendo del servidor) libre en el servidor, y no aprovecha este servicio de Internet. Para solucionar esto disponemos de nuestro potente programa de ftp, que sirve también para este tipo de acciones. Para ello una vez creada nuestra página en casa, hacemos ftp a nuestro servidor (ejemplo: ftp ftp.arrakis.es), y el sistema nos pedirá la habitual identificación.

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 Y WGET

Pese a la gran versatilidad que tiene ftp, en Linux se disponen de algunos programas que pueden facilitar y acelerar algunas de las funciones de ftp, como ncftp (un cliente de ftp más avanzado que el sencillo ftp) y wget, (un programa que permite descargar ficheros de cualquier recurso WWW).

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_Internet
Entre 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/paisajes

Otro 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.


INSTALAR NUESTRO PROPIO FTP

En cierta ocasión, estando en el canal #linux del IRC (ese servicio de chat donde "se habla" de diversos temas y entre muchos usuarios simultáneamente, como veremos en el próximo artículo), un usuario del canal buscaba un archivo y no lo encontraba mediante ninguno de los buscadores existentes, y que yo tenía en el CD de mi distribución Linux. Le ofrecí la posibilidad de que entrara en mi ftp anónimo para bajarse el fichero, y le di las instrucciones para hacerlo, tras lo cual me preguntó la manera de configurar su Linux para permitir aquello que tan útil le había resultado. Lo que se va a comentar a continuación es una manera muy sencilla de instalar un servidor de FTP anónimo para que otros usuarios puedan acceder a él mientras estemos conectados a Internet.

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.rpm

Si 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    pub

Este 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.128

Si 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.128

Obviamente, 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 localhost

En 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 -a

El objetivo de esto es permitir que nuestra máquina sea accesible vía FTP desde el exterior.


EN RESUMEN

En el artículo de este mes hemos aprendido los comandos básicos del FTP y la manera de configurar nuestro Linux para que gestione un servidor de FTP que haga nuestro ordenador más integrado en la Red. En el próximo artículo entraremos con Linux en el mundo del IRC, para los amantes de los chats.

Figura 1: "Sesion de trabajo con el programa ftp."
Santiago Romero


Volver a la tabla de contenidos.