• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
10 network applications
 

10 network applications

on

  • 366 views

 

Statistics

Views

Total Views
366
Views on SlideShare
306
Embed Views
60

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 60

http://yimfer.blogspot.com 60

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    10 network applications 10 network applications Document Transcript

    • 1 Network Applications Capítulo 1 Introducción a las redes TCP/IP Conceptos clave • • • • • • • La mayoría de los servicios de redes de Linux están diseñados en torno a una relación de cliente servidor. Las aplicaciones de servidor de red generalmente están diseñadas para permanecer "siempre en ejecución" iniciándose automáticamente cuando el sistema arranca y apagándose solamente cuando el sistema lo hace. Por lo general, sólo el usuario root puede administrar procesos del servidor. Las aplicaciones de cliente de red suelen ejecutarse únicamente cuando están en uso y las puede iniciar cualquier usuario. La mayoría de los servidores de red Linux y clientes se comunican mediante el protocoloTCP/IP. La dirección TCP/IP tanto del proceso del cliente como del proceso del servidor consta de una dirección IP y de un puerto. Los servidores de red suelen utilizar puertos asignados denominados puertos "bien conocidos" como se catalogan en el archivo /etc/services. Los clientes de red suelen utilizar puertos privilegiados de modo aleatorio. A menudo, los puertos bien conocidos residen en el rango de puertos privilegiados por debajo del puerto número 1024. El comando hostname puede utilizarse para examinar la dirección IP actual de la máquina, mientras que el comando netstat -tuna se puede utilizar para examinar todos los puertos abiertos. Clientes, servidores y protocolo TCP/IP Iniciaremos nuestro cuaderno sobre las aplicaciones de redes con la introducción a los conceptos de clientes y servidores y los aspectos básicos del protocolo TCP/IP. Hablaremos del protocolo TCP/IP como si fuera el único protocolo disponible en Internet. Este no es el caso pero es el protocolo más utilizado y los conceptos necesarios para entender se amplían (o reducen) de forma natural a los otros protocolos. La mayoría de las aplicaciones de redes actuales están diseñadas en torno a la relación cliente-servidor. El cliente de red suele ser una aplicación que actúa en nombre de una persona que está tratando de realizar alguna tarea en particular tal como navegar en una URL o ejecutar el comando rdate para preguntar la hora actual a un servidor de tiempo. El servidor de red suele ser una aplicación que ofrece servicios, tales como entregar el contenido de las páginas web o dar la hora actual. El diseño de (aplicaciones que actúan como) clientes de red y (aplicaciones que actúan como) servidores de red difiere dramáticamente. Con el fin de apreciar las diferencias, los compararemos con los agentes en una relación cliente-servidor, un cliente comprando una barra de caramelo a un vendedor.
    • 2 Network Applications El servidor Los vendedores y los servicios de red efectivos comparten las siguientes características. Los servidores están altamente disponibles Así como un vendedor siempre debe utilizar la registradora, incluso cuando no hay clientes, los procesos que ejecutan servicios de red necesitan estar ejecutándose, listos para suplir los servicios cuando se soliciten. Por lo general, los procesos que ejecutan servicios de red se inician en el momento de arranque y continúan ejecutándose hasta que la máquina sea apagada. En Linux (y Unix) dichos procesos se conocen como demonios. Por lo general, sólo el usuario root puede iniciar o cerrar procesos que funcionan como servidores de red. Los servidores tienen sitios bien conocidos Además de estar disponibles cuando un cliente necesita el servicio, los vendedores se están dónde saben que los clientes los pueden encontrar. Así como los clientes pueden buscar la ubicación de vendedores de caramelos desconocidos, en los directorios telefónicos y encontrarlos por dirección postal, los clientes de red pueden ubicar servidores de redes desconocidas mediante un hostname, el cual se convierte en la dirección IP utilizada para tener acceso al servicio. El cliente Por el contrario, el cliente de la tienda de caramelos no necesita estar ni altamente disponible ni ser muy conocido. Un cliente no se estará en una tienda de caramelos todo el día por si decide comprar un caramelo. Del mismo modo, los clientes no necesitan permanecer en sitios bien conocidos. Nuestro cliente no se queda todo el día en casa por si alguien pasa a venderle una barra de caramelo. Los procesos que ejecutan clientes de red son iniciados por usuarios normales y por lo general se ejecutan todo el tiempo necesario para completar una tarea. Cuando alguien hace un receso para ir a almorzar, cierra su navegador de red. Además, las aplicaciones de cliente no necesitan tener direcciones fijas, pueden moverse de un lugar a otro. Más adelante veremos esto detalladamente. Direcciones TCP/IP Todo proceso que participa en una conversación TCP/IP debe tener una Dirección IP, así como cada participante en una conversación debe tener un número telefónico. Además, todo proceso en una conversación TCP/IP debe tener un número de puerto, cuya analogía más cercana podría ser una extensión telefónica asociada a un número de teléfono. Los computadores en una red se identificans con una dirección IP. La dirección IP viene en forma de cuatro números enteros, cada uno en un rango de 0 a 255 (no es una
    • 3 Network Applications coincidencia que la cantidad de información pueda codificarse en un byte de memoria) y tradicionalmente separados por puntos así como 192.168.0.3. Esta representación suele conocerse de modo informal como un quad punteado. Los procesos en computadores se identifican con unnúmero de puerto, el cual es un entero entre 1 y 65535 (no es una coincidencia que la cantidad de información se codifique en 2 bytes de memoria). Cada vez que un proceso quiere participar en una conversación TCP/IP con otro proceso, el kernel debe asignarle primero un número de puerto. El protocolo TCP/IP permite dos procesos, para localizarse entre sí, cada uno se identifica con una dirección IP y un número de puerto. La dirección IP sirve para localizar la máquina en la que el proceso se está ejecutando (esta es la "parte del protocolo IP") y el número de puerto se utiliza para localizar el proceso correcto en la máquina (esta es la parte "TCP"). Sockets Con el fin de ilustrar una transacción típica TCP/IP, examinaremos la conversación entre el navegador de red mozilla de un estudiante fictisio ejecutándo en la máquina station3.example.com, lo que se traduce en una dirección IP 123.45.67.89 y el servidor de red httpd ejecutando en academy.redhat.com, lo que se traduce en una dirección IP de 66.187.232.51. El proceso suele parecerse a lo siguiente. 1. Cuando la máquina academy.redhat.com arranca, se inicia el proceso httpd. Primero asigna un socket, ejecuta bind al puerto 80 y comienza a listen conexiones. 2. En algún momento más tarde, quizás minutos o días, el proceso mozilla se inicia en la máquina station3.example.com. También asigna un socket y solicita connect al puerto 80 de la máquina 66.187.232.51. Puesto que no pidió un número de puerto particular, el kernel provee uno aleatorio, digamos 12345. Como le solicita la conexión, provee su propia dirección IP y el número de puerto (asignado de modo aleatorio) al servidor. 3. El servidor selecciona la conexión accept. El socket establecido se identifica ahora con dirección IP y número de puerto del cliente y del servidor. Una vez se establece el socket, los procesos mozilla y httpd pueden leer información con read y escribir a un archivo con write de un modo tan sencillo como leer y escribir desde un archivo, (recuerde ..."todo es un archivo", incluyendo las conexiones de red! Para fines más prácticos, un socket es sólo otro descriptor de archivo). Los verbos resaltados en esta sección bind (unir), listen (escuchar), connect (conectar), accept (aceptar), e inclusoread (leer) y write (escribir) son términos bien definidos en Linux (y Unix). También son los nombres de llamadas al sistema de programación que realizan cada paso. Figure 1. Un socket TCP/IP entre un navegador de red Mozilla y un servidor Apache
    • 4 Network Applications En el protocoloTCP/IP, un socket se define como la combinación de una dirección IP y el número de puerto del servidor y cliente. Por ejemplo, ¿qué sucedería si nuestro estudiante estuviera ejecutando múltiples versiones de Mozilla, cada uno haciendo solicitudes de academy.redhat.com? o ¿qué sucedería si múltiples usuarios estuvieran usando la máquina station3.example.com simultáneamente todas accediendo academy.redhat.com? ¿De qué forma mantendría en orden un servidor de red qué conversación estaba teniendo con cuál cliente? A cada proceso de cliente se le asignaría un número de puerto distinto y por lo tanto conversa con el demonio httpd mediante un socket diferente. Figure 2. Múltiples sockets TCP/IP Más acerca de puertos Servicios bien conocidos y el archivo /etc/services En nuestro ejemplo, mencionamos que el proceso httpd solicitó bind al puerto 80, y en retorno, el proceso mozilla solicitó connect al puerto 80 del servidor. ¿Cómo se
    • 5 Network Applications convino que el puerto 80 era el apropiado para el servidor de red? Los servicios de Internet tradicionales tales como el servidor de red o el servidor ftp o el servidor smtp (de correo electrónico), se conocen como servicios bien conocidos. En máquinas de Linux y (Unix), el catálogo de servicios bien conocidos, y los puertos asignados a ellos se mantienen en el archivo /etc/services. Observe que tanto el cliente como el servidor necesitan concordar con el número apropiado de puerto para que el archivo /etc/services sea tan importante en la máquina del cliente como en la del servidor. El sólo hecho de que un servicio se liste en el archivo /etc/services no significa que usted está ejecutando (o incluso siendo capaz de ejecutar) ese servicio bien conocido. Puertos privilegiados A diferencia de los clientes, los procesos que ejecutan servidores de red suelen solicitar el puerto al que quieren vincularse. Solamente un proceso puede vincularse a un puerto en un tiempo determinado (¿A qué se debe esto?) Los puertos menores de 1024 se conocen como puertos privilegiados y son tratados de modo especial por el kernel. Únicamente los procesos ejecutándose como el usuario root pueden enlazarse a puertos privilegiados, (esto ayuda a asegurar que si elvis tuviera una cuenta en la máquina academy.redhat.com, no podría iniciar una versión falsa de un servidor de red que podría distribuir información falsa). En un principio, los puertos bien conocidos y los puertos con privilegios pretendian coincidir pero en la práctica hay más puertos bien conocidos que privilegiados. Determinar los servicios actuales de red TCP/IP Uso de hostname para visualizar la dirección IP actual El comando hostname, sin argumentos, muestra el nombre del equipo de la máquina actual. Con la opción -i, la dirección IP de la máquina se visualiza en su lugar. [elvis@station elvis]$ hostname station.example.com [elvis@station elvis]$ hostname -i 172.16.62.9 ¿Qué sucede si hay múltiples direcciones IP? El diseño del comando hostname es un poco equívoco, porque las máquinas pueden tener fácilmente más de una dirección IP (una para cada red múltiple de tarjetas de interfaz, por ejemplo). En dichas situaciones, no hay razón para que cualquier dirección IP tenga prioridad sobre las otras. No obstante, por razones históricas, el kernel mantiene el rastro de un parámetro conocido como su nombre del equipo y el comando hostname -i presenta la dirección IP asociada con éste. Uso del comando netstat para ver los puertos abiertos
    • 6 Network Applications Cuando un puerto es utilizado por un socket se le conoce como puerto abierto. El comando netstat sirve para ver una variedad de información de redes incluyendo los puertos abiertos. Infortunadamente, cuando un comando es llamado sin ninguna opción la salida del comando netstat se inunda de información poco interesante, sockets locales "Unix" utilizados para comunicarse entre procesos en la misma máquina. Sin embargo, cuando se llama con las siguientes opciones se ve información más interesante. Table 1. Opciones para el comando netstat Opción Efecto -t Presenta los sockets TCP -u Presenta los sockets UDP -n Presenta la dirección IP en lugar del hostname -a Presenta todos los sockets incluso aquellos en estado LISTEN Muchas más opciones están disponibles, para mayor información acuda a la página de manual netstat(8). Las siguientes opciones se escogieron, no solo porque cuando se combinan producen una salida interesante, sino porque también son fáciles de recordar: por ejemplo, "tuna" (atún). Cuando se invoca con las siguientes opciones, la salida de netstat es similar a la siguiente. [elvis@station elvis]$ netstat -tuna Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:32768 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:777 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 127.0.0.1:32769 ESTABLISHED
    • 7 Network Applications tcp 0 ESTABLISHED tcp 0 ESTABLISHED ... tcp 0 ESTABLISHED tcp 0 TIME_WAIT tcp 0 TIME_WAIT ... tcp 0 ESTABLISHED tcp 0 ESTABLISHED udp 0 udp 0 ... 0 172.16.62.9:32903 172.16.62.8:6001 0 172.16.62.9:32848 172.16.62.8:6001 0 172.16.62.9:33325 172.16.62.8:6001 0 127.0.0.1:33953 127.0.0.1:631 0 127.0.0.1:33952 127.0.0.1:631 314 127.0.0.1:32769 127.0.0.1:631 0 172.16.62.9:34387 172.16.62.8:22 0 0.0.0.0:32768 0 0.0.0.0:177 0.0.0.0:* 0.0.0.0:* De las muchas líneas, podemos retirar aquellas asociadas con el protocolo udp y concentrarnos en las columnas 4, 5 y 6 de las filas asociadas con tcp. Table 2. Columnas relevantes desde la salida de netstat Columna Título Función 1 Protocolo El protocolo del socket. Nos referiremos a los sockets tcp. 4 Dirección local La dirección IP y el número de puerto de la mitad local del socket. 5 Dirección extranjera La dirección IP y el número del puerto de la mitad remota del socket. 6 Estado El estado de la conexión TCP. Nos referiremos a los estados más interesantes LISTEN y ESTABLECIDO. Direcciones especiales IP Las siguientes direcciones IP pueden hallarse en la columna de dirección local de la salida anterior. Dirección IP Función 172.16.62.9 La dirección IP externa de la máquina tal como la reportó el comando hostname -i. 127.0.0.1 La dirección bucle local. Cada máquina que utiliza las redes TCP/IP es compatible con la dirección de bucle local o loopback. Las conexiones a la máquina o desde la máquina desde esta dirección siempre se retroalimentan a la máquina local para que la comunicación pueda ocurrir entre dos procesos en la misma máquina. La conversación que se presenta
    • 8 Network Applications Dirección IP Función sobre la dirección de bucle local ocurre internamente, no se expone a la red. 0.0.0.0 Esta dirección especial IP sirve para referirse a "todas" las direcciones IP disponibles. Cuando un proceso se enlaza a un determinado puerto, puede elegir entre utilizar únicamente una dirección particular externa, sólo la dirección de bucle local o todas las direcciones IP disponibles. Sockets de escucha Los sockets de escucha son conexiones pertenecientes a un servidor antes de que los clientes se presenten. Por ejemplo, al final del primer paso de nuestra conexión TCP/IP de muestra anterior, el proceso httpd tendría una conexión abierta en el estado de escucha. Observe en la salida anterior que para las conexiones de escucha, sólo se define la mitad de la dirección. Conexiones establecidas Como su nombre lo implica, los sockets establecidos tienen un proceso de cliente y un proceso de servidor con comunicación establecida. Uniendo esfuerzos Ahora podemos reunir algunas de las partes para analizar unas pocas líneas extraídas de la salida anterior. tcp LISTEN 0 0 0.0.0.0:80 0.0.0.0:* Este socket está conectado a todas las interfaces en el puerto 80 en el estado de ESCUCHA. Aparentemente esta máquina también tiene un servidor de red httpd escuchando activamente conexiones de clientes. tcp LISTEN tcp LISTEN 0 0 127.0.0.1:631 0.0.0.0:* 0 0 127.0.0.1:25 0.0.0.0:* Estos dos sockets están escuchando conexiones, pero sólo en la dirección de bucle local. Deben pertenecer a servicios que esperan recibir conexiones desde otros procesos en la máquina local pero no desde la red. Para determinar a qué servicios pertenecen estos puertos ejecutamos un grep desde el archivo /etc/services. [elvis@station elvis]$ grep 25 /etc/services smtp 25/tcp mail smtp 25/udp mail timed 525/tcp timeserver
    • 9 Network Applications timed 525/udp timeserver prospero-np 1525/tcp privileged prospero-np 1525/udp [elvis@station elvis]$ grep 631 /etc/services ipp 631/tcp Protocol ipp 631/ucp Protocol # Prospero non- # Internet Printing # Internet Printing Aparentemente, cualquier proceso que haya solicitado el puerto 25 está escuchando clientes de correo electrónico. Probablemente es el demonio sendmail. El proceso de escucha en el puerto 631 está escuchando clientes de impresión. Probablemente es el demonio de impresión cupsd. Ambos servicios se tratarán más adelante en este cuaderno. tcp 0 ESTABLISHED 314 127.0.0.1:32769 127.0.0.1:631 Esta línea refleja una conexión establecida entre dos procesos ambos en la máquina local (observe la dirección IP de bucle local para los dos). El primero está conectado al puerto 32769 (probablemente un puerto cliente asignado de modo aleatorio) y el segundo al puerto 631. Algunos procesos en la máquina local deben estar comunicándose con el demonio cupsd. tcp 0 ESTABLISHED 0 172.16.62.9:34387 172.16.62.8:22 Nuestra línea extraída representa una conexión establecida entre lo que aparentemente es un cliente en nuestra máquina local, conectado al servicio enlazado al puerto 22 en nuestra máquina remota. De nuevo, trataremos de llamar a grep para buscar el servicio bien conocido asociado con el puerto 22. [elvis@station elvis]$ grep 22 /etc/services ssh 22/tcp Protocol ssh 22/udp Protocol imap3 220/tcp Access imap3 220/udp ... # SSH Remote Login # SSH Remote Login # Interactive Mail # Protocol v3 Aparentemente, esta línea representa una conexión activa entre un cliente ssh en la máquina local y un demonio sshd en una máquina con una dirección IP de172.16.62.8. Ejercicios en línea Lab Exercise Objetivo: Familiarizarse con la configuración y actividad TCP/IP.
    • 10 Network Applications Estimated Time: 10 mins. Especificaciones 1. Crear el archivo ~/lab11.1/ipaddr que contenga su dirección IP de máquina como lo reporta el comando hostname como su única palabra. 2. Crear el archivo ~/lab11.1/listening_ports que contenga una lista de todos los puertos menores que 1024 en su máquina actual, abiertos en el estado de escucha, un puerto por línea. Question 1 1. El archivo ~/lab11.1/ipaddr que contiene su dirección IP actual de la máquina (como lo reportó el comando hostname) como su única palabra. 2. El archivo ~/lab11.1/listening_ports que incluye un listado de todos los puertos menores de 1024 en su máquina actual, abiertos en el estado de escucha, un puerto por línea. Capítulo 2 Impresión Linux Conceptos clave • • • • • • Linux de Red Hat Enterprise utiliza el sistema de impresión CUPS para administrar impresoras. El sistema de impresión CUPS está diseñado en torno al concepto de cola de impresión, el cual combina un directorio de almacenamiento temporal, un filtro y un dispositivo de impresión. Los comandos gnome-print-manager y lpstat pueden utilizarse para navegar colas de impresión disponibles. Los comandos lpr, lpq y lprm se utilizan para someter ("solicitar") trabajos de impresión, averiguar por trabajos importantes y quitar trabajos de impresión pendientes, respectivamente. Todos examinarán la variable de entorno PRINTER para determinar la cola de impresión por defecto. Los comandos lp y cancel se comportan de un modo similar a los comandos lpr y lprm. Muchas aplicaciones imprimen por entubamiento a stdin de una línea de comando personalizable lpr. Introducción a CUPS Linux de Red Hat Enterprise utiliza el Sistema de Impresión Común de Unix (CUPS) para administrar impresoras. En lugar de interactuar con la impresora directamente, los usuarios someten las solicitudes de impresión a las colas de impresión que son manejadas por el demonio cupsd. Las solicitudes de impresión pendientes en una cola
    • 11 Network Applications de impresión se conocen como trabajos de impresión. Una vez se ha sometido el trabajo a la cola, los usuarios pueden retornar rápidamente a cualquiera de las tareas que estaban haciendo. Si la impresora está ocupada con otro documento o no tiene papel, o no está disponible en la red, el demonio cupsd controlará la situación y enviará (o reenviará) el trabajo de impresión a la impresora cuando quede disponible. El demonio cupsd utiliza el Protocolo de Impresión de Internet (IPP), el cual es una extensión directa del protocolo HTTP, diseñado para permitir administración de cola de impresión, a la manera de un sistema operativo independiente. Como resultado, la administración de CUPS tiene mucho en común con la administración del servidor de red. La siguiente gráfica identifica los elementos que participan en la impresión Linux; dichos elementos se tratan en detalle más adelante. Figure 1. Infraestructura de impresión Linux.- Colas de impresión Una cola de impresión es una combinación de los siguientes elementos. • Un directorio de almacenamiento temporal donde se pueden almacenar los trabajos pendientes.
    • 12 Network Applications • • Una serie de filtros que transforman archivos de entrada en formatos apropiados para cualquier dispositivo secundario conectado a la cola. Un dispositivo secundario, tal como una impresora conectada localmente o una cola de impresión definida en una máquina remota. A continuación, se listan algunos de los dispositivos secundarios admitidos por CUPS. o impresoras de puerto paralelo conectadas localmente o impresoras localmente conectadas através de un USB o impresoras de red utilizando la interfaz LPD o impresoras de red utilizando interfaz de JetDirect o Colas de impresión IPP en máquinas remotas o Colas de impresión LPD en máquinas remotas o Servicios de impresión de red (Microsoft) SMB La tarea fundamental que enfrenta el administrador al configurar Linux de Red Hat Enterprise para que utilice una impresora particular o un servicio de red de impresión, es definir y nombrar correctamente la cola de impresión para el recurso. Esto generalmente implica identificar cuáles de los dispositivos secundarios anteriores se utilizan para acceder al dispositivo, elegir un filtro apropiado para el dispositivo, llamar y activar la cola de impresión. En este curso asumiremos que ya se ha hecho todo el trabajo difícil y que las colas de impresión disponibles para su sistema ya se han definido. Navegar las colas de impresión disponibles: gnome-print-manager y lpstat Las colas de impresión están disponibles ya sea porque se han definido en la máquina local o descubierto mediante la habilidad de CUPS para navegar la red local para impresoras publicadas. En el entorno gráfico, gnome-print-manager puede utilizarse para identificar las colas de impresión y controlar los trabajos de impresión sometidos a ellas. El control de impresión puede iniciarse ya sea desde la línea de comandos o al elegir Herramientas del Sistema: Administrador de Impresión desde el menú de aplicaciones GNOME. Figure 1. El administrador de impresión GNOME Cuando el entorno gráfico no está disponible, o incluso cuando lo está, el comando lpstat se puede utilizar para escanear las colas de impresión disponibles desde la línea de comando. La siguiente línea de comandos sirve para clasificar el comando lpstat. Table 1. Opciones para el comando lpstat Opción Efecto -a Lista estado de aceptación de todas las colas de impresión.
    • 13 Network Applications Opción Efecto -o Lista todos los trabajos importantes -p Lista todas las colas de impresión y si están inactivas u ocupadas. -s Lista el estatus de la impresora, incluída la cola por defecto y el dispositivo secundario asociado con cada cola. Para mayor información, vea la página de manual lpstat(1). A continuación, elvis descubre que su cola de impresión de sistema por defecto, se llama simplemente "printer" y que tiene varias colas de impresión disponibles, que parecen referirse a la cola de impresión IPP en un servidor de impresora local. [elvis@station elvis]$ lpstat -s system default destination: printer device for acct2_ire: ipp://printsrv.example.com:631/printers/acct2_ire device for acct_ire: ipp://printsrv.example.com:631/printers/acct_ire device for ba: ipp://printsrv.example.com:631/printers/ba device for checks: ipp://printsrv.example.com:631/printers/checks device for coms: ipp://printsrv.example.com:631/printers/coms device for exec: ipp://printsrv.example.com:631/printers/exec ... Someter y administrar trabajos: lpr, lpq y lprm CUPS utiliza los comandos de UNIX tradicionales para interactuar con el sistema de impresión: lpr somete archivos e información que van a imprimirse, lpq examina el estatus de trabajos de impresión importantes y lprm quita trabajos de impresión pendientes en la cola. Todos los tres comandos utilizan las siguientes técnicas para especificar qué cola de impresión utilizar en el orden especificado. 1. Si se halla la opción -P, su argumento se utiliza para especificar la cola de impresión. 2. Si no se utiliza -P para definir la cola de impresión por defecto, entonces se utiliza la variable de entorno PRINTER, si existe. 3. De otra manera, se utiliza el sistema de cola de impresión por defecto. Someter trabajos con lpr Los trabajos pueden someterse con el comando lpr. Todos los argumentos son interpretados como archivos para someter. Si no se especifican argumentos en su lugar se lee la entrada estándar. Las siguientes opciones sirven para clasificar el comando lpr. Table 1. Opciones del comando lpr Opción Efecto -P Uso de la cola de impresión impresora. impresora
    • 14 Network Applications Opción Efecto -# Imprime # copias -p Representa archivos de texto con un encabezado que contiene el nombre del archivo, nombre del trabajo y el sello de fecha. -r Borra los archivos de impresión nombrados después de imprimir. A manera de ejemplo, a continuación, blondie utiliza el comando lpr para imprimir el archivo README mediante la cola de impresiónsales. [blondie@station blondie]$ lpr -P sales README Control de trabajos con lpq El comando lpq lista los trabajos pendientes en una cola. En el siguiente ejemplo, blondie somete la salida del comando df para la impresora legal y luego examina el contenido de la cola. [blondie@station blondie]$ df | lpr -P legal [blondie@station blondie]$ lpq -P legal legal is ready and printing Rank Owner Job File(s) active elvis 1 services 1st blondie 5 (stdin) Total Size 20480 bytes 1024 bytes Eliminación de trabajos con lprm Blondie sospecha que algo anda mal con la impresora legal y decide iniciar utilizando la impresora sales como su impresora por defecto. Primero configura la variable de entorno PRINTER para reflejar sus nuevas preferencias, luego utiliza el comando lprm para quitar su trabajo de la cola legal. [blondie@station blondie]$ export PRINTER=sales [blondie@station blondie]$ lpq sales is ready no entries [blondie@station blondie]$ lpq -P legal legal is ready and printing Rank Owner Job File(s) active elvis 1 services 1st blondie 5 (stdin) [blondie@station blondie]$ lprm 5 [blondie@station blondie]$ lpq -P legal legal is ready and printing Rank Owner Job File(s) active bowe 1 services [blondie@station blondie]$ df | lpr Total Size 20480 bytes 1024 bytes Total Size 20480 bytes Observe que en el primer comando lpq y el último comando lpr, la variable de entorno PRINTER implícitamente especificó la cola de impresión sales.
    • 15 Network Applications Los comandos de Front End alternativos: lp y cancel En Unix, en los días precedentes a CUPS, se implementaron dos ejecuciones paralelas de la infraestructura de impresión. La primera utilizó los tres comandos presentados anteriormente es decir lpr, lpq, y lprm. La segunda utilizó lp, lpstat y cancel para tareas análogas. Ya hemos visto que lpstat es compatible y es la herramienta preferida para descubrir colas de impresión. Los comandos lp y cancel también están disponibles como variaciones leves de los comandos lpr y lprm. Para mayor información, consulte la página de manual lp(1). Impresión dentro de aplicaciones Linux Con frecuencia las aplicaciones Linux suelen imprimir entubando la información directamente a la entrada estándar del comando lpr. Por lo general, las aplicaciones permiten a los usuarios personalizar la línea de comando lpr, para que, por ejemplo, se pueda especificar una cola de impresión diferente a la cola de impresión por defecto. En la siguiente toma de pantalla del diálogo de impresión de la aplicación Evolution, el campo Printer inicialmente sólo contenía un lpr, pero blondie añadió la opción -P sales para que la salida de evolution vaya a la impresora sales. Figure 1. Diálogo de impresión de Evolution La interfaz de red CUPS Por último, seríamos negligentes si abandonáramos el tema de CUPS sin mencionar la interfaz de red nativa que el demonio cupsd brinda. Como se mencionó, la mayoría de los clientes interactúan con el demonio cupsd mediante el protocolo IPP, el cual es una extensión del protocolo HTTP. Debido a su parecido, el demonio cupsd se comporta en muchas formas como el demonio de web, incluyendo el servidor de las páginas de administración de estilo CGI. Con el fin de ver las páginas de administración de CUPS, apunte un navegador de red hacia la dirección de la máquina local, pero sobreescriba el puerto 80 por defecto con el puerto de servicio bien conocido de los demonios de CUPS, 631. http://localhost:631 El demonio cupsd retornará con una"página de inicio" de CUPS desde donde pueden verse las impresoras y los trabajos de impresión y existe dsiponible una copiosa documentación en línea. Figure 1. La página de inicio de administración de CUPS
    • 16 Network Applications Ejercicios en línea Lab Exercise Objetivo: Administrar trabajos de impresión efectivamente. Estimated Time: 10 mins. Configuración Su estación debería configurarse con una cola de impresión llamada rha_faux. Esta cola de impresión se anexa a la impresora virtual en ejecución en el servidor del aula de clase. Usted puede ver la primera página de cualquier trabajo de impresión enviado a la impresora en el classroom server. Si el comando lpstat -s no menciona una cola de impresión llamada rha_faux o si no puede acceder a la página web del servidor del aula de clase, consúltele a su instructor. Especificaciones 1. Imprima el archivo /etc/services mediante la cola de impresión rha_faux y observe su salida. http://rha-server/cgi-bin/rha/printer. 2. Imprima el archivo /usr/share/backgrounds/tiles/floral.png mediante la cola de impresión rha_faux y observe su salida. http://rha-server/cgibin/rha/printer. 3. Desde su navegador de red, imprima la página actual directamente a la cola de impresión rha_faux. Question 1 1. Tres trabajos de impresión sometidos a la cola de impresión rha_faux. Capítulo 3 Administración de archivos de impresión Conceptos clave • • • • • El formato de impresión primario en Linux es PostScript. gs y ggv ven con anticipación los documentos PostScript. enscript convierte archivo de texto en PostScript decorado. ps2pdf y pdf2ps convierten de PostScript a PDF y viceversa. mpage pueden reordenar las páginas individuales de un documento PostScript. PostScript
    • 17 Network Applications En Linux, la mayoría de las impresoras esperan recibir texto ASCII o gráficas mediante el formato PostScript. A diferencia de la mayoría de los formatos gráficos, PostScript es un lenguaje de guiones de gran alcance, el cual se ha adaptado a la tarea de traducir gráficas en la página impresa. La sofisticación del lenguaje PostScript le permite realizar trabajos complejos, pero debe utilizar un intérprete para entregar archivos PostScript como imágenes. Muchas impresoras ejecutan intérpretes PostScript originales y se conocen como impresoras PostScript. Cada vez que una impresora PostScript recibe un archivo de texto que comienza con los caracteres %!PS, el resto del archivo se interpreta como un guión PostScript, en lugar imprimirse como un texto ASCII directamente (observe la semejanza con el mecanismo de scripts de Unix#!/bin/bash). En Linux (y Unix) una aplicación llamada Ghostscript o simplemente gs ejecuta un intérprete PostScript. La ejecución de un PostScript es una tarea importante y aunque las aplicaciones en Linux pueden utilizarse para ver o manipular archivos PostScript casi todos utilizan Ghostscript como el dispositivo secundario para realizar la traducción real de PostScript en formatos gráficos más accesibles [1]. Entrega de gráficos PostScript con GhostScript Cuando se invoca como el comando gs, el intérprete Ghostscript puede utilizarse para traducir archivos PostScript directamente en la pantalla. Por ejemplo, en el siguiente diálogo, al navegador de red mozilla se le pide imprimir la página web actual no a una cola de impresión, sino a un archivo PostScript titulado output.ps. Figure 1. Impresión a un archivo PostScript Como lo ilustra el comando head, un archivo PostScript es un archivo de texto sencillo que comienza con el "mágico" PostSript%!PS. [elvis@station elvis]$ head output.ps %!PS-Adobe-3.0 %%BoundingBox: 18 18 558 720 %%Creator: Mozilla PostScript module (Galeon/2003022516) %%DocumentData: Clean8Bit %%DocumentPaperSizes: Letter ... La siguiente línea de comandos puede utilizarse para ver el archivo con el intérprete Ghostscript. [elvis@station elvis]$ gs output.ps GNU Ghostscript 7.05 (2002-04-22) Copyright (C) 2002 artofcode LLC, Benicia, CA. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details.
    • 18 Network Applications Loading NimbusRomNo9L-Regu font from /usr/share/fonts/default/Type1/n021003l.pfb... 2410668 1054394 1642520 347466 0 done. Loading NimbusSanL-Regu font from /usr/share/fonts/default/Type1/n019003l.pfb... 2785628 1380272 1662616 358654 0 done. ... Loading StandardSymL font from /usr/share/fonts/default/Type1/s050000l.pfb... 4371596 2780842 1722904 370909 0 done. >>showpage, press <return> to continue<< GS> El intérprete gs devuelve muchas líneas de tipos de fuente que carga, pero al final traduce la imagen en una ventana X por separado. En la línea de comandos, el usuario es abandonado en un intérprete de comandos interactivo Ghostscript GS> . Si el archivo PostScript contiene páginas múltiples, un simple ENTER en el intérprete de comandos Ghostscript visualizará la próxima página. Para aquellos que hablen PostScript, el intérprete puede utilizarse para entregar gráficas de modo interactivo. Para aquellos que tengan menos conocimientos, un simple quit (o CONTROL-D) hará salir al intérprete gs. GS>quit [elvis@station elvis]$ Traducción de PostScript a formatos alternos Por defecto, el intérprete gs traduce los archivos PostScript a una ventana dentro del entorno X. Sin embargo, como lo ilusta la salida de los dispositivos disponibles del comando gs --help, el comando ejecutable gs puede representar un gran número de formatos gráficos. [elvis@station elvis]$ gs --help GNU Ghostscript 7.05 (2002-04-22) Copyright (C) 2002 artofcode LLC, Benicia, CA. All rights reserved. Usage: gs [switches] [file1.ps file2.ps ...] Most frequently used switches: (you can use # in place of =) -dNOPAUSE no pause after page | -q `quiet', fewer messages -g<width>x<height> page size in pixels | -r<res> pixels/inch resolution -sDEVICE=<devname> select device | -dBATCH exit after last file -sOutputFile=<file> select output file: - for stdout, |command for pipe, embed %d or %ld for page # Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PDF Available devices: x11 x11alpha x11cmyk x11gray2 x11gray4 x11mono bmpmono bmpgray bmpsep1 bmpsep8 bmp16 bmp256 bmp16m bmp32b deskjet djet500 laserjet ljetplus ljet2p ljet3 ljet3d ljet4 ljet4d lj5mono lj5gray cdeskjet cdjcolor cdjmono cdj550 pj pjxl pjxl300 uniprint ijs omni bj10e bj200 bjc600 bjc800 faxg3 faxg32d faxg4 pcxmono pcxgray pcx16 pcx256 pcx24b pcxcmyk pbm pbmraw pgm pgmraw pgnm pgnmraw pnm pnmraw ppm ppmraw pkm pkmraw pksm pksmraw tiffcrle tiffg3 tiffg32d tiffg4 tifflzw tiffpack tiff12nc tiff24nc psmono psgray psrgb bit bitrgb bitcmyk pngmono pnggray png16 png256 png16m jpeg jpeggray pdfwrite pswrite epswrite pxlmono pxlcolor bbox dmprt cdj880 ap3250 appledmp atx23 atx24 atx38 bmpa16 bmpa16m bmpa256 bmpa32b bmpamono bmpasep1 bmpasep8 ccr cdj1600 cdj500 cdj670
    • 19 Network Applications cdj850 cdj890 cdj970 cfax cgm24 cgm8 cgmmono cljet5pr coslw2p coslwxl cp50 declj250 dfaxlow dfaxhigh djet500c dl2100 dnj650c eps9high eps9mid epson epsonc escp fs600 hl1250 hl7x0 ibmpro imagen inferno iwhi iwlo iwlq jetp3852 la50 la70 la75 la75plus lbp8 lj250 lj3100sw lj4dith ln03 lp2563 lp8000 lq850 lxm5700m m8510 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 necp6 oce9050 oki182 okiibm paintjet photoex pjetxl plan9bm sgirgb r4081 sj48 st800 stcolor sunhmono t4693d2 t4693d4 t4693d8 tek4696 xes x11cmyk2 x11cmyk4 x11cmyk8 x11rg16x x11rg32x ljet4pjl lj4dithp dj505j picty180 pr201 pr150 pr1000 pr1000_4 jj100 bj10v bj10vh mag16 mag256 mj700v2c mj500c mj6000c mj8000c fmpr fmlbp ml600 lbp310 lbp320 lips2p bjc880j lips4 lips4v escpage lp2000 npdl md50Mono md50Eco md1xMono DJ630 DJ6xx DJ6xxP DJ8xx DJ9xx DJ9xxVIP AP21xx pcl3 md2k md5k stp lxm3200 lx5000 lex7000 lex5700 lex3200 lex2050 gdi epl5800 epl2050 epl2050p alc8500 alc2000 cups cljet5 cljet5c nullpage ... Mientras algunos de estos "dispositivos" de salida tales como jpeg y png256, se refieren a los formatos estándar para archivos gráficos, muchos de los dispositivos se refieren a formatos gráficos de impresoras sin PostScript o fax. La utilidad gs puede utilizarse en modo de lote para convertir un gran número de archivos PostScript en otro formato o filtrar un documento para impresión en una impresora sin PostScript. El siguiente cuadro resume algunos de las opciones de Ghostscripts más utilizadas. Table 1. Opciones comunes para Ghostscript Opción Efecto -dNOPAUSE No hace pausa y espera un RETURN después de traducir cada página. -dBATCH Sale automáticamente después de traducir la última página. -q Opera "calmadamente" (no presenta un mensaje por cada página traducida). -sDEVICE=devname Utiliza el formato de salida devname Almacena la salida en el archivo filename. Si %d se incluye en el nombre de archivo, se remplazará con el número de página sOutputFile=filename del documento multi-página. -rresolución Utiliza una resolución de resolución DPI (puntos por pulgada). A manera de ejemplo, la siguiente línea de comandos convertiría el documento PostScript output.ps en imágenes múltiples PNG llamadas output.pagenum.PNG. [elvis@station elvis]$ gs -dNOPAUSE -dBATCH -q -sDEVICE=png256 sOutputFile=outp ut.%d.png output.ps [elvis@station elvis]$ file output.* output.1.png: PNG image data, 612 x 792, 8-bit colormap, noninterlaced output.2.png: PNG image data, 612 x 792, 8-bit colormap, noninterlaced output.ps: PostScript document text conforming at level 3.0
    • 20 Network Applications Ver gráficas PostScript con Ghostview A pesar de su poder, el comando gs de la interfaz de usuario aún se puede mejorar. En lugar de utilizar directamente gs muchos usuarios prefieren utilizar la aplicación Ghostview de GNOME, ggv, la cual ofrece un dispositivo frontal para Ghostscript más fácil de usar. [elvis@station elvis]$ ggv output.ps Figure 1. Visor PostScript del Ghostview de GNOME La aplicación Ghostview de GNOME ofrece principalmente las siguientes características. 1. Escala dinámica: La imagen puede hacerse a escala para ajustar la anchura y altura de la ventana o un porcentaje arbitrario. 2. Paginación: Al utilizar un panel lateral se puede navegar fácilmente un documento multi-páginas y seleccionar páginas individuales para extraer dentro de un archivo PostScript independiente o imprimir mediante el menú File como se ilustra a continuación. Figure 2. Extracción de páginas mediante el visor PostScript Ghoscript de GNOME En teoría, la aplicación Ghostview también sirve para ver archivos PDF. En la práctica, ggv ocasionalmente tiene problemas interpretando documentos PDF. Pronto veremos una aplicación más estable para visualizar los PDF. Algunos documentos PostScript multi-páginas pueden también confundir a ggv. En casos en que ggv tiene problemas para traducir un documento PostScript, el traductor de PostScript gs puede utilizarse directamente. Ver documentos PDF con xpdf La aplicación xpdf es un simple visor de documentos PDF que sirve para ver, imprimir o convertir documentos PDF en PostScript. Figure 1. El visualizador de documentos PDF xpdf
    • 21 Network Applications Las flechas en la esquina inferior izquierda permiten al documento navegar una página o 10 páginas al mismo tiempo. El botón del icono de impresora abre el siguiente diálogo, el cual permite al usuario especificar una línea de comando lpr o un destino de archivo PostScript. Figure 2. Impresión desde xpdf Otras alternativas para ver documentos PDF incluyen los comandos gs y ggv. Conversión de documentos PDF La utilidad gs puede utilizarse para convertir documentos PDF en cualquiera de los formatos de salida listados anteriormente. Puesto que la sintaxis del comando gs puede ser tan engorrosa, algunas utilidades frontales de línea de comando más sencillas están disponibles para convertir PostScript en PDF: ps2pdf y amigos. La sintaxis del comando ps2pdf es trivial, donde el primer argumento es la salida del nombre de archivo PostScript (o un “-” para implicar la entrada estándar) y el segundo argumento es la salida del nombre de archivo de salida PDF (o un “-” para implicar la salida estándar). A manera de ejemplo rápido, elvis ahora utiliza el comando ps2pdf para convertir su archivo output.ps en formato PDF, el cual es de calidad comparable, pero mucho más compacto. [elvis@station elvis]$ ps2pdf output.ps output.pdf [elvis@station elvis]$ file output.* output.1.png: PNG image data, 612 x 792, 8-bit colormap, noninterlaced output.2.png: PNG image data, 612 x 792, 8-bit colormap, noninterlaced output.pdf: PDF document, version 1.2 output.ps: PostScript document text conforming at level 3.0 [elvis@station elvis]$ ls -s output.p* 80 output.pdf 1400 output.ps El comando pdf2ps también existe para realizar la operación inversa. Representación del texto para impresión con enscript La utilidad enscript convierte archivos de texto en PostScript, a menudo representando el texto con sintaxis resaltada (pretty printing), un encabezado o impresión de múltiples páginas de texto por página impresa. De un modo un poco torpe, el comando enscript envía un archivo de texto directamente al comando predeterminado lpr, dando como resultado que los archivos enscript se
    • 22 Network Applications impriman inmediatamente. Puede utilizar la opción -o para especificar una salida del archivo PostScript en su lugar. Algunas de las opciones más comunes se encuentran en el siguiente cuadro. Table 1. Opciones más comunes para enscript Opción Efecto -o filename Generar salida del archivo filename. -2, -columns=num Formatear texto en 2 (o num) columnas. -a páginas Solamente imprime páginas páginas. páginas pueden ser de la forma comienzo-fin, la palabra impar o par. Utiliza el encabezado de texto como un encabezado de página. Un -b encabezado formato elaborado es provisto para especificar nombre de archivo, número de página, etc. -d impresora Envia salida a la cola de impresiónimpresora. -E [lang] Representa el texto con sintaxis resaltada apropiada para el lenguaje de programación lang. Utiliza --help-pretty-print para listar los idiomas soportados. -G Representa páginas con un encabezado elegante. -r Rota la página 90 grados. -W lang Genera salida en idioma lang, que puede ser de PostScript, html, superposición o rtf. Existen muchas más opciones. Para mayor información, consulte la página de manual enscript(1). A manera de ejemplo, la siguiente línea de comandos traduciría el archivo de encabezado C malloc.h como PostScript con 2 columnas por página, rotado y representado con un encabezado elegante y una sintaxis resaltada. [elvis@station elvis]$ enscript -r2 -E -G -o malloc.ps /usr/include/malloc.h [ 2 pages * 1 copy ] left in malloc.ps [elvis@station elvis]$ ggv malloc.ps Figure 1. Archivo de texto representado en PostScript con enscript Reordenamiento de PostScript con mpage
    • 23 Network Applications El comando mpage puede utilizarse para extraer páginas desde la mitad de un documento PostScript multi-páginas o reformatear el documento a imprimir con múltiples páginas por hoja. El mpage acepta PostScript o texto como entrada. El texto se traduciría en PostScript antes de administrar. Los argumentos se consideran archivos de entrada con la salida dirigida a la salida estándar. Table 1. Opciones de mpage Opción Efecto -o filename Generar salida del archivo filename. -1, -2, -4, -8 Imprimir un número especificado de páginas por hoja impresa (4 por defecto). -j primero[último][%intervalo] Sólo imprime un rango especificado de páginas incluyendo sólo los intervalo de páginas, si se especifican. -l Cambia el modo de formato horizontal a vertical. -o Cambia a imprimir borde alrededor de cada página (por defecto está activo). -P [impresora] Envía salida PostScript a la cola de impresión impresora. -G Representa páginas con un encabezado elegante. -r Rota la página 90 grados. -G Representa páginas con un encabezado elegante. -W lang Genera salida en idioma lang, que puede ser de PostScript, html, superposición o rtf. La siguiente línea convierte el archivo PDF RHEL3FamOverWPPdf.pdf en un archivo PostScript e imprime cuatro páginas por hoja. [elvis@station elvis]$ pdf2ps RHEL3FamOverWPPdf.pdf - | mpage > rhel3.ps [elvis@station elvis]$ ggv rhel3.ps Figure 1. Un documento PDF convertido en PostScript (4 Up)
    • 24 Network Applications Ejercicios en línea Lab Exercise Objetivo: Practicar la salida para impresión. Tiempo estimado: 20 minutos. Especificaciones 1. Utilice el comando enscript para generar un documento PostScript del archivo /usr/share/doc/bash-*/loadables/getconf.c nombre getconf.ps con dos páginas por hoja impresa. Opcionalmente, haga que el comando enscript "pretty print" el texto (agregando sintaxis resaltada). 2. Utilice el comando mpage para extraer las páginas 8 y 9 del archivo getconf.ps creado anteriormente, almacénelas en un nuevo documento llamado getconf89.ps. (Por defecto el comando mpage imprimirá 4 hojas por páginas de salida, confundiendo el conteo de páginas. Incluya la opción apropiada para que sólo una página de entrada sea impresa por página de salida).
    • 25 Network Applications 3. Utilice el comando ps2pdf para convertir el archivo getconf89.ps en un documento PDF titulado getconf89.pdf. Compare los tamaños de los dos documentos. 4. Cree un script de shell corto llamado ~/bin/ps2jpeg, el cual al ser llamado con un sólo argumento especificando un archivo PostScript, utiliza el comando gs para convertir el archivo en un documento JPEG llamado output.jpg. Question 1 No hay elemento para calificar este ejercicio. 1. Un documento de múltiples páginas PostScript getconf.ps que contiene el texto del archivo /usr/share/doc/bash-*/loadables/getconf.c, impreso en 2 páginas por página de salida. 2. Un documento PostScript de dos páginas getconf89.ps que contiene las páginas 8 y 9 extraídas del documento getconf.ps. 3. El documento PDFgetconf89.pdf, el cual es el contenido del documento PostScript getconf89.ps convertido en formato PDF. 4. Un script titulado ~/bin/ps2jpeg que cuando se invoca con un documento PostScript como su único argumento, convertirá el documento en una imagen JPEG llamada output.jpg. Capítulo 4 Sinopsis del correo electrónico Conceptos clave • • • • • La administración del correo electrónico implica dos agentes. Un agente de usuario de correo (MUA, en inglés Mail User Agent), el cual se utiliza para presentar correo recién enviado a un usuario y escribir nuevas respuestas al usuario y un agente de transporte de correo (MTA, en inglés Mail Transport Agent), el cual administra la tarea de segundo plano de intercambiar correo electrónico con otras máquinas remotas. Dependiendo de los detalles de acceso a Internet de un computador, el trabajo de recepción de correo electrónico se puede delegar a un servidor de buzón, lo que permitiría luego que el usuario tuviera acceso a su correo electrónico enviado mediante los protocolos POP o IMAP. De nuevo dependiendo de los detalles de acceso a Internet de un computador, la tarea de entregar correo electrónico se puede delegar a un servidor remoto saliente SMTP. Por lo general, el correo local entregado pero no leído se almacena temporalmente en el archivo /var/spool/mail/$USER, en donde USER es el nombre de usuario del destinatario. Uno de los MUA más sencillos es el comando mail.
    • 26 Network Applications Uso del correo electrónico Es discutible que el servicio más popular ofrecido por Internet es el correo electrónico. El correo electrónico es un concepto sencillo: Alicia escribe un archivo de texto y especifica enviarlo a Bob. Cuando Bob revisa su correo, el archivo de texto estará esperando por él, etiquetado como enviado por Alice. Sin embargo, en la práctica, el sistema de envío de correo electrónico debe ofrecer soluciones a algunos problemas bastante complicados. El software que Alice y Bob utilizan debe resolver los siguientes problemas. 1. La aplicación de correo electrónico de Alice de alguna manera determina cuál es el computador de Bob. 2. Una vez determinada, la aplicación de Alice debe conectarse a la máquina de Bob y transferir el mensaje. Si la máquina de Bob no puede ser contactada, la aplicación de Alice debe almacenar temporalmente el mensaje pendiente y tener alguna estrategia para tratar de contactar la máquina de Bob más tarde. 3. Como destinatario, la aplicación de correo electrónico de Bob debe tener alta capacidad, por lo tanto cada vez que alguien (Alicia u otra persona) quiera enviarle un mensaje de correo electrónico a Bob, su aplicación estará disponible para recibirlo. En algunos casos, el recipiente de correo utiliza una máquina que no tiene una conexión permanente de Internet o está detrás de un cortafuegos, lo que luego complicará las cosas. En esta lección, trataremos varios procedimientos que ofrecen soluciones a estos problemas. La solución fácil La solución más sencilla es la apropiada para los usuarios de computadores con conexiones deinternet bien conocidas y permanentes. En el momento en que muchos protocolos definían cómo enviar correo electrónico, ésta fue la solución estándar. Dicha solución implica dos aplicaciones separadas cuyos roles se identifican por TLA (acrónimos de tres letras). La primera aplicación se conoce como MTA Agente de Transporte de Correo y la segunda se conoce como MUA, o Agente de correo de usuario. Figure 1. Envío de correo electrónico en computadores con conexiones de intenet permanentes y bien conocidas
    • 27 Network Applications El MTA (Agente de transporte de correo) El MTA suele operar en el segundo plano, realizando el trabajo de una oficina postal. El MTA recibe correo electrónico para ser envíado desde programas en la máquina local, determina desde la dirección del destinatario la máquina apropiada que debe contactar e intenta conectarse a un MTA complementario ejecutando en la máquina de destinatarios, quienes deben estar escuchando el puerto 25. Si el remitente de MTA no puede contactar el receptor de MTA, el correo se almacena temporalmente en la máquina del remitente y el MTA de remitente intenta de nuevo más tarde. El MTA también se enlaza al puerto local 25, donde recibe conexiones de otros MTA. Cuando éste recibe correo desde un MTA remoto destinado a un usuario en una máquina local, recibe el correo y lo almacena en un directorio de almacenamiento temporal conocido como el buzón de entrada del usuario. En Linux (y Unix), el buzón predeterminado del usuario es /var/spool/mail/username para que el correo en espera del usuario elvis se instale en el archivo /var/spool/mail/elvis. El MTA por defecto de Red Hat Enterprise Linux es un demonio llamado sendmail. El MUA (Agente de usuario de correo) El MUA es la aplicación en la que la mayoría de la gente piensa cuando se refiere a correo electrónico. El MUA recupera correo enviado desde un almacenamiento temporal (buzón de entrada) y lo presenta al usuario como "correo nuevo". El MUA
    • 28 Network Applications permite a los usuarios escribir respuestas o nuevos mensajes y pasar estos mensajes al MTA local para envío. Red Hat Enterprise Linux se distribuye con una amplia selección de MUAs, varios de los cuales se describirán en ésta y en la siguiente lección. Servidores de buzón Aunque la solución anterior es simple, requiere que primero, todos los usuarios estén recibiendo correo electrónico en una máquina conectada constantemente a Internet y segundo, que la máquina tenga un nombre de equipo bien conocido y accesible a otros. Muchos usuarios que por ejemplo, utilizan una conexión de "marcado" o de "alta velocidad" desde un ISP (Proveedor de Servicios Internet) o que estén utilizando máquinas detrás de un cortafuegos de una institución, no están en esta situación. Otra solución se ha desarrollado para servir a la gente en este caso: los servidores de buzón. Figure 1. Servidores de buzón En el diagrama anterior, asumimos que elvis está utilizando una conexión de Internet de "alta velocidad" para la cual se ha suscrito a la compañía "ISP.Net". Cuando se conecta al Internet, su máquina ISP le emite a su máquina una dirección IP, pero elvis no puede predecir la dirección IP que recibirá. El nombre del equipo, al cual se le asignó el ISP a la dirección IP, es probablemente poco atractivo por ejemplo, dhcp-191-93.isx.isp.net, por lo tanto si elvis garantizara la recepción de la misma dirección IP cada vez, no desearía publicar su nombre de equipo como su dirección de correo electrónico. En su lugar, elvis aprovecha una "cuenta de correo electrónico" que le ofrece su ISP. Es muy probable que su cuenta exista en una máquina Linux o Unix del ISP conectada permanentemente a Internet y se le asigne un nombre de host como por ejemplo pop.isp.net. El ISP ha clasificado todo el correo electrónico destinado a direcciones de forma user@isp.net para ser enviado al MTA de esta máquina. Cuando el MTA ejecutándose en pop.isp.net recibe correo para elvis, lo almacena en un directorio de
    • 29 Network Applications almacenamiento temporal dedicado a elvis (muy probable en el archivo sendmail./var/spool/mail/elvis) y el correo electrónico se considera como entregado. Dado que la máquina de ISP pop.isp.net tiene una conexión de Internet permanente y bien conocida, es mejor candidata para recibir correo electrónico que la máquina de elvis en casa. Cuando elvis está en casa, aún necesita tener acceso a su correo electrónico que está en su buzón de entrada en pop.isp.net. Este acceso suele estar provisto en forma de un servidor POP (Protocolo de servidor de correo) o servidor de IMAP (Protocolo de Servicio de Correo por Internet). Servidores POP Los servidores POP realizan un servicio muy sencillo. Permiten a los usuarios acceder al directorio de almacenamiento temporal de un sólo usuario y transfieren su contenido a su MUA local. Los servidores POP suelen enlazarse al puerto 110 y requieren que cualquier cliente se autentique mediante un par de nombres de usuario-contraseña. La mayoría de los MUAs modernos actúan como clientes POP y pueden configurarse para recuperar correo de un servidor especificado. Si un servidor de buzón ejecuta el servicio POP, suele implicar que el servidor de buzón no intenta almacenar de modo permanente, sino temporalmente hasta que el usuario "lo baje "a su máquina local. Servidores IMAP Los servidores IMAP suelen ofrecer a los clientes administración de buzones de manera más sofisticada. Los usuarios IMAP pueden mantener varias carpetas en el servidor de buzón no sólo su buzón de entrada individual. En general, un servidor IMAP implica que un correo electrónico del usuario sea almacenado de forma permanente en el servidor de buzón y los usuarios ocasionalmente se conecten con un MUA desde una máquina remota para "navegar" su correo. Los servidores IMAP suelen encontrarse en entornos institucionales y corporativos. Los demonios IMAP se enlazan al puerto 143. Envío de correo Puesto que la máquina de elvis mantiene una conexión de Internet casi continua, elvis aún desea utilizar su MUA local para enviar correo. Si el MUA local no puede conectarse temporalmente a la máquina del destinatario, el MUA almacenará el correo temporalmente de modo local y tratará de enviarlo más tarde. Configuración predeterminada de Red Hat Enterprise Linux Por defecto, Red Hat Enterprise Linux está configurado de modo apropiado para esta situación. El MTA local se inicia, pero no aceptará conexiones a través del puerto 25 (excepto desde la dirección de bucle local, 127.0.0.1). Sirve simplemente para entregar
    • 30 Network Applications correo electrónico saliente. Se asume que los usuarios tienen acceso a su correo electrónico desde un servidor POP o IMAP. La configuración predeterminada puede cambiarse, pero la configuración necesaria va más allá del alcance de este curso. Servidores de correo saliente Para máquinas que sólo tienen conexiones a Internet transitorias, el intentar entregar correo electrónico mediante el MTA local puede no ser apropiado. En su lugar, los usuarios de conexiones de "marcado" y similares suelen utilizar lo que se conoce como un SMTP (Protocolo sencillo de transferencia de correo) o servidor de correo saliente. Muchos ISP e instituciones ofrecen servidores SMTP salientes, a menudo con nombres como smtp.isp.net. Figure 1. Servidor de correo saliente El MTA en el servidor SMTP desea aceptar correo de máquinas "locales", a pesar de que no es el destinatario final para el correo electrónico. En su lugar, el servidor SMTP transmite el correo y lo reenvía a su destino. Si se presenta algún problema, el almacenamiento temporal y el reenvío de correo pendiente es ahora responsabilidad del servidor SMTP. Muchos MUAs permiten a los usuarios especificar un equipo remoto para que actúe como el servidor SMTP del usuario (contrario a reenviar correo al MTA local para envío). [1] Entrega local
    • 31 Network Applications Todos los casos anteriores asumen que el usuario está enviando correo electrónico desde su máquina a un destinatario en una máquina remota. Linux (y Unix) también permite a los usuarios en una máquina local enviar correo electrónico entre sí, donde el correo electrónico se dirige únicamente al nombre de usuario tal como blondie. Para entrega local no se requiere ninguno de los servidores locales POP o SMTP porque el correo electrónico se entrega al instante por el MTA local. El MUA mail Quizás el MUA más sencillo es un comando llamado simplemente mail. El comando mail data de los primeros días de Unix y por lo tanto depende altamente del MTA local. El comando mail no puede ser configurado para acceder al correo desde un servidor POP o IMAP, ni puede ser configurado para utilizar un servidor SMTP para correo saliente. En su lugar, puede esperar correo que sea enviado al directorio de almacenamiento temporal y pasa al MTA de correo local para envío. No obstante, en situaciones tales como envío de correo a usuarios locales, el comando mail puede ser bastante eficaz. Envío de correo electrónico con mail El comando mail puede utilizarse para enviar correo a destinatarios especificados como argumentos en la opción de la línea de comandos. El cuerpo del mensaje se lee desde la entrada estándar (la cual puede leerse desde una tubería, un archivo redirigido o desde un teclado directamente, en donde CONTROL-D ("EOF") se utiliza para indicar el fin del mensaje). Las opciones de línea de comandos en el cuadro siguiente pueden utilizarse para especificar una línea de asunto, destinatario a, "Cc:", etc. Table 1. Opciones de línea de comandos para el comando mail Opción Efecto -v Modo verboso. Imprime la comunicación entre el comando mail y el MTA local (o remoto). -s Especifica una línea de asunto. asunto -c addrs Envía copia a las direcciones especificadas. -b addrs Envía copias ciegas a direcciones especificadas. A manera de ejemplo, a continuación, elvis envía por correo el contenido del archivo lyrics.txt a blondie. [elvis@station elvis]$ mail -s "here they are" blondie < lyrics.txt
    • 32 Network Applications Uso de mail para leer correo El comando mail puede también utilizarse para leer la correspondencia de un almacenamiento temporal de correo de usuario local. Sin embargo, la interfaz es primitiva y por lo general se utilizan en su lugar otros MUAS. Para mayor información vaya a la página de correo mail. Actualmente, el comando mail se considera como una forma rápida y eficaz de enviar correo. En el siguiente ejemplo, blondie está utilizando el comando mail sin argumentos para ver el correo en su buzón y luego borrar el mensaje y salir. [blondie@station blondie]$ mail Mail version 8.1 6/6/93. Type ? for help. "/var/spool/mail/blondie": 1 message 1 new >N 1 elvis@redhat.com Thu Nov 13 00:08 16/653 "here they are" & RETURN Message 1: From elvis@station.example.com Thu Nov 13 00:08:45 2003 Date: Thu, 13 Nov 2003 00:08:44 -0500 From: elvis@station.example.com To: blondie@station.example.com Subject: here they are 100 bottles of ink on the wall. 100 bottles of ink. Take one down, Pass it around. & d & q Ejemplos Envío de correo Una forma fácil y rápida de enviar archivo de texto a otro usuario es con mail [julius@station julius]$ mail -s "here's the file" nero < somefile También es fácil con mail enviar la salida de un comando a otro usuario. [julius@station julius]$ find . -name "*.old" | mail -s "find output" nero Protocolo sencillo de transporte de correo Mediante un simple comando de correo con la opción verbosa, un usuario puede observar el proceso por el que pasa sendmail para entregar un mensaje. [julius@station julius]$ mail -v -s hello elvis@localhost this is only a test .
    • 33 Network Applications elvis@localhost... Connecting to [127.0.0.1] via relay... 220 station.example.com ESMTP Sendmail 8.12.8/8.12.8; Sat, 12 Apr 2003 13:08:30 -0400 >>> EHLO station.example.com 250-station.example.com Hello localhost.localdomain [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-DELIVERBY 250 HELP >>> MAIL From:julius@station.example.com SIZE=60 250 2.1.0 julius@station.example.com... Sender ok >>> RCPT To:elvis@station.example.com >>> DATA 250 2.1.5 elvis@station.example.com... Recipient ok 354 Enter mail, end with "." on a line by itself >>> . 250 2.0.0 h3CH8U3j002250 Message accepted for delivery elvis@localhost... Sent (h3CH8U3j002250 Message accepted for delivery) Closing connection to [127.0.0.1] >>> QUIT 221 2.0.0 station.example.com closing connection Ejercicios en línea Lab Exercise Objetivo: Enviar correo electrónico a usuarios locales. Estimated Time: 10 mins. Especificaciones 1. Utilice el comando mail para enviar por correo el contenido del archivo /proc/cpuinfo a sus cuentas primaria y alterna (i.e, los usuarios nombredeusuario_a y nombredeusuario_b, donde nombre de usuario es el nombre de su cuenta primaria. 2. Cree el archivo ~/you_have_mail que contiene una lista ordenada de todos los usuarios en su sistema local que actualmente tienen correo en sus "buzones de entrada" (i.e. su directorio de almacenamiento temporal entregado pero no leído aún). Debe incluir usuarios de "sistema" en su lista y listar un usuario por línea. Question 1 1. Sus cuentas alternas primera y segunda tienen el contenido del archivo /proc/cpuinfo en su depósito de correo entregado. 2. El archivo ~/you_have_mail debería contener una lista ordenada de como los
    • 34 Network Applications usuarios tienen correo en espera en su depósito de correo, (obviamente, sus nombres de cuentas alternas primera y segunda deben incluirse en esta lista). Capítulo 5 El MUA Evolution Conceptos clave • • • • El MUA evolution ofrece un entorno sofisticado para la administración de correo electrónico. La ventana de composición permite la composición de mensajes ya sea en texto sin formato o en formato HTML e incluye un corrector ortográfico y soporte para anexos. El correo electrónico de entrada puede procesarse automáticamente mediante un filtrado sofisticado. evolution permite enviar correo desde el depósito de correo local y servidores POP o IMAP. Evolution Quizás el MUA más sofisticado que se distribuye con Red Hat Enterprise Linux es evolution. El agente de usuario de correo es apenas un componente del administrador de la información personal de evolution. En esta sección, presentamos algunas de las características clave de la aplicación evolution e identificamos cómo configurar evolution para recibir correo electrónico desde varias fuentes y cómo enviar correo mediante el servidor local MTA o el servidor remoto SMTP. De hecho, Evolution es mucho más que un MUA. En la toma de pantalla siguiente verá que también tiene herramientas para administrar contactos, calendario de eventos y listas de tareas. Lo invitamos a experimentar con estos elementos cuando el tiempo se lo permita, pero la lección se enfocará en el uso de evolution para envío y recepción de correo. Navegar correo electrónico Figure 1. El agente usuario de correo Evolution Desde la pantalla principal, el correo se puede clasificar en una jerarquía de carpetas navegables mediante el recuadro en la parte superior izquierda. En la parte superior derecha del recuadro, se presenta un resumen de mensajes almacenados en la carpeta actual seleccionada. En el recuadro de la parte inferior derecha se visualiza el contenido del actual mensaje.
    • 35 Network Applications Haciendo "click derecho" en un mensaje, un menú emergente ofrece una variedad de acciones, tales como almacenar el mensaje como archivo de texto, responder a un mensaje o reenviar el mensaje, "marcando" el mensaje con una bandera particular, "etiquetando" el mensaje en un color determinado o identificando el mensaje como correo basura. Un mensaje se puede archivar en otra carpeta con sólo arrastrar el mensaje al sitio de la carpeta deseada en el panel a mano izquierda. Al elegir "Agregar remitente a agenda de direcciones" se pueden crear nuevos contactos fácilmente. Por último, los filtros se pueden crear al tratar correos electrónicos con características similares al actual mensaje. Escribir correo electrónico La ventana de composición se utiliza para crear un nuevo mensaje, responder o reenviar un mensaje. Figure 1. La ventana de composición de correo electrónico Evolution Como se puede ver en la toma de pantalla, la ventana de composición proporciona un editor sencillo para componer texto y anexar archivos. Si se desea, los mensajes se pueden formatear como "HTML", para permitir a los usuarios incorporar enlaces, imágenes, y elementos sencillos HTML en el mensaje. Como es texto escrito, las palabras no identificadas por el corrector ortográfico son subrayadas y con un click derecho, se sugieren remplazos que pueden buscarse en el diccionario o palabras que pueden agregarse al diccionario personal del usuario. Al seleccionar el menú Security, los usuarios pueden elegir entre firmar o encriptar su mensaje mediante un protocolo de clave pública encriptada. Uso de Filtros Evolution La aplicación evolution soporta muchas características que permiten administrar grandes cantidades de correo electrónico. Una de las herramientas primarias son los filtros de correo electrónico. Como se ve a continuación, los filtros se componen de una selección de criterios coincidentes que serán aplicados al correo electrónico recibido. Si un mensaje coincide con los criterios entonces se pueden poner en práctica una norma o un grupo de normas.
    • 36 Network Applications Figure 1. Filtros de correo electrónico Evolution Los mensajes se pueden seleccionar al combinar algunos de estos criterios. • • • • • • • • El remitente o el destinatario del mensaje contiene un texto especificado. La línea de asunto u otra línea de encabezado especificada, contiene un texto especificado. El cuerpo del mensaje contiene texto especificado. La fecha en la que se envió o se recibió el mensaje o después del tiempo especificado. El mensaje se ha etiquetado o marcado para "seguimiento". El mensaje parece haber sido enviado desde una lista de correo especificada. El mensaje coincide con una expresión regular especificada. El mensaje cuando es entubado a un comando de shell arbitrario, devuelve un valor de retorno especificado. Cuando coincide, el mensaje puede estar sujeto a alguna combinación de los siguientes destinos. • • • • El mensaje puede ser copiado o movido automáticamente a una carpeta especificada. Se puede asignar al mensaje una bandera particular, una puntuación o una etiqueta. Puede reproducirse una campana de terminal o algún sonido personalizado. El mensaje puede entubarse a una shell de comando arbitraria. Configuración de cuentas en Evolution Evolution permite a los usuarios administrar múltiples cuentas, donde una cuenta representa un origen particular de correo electrónico, un destino particular para correo electrónico, una identidad particular de un remitente entre otras opciones. Las cuentas se pueden crear, borrar, habilitar, inhabilitar o modificar mediante el siguiente diálogo, el cual se obtiene seleccionando Herramientas: Configuración... y eligiendo el "Panel de cuentas de correo". Figure 1. Administración de cuentas Evolution Especificación de la fuente del correo electrónico Evolution, permite recuperar correspondencia desde varias fuentes como se puede apreciar en el siguiente diálogo.
    • 37 Network Applications Figure 1. Especificación de fuentes de las cuentas de correo de Evolution Las primeras dos selecciones especifican que el correo se debería recuperar desde los servidores POP o IMAP. Para cada uno, el diálogo permite especificar el nombre de servidor, el nombre de cuenta y la contraseña. Si el servidor de POP o IMAP soporta codificación, el encapsulado SSL puede especificarse. También se ofrecen otros esquemas de autenticación (diferentes a un par de nombre de usuario-contraseña), si el servidor los soporta. El resto de las opciones permiten a evolution sacar correo directamente del depósito de correo MTA o compartir carpetas con otros MTA como por ejemplo, mutt, pine y elm. Especificar una técnica de entrega de correo electrónico Para cada cuentase pueden especificar una de dos técnicas de entrega. Figure 1. Especificar una técnica de entrega de cuenta de correo electrónico de Evolution Si se debe utilizar un host SMTP, debe especificarse el nombre del host. Además se pueden establecer soporte para conexiones encriptadas o autenticación de usuario si la máquina SMTP es compatible o lo requiere. La otra alternativa es hacer que evolution entregue correo simplemente pasándolo al MTA local ("enviar correo"), en cuyo caso no hay ninguna otra configuración. Capítulo 6 Aplicaciones de diagnósticos de red Conceptos clave • • • • • /sbin/ifconfig presenta la configuración IP local. ping confirma la conectividad de red de bajo nivel entre hosts. host hace solicitudes directas de DNS. El comando netstat -tuna lista los servicios actuales activos de red y conexiones. /sbin/traceroute puede diagnosticar problemas de enrutado. Configuración requerida para el protocolo de internet El protocolo de Internet o más común el protocolo IP es el estándar adoptado para entregar información entre máquinas conectadas por una red. Para utilizar el protocolo IP, una máquina debe configurarse de la siguiente manera.
    • 38 Network Applications Aunque la configuración de un sistema con la información IP de configuración apropiada requiere privilegios de root, este cuaderno demuestra la forma de determinar la configuración de red de una máquina local e introduce utilidades que sirven para confirmar que la infraestructura de red de la máquina esté funcionando adecuadamente. Dirección IP Linux (y Unix) representa los dispositivos de red conectados a una máquina (tales como una tarjeta Ethernet, una tarjeta Token-Ring, un módem utilizado para conexiones de marcado, etc...) como una interfaz de red. Antes de que una interfaz pueda utilizarse para enviar o recibir tráfico, debe configurarse con una dirección IP que sirve como la identidad de la interfaz. Portal predeterminado La mecánica de un protocolo IP organiza máquinas en subredes o subnets en inglés. Todas las máquinas en una subred pueden intercambiar información directamente. Las subredes IP están a su vez ligadas a otras subredes por máquinas que actúan como routers. Un router tiene múltiples interfaces de red, por lo general cada uno participa en una subred distinta. Con el fin de comunicarse con un equipo en otra subred, los datos deben pasarse a un router, el cual (con la ayuda de otros routers) encamina la información a la subred apropiada y desde allí al host apropiado. Para comunicarse con las máquinas fuera de la subred local, su máquina debe conocer la identidad de un router cercano. El router utilizado para encaminar paquetes fuera de su subred local se conoce como un portal predeterminado. Nameserver Otras máquinas en internet a su vez se identifican por una dirección IP. La gente suele pensar en términos de nombres, por lo tanto el protocolo se ha desarrollado para asignar nombres a las direcciones IP. El protocolo se llama Servicio de Nombres de Dominio o más conocido como DNS. El protocolo DNS requiere que cada máquina tenga disponible uno o más servidores DNS (comúnmente llamados servidores de nombre), los cuales pueden servir tanto de base de datos para asignar un nombre a direcciones locales IP como también de punto de partida para determinar direcciones IP para nombres de dominio de los cuales el servidor no tiene conocimento directo. Determinar su(s) dirección(es) IP: /sbin/ifconfig En una lección anterior presentamos el comando hostname -i, el cual muestra la dirección IP en su equipo local. En realidad una "máquina" no tiene una dirección IP, las interfaces de red sí. Esta lección tratará el tema de direcciones IP de interfaces de red en mayor detalle.
    • 39 Network Applications En Linux (y Unix), cada dispositivo de red se representa como una interfaz de red, (por una vez, ¡encontramos algo que no es un archivo!). Linux nombra interfaces de acuerdo con el tipo de dispositivo que representa. El siguiente cuadro lista algunos de los nombres más utilizados en Linux. Table 1. Interfaces de red Linux Interfaz Dispositivo ethn Tarjeta Ethernet trn Tarjeta de Token-Ring fddin Tarjeta de fibra óptica pppn Conexión de marcado a través de módem lo Dispositivo de bucle local En cada caso, n se remplaza por un número entero para cada instancia de un dispositivo determinado conectado a una máquina. Confirmar la configuración de la interfaz de red El comando ifconfig muestra la configuración de interfaces de red activas. Puesto que el comando suele ser utilizado por root para configurar interfaces, éste vive dentro del directorio /sbin, el cual está fuera de la RUTA predeterminada para los usuarios estándar. No obstante, los usuarios estándar pueden usar el comando para ver información de configuración de interfaz, utilizando una referencia absoluta como en el ejemplo a continuación. [blondie@station blondie]$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:00:86:4D:F0:0C inet addr:192.168.0.51 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1716503 errors:0 dropped:0 overruns:2 frame:0 TX packets:2146415 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:193489123 (184.5 Mb) TX bytes:1299754457 (1239.5 Mb) Interrupt:11 Base address:0xd400 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:206054 errors:0 dropped:0 overruns:0 frame:0 TX packets:206054 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22911068 (21.8 Mb) TX bytes:22911068 (21.8 Mb) A la interfaz eth0 se le asigna una dirección IP de 192.168.0.254.
    • 40 Network Applications El comando ifconfig presenta una estrofa de información de la configuración IP y las estadísticas de uso para cada interfaz de red activa. En la mayoría de los casos, los usuarios esperarían ver dos estrofas. Una estrofa con la configuración para una tarjeta Ethernet y otra con la configuración para el dispositivo virtual de bucle local. La línea importante es la segunda línea, la cual visualiza la dirección IP asignada a la interfaz. Si la línea que contiene la dirección IP falta o si la dirección no parece razonable para su configuración de red local, podrá tener problemas para acceder la red. Determinar su portal por defecto: /sbin/route Como se mencionó al comienzo de la lección, para la comunicación con equipos en sus subredes locales se utilizan procedimientos diferentes a la comunicación con hosts en una subnet separada. El kernel de Linux, al igual que otras kernels, define las máquinas que deberían considerarse locales y la gateway que debería usarse para ayudar a comunicarse con aquellas que no lo son. Este cuadro se llama cuadro de enrutamiento. Si usted es un usuario estándar, el comando route se puede utilizar para ver el cuadro de enrutamiento del sistema. Si es un usuario root, el comando puede también utilizarse para manipular el cuadro. Al igual que el comando ifconfig, el comando route vive en el directorio /sbin, por lo tanto los usuarios estándar deben invocarlo mediante una referencia absoluta. [blondie@station blondie]$ /sbin/route Kernel IP routing table Destination Gateway Genmask Use Iface 192.168.0.0 * 255.255.255.0 0 eth0 127.0.0.0 * 255.0.0.0 0 lo default server1.example 0.0.0.0 0 eth0 Flags Metric Ref U 0 0 U 0 0 UG 0 0 Un cuadro de ruta estándar visualiza dos tipos de entrada. El primer tipo define qué subredes se deben considerar como locales. En general, debería haber una línea que especifique una subred para cada interfaz activa. En la salida anterior, la primera línea define la subnet asociada con la interfaz de Ethernet (con una dirección IP de 192.168.0.51) y la segunda línea define la subred asociada con la interfaz de bucle local (con una dirección IP de 127.0.0.1). El segundo tipo de entrada que sirve para definir gateways es el más importante para nuestra discusión. Dichas entradas de gateway se pueden distinguir porque el host está definido en la segunda columna ("Gateway") y la cuarta columna ("Banderas") contiene una "G". Cada cuadro de ruta debe contener una entrada para la gateway "por defecto" y la segunda columna debe contener el nombre del host del gateway. La misma información se puede ver mediante la dirección IP en lugar de nombres del host utilizando /sbin/route -n.
    • 41 Network Applications [blondie@station blondie]$ /sbin/route -n Kernel IP routing table Destination Gateway Genmask Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 0 lo 0.0.0.0 192.168.0.254 0.0.0.0 0 eth0 Flags Metric Ref U 0 0 U 0 0 UG 0 0 Aquí, blondie determina que su máquina está utilizando el host 192.168.0.254 como su gateway predeterminado. La bandera "G" indica que esta línea se utiliza para definir una gateway, no una subred local. Determinar su(s) nombre de usuario(s) El Servicio de Nombres de Dominio permite a los usuarios referirse a los computadores de la red mediante nombres de host en lugar de direcciones IP. A diferencia de los otros dos aspectos de configuración de red, un servidor de nombre es hasta cierto punto opcional. Con el fin de comunicarse con otras máquinas su equipo debe tener una dirección IP. Si desea comunicarse con máquinas fuera de la subred, usted debe tener una gateway por defecto. Sin embargo, si los usuarios quieren referirse a cada máquina por dirección IP en lugar de nombre de máquina, su equipo puede comunicarse mediante el protocolo IP sin consultar el servidor de nombres. No obstante, en la práctica los servidores de nombres parecen ser más necesarios (se le facilita más memorizar academy.redhat.com o 66.187.232.51?). Convertir un nombre de host en una dirección IP suele conocerse como resolver una dirección y la biblioteca que ejecuta el servicio de nombre se llama la biblioteca resolv. Cuando la biblioteca intenta resolver una dirección suele haber dos recursos disponibles. Configuración DNS estática: /etc/hosts El primer recurso es un archivo de texto sencillo llamado archivo /etc/hosts. Aunque sólo root puede editar el archivo cualquier usuario puede observarlo. [blondie@station blondie]$ cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost rha-server 192.168.0.254 server1.example.com server s 192.168.0.1 station1 station1.example.com www1 www1.example.com 192.168.0.51 station51 station51.example.com 192.168.129.201 z 160.168.170.24 rosemont.example.com dhcp-1116-114 r El formato del archivo es sencillo. El primer símbolo en la línea debería ser una dirección IP y los símbolos subsiguientes son nombres de hosts que deberían apuntar a la dirección IP. El caracter estándar de comentario de Unix (“#”) también es compatible.
    • 42 Network Applications Si el equipo sólo se está comunicando con pocas máquinas o si un administrador desea crear un atajo de nombres de host (tal como “s”) o si deseara anular el servidor de nombre local, las entradas pueden agregarse al archivo /etc/hosts mediante un editor de texto sencillo. Claro está que esta técnica no escala bien. Usted no puede esperar que el archivo /etc/hosts le responda a todo. Configuración DNS dinámica: /etc/resolv.conf Cuando el /etc/hosts local no puede dar respuesta, la biblioteca resolv consulta un servidor de nombres. Para determinar qué máquina consultar que esté ejecutando un servidor de nombres, examina el archivo de configuración de la biblioteca de resolv, /etc/resolv.conf. [blondie@station blondie]$ cat /etc/resolv.conf ; generated by /sbin/dhclient-script search example.com nameserver 192.168.0.254 nameserver 207.175.42.153 El host 192.168.0.254 está actuando como el servidor de nombre primario. El host 207.175.42.153 está actuando como el servidor de nombres secundario. El archivo de configuración /etc/resolv.conf utiliza líneas que comienzan por la palabra clave servidor de nombres para especificar las direcciones IP de máquinas ejecutando servidores de nombre. Si se especifican varios servidores de nombres, se utilizará el primero por defecto. Si no está disponible se utilizará el segundo y así sucesivamente. Por consiguiente, el primer servidor de nombres listado suele llamarse servidor de nombres primario, el segundo servidor listado servidor de nombres secundario y así sucesivamente. Observe que el servidor de nombres no necesita estar cerca de la máquina. Cualquier equipo que esté ejecutando el servidor de nombres y le permita solicitarlo, puede usarse como servidor de nombres. En la práctica, el uso de un servidor de nombres local genera un mayor rendimiento. Utilidades de diagnóstico de red En las secciones anteriores, hemos esbozado las técnicas más directas para determinar su configuración de red IP local de la máquina. En esta sección, presentaremos las utilidades de diagnóstico que sirven para asegurar que las configuraciones están funcionando correctamente con su entorno de red local. Confirmación de conectividad IP: ping
    • 43 Network Applications El comando ping sirve para confirmar la conectividad IP entre dos equipos. El primer argumento para ping puede ser el nombre del equipo o la dirección IP de la máquina que usted desearía contactar. [blondie@station blondie]$ ping 192.168.0.254 PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data. 64 bytes from 192.168.0.254: icmp_seq=1 ttl=64 time=0.245 ms 64 bytes from 192.168.0.254: icmp_seq=2 ttl=64 time=0.180 ms 64 bytes from 192.168.0.254: icmp_seq=3 ttl=64 time=0.186 ms CTRL-C --- 192.168.0.254 ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.180/0.203/0.245/0.033 ms El comando ping debería presentar una línea por segundo, incluyendo el número de secuencia y la información de temporización sobre la demora de ida y vuelta, la cual reporta el tiempo necesario para recibir una respuesta de la máquina remota. El comando ping continuará ejecutándose hasta cancelarse con la secuencia de control CONTROL-C. Si no hay respuesta para el comando ping, usted no podrá esperar que se presente ninguna comunicación de red de alto nivel. El culpable suele ser un cable Ethernet que se ha desconectado físicamente de la máquina o de la pared. Las inconsistencias en la tasa en la que las líneas se presentan o la discontinuidad en los números de secuencia son generalmente indicativos de una red congestionada o de una conexión ruidosa y se puede esperar un bajo rendimiento de red de protocolos de alto nivel. Examen de ruta: /usr/sbin/traceroute Cuando se conecte a una máquina fuera de su subred, su paquete pasa de router a router a medida que atraviesa varias subredes hasta que finalmente se envía a la subred que contiene la máquina destino. La ruta del paquete, cuando pasa de router a router puede trazarse con el comando /usr/sbin/traceroute. El comando traceroute suele llamarse con un argumento, el nombre del equipo o la dirección IP de la máquina destino. [blondie@station blondie]$ /usr/sbin/traceroute www.whitehouse.gov traceroute: Warning: www.whitehouse.gov has multiple addresses; using 12.129.72.144 traceroute to a1289.g.akamai.net (12.129.72.144), 30 hops max, 38 byte packets 1 2 3 4 5 6 7 8 server1 (192.168.0.254) 0.243 ms 0.162 ms 0.252 ms 10.44.160.1 (10.44.160.1) 8.563 ms 10.488 ms 7.642 ms srp2-0.rlghncg-rtr1.nc.rr.com (24.25.1.99) 7.382 ms 10.162 ms 0.874 ms srp4-0.rlghnca-rtr2.nc.rr.com (24.25.2.146) 10.008 ms 8.798 ms 15.931 ms srp13-0.rlghncrdc-rtr2.nc.rr.com (66.26.33.178) 4.259 ms 10.079 ms 10.031 ms son0-1-1.chrlncsa-rtr6.carolina.rr.com (24.93.64.81) 29.675 ms 9.950 ms 29.665 ms pop1-cha-P4-0.atdn.net (66.185.132.45) 10.087 ms 21.045 ms 8.202 ms bb2-cha-P2-0.atdn.net (66.185.132.42) 11.392 ms 20.371 ms 9.712 ms
    • 44 Network Applications 9 bb2-ash-P13-0.atdn.net (66.185.152.50) 29.322 ms 26.192 ms 25.901 ms 10 pop2-ash-P1-0.atdn.net (66.185.139.211) 26.506 ms 26.485 ms 26.208 ms 11 ATT.atdn.net (66.185.140.250) 26.704 ms 27.127 ms 21.004 ms 12 tbr1-p014001.wswdc.ip.att.net (12.123.9.82) 38.888 ms 22.006 ms 28.123 ms13 gbr6-p20.wswdc.ip.att.net (12.122.11.174) 29.880 ms 19.628 ms 31.080 ms 14 gar3-p370.wswdc.ip.att.net (12.123.9.69) 24.231 ms 29.829 ms 20.827 ms 15 mdf1-gsr12-2-pos-7-0.atl1.attens.net (12.122.255.154) 40.184 ms 50.815 ms 38.903 ms 16 mdf1-bi8k-2-eth-1-1.atl1.attens.net (12.129.64.246) 39.845 ms 39.803 ms 39.887 ms 17 12.129.72.144 (12.129.72.144) 39.856 ms 39.934 ms 39.898 ms Usted hallará con frecuencia que los paquetes toman rutas sorpresivas para ir de un lugar a otro. El número de routers que su paquete pasa suele conocerse como el número de saltos que ha hecho el paquete. El paquete anterior hizo 17 saltos para alcanzar su destino. Si su paquete no puede completar el primer salto, es probable que su gateway por defecto de su máquina no haya sido determinada correctamente. Si su traceroute termina entre la primera pareja o salta (sin alcanzar el destino final), el problema es un router local mal configurado y su administrador de red local probablemente ayude a resolver el problema. Si el comando traceroute se agota a más de cuatro o cinco saltos, es probable que el problema esté fuera de control de su administrador de red local. Realización de solicitudes DNS de modo manual: host El comando host se puede utilizar para realizar directamente solicitudes DNS. Con un argumento, el comando host sólo reportará la resolución DNS solicitada. [blondie@station rha030]$ host academy.redhat.com academy.redhat.com has address 66.187.232.51 Si la opción -a se incluye, el comando host presenta información detallada de la solicitud realizada y la respuesta recibida en el formato de "registro de recursos". Además, la línea final identificará el servidor de nombres que resolvió la solicitud y la cantidad de tiempo que se necesitó para ello. [elvis@station rha030]$ host -a academy.redhat.com Trying "academy.redhat.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53870 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0 ;; QUESTION SECTION: ;academy.redhat.com. IN ANY ;; ANSWER SECTION: academy.redhat.com. 284 IN A 66.187.232.51 ;; AUTHORITY SECTION: redhat.com. redhat.com. redhat.com. 584 584 584 IN IN IN NS NS NS ns1.redhat.com. ns2.redhat.com. ns3.redhat.com. Received 106 bytes from 192.168.0.254#53 in 30 ms
    • 45 Network Applications En este ejemplo, el servidor de nombres que respondió tiene una dirección IP de 192.168.0.254. Ejemplos Diagnóstico de dificultades de red La usuaria madonna está teniendo problemas para que su navegador de red mozilla se conecte al sitio www.yahoo.com y cree que la máquina local podría estar mal configurada. Procede a examinar sus configuraciones de red local y confirma que parecen funcionales. Siguiendo el consejo de iniciar con lo básico, madonna primero se asegura que la máquina tenga una dirección IP, examinando su configuración de interfaz de red local. [madonna@staton madonna]# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:50:8B:0C:B1:D5 inet addr:109.125.90.86 Bcast:109.125.90.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:513364 errors:0 dropped:0 overruns:0 frame:0 TX packets:319118 errors:0 dropped:0 overruns:0 carrier:0 collisions:5068 txqueuelen:100 RX bytes:78770024 (75.1 Mb) TX bytes:356094835 (339.5 Mb) Interrupt:11 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:63432 errors:0 dropped:0 overruns:0 frame:0 TX packets:63432 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6124991 (5.8 Mb) TX bytes:6124991 (5.8 Mb) Convencida que su interfaz está activa y utilizando la dirección IP 109.125.90.86, examina su información de ruta para determinar su gateway por defecto. [madonna@station madonna]# /sbin/route -n Kernel IP routing table Destination Gateway Genmask Use Iface 109.125.90.0 * 255.255.255.0 0 eth0 127.0.0.0 * 255.0.0.0 0 lo 0.0.0.0 109.125.90.1 0.0.0.0 0 eth0 Flags Metric Ref U 0 0 U 0 0 UG 0 0 Luego utiliza el comando ping para confirmar si puede contactar la gateway. [madonna@station madonna]# ping 109.125.90.1 PING 109.125.90.1 (109.125.90.1) from 109.125.90.86 : 56(84) bytes of data.
    • 46 Network Applications 64 bytes from 109.125.90.1: icmp_seq=1 ttl=255 time=2.92 ms 64 bytes from 109.125.90.1: icmp_seq=2 ttl=255 time=2.65 ms CTRL-C --- 109.125.90.1 ping statistics --2 packets transmitted, 2 received, 0% loss, time 1004ms rtt min/avg/max/mdev = 2.652/2.788/2.924/0.136 ms Satisfecha, cancela el comando y luego examina su configuración DNS. [madonna@station madonna]# cat /etc/resolv.conf search example.com nameserver 109.125.90.75 nameserver 109.125.90.2 nameserver 66.218.71.63 Puesto que ella todavía no ha llamado el host externo de su subred local, intenta llamar a un servidor de nombres terciario. [madonna@station madonna]# ping 66.218.71.63 PING 66.218.71.63 (66.218.71.63) from 109.125.90.86 : 56(84) bytes of data. 64 bytes from 66.218.71.63: icmp_seq=3 ttl=54 time=11.2 ms 64 bytes from 66.218.71.63: icmp_seq=7 ttl=54 time=20.3 ms 64 bytes from 66.218.71.63: icmp_seq=11 ttl=54 time=27.7 ms CTRL-C --- 66.218.71.63 ping statistics --13 packets transmitted, 3 received, 76% loss, time 12045ms rtt min/avg/max/mdev = 11.275/19.766/27.702/6.717 ms Los resultados del comando ping son un poco problemáticos, porque la mayoría de sus paquetes se han quitado. En su lugar ella intenta determinar el camino recorrido por los paquetes a la máquina. [madonna@station madonna]# /usr/sbin/traceroute -n 66.218.71.63 traceroute to 66.218.71.63 (66.218.71.63), 30 hops max, 38 byte packets 1 209.125.90.1 3.473 ms 2.276 ms 2.281 ms 2 10.252.86.221 8.836 ms 15.761 ms 16.423 ms 3 216.217.3.193 11.293 ms 20.227 ms 15.257 ms 4 216.217.3.153 13.123 ms 10.306 ms 7.699 ms 5 63.215.192.173 10.835 ms 6.679 ms 6.881 ms 6 64.159.2.169 6.789 ms 7.117 ms 7.520 ms 7 64.152.69.30 12.358 ms 7.087 ms 6.877 ms 8 66.218.71.63 9.680 ms 11.787 ms 9.963 ms Puesto que traceroute retornó dicha solicitud de salida, madonna asume que cualquier problema observado con el comando ping anterior debió haber sido transitorio. Por último, ella confirma que su servidor de nombres es operacional al realizar unas pocas solicitudes de DNS con el comando host.
    • 47 Network Applications [madonna@station madonna]$ host www.redhat.com www.redhat.com has address 66.187.232.50 [madonna@station madonna]$ host hardware.redhat.com hardware.redhat.com is an alias for enterprise.redhat.com. enterprise.redhat.com has address 66.187.233.193 [madonna@station madonna]$ host www.yahoo.com www.yahoo.com is an alias for www.yahoo.akadns.net. www.yahoo.akadns.net has address 66.218.71.95 www.yahoo.akadns.net has address 66.218.70.48 ... Convencida de que todo parece estar bien, trata de nuevo el navegador de red mozilla y tiene éxito. Sea cualquiera el problema que estaba teniendo debe haberse relacionado con la congestión de red transitoria observada con el comando ping. Ejercicios en línea Lab Exercise Objetivo: Determinar la configuración de red local Tiempo estimado: 15 minutos. Especificaciones Crear los siguientes archivos, cada uno de los cuales debería contener su dirección IP como un "quad punteado". Archivo Contenido ~/net_ipaddr La dirección IP asignada a la interfaz eth0. ~/net_gw La dirección IP preseterminada de su gateway. ~/net_ns La dirección IP del servidor de nombres primario. Question 1 1. Los tres archivos presentados arriba, cada uno de los cuales contiene la dirección IP especificada como su única palabra. Capítulo 7 Terminal de red y clientes FTP
    • 48 Network Applications Conceptos clave • • • El cliente HTTP de terminal Elinks, invocado como el comando links se puede utilizar para navegar páginas web desde un entorno gráfico. La aplicación curl es una aplicación de protocolo múltiple no interactivo (incluyendo HTTP, HTTPS y FTP) que sirve para transferir archivos en modo de lote. La aplicación wget es una aplicación de protocolo múltiple no interactiva (incluyendo HTTP, HTTPS y FTP) que sirve para transferir de modo recursivo páginas web, buscando en todas las páginas las referencias de página web. ¿Por qué terminales basadas en clientes? Los usuarios probablemente están familizados con las aplicaciones gráficas tales como mozilla para navegar la red o nautilus para tener acceso a servidores FTP. Aparte de estas aplicaciones, Linux también ofrece una amplia colección de clientes basados en la línea de comandos. ¿Por qué alguien estaría tentado a utilizar clientes basados en líneas de comandos en lugar de apuntar y hacer click en las aplicaciones? • • • • La razón obvia: si no está ejecutando en un entorno gráfico X, estas son las únicas utilidades disponibles. Las utilidades se pueden escribir en scripts. Si tiene que extraer información de forma repetitiva del mismo sitio, debería considerar un script para que haga el trabajo repetitivo por usted. Las utilidades de la línea de comandos requieren menos recursos. Si está tratando de descargar un archivo largo en otras máquinas ocupadas, un proceso curl es mucho más atractivo que un proceso mozilla, porque el primero consume 4 megabytes mientras que el segundo consume 40 megabytes de memoria. La simplicidad tiende a motivar la estabilidad. Cuando se descargan archivos grandes, como por ejemplo, imágenes ISO de 700 megabytes, muchas de las aplicaciones pueden volverse inestables, (la lista de culpables incluye a Internet Explorer). Los clientes de línea de comandos como curl tienden a generar resultados más estables. Navegación de páginas web con Elinks El texto Elinks de cliente HTTP (navegador de red) está diseñado para traducir páginas web en una terminal, emulando la presentación de un navegador de red gráfico. En cuanto sea posible, los cuadros y formas se presentan en escala. Observe que en la siguiente visualización de la página de red asociada con Red Hat Network, los marcos y cuadros están traducidos correctamente. Inicio de Elinks Los Elinks se inician como el comando links especificando una URL para cargar como un argumento. Observe el siguiente ejemplo.
    • 49 Network Applications [elvis@station elvis]$ links http://www.redhat.com Figure 1. El navegador de texto Elinks Cuando utilice links, la pantalla está activa y los enlaces pueden navegarse mediante teclas de flechas o el ratón. Al utilizar la tecla ESC, se crea un menú que permite al usuario acceder a los diálogos de favoritos, historial y personalización. Aunque la opción -dump sirve para entregar una página en una salida estándar y la opción -source hará lo mismo al contenido "Crudo" de la URL (a menudo botando HTML), el soporte para interacciones de guiones es muy poco sofisticado comparado
    • 50 Network Applications con otras utilidades tales como curl. La potencia del navegador links es su capacidad para proporcionar una grata experiencia de navegación de red en un entorno de texto. Configuración de Elinks para utilizar un servidor Proxy Si se establece la variable del entorno HTTP_PROXY, los Elinks utilizarán el servidor proxy especificado, donde el servidor proxy (al igual que el navegador Elinks) puede especificarse mediante la siguiente sintaxis. http://servername:puerto Buscar los recursos de red con curl En contraste, el comando links, el cliente de red de la línea de comando curl no se esfuerza por verter o navegar interactivamente las páginas web. En cambio, el desarrollo de curl se ha enfocado en una amplia colección de opciones que se adaptan para la entrega automática de archivos publicados mediante una red o un servidor ftp. Este texto tendría dificultades describiendo curl, pero algo más efectivo y suscinto es referirse a la página del manual curl(1): curl es un cliente que sirve para obtener documentos/archivos o enviar documentos a un servidor, utilizando cualquiera de los protocolos compatibles (HTTP, HTTPS, FTP, GOPHER, DICT, TELNET, LDAP o ARCHIVO). El comando está diseñado para funcionar sin interacción de usuario u otra clase de interacción. curl ofrece una carga de trucos útiles como soporte proxy, autenticación de usuario, carga ftp, texto HTTP post, SSL conexiones (https:), cookies, reanudar transferencia de archivo y más. Inicio curl Cuando se llame con una URL como su argumento, el comando curl recupera y descarga su contenido en la salida estándar. Además, alguna información de temporización se escribe en el error estándar, el cual se desecha en el siguiente ejemplo. [elvis@station rha030]$ curl http://www.redhat.com 2>/dev/null | head <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Red Hat -- Linux, Embedded Linux and Open Source Solutions</title> <meta name="MSSmartTagsPreventParsing" content="TRUE"> <meta http-equiv="Content-Type" content="text/html; charset=iso-88591"> <style type="text/css" media="all">@import "/css/non_ns4.css";</style> <link rel="stylesheet" TYPE="text/css" HREF="/css/homepage.css">
    • 51 Network Applications El siguiente cuadro lista algunas de las opciones que se pueden utilizar para modificar la conducta de curl. Consulte la página de manual curl(1) para obtener la lista completa. Table 1. Opciones para el comando curl Opción Efecto -b, --cookie filename Proporciona valores de cookie desde el archivo especificado. -c, --cookie-jar filename Almacena las cookies recuperadas en el archivo especificado. -C, --continue-at posición Reanuda la transferencia de un archivo grande en una posición especificada. Si se da como “-”, curl tratará de encontrar automáticamente la posición apropiada. -d data Proporciona datos como si los enviara a solicitud POST. -i Incluye encabezados HTTP en la salida. -L, --location Sigue redirecciones a una nueva ubicación. -m, --max-time segundos Mata la conexión después de que el número especificado de segundos ha transcurrido. -O, --remote-name Escribe salida al archivo del mismo nombre como archivo citado en la URL. -u, --user Autenticar con par de nombredeusuario/contraseña. nombredeusuario:contraseña Por ejemplo, la siguiente línea de comandos podría utilizarse para descargar las imágenes ISO para el lanzamiento de Fedora-Core 1: [elvis@station elvis]$ curl -C - -O -L "http://download.fedora.redhat.com/pub/fe dora/linux/core/1/i386/iso/yarrow-i386-disc{1,2,3}.iso" [1/3]: http://download.fedora.redhat.com/pub/fedora/linux/core/1/i386/iso/yar row -i386-disc1.iso --> yarrow-i386-disc1.iso % Total % Received % Xferd Average Speed Time Curr. Dload Upload Total Current Left Speed 0 629M 0 536k 0 0 13375 0 13:42:49 0:00:41 13:42:08 75883 Los siguientes detalles de la línea de comando curl deberían observarse:
    • 52 Network Applications • • • • Observe el uso de la "sintaxis de expansión de paréntesis" en la URL citada. El comando curl tratará de descargar tres archivos, yarrow-i386-disc1.iso, yarrow-i386-disc2.iso y yarrow-i386-disc3.iso. Debido a la opción -O, los archivos se descargarán al directorio local con los mismos nombres. Observe el tiempo que le queda a la capacidad actual: 13 horas. Si el comando necesita abortarse y luego reiniciarse, la opción -C - pide a curl que examine las descargas parciales existentes y recoja la transferencia donde se abandona. La opción -L le pide a curl continuar con cualquier redirección expedida por el servidor de red (aunque no es evidente desde la salida, curl fue redirigido al servidor FTP). Configuración de curl para utilizar un servidor Proxy. Si se establece la variable de entorno http_proxy, curl utilizará el servidor especificado proxy, donde el servidor proxy puede especificarse con la siguiente sintaxis. http://servername:puerto De modo recursivo descargar los recursos de la red con wget La línea de comando del cliente de red wget diseñada para uso no interactivo de los protocolos HTTP, HTTPS y FTP descarga recursos posiblemente de modo recursivo a las páginas citadas desde las páginas descargadas. Inicio de wget Cuando se llama con una URL como su argumento, el comando wget recupera el contenido de la URL y lo almacena en un archivo local en el directorio actual de trabajo del mismo nombre (o index.html si el URL especificó un directorio). El siguiente cuadro lista algunas de las opciones que pueden utilizarse para modificar la conducta de wget. Encontrará una lista completa en la página del manual wget (1). Table 1. Opciones del comando wget Opción Efecto Lea la URL para buscar desde el archivo filename, el cual -i, --input-file filename puede ser un archivo HTML o liste en modo secuencial el URL como texto. -B, --base URL Anteponga URL a todos los enlaces relativos. --spider No descargue páginas, solamente confirme su presencia. --http-user=user --http- Autentique con el nombre de usuario especificado y la contraseña. passwd=passwd
    • 53 Network Applications Opción Efecto -o filename Concatene el contenido de todos los archivos descargados al archivo filename. El nombre de archivo - especial implica una salida estándar. -r, --recursive Permite recuperar de modo recursivo. -l, --level depth No es recursivo más allá de depth niveles de recursividad. -np, --no-parent Al recursar, sólo incluya enlaces bajo el URL padre. Por ejemplo, la siguiente línea de comandos sirve para copiar el contenido del sitio http://www.redhat.com/training. [elvis@station mirror]$ wget -r http://www.redhat.com/training [elvis@station mirror]$ wget -r http://www.redhat.com/training --02:53:01-- http://www.redhat.com/training => `www.redhat.com/training.1' Resolving www.redhat.com... done. Connecting to www.redhat.com[66.187.232.50]:80... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: http://www.redhat.com/training/ [following] --02:53:01-- http://www.redhat.com/training/ => `www.redhat.com/training/index.html' Connecting to www.redhat.com[66.187.232.50]:80... connected. HTTP request sent, awaiting response... 200 OK Length: 29,575 [text/html] 100%[====================================>] 29,575 ETA 00:00 175.04K/s 02:53:02 (175.04 KB/s) - `www.redhat.com/training/index.html' saved [29575/29575] Loading robots.txt; please ignore errors. --02:53:02-- http://www.redhat.com/robots.txt => `www.redhat.com/robots.txt' Reusing connection to www.redhat.com:80. HTTP request sent, awaiting response... 200 OK Length: 262 [text/plain] 100%[====================================>] 262 ETA 00:00 ... 255.86K/s Después de observar un rato, debería ser obvio que cuando se llamó de modo recursivo, el comando wget suele recursar más allá de las expectativas. Después de cancelar el comando anterior con CONTROL-C, los siguientes directorios demuestran que wget se desvió más allá de los límites del sitio web www.redhat.com/training. . |-- certcities.com/ | `-- robots.txt |-- rhn.redhat.com/
    • 54 Network Applications | |-| |-| |-| |-| `-- `-- index.html secure.safaribooksonline.com/ `-- promo.asp?code=ORA14&portal=oreilly www.europe.redhat.com/ `-- robots.txt www.google.com/ `-- robots.txt www.oreillynet.com/ `-- robots.txt www.redhat.com/ |-- about/ | |-- careers/ | | `-- index.html | |-- contact/ | | `-- index.html | |-- corporate/ | | `-- wwoffices/ | | `-- index.html | |-- index.html | `-- presscenter/ | |-- 2002/ | | |-- press_bluepoint.html | | |-- press_rhct.html | | |-- press_training.html | | `-- press_veterans.html | `-- 2003/ | `-- press_rhacademy.html |-- apps/ | |-- commerce/ | | `-- index.html ... Utilicelo con cuidado. Configuración de wget para utilizar un servidor Proxy Igual al comando curl, wget utiliza la variable de entorno http_proxy para especificar un servidor proxy, de nuevo utilizando la siguiente sintaxis. http://servername:puerto Ejemplos Uso de utilidades de transferencia del archivo con base en la terminal El comando wget con opciones para intentar de nuevo puede ser útil para buscar archivos desde un sitio ftp ocupado. [einstein@station einstein]$ wget --tries=50 --wait=30 ftp://updates.redhat.com/ 8.0/en/os/i386/wget-1.8.2-5.i386.rpm --16:19:24-5.i386.rpm ftp://updates.redhat.com/8.0/en/os/i386/wget-1.8.2-
    • 55 Network Applications => `wget-1.8.2-5.i386.rpm' Resolving updates.redhat.com... done. Connecting to updates.redhat.com[66.187.232.52]:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD /8.0/en/os/i386 ... done. ==> PORT ... done. ==> RETR wget-1.8.2-5.i386.rpm ... done. Length: 365,737 (unauthoritative) 100%[====================================>] 365,737 ETA 00:00 4.83K/s 16:20:40 (4.83 KB/s) - `wget-1.8.2-5.i386.rpm' saved [365737] Al utilizar wget para copiar un sitio web, usted puede limitar el número de niveles de recursión. [einstein@station einstein]$ wget --recursive --level=1 --convertlinks http://w ww.redhat.com/training/ Ejercicios en línea Lab Exercise Objetivo: Familiarizarse con la terminal basada en clientes de red. Estimated Time: 10 mins. Configurar Si utiliza un servidor proxy para acceder a Internet, necesitará configurar sus clientes de red al establecerhttp_proxy y/o las variables de entorno HTTP_PROXY. Su instructor le guiará. Si este es el caso, coloque su configuración en el archivo ~/.bash_profile, para que la configuración tenga lugar automáticamente en el inicio de shell. Especificaciones 1. Cree el directorio ~/wget y cd dentro de éste. Utilice el comando wget para descargar de modo recursivo el sitio www.redhat.com, pero utilice la opción -Q 256k para limitar su descarga a un máximo de 256 kilobytes. Cuando haya terminado, su directorio ~/wget debería contener el directorio www.redhat.com y posiblemente otros. 2. La CIA publica un libro mundial de datos de los países del mundo en el sitio http://www.odci.gov/cia/publications/factbook/index.html. Más específicamente, URLs tales como http://www.odci.gov/cia/publications/factbook/geos/ca.html se refieren a páginas del país específico, en donde los países se especifican
    • 56 Network Applications mediante un abreviatura de dos letras en la porción del nombre de archivo de la URL. Utilice el navegador de elinks para examinar una hoja de datos de todos los países especificando la URL para la página del país directamente desde la línea de comandos. Abbreviation País as Australia ch China ni Nigeria Después de familiarizarse con el formato de cada paǵina, escriba un script corto llamado ~/bin/get_birthrate que combine los comandos curlygrep. El script debería esperar como su único argumento una abreviatura de dos letras del país. Además, debería descargar la página del país y reducir la salida a una línea que contenga la ¡nformación de la tasa de natalidad del país. Cuando haya terminado, el script debería generar una salida similar a la siguiente. [student@station student]$ get_birthrate au 9.43 births/1,000 population (2003 est.) [student@station student]$ get_birthrate ch 12.96 births/1,000 population (2003 est.) [student@station student]$ get_birthrate ni 38.75 births/1,000 population (2003 est.) Question 1 1. El directorio ~/wget que contiene los primeros 256 Kbytes (o más) de una descarga recursiva del sitio web http://www.redhat.com 2. El script ~/get_birthrate, el cual cuando se invoca con una abreviatura de país de dos letras, extrae la línea apropiada desde la URL http://www.odci.gov/cia/publications/factbook/geos/ca.html (donde “ca.html” debería remplazarse con la abreviatura apropiada). Capítulo 8 Comandos remotos de shell
    • 57 Network Applications Conceptos clave • • • • Las aplicaciones remotas de shell le permiten a los usuarios ejecutar comandos arbitrarios en máquinas remotas y tener salida estándar retornada de manera local. De modo alterno, se puede iniciar una shell interactiva. La aplicación Secure Shell ofrece una shell remota, donde todas las transacciones son encriptadas y los usuarios pueden autenticarse mediante contraseñas tradicionales o esquemas de autenticación de clave pública. Para utilizar los esquemas de claves de autenticación pública, debe generarse un par de claves pública-privada con el comando ssh-keygen. Debido a que los servidores de Secure Shell tienen sus propios servidores de pares de claves pública-privada, los servidores pueden autenticarse para los clientes como también los clientes se pueden autenticarse para los servidores. La shell remota original: rsh y la autenticación de Rhosts Shells remotas con rsh Las shells de Linux (y Unix) estan diseñadas con interfaces sencillas. Leen entrada desde el flujo de la salida estándar. Como resultado, las interfaces se implementan fácilmente a través de conexiones de red. Simplemente al sustituir una conexión TCP para un dispositivo de terminal, una shell puede operar en una máquina remota de un modo tan fácil como la máquina local. En Linux (y Unix), las aplicaciones que proporcionan esta funcionalidad se conocen como shells remotas. La primera shell remota más utilizada fue la aplicación rsh. Si una máquina remota se configura adecuadamente los usuarios pueden utilizar la línea de comandos rsh parecida a la siguiente para invocar una shell remota. [elvis@station elvis]$ rsh -l elvis server1 ls /tmp jd_sockV4 lost+found orbit-root ssh-WjMO1585 [elvis@station elvis]$ Al traducir este comando dice "como el usuario elvis en el servidor 1 host, ejecuta el comando ls /tmp". El comando se ejecuta en la máquina remota (server1), pero la salida estándar es enviada a la máquina local (station). Cuando el comando termina, el intérprete de comandos de elvis implica que aún está en la estación host. Si elvis no especifica el comando a ejecutar, la utilidad rsh abre una shell interactiva en el server1 host. Al prestar atención al intérprete de comandos de bash en el siguiente extracto, observe qué comandos se ejecutan y en qué máquina. [elvis@station elvis]$ rsh -l elvis server1 Last login: Sat Nov 8 18:23:49 from station.example.com [elvis@server1 elvis]$ hostname server1.example.com
    • 58 Network Applications [elvis@server1 elvis]$ who root tty1 Nov 8 root tty2 Nov 8 root pts/0 Nov 8 elvis pts/4 Nov 8 [elvis@server1 elvis]$ exit rlogin: connection closed. [elvis@station elvis]$ 16:56 16:56 16:57 (:0.0) 18:28 (station) Autentificación de Rhosts: ~/.rhosts En cada caso, elvis no necesitó expedir una contraseña. No obstante, antes de poder acceder a su cuenta remota mediante rsh, necesitó configurar la cuenta para que le permitiera acceder desde su máquina local. Para rsh, la configuración de control de acceso es tan trivial como agregar una línea a un archivo. En una cuenta remota, elvis creó el archivo ~/.rhosts y agregó la línea con el host y el nombre del usuario para cada cuenta externa a la cual quisiera otorgarle acceso. Además, el servidor rsh requiere que los permisos de archivo le prohiban leer el archivo a todos con excepción del usuario propietario. Así como se ilustra con el siguiente comando, elvis ya tiene configurado su archivo .rhosts en la máquina remota. [elvis@station elvis]$ rsh -l elvis server1 cat .rhosts station elvis [elvis@station elvis]$ rsh -l elvis server1 ls -l .rhosts -rw------1 elvis elvis 16 Nov 8 18:23 .rhosts La autenticación depende de un archivo de configuración ~/.rhosts configurado de modo adecuado conocido como la autenticación rhost. La Shell segura El método de autenticación rhost es lamentable. En esencia, depende del DNS (Servidor de Nombres de Dominio) para autenticar un usuario. Con el fin de explotar la configuración ~/.rhosts de elvis, todos tendrían que separar la estación host real desde la red y traer otra máquina configurada con la dirección IP de la estación. La falla no es de elvis, sino del diseño del protocolo de autenticación rhost. Además, rsh es un protocolo de texto sin formato. El intercambio de información a través de una red en texto sin formato es esencialmente el equivalente a enviar correo en postales: todo el mundo puede llevar la información de aquí a allá y no estar al tanto de su contenido. La Shell segura se desarrolló para abordar estos dos defectos del comando rsh y agregar nuevas capacidades mientras que aún ofrece toda la conveniencia de rsh. Si se asume que una máquina remota está ejecutando el servicio ssh (i.e. el demonio sshd), elvis podría invocar una shell en la máquina remota como se muestra a continuación. [elvis@station elvis]$ ssh elvis@server1 ls /tmp elvis@server1's password: jd_sockV4
    • 59 Network Applications lost+found orbit-root [elvis@station elvis]$ La nueva sintaxis del comando ssh para especificar el nombre de usuario de la cuenta remota es un poco más fácil que la de rsh, aunque la opción -l también se ejecuta (para ser completamente compatible con los anteriores). En el ejemplo anterior, elvis se autentica al proveer una contraseña en lugar de configurar un archivo ~/.rhosts. En la siguiente sección, encontramos que la Shell segura puede utilizar una técnica de clave pública más madura para otorgar una cuenta a los usuarios "libre de contraseña". Sin embargo, cuando la clave de autenticación pública no se ejecuta, ssh vuelve a la autenticación de contraseña tradicional. [1] Autenticación de clave pública shell segura Aparte de la autenticación tradicional, la aplicación Shell segura puede utilizar una clave criptográfica para autenticar usuarios. Los algoritmos de clave pública encriptada se relacionan con dos grandes números conocidos como "claves" a fin de que la información encriptada con una clave solo pueda ser descrifada con la otra. Cualquiera que quiera utilizar criptografía de clave pública debe generar primero un par de claves. La mayoría de los protocolos de clave pública llaman una clave como clave pública y la complementaria como una clave privada. A su clave pública usted la trata como su número telefónico, el cual comparte con quien desee comunicarse y que puede listar en directorios públicos. Su clave privada, por otra parte, no la comparte con nadie. Toda la seguridad provista por los protocolos de clave privada dependen del hecho que sólo usted conoce su clave privada. Generación de un par de clave pública-privada: ssh-keygen Al utilizar ssh se puede generar un par de clave pública-privada con el comando sshkeygen. La shell segura puede utilizar diferentes algoritmos esenciales de encripción y el comando ssh-keygen forzará a especificar uno con la opción -t. Para nuestros propósitos, utilizaremos el algoritmo RSA, el cual se especifica con-t rsa. En el siguiente ejemplo, elvis utiliza ssh-keygen para generar un par de clave pública-privada ssh-keygen. [elvis@station elvis]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/elvis/.ssh/id_rsa): RETURN Enter passphrase (empty for no passphrase): RETURN Enter same passphrase again: RETURN Your identification has been saved in /home/elvis/.ssh/id_rsa. Your public key has been saved in /home/elvis/.ssh/id_rsa.pub. The key fingerprint is: e0:71:43:df:ed:40:01:0b:44:54:db:c2:80:f2:33:aa elvis@station Al usuario elvis primero se le pidió el nuevo nombre de archivo de clave (privada) para lo cual elvis simplemente pulsó ENTER para aceptar el nombre de archivo
    • 60 Network Applications predeterminado: ~/.ssh/id_rsa. Luego, elvis tuvo la oportunidad de agregar una passphrase a su clave privada. Al pulsarENTER otra vez (dos veces), elvis eligió no agregarla (más adelante trataremos las frases de acceso en detalle). Cuando el comando retorna, elvis tiene dos nuevos archivos en su directorio ~/.ssh. El primero contiene su clave privada, la cual no la comparte con nadie (desde luego no la publica en un texto en línea). [elvis@station elvis]$ cat .ssh/id_rsa -----BEGIN RSA PRIVATE KEY----MIICWwIBAAKBgQClJnymgdK0myP41/DcIyR9aam0DZQJUT20RLfqQb8ptk90jXSL FrcIR2Ia59W/kJVLo4pqwJDsEJetWdhYiKUVJTANxbV2Pv21OACMlYcM316YLTOm IeoEZj128yjZcehs2aBBhNEVW/Y0E1MDn9mm34yXT4z367OWnGXTc9yMWQIBIwKB gQCW/p3aEEudz6vcMyVbjdg4JheADGoXJbTCEvFLNMwI4TKztIfPn71JZdYJ+Ijp qMMDU7HAsA94vraP3R2SxhNFEEauYF+BXTae21MMKhU9JfgB1mQiYRaWrlU2j7cW oF0vLnqYmTUV6CF9eJ8gMrgA28LymCpKhV/bng8l2uhnCwJBANNERHxLoKcTsANA cmPs7iu1FtxuDk6Z4SctrkTVx+HtOE4JjpE/FKsJVpJK8oi/d0WEnpk2G7+67TSG zsfHcqcCQQDIHnqQAWAZ9kd03UTjkuPSIj9OSBI5H25wYpUBItDQlUjwwJwL//C7 CDxFGgXfoO6pqr9f6JqqF9Ey/nNEpuj/AkAMEoeSEvM8v0vi7b1ky7XWnKI4e1FG Ue+b1rmARrr295zRQl/rCus8+TglneH5L4MoizxDROukjlayi1xF7iPPAkBsotTR 1Nxl3Xc/cM2gHIpNgE5AcERoJwFwNYQWjz4oFoaulHH34rXh3+Y0JBHRK3o+2QjN qigTMYAxoBKwPVnpAkEAvHl24SepSlAuSIwgtbluJApOfaDTizIAHh/G8PPFvH1e p0J+MM7d/qFjg9gpcqZN34LOW8lD7Ab/GTQGl/XsWw== -----END RSA PRIVATE KEY----- Él es libre de compartir su segunda clave (la clave pública) con quien se la pida. [elvis@station elvis]$ cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEApSZ8poHStJsj+Nfw3CMkfWmptA2UCVE9tES36kG/Kb ZP dI10ixa3CEdiGufVv5CVS6OKasCQ7BCXrVnYWIilFSUwDcW1dj79tTgAjJWHDN9emC0zpi HqBGY9dvMo 2XHobNmgQYTRFVv2NBNTA5/Zpt+Ml0+M9+uzlpxl03PcjFk= elvis@station Permiso de acceso de cuenta: ~/.ssh/authorized_keys El acceso de SSH a una cuenta se otorga obteniendo una copia de clave pública de la persona a quien se le va a otorgar acceso y almacenándola en el archivo ~/.ssh/authorized_keys de la cuenta. Como el archivo ~/.rhosts, el archivo ~/.ssh/authorized_keys debe ser legible sólo por el usuario propietario del archivo. La forma de obtener una clave pública no interesa. Podría enviarse por correo electrónico scp o transferirse desde una terminal a otra utilizando las utilidades de cortar y pegar del ratón. Cuando se manejan claves públicas, se debe tener mucho cuidado de asegurarse que la clave se coloca en un archivo sin espacio incorporado, incluyendo líneas nuevas. Aunque es demasiado para visualizar como tal, las claves públicas SSH, siempre se almacenan como una línea de texto sencilla. A la mayoría de la gente puede otorgársele acceso a una cuenta simplemente agregando sus claves públicas a los archivos ~/.ssh/authorized_keys, una clave pública en cada línea.
    • 61 Network Applications Figure 1. Autenticación de clave pública SSH En el siguiente ejemplo, elvis utiliza ssh, redirección y algunas comillas colocadas cuidadosamente para agregar su clave pública (en la station host) al archivo authorized_keys en su cuenta en el server1 host. [elvis@station elvis]$ ssh elvis@server1 "cat >> .ssh/authorized_keys" < .ssh/id_rsa.pub elvis@server1's password: ¿Por qué son necesarias las comillas? Si las comillas se hubieran incluido, la salida del comando cat se hubiera agregado al archivo .ssh/authorized_keys en la máquina local. Las comillas sirven para pasar la sintaxis de redirección "en" la shell de red. Habiendo colocado su clave pública en el archivo ~/.ssh/authorized_keys en la máquina remota, elvis espera ahora poder examinar el contenido del archivo sin tener que expedir una contraseña. [elvis@station elvis]$ ssh elvis@server1 "cat .ssh/authorized_keys" elvis@server1's password: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEApSZ8poHStJsj+Nfw3CMkfWmptA2UCVE9tES36kG/Kb ZP dI10ixa3CEdiGufVv5CVS6OKasCQ7BCXrVnYWIilFSUwDcW1dj79tTgAjJWHDN9emC0zpi HqBGY9dvMo 2XHobNmgQYTRFVv2NBNTA5/Zpt+Ml0+M9+uzlpxl03PcjFk= elvis@station Algo no concuerda, porque a elvis se le solicitó otra vez su contraseña. Al recordar que los permisos en el archivo ~/.ssh/authorized_keys deben ser 600, elvis ejecuta el comando chmod apropiado en la máquina remota. Después, puede observar los nuevos permisos sin tener que emitir una contraseña. [elvis@station elvis]$ ssh elvis@server1 chmod 600 .ssh/authorized_keys elvis@server1's password: [elvis@station elvis]$ ssh elvis@server1 ls -l .ssh/authorized_keys -rw------1 elvis elvis 225 Nov 22 22:29 .ssh/authorized_keys [elvis@station elvis]$
    • 62 Network Applications Éxito. Detalles de autenticación de la clave pública Con el fin de desarrollar una apreciación de la robustes de la autenticación de la clave pública, utilizaremos algunos minutos para tratar el protocolo. Cuando la aplicación Secure Shell ejecuta la autenticación de clave pública, utiliza un procedimiento similar al siguiente. En nuestra discusión, se utilizarán los siguientes símbolos. Symbol Interpretación S El contenido de la clave privada ("secreta") de elvis P El contenido de la clave pública de elvis R Una cadena de texto aleatoria P(R) Una cadena de texto aleatoria encriptada por la clave pública de elvis S(P(R)) = La cadena de texto es primero encriptada por la clave pública de elvis y R luego descifrada por la clave privada de elvis. Primero, el cliente ssh en la station host solicita una conexión al demonio sshd en el server1 host. Tras recibir la solicitud de conexión, el demonio sshd busca una clave pública registrada en el archivo ~/.ssh/authorized_keys de la cuenta de destino. Si se descubre una clave pública relevante, el demonio sshd inicia la autenticación de clave pública generando una cadena de texto aleatoria R. Luego encripta el guión aleatorio con la clave pública de elvis P (obtenida desde el archivo ~/.ssh/authorized_keys) y envía el guión aleatorio encriptado P(R) a través de la red al cliente ssh. Figure 1. Algoritmo de autenticación de la clave pública (1 de 3)
    • 63 Network Applications Tras recibir la cadena de texto encriptada de modo aleatorio P(R), el cliente ssh utiliza la clave privada de elvis S para descifrala. Una vez se recupera la cadena de texto original aleatoria el cliente ssh retorna al demonio sshd. Figure 2. Algoritmo de autenticación de la clave pública (2 de 3) Si el demonio sshd recibe del cliente ssh la misma cadena de texto aleatoria con la cual inició, el cliente se autentica y la conexión puede continuar. Figure 3. Algoritmo de autenticación de la clave pública (3 de 3) Un par de aspectos sobre este algoritmo que vale la pena mencionar. • El cliente ssh no se autentica con su nombre de host o con su dirección IP sino únicamente con una clave privada, (si el cliente no puede acceder a la clave
    • 64 Network Applications • privada apropiada, no podría decriptar la cadena de texto encriptada aleatoria que se le entrega). La única información que pasó por alto la red es una cadena aleatoria encriptada y una cadena aleatoria (los símbolos en rojo en las gráficas). Cualquiera que intercepte la conversación no aprendería nada útil. En la práctica, el algoritmo real utilizado es más complicado. Sin embargo, el protocolo esbozado anteriormente ilustra la mayoría de las características de la autenticación de protocolo de clave pública. Transferencia de archivos de modo seguro y fácil: scp Como se ilustra en la discusión anterior, los archivos se pueden transferir de una máquina a otra mediante ssh con el comando cat y una redirección cuidadosa. Afortunadamente, hay una forma más fácil y menos propensa al error: scp. El comando scp utiliza una sintaxis casi idéntica a la del comando cp, pero cualquier archivo o archivos de origen o destino pueden estar en una máquina remota, que ha tenido acceso a través de una cuenta especificada [1]. Cuando se refiera al archivo en una máquina remota, se utiliza la siguiente sintaxis. user@host:ruta El usuario y host son simplemente el equipo en donde reside el archivo y el usuario cuya cuenta se utiliza para acceder el archivo. Si la ruta del archivo comienza con un “/”, se considera como una referencia absoluta. Si no, se considera como una referencia relativa del directorio de inicio del usuario. Si no se provee una ruta, se asume que es el directorio de inicio del usuario. A manera de ejemplo, la siguiente línea de comandos transferiría el archivo /etc/services desde el directorioserver1 al directorio ~/cfg/server1/etc/ en el directorio de inicio de elvis. [elvis@station elvis]$ scp elvis@server1:/etc/services cfg/server/etc/ services 100% |*****************************| 19936 00:00 Dado que elvis ha configurado correctamente la autenticación de clave pública con su cuenta en server1, puede transferir el archivo sin emitir una contraseña. ¿Qué sucede si trata de transferir el archivo /etc/shadow? [elvis@station elvis]$ scp elvis@server1:/etc/shadow cfg/server/etc/ scp: /etc/shadow: Permission denied El usuario elvis en el server1 host no tiene permisos para leer el archivo /etc/shadow, por lo tanto no puede ser transferido naturalmente. Sin embargo, si el usuario elvis conoce la contraseña de la cuenta de root en la máquina remota, puede acceder el archivo a través de ella.
    • 65 Network Applications [elvis@station elvis]$ scp root@server1:/etc/shadow cfg/server/etc/ root@server1's password: shadow 100% |*****************************| 2588 00:00 Puesto que elvis no tiene una clave de acceso pública autenticada para la cuenta de root server1, ssh utilizó la autenticación tradicional de contraseña. La opción -r (de "recursivo") se debe especificar al copiar un directorio completo (y sus subdirectorios). A continuación, elvis copia de modo recursivo el directorio /etc/sysconfig desde su máquina local (station) al directorio /tmp de la máquina server1. [elvis@station elvis]$ scp -r /etc/sysconfig elvis@server1:/tmp ifup-aliases 100% |*****************************| 13137 00:00 ifcfg-lo 100% |*****************************| 254 00:00 ifdown 100% |*****************************| 3676 00:00 ifdown-ippp 100% |*****************************| 820 00:00 ifdown-ipv6 100% |*****************************| 4076 00:00 ... Cuando el comando scp ejecuta la transferencia, este presenta la información de temporización de la transferencia para cada archivo. Autenticación de host de la Shell asegurada La primera vez que el cliente ssh (o scp) se utiliza para conectarse a un servidor Secure Shell sshd, se presenta un mensaje similar al siguiente: [elvis@station elvis]$ ssh elvis@server1 who The authenticity of host 'server1 (192.168.0.254)' can't be established. RSA key fingerprint is fc:c8:87:90:f0:39:af:4f:de:99:cc:30:ce:64:b2:8e. Are you sure you want to continue connecting (yes/no)? Si la respuesta del usuario es sí (la única respuesta que permite continuar a la conexión), la conexión continúa con la siguiente advertencia. Warning: of known root root Permanently added 'server1,192.168.0.254' (RSA) to the list hosts. tty6 Nov 8 22:03 pts/1 Nov 8 22:17 (:0.0) En conexiones subsiguientes, el mensaje ya no aparece. [elvis@station elvis]$ ssh elvis@server1 who
    • 66 Network Applications root tty6 Nov root pts/1 Nov [elvis@station elvis]$ 8 22:03 8 22:17 (:0.0) La Secure Shell no sólo autentica clientes a servidores, sino también servidores a clientes, mediante la autenticación de clave pública. Así como los usuarios pueden crear pares de clave pública-privada con el comando ssh-keygen, el demonio sshd mantiene su propio par de claves pública-privada conocido como su host key. La primera vez que un cliente ssh se conecta a un demonio sshd, añade una copia de la clave del host público del demonio remoto al archivo local ~/.ssh/known_hosts. [elvis@station elvis]$ cat .ssh/known_hosts server1,192.168.0.254 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvaQ4ILVi9lceyBuGo9KUFY ksKtPT8BsLPkLZYLIRVxmXDtG1+W+qxiAgw6qCROX8fAvBkdGS4gegt06NVpKItW87K5Wq 6OMIlUfwfX OmPNOWrdA+1Wym0LXYnkUDEOV8xvTUtGzy4MRIl0Phi92uJYEJkKsHMOCWGazN/DclBZk= Como el cliente se utiliza para conectarse a varias máquinas, el archivo ~/.ssh/known_hosts crece, registrando una clave pública para cada máquina contactada. La próxima vez que el cliente se conecta a un host, silenciosamente emplea el mismo protocolo de clave pública utilizado para autenticar usuarios, invertido, para autenticar el host al cual se está conectando. ¿Qué sucedería si el host remoto no tiene la misma identidad complementaria de la clave pública almacenada en el archivo de cliente ~/.ssh/known_hosts? El cliente rehusa conectarse y en su lugar emite la siguiente advertencia. [elvis@station elvis]$ ssh elvis@server1 ls /tmp @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is c8:96:41:69:84:38:57:4c:18:55:7a:16:04:33:4d:f1. Please contact your system administrator. Add correct host key in /home/elvis/.ssh/known_hosts to get rid of this message. Offending key in /home/elvis/.ssh/known_hosts:1 RSA host key for server1 has changed and you have requested strict checking. Host key verification failed. [elvis@station elvis]$ Aquí, el cliente ssh está identificando la línea desde el archivo ~/.ssh/known_hosts con la clave que ya no complementa el servidor. Suele haber una explicación razonable para el cambio de identidad del servidor. Por ejemplo, el servidor pudo haber sido actualizado con una versión más reciente de su sistema operativo y como resultado, generó un nuevo par de clave pública-privada. Si
    • 67 Network Applications hay una explicación razonable para que un servidor cambie de identidad, el cliente ssh puede ser forzado a quitar la línea incorrecta del archivo ~/.ssh/known_hosts y recoger una nueva clave para el host. [elvis@station elvis]$ rm ~/.ssh/known_hosts [elvis@station elvis]$ ssh elvis@server1 ls /tmp The authenticity of host 'server1 (192.168.0.254)' can't be established. RSA key fingerprint is c8:96:41:69:84:38:57:4c:18:55:7a:16:04:33:4d:f1. Are you sure you want to continue connecting (yes/no)? si Warning: Permanently added 'server1,192.168.0.254' (RSA) to the list of known hosts. jd_sockV4 lost+found orbit-root ssh-ayfI2751 sysconfig Ejemplos Acceso a una cuenta remota El emperador julius recientemente se ha suscrito a la línea DSL en la casa y quisiera tener acceso a la información en su máquina principal desde el trabajo. En su máquina principal, agregó una cuenta para él mismo utilizando su apodo,jules. No sabe el nombre de host del computador en su casa, pero antes de salir a trabajar anotó su dirección IP 69.57.97.126. En la oficina, utiliza una máquina con un nombre de host emporer.rome.gov y su nombre de cuenta es julius. Primero confirma si puede conectarse a su máquina principal con el cliente ssh. [julius@emperor julius]$ ssh jules@69.57.97.126 The authenticity of host '69.57.97.126 (69.57.97.126)' can't be established. RSA key fingerprint is 89:01:b1:55:7e:6f:da:0c:bc:fc:19:62:af:84:d6:7f. Are you sure you want to continue connecting (yes/no)? Como esta es la primera vez que ha tenido acceso a su máquina principal utilizando ssh, acepta la clave del host al contestar si. En la siguiente solicitud de contraseña, entra la contraseña para su cuenta de inicio de sesión. Warning: Permanently added '69.57.97.126' (RSA) to the list of known hosts. jules@69.57.97.126's password: /usr/X11R6/bin/xauth: creating new authority file /home/jules/.Xauthority [jules@localhost jules]$ Ahora Julius está contento porque puede tener acceso a su cuenta de inicio.
    • 68 Network Applications Configuración de la autenticación de la clave pública Ahora que Julius sabe que puede acceder a su cuenta de inicio de sesión, desearía configurar la autenticación de la clave pública, para poder ordenar directamente a su máquina principal desde la oficina, sin tener que emitir una contraseña. Inicia generando un par de clave pública-privada en su máquina de trabajo, mediante el algoritmo RSA. Puesto que la configuración por defecto es apropiada para él, escasamente pulsa la tecla ENTER para todas las preguntas asociadas. [julius@emperor julius]$ ssh-keygen -t rsa ... Después de confirmar que sus archivos de clave pública-privada existen, utiliza el comando scp para copiar su clave pública desde su equipo de trabajo al archivo .ssh/authorized_keys en su máquina principal, autenticándose otra vez con su contraseña. [julius@emperor julius]$ ls .ssh/ id_rsa id_rsa.pub known_hosts [julius@emperor julius]$ scp .ssh/id_rsa.pub jules@69.57.97.126:.ssh/authorized_keys jules@69.57.97.126's password: scp: .ssh/authorized_keys: No such file or directory Aparentemente, ~/.ssh no existe aún. Julius remedia el problema y luego transfiere el archivo con éxito. Por último, establece los permisos en el directorio remoto ~/.ssh y su contenido para que sólo puedan estar disponibles para el usuario propietario. [julius@emperor julius]$ ssh jules@69.57.97.126 mkdir .ssh jules@69.57.97.126's password: [julius@emperor julius]$ scp .ssh/id_rsa.pub jules@69.57.97.126:.ssh/authorized_keys jules@69.57.97.126's password: id_rsa.pub 100% |*****************************| 226 00:00 [julius@emperor julius]$ ssh jules@69.57.97.126 chmod -R go-rwx .ssh jules@69.57.97.126's password: Con su autenticación de clave pública ahora configurada, Julius puede acceder fácilmente a su máquina principal. [julius@emperor julius]$ ssh jules@69.57.97.126 uptime 11:01:12 up 7:55, 1 user, load average: 0.08, 0.12, 0.09 Realizar copias de seguridad remotas con SSH En su máquina principal. Julius tiene un directorio llamado archivos, el cual contiene documentos importantes. El desearía hacer una copia de seguridad del archivo en su máquina de trabajo. Desde su máquina de trabajo, emite la siguiente línea de comandos.
    • 69 Network Applications [julius@emporer julius]$ ssh jules@69.57.97.126 "tar czf - archive" > jules.arch ive.tgz Julius coloca un “-” donde sería especificado el nombre de va a crear. Este le pide al comando tar botar el archivo a la ponerlo en un archivo. Localmente, la salida estándar jules.archive.tgz, Julius ha creado ahora un archivo ~/archive como se confirma con el siguiente comando. archivo del archivo que se salida estándar en lugar de fue redirigida al archivo local del archivo remoto [julius@emporer julius]$ tar tvzf jules.archive.tgz -rw-r--r-- jules/jules 112 2003-10-24 15:19:04 archive/named -rw-r--r-- jules/jules 18 2003-10-26 08:00:11 archive/java -rw-r--r-- jules/jules 204 2003-10-30 21:24:33 archive/quagga ... Ejercicios en línea Lab Exercise Objetivo: Utilizar correctamente la aplicación Secure Shell. Estimated Time: 30 mins. Especificaciones 1. Configurar sus cuentas alternas primera y tercera (nombredeusuario_a y nombredeusuario_c, respectivamente) para que usted pueda tener acceso a las cuentas desde su cuenta primaria mediante ssh sin tener que proporcionar una contraseña. Recuerde que todos los clientes de la red pueden contactar los servicios de red locales mediante el nombre del host localhost. 2. Mediante su cuenta primaria, cree un script llamado ~/bin/send_to_a que copiará un archivo regular como su único argumento en su directorio de inicio de su primera cuenta alterna. 3. Mediante su cuenta primaria, cree un script llamado ~/bin/backup_c, el cual crea un archivo tar gzipped del contenido de su directorio de inicio de la tercera cuenta alterna dentro del archivo /tmp/backup_c.tgz. Question 1 1. La configuración correcta para que su cuenta primaria puede tener acceso a su primera y tercera cuenta mediante ssh sin especificar una contraseña. 2. En su cuenta primaria, un script llamado ~/bin/send_to_a, el cual copiará un archivo regular especificado como su único argumento dentro de sus primeras cuentas primarias de directorio de inicio. 3. En su cuenta primaria, un script llamado ~/bin/backup_c, el cual crea un archivo tar gzipped del contenido de su tercera cuenta alterna del directorio de
    • 70 Network Applications inicio dentro del archivo /tmp/backup_c.tgz.