Gnome 2.12 LINUX MAGAZINE
El nuevo escritorio GNU llega a tu distro
Edición en Castellano
Distro live Knoppix 4.0.2
NÚMERO 15
9 Gbs de software Más de 5.300 aplicaciones
NÚMERO 15 • P.V.P 5,95 €
¿Está a salvo tu LINUX?
Cazadores de Virus
KlamAV
Antivirus LINUX
CAZADORES
AOLServer II
DE VIRUS
AJAX
Programación TCL, SQL y ADP p49
Trickle
Controla el caudal de tu red p67 Webs dinámicas y Perl p45
Amavisd-new
Revelamos cómo infectar un sistema Linux p13 Filtración de correo con Amavisd-new p25 Ponemos a prueba ocho antivirus p16 KlamAV: La solución abierta p21
Gnome 2.12
Animación 3D
Gráficos 3D
Las mejores herramientas libres para crear mundos virtuales p33
Konsultorio de Klaus
Plan 9 El sistema operativo alternativo de Bell Labs p40
Plan 9
Juegos Enemy Territory: Guerras Online p86
Solfege El profesor de música p38
WWW.LINUX- MAGAZINE.ES
EDITORIAL
LICENCIA PARA CALLAR Estimado Lector de Linux Magazine a se sabe que los que nos dedicamos a hablar de tecnología en vez de desarrollarla (¡qué vergüenza!), tenemos nuestros temas favoritos a los que recurrimos una y otra vez y con los que llenamos páginas de revistas, minutos (u horas) de conferencias, incluso conversaciones con los amigos. De hecho, hay un chiste por ahí que dice de Richard Stallman que, no es que haya dado miles de conferencias, sino que ha dado una única conferencia, pero repetida miles de veces. Yo, por supuesto, no soy mejor, y un amable lector que acudió a una de mis charlas comentó a su término: “Sí, bueno, esto ha sido como lo de ‘Enemigo a las Puertas Reloaded’” (un saludo Iban). Y es que, en mi caso, el tema recurrente para conferencias, ponencias, bodas, bautizos y comuniones son las licencias y las patentes. Además, ahora, gracias a la FSF y a la publicación de un borrador de la última versión de la GPL, tendré cuerda para rato. Sin ser abogado, sin tener siquiera formación legal, y con la única autoridad que me concede haber leído el texto, me voy a permitir adelantar un poco lo que percibo como las diferencias (o ausencia de) fundamentales entre la v3 y la v2 y, de paso, rajar como de costumbre, de las mal llamadas licencias propietarias. Francamente, las diferencias entre la vieja y la nueva versión de la GPL no son tantas. Se ha hablado mucho de la inclusión de las claúsulas agresivamente anti-DRM y anti-patente, pero las modificaciones, según yo lo veo, no son tales, sino que son aclaraciones para aquellos que, o bien no saben leer entre las líneas de la anterior versión, o le atribuyen a la GPL “licencias” que no concede, o que se cuelgan el cartel de “productores de software libre” sin serlo.
Y
Nos sentimos orgullosos de nuestros orígenes como publicación, que se remonta a los primero días de la revolución Linux. Nuestra revista hermana, la publicación alemana Linux Magazin, fundada en 1994, fue la primera revista dedicada a Linux en Europa. Desde aquellas tempranas fechas hasta hoy, nuestra red y experiencia han crecido y se han expandido a la par que la comunidad Linux a lo ancho y largo del mundo. Como lector de Linux Magazine, te unes a una red de información dedicada a la distribución del conocimiento y experiencia técnica. No nos limitamos a informar sobre el movimiento Linux y de Software Libre, sino que somos parte integral de él.
Al igual que las leyes, las licencias se interpretan, y un departamento legal tozudo con ganas de discutir podría obligar a un defensor de la GPL2 a realizar una larga explicación de dos horas antes de llegar a la inevitable conclusión de que no se puede sacar (y aplicar) una patente sobre software GPL y de que todo uso de DRM es incompatible con el espíritu y la letra del documento. Con la GPL3, todo ese tiempo y argumentación se podrían resumir en la frase “¿Qué parte de “NO” no entiende el señor letrado?”. Si la GPL fuese una IDE, diríamos que la versión 3 mejora sustancialmente el tiempo de desarrollo. Puede que a Torvalds no le gusten esas claúsulas tan explícitas y también es mala suerte, pero en la GPL2 también están ahí, si bien en la interpretación. De todas maneras, como todos, Torvalds es humano y a veces tiene cosas de bombero torero. Como lo de Bitkeeper y Gnome. En el primer caso, el problema con el software propietario es que, si eres desarrollador de software libre, acaba volviéndose en tu contra (por cierto, muchos desarrolladores de software propietario opinan lo mismo del software libre y pienso que tienen razón). Y en cuanto a lo de Gnome, pues puro arrebato, porque, por muy prominente que sea uno en el mundo del desarrollo libre, no puedes ir por ahí diciéndole a la gente qué escritorio adoptar. Por algo se llama software libre. Cambiando un poco de tema: el otro día un compañero, conociendo mi perversa afición a leer licencias de software, me pasó el enlace de una de ellas que no se contentaba con explicar cómo se podía utilizar el programa, sino que también entraba a saco en detalles de cómo podías hablar de ella. ¿El lector expresa su duda? Puede que tenga una copia de VMware a mano y quiera echarle un vistazo a su End User License Agreement.
WWW.LINUX- MAGAZINE.ES
Lo realmente divertido se encuentra en la sección de “Restricciones”, donde, junto con las ya habituales cláusulas que prohiben a tu madre utilizar el software, la negación del derecho a aplicarle plugins, o la obligación de ceder a tu primogénito a la empresa fabricante (es un decir), podemos leer lo siguiente: “No puede llevar a cabo pruebas de rendimiento sin el expreso consentimiento de VMware. VMware tendrá en cuenta solicitudes para llevar a cabo y/o publicar resultados de pruebas. Todas las solicitudes presentadas por usted (o por terceras partes no autorizadas) para publicar resultados de estudios de rendimientos requieren la revisión y aprobación por parte de VMware en lo que se refiere a la metodología, suposiciones y otros parámetros del estudio.” Y es que por coartar libertades, algunas licencias propietarias quieren coartar hasta la de expresión.
Paul C. Brown Director
Número 15
3
CONTENIDOS • Linux Magazine nº 15
PORTADA 13 Especial Virus Mientras unos dicen que se avecina el gran ataque, otros afirman que no hay nada de qué preocuparse. Pero, ¿cuál es la verdadera historia acerca de la posibilidad de sufrir un virus en sistemas Linux?
EVALUACIÓN 28 Gnome 2.12 Gnome 2.10 reconquista los escritorios con su regreso a valores como la simplicidad, claridad y facilidad de uso. El nuevo entorno de escritorio GNU Gnome 2.12 continúa haciendo énfasis en lo básico.
16 Antivirus Así que desea un antivirus ¿no? Le mostramos lo que hemos encontrado tras realizar una gira en busca de los mejores antivirus para la plataforma Linux.
21 KlamAV Puede que Linux no sea tan propenso a virus como Windows, pero ¿quién quiere cobijar el molesto malware? Ahora podemos acabar con los virus gracias a KlamAV, un front-end para el escritorio KDE del antivirus libre ClamAV.
25 Scan Algunas veces la mejor forma de eliminar el correo no deseado es hacerlo antes de que llegue. Amavisd-new es un interfaz de código abierto para el servidor de correo que filtra los mensajes en busca de spam y virus.
LINUX MAGAZINE 3 6 8 10 12 94 94 95 97 98
4
Editorial DVD Linux Magazine Inseguridades Noticias Correo Eventos Información de Contacto Subscripciones Linux Local Próximo Número
Número 15
DESARROLLO 45 Perl: AJAX La tecnología AJAX añade elementos dinámicos para mejorar las páginas más sosas. Todo lo que necesitamos es un programa en Perl en el lado del servidor y algo de código JavaScript en la parte del cliente.
49 AOLServer II
PRÁCTICO
33 Mundos Virtuales Necesitamos buen software y mucha potencia de procesador para crear mundos virtuales. Afortunadamente para los animadores de hoy en día, tenemos potentes PCs a precios asequibles y excelentes herramientas de animación completamente libres.
38 Solfege Solfege nos ayuda a mejorar nuestro conocimiento musical y nos permite practicar identificando intervalos, escalas y acordes.
Es muy común ver a un desarrollador Web tener que ocuparse de absolutamente todo, desde la gestión de la base de datos, pasando por el diseño o el código, ya sea éste en JavaScript, PHP, etc. ¿Alguno se encuentra en ésta situación? Pues con AOLserver se puede dividir este trabajo sin apenas sufrimiento, vemos cómo.
53 Python Con la llegada de Ruby On Rails los programadores están redescubriendo un concepto no demasiado moderno, pero sorprendente… los programas que modifican programas.
ADMINISTRACIÓN
40 Plan 9 Al principio de los tiempos, mucho antes del nacimiento de Linux, un extraño sistema alienígena surgió para cumplir las promesas de Unix. Los descendientes de aquel sistema siguen vivos entre nosotros. Hemos capturado a uno de ellos y lo hemos diseccionado.
WWW.LINUX- MAGAZINE.ES
57 La Columna de Charly El servidor web Apache puede luchar contra los ataques DoS. Sólo necesita la pequeña ayuda de Mod_evasive.
58 Logs Cada sistema Linux produce gran cantidad de datos en los registros. Para impedir que el disco duro se llene existe una aplicación que ayuda a rotar los ficheros de registros y se deshace de los datos obsoletos.
60 Nmap ¿Cómo puede el popular escáner Nmap identificar los agujeros de seguridad de la red? En este artículo se van a examinar varias técnicas de análisis con Nmap.
67 Trickle ¿Sufre nuestra conexión a Internet el castigo de un exceso de descargas? Sie este es tu caso, prueba Trickle, un sencillo programa que nos ofrece un control más preciso en el tráfico de nuestra conexión a la red.
LINUX USER 70 Ktools: Kat La herramienta de búsqueda de escritorio Kat encuentra mucho más que cadenas de texto.
76 Desktopía: Whaw Si estás cansado de torear con el solapamiento de ventanas, Whaw te ayudará a organizarlas.
78 Gtools: Gnumeric OpenOffice Calc es adecuado para la mayoría de las aplicaciones de hojas de cálculo, pero si se estás buscando una ejecución mejor y una aplicación que consuma menos recursos, prueba con el competidor de Calc, Gnumeric.
80 Educación: Moodle III Vemos los nuevos módulos y desarrollos de moodle: las posibilidades de integrar un portfolio electrónico y bitácoras personales, si es posible utilizar recursos multimedia o páginas web interactivas, el cumplimiento de los estándares educativos… Todo fascinante para un enseñante tecnófilo.
■
Última versión 4.0.2 live distro
■
9GBs de software en un sólo DVD
■
Más de 5.300 aplicaciones
■
KDE 3.4.1, Gnome 2.8, OpenOffice 2.0 Pre
■
Incluye guía completa de Knoppix en PDF
84 Línea de Comandos Wget descarga ficheros e incluso sitios web completos desde la línea de comandos.
86 Juegos
MÁS DETALLES EN LA Pág 6
En nuestra sección dedicada a los juegos, traemos este mes una leyenda de los videojuegos gratuitos y de código abierto que nos traslada a las violentas trincheras y campos de batalla de la segunda guerra mundial.
COMUNIDAD 89 Konsultorio Invitamos a Klaus Knopper, el legendario creador de Knoppix, a contestar vuestras preguntas referentes a la configuración en Linux.
WWW.LINUX- MAGAZINE.ES
Número 15
5
DVD LINUX MAGAZINE
Y EN EL DVD LINUX MAGAZINE ¿Qué hay de Nuevo?
L
a distro live de Knoppix es rápida y está repleta de herramientas útiles. Knoppix es el sistema elegido por desarrolladores, administradores y miles de usuarios finales, y lo mejor de todo: arranca desde cualquier sistema tipo Intel con un simple disco. Un distro live es lo mejor en portabilidad, y según los usuarios a lo largo y ancho del mundo, Knoppix es la mejor distro live. Nos sentimos orgullosos de traerte Knoppix 4 en el DVD que acompaña este mes a Linux Magazine.
Con el lanzamiento de Knoppix 4 se ha incrementado aún más el tesoro de Knoppix. Después de años como líder de la distro “CD live”, Knoppix aparece por vez primera como un DVD live. El incremento de capacidad del formato DVD combinado con la compresión de datos cloop usado con Knoppix, se traduce en que la “edición maxi” de Knoppix tiene la capacidad de llevar casi 9 GB de software. Los menús de Knoppix están empaquetados con aplicaciones útiles. Encontrarás docenas de herramientas de escritorio, de desarrollo y utilidades de administración del sistema. Knoppix disfruta de la reputación de encontrar el hardware sin que requiera demasiado esfuerzo y el espacio extra ofrece un alojamiento adicional para soportar una extensa selección de tarjetas gráficas, dispositivos SCSI Y USB, además de otros componentes hardware.
Escritorio con Encanto Knoppix viene con docenas de importantes herramientas de escritorio que pueden llevarse a cualquier parte en el DVD live de Knoppix. Trae lo último de OpenOffice con el OpenOffice 2.0 de Beta.
A Destacar de Knoppix 4 Sistema: Kernel 2.6.12 Xfree86 4.3.0 KDE 3.4.1 GNOME 2.8 GCC 4.0.1 Escritorio: OpenOffice 2.0. Beta KOffice 1.3.5 GIMP 2.2.8 Inkscape 0.41 Evolution 2.2.2 Firefox 1.0.4 Mozilla 1.7.10 Thunderbird 1.0.6 Servidores: Apache 1.3.33 Bind 9.3.1 Samba 3.0.14
In Spanish, plis De manera predeterminada, Knoppix arranca en inglés, pero es muy sencillo hacer que lo haga en castellano. Y, ya de paso, se nos configuran menús y teclados para el español. Cuando aparezca la opción de boot: al principio del arranque, sólo habremos de escibir lo siguiente y pulsar [Enter]: boot: <B>lang=es<B>
Figura 1: No tendremos ningún problema en configurar Knoppix en español desde la pantalla de arranque.
6
Número 15
Figura 2: Knoppix 4 viene con varios escritorios, pero el que arranca por defecto es KDE 3.4.1.
WWW.LINUX- MAGAZINE.ES
Al no estar configurado el teclado todavía, puede que tengamos un poco de dificultad en encontrar la tecla correspondiente al símbolo igual (=). Muy sencillo: está localizado en la tecla de apertura de exclamación (¡). Pulsando en esta tecla, aparecerá el símbolo igual y todo el entorno de Knoppix se cargará en castellano con su correspondiente configuración de teclado.
DVD LINUX MAGAZINE
Figura 3: Knoppix viene con una generosa colección de juegos de calidad.
También puedes encontrar la suite de oficina KOffice 1.3.5, así como la aplicación de autoedición Scribus 1.2.1. Aparte de los buscadores y clientes de correo habituales (Firefox, Mozilla, Epiphany, Konqueror, Evolution, Thunderbird, etc.), encontrarás herramienttas tales como J-Pilot, el administrador de información personal Kontact y el procesador de texto AbiWord. Las utilidades más versátiles para Internet, tales como gFTP, Lynx, GnomeMeeting y el lector de noticias RSS, Akregator, vienen preinstaladas. Knoppix también viene con una colección de herramientas para visualizar documentos y fotos digitales, además de aplicaciones multimedia como el reproductor de medios Kaffeine, el reproductor de audio amaroK y de películas Totem, junto con el tostador de CDs k3b y Rosegarden 4. Para redondear esta amplia selección de herramientas de escritorio están los juegos, programas educativos, emuladores y una rica colección de editores.
Herramientas de Desarrollo Los desarrolladores encontrarán en Knoppix una amplia y fácilmente accesible colección de herramientas. En el DVD de Knoppix 4 se incluye el compilador GNU C/C++ v4.0.1. También encontrarás soporte para lenguajes,
Figura 4: Crea hojas de cálculo, presentaciones y documentos de texto con la versión 2.0 Beta de la famosa suite OpenOffice.
tales como Perl 5.8.7., Python 2.3.5, PHP 4.3.10 y Ruby 1.8.2. Adicionalmente, para extender el soporte a una variedad de lenguajes de programación, el DVD de Knoppix contiene muchas otras cómodas herramientas para el desarrollador, entre las que se encuentran los entornos de desarrollo Eclipse, Mono.NET y Quanta+ para desarollo web. Además están incluidas algunas utilidades como Umbrello UML Modeller, el editor Bluefish y el frontend Cervisia.
Administración del Sistema Knoppix comenzó como un sistema portable para administradores de sistema, siendo sus herramientas de administración aún hoy una de las mejores cosas que posee. El DVD de Knoppix tiene muchas de las aplicaciones de servidor que encontrarás en los discos duros de muchos sistemas Linux, tales como Apache 1.3.33, Bind 9.3.1 y Samba 3.0.14. Además de los servidores posee muchas utilidades de administración de configuración, discos y red. El DVD live de Knop-
pix sobresale como herramienta portable para rescatar ordenadores con discos duros corruptos. Knoppix se usa para la resolución de problemas, investigación forenses de equipos comprometidos y recuperación de datos. Si tu sistema no arranca, arranca Knoppix y explora el estado del disco.
¡Pruébalo Ya! Para saber si Knoppix va a ser útil para ti, coloca el DVD de Linux Magazine en tu unidad de DVD y arranca tu sistema. No tienes nada que perder y no tendrás que hacer nada para volver tu sistema a su estado inicial. Incluso si estás contento con tu sistema operativo actual, tener Knoppix te ayuda. Úsalo como sistema para el respaldo de datos o llévalo contigo cuando viajes. Puedes conectarte a Knoppix desde cualquier parte y conseguir el mismo sistema familiar, aún cuando el ordenador esté configurado con Windows. Knoppix te ofrece una importante colección de herramientas que ocasionalmente pueden ser justo lo que necesitas. Incluso si no piensas viajar, es buena idea mantener Knoppix a mano en el cajón de tu escritorio. Tanto si usas Knoppix una vez al día como una vez al año, cualquier ocasión resulta propicia para que una vez lo uses te des cuenta de lo que tienes y te alegres de poseerlo. Esperamos que disfrutes del DVD de este mes de Linux Magazine: ■ Knoppix 4.
Requisitos del Sistema Procesador: Intel i486 o superior. Memoria: Modo texto 32 MB; modo gráfico 96 MB.
Figura 5: Knoppix dispone de una gran variedad de aplicaciones.
Figura 6: Graba y mezcla música MIDI con Rosegarden.
WWW.LINUX- MAGAZINE.ES
Otros: Dispositivo de lectura DVD arrancable; tarjeta gráfica SVGA compatible; ratón Serie, PS/2 o IMPS compatible.
Número 15
7
INSEGURIDADES LINUX USER Schlagwort sollte hier stehen
INSEGURIDADES ■ gtk2 y gdk-pixbuf El paquete gtk2 contiene el juego de herramientas GIMP (GTK +), una librería para la creación de interfaces gráficas para el Sistema X-Windows. Se encontró un error en la manera en la que gtk2 procesa las imágenes XPM. Un atacante podría crear un fichero maliciosamente manipulado de tal forma que podría dar lugar a que una aplicación linkada con gtk2 ejecutara código arbitrario cuando el fichero fuera abierto por una víctima. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE, http://cve.mitre.org) ha asignado a
este problema el nombre CAN-2005-3186. Ludwig Nussel descubrió un error de denegación de servicio, un bucle infinito, en la manera en la que gtk2 procesa imágenes XPM. Un atacante podría explotar dicho error mediante la creación de un fichero XPM cuidadosamente manipulado, de forma que pudiera provocar que cualquier aplicación linkada con gtk2 dejara de responder cuando el fichero fuera abierto por la víctima. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE, http://cve.mitre.org) ha asignado a este problema el nombre CAN-2005-2975.
POLITICAS DE SEGURIDAD DE LAS DISTRIBUCIONES MAYORITARIAS Distribuidor
Fuente Seguridad
Debian
Info:http://www.debian.org/security/ Lista:http://www.debian.org/debian-security-announce/ Referencia:DSA-…1)
Gentoo
Mandrake
Red Hat
Slackware
Suse
Comentario
Los avisos de seguridad actuales se incluyen en la página de inicio. Los avisos se proveen como páginas HTML con enlaces a los parches. Los avisos también incluyen una referencia a la lista de correo. Info:http://www.gentoo.org/security/en/index.xml Los avisos de seguridad actuales para Foro:http://forums.gentoo.org/ la lista Gentoo en el sitio web de Lista:http://www.gentoo.org/main/en/lists.xml seguridad de Gentoo enlazan desde la Referencia:GLSA:… 1) página principal. Los avisos se presentan en HTML con códigos para fusionar las versiones corregidas. Info:http://www.mandrakesecure.net Mandrakesoft posee su propios sitio web Lista:http://www.mandrakesecure.net/en/mlist.php que versa sobre temas relacionados con Referencia:MDKSA:… 1) la seguridad. Entre otras cosas,incluye avisos seguridad y referencias a las listas de correo. Los avisos son páginas HTML,pero no contienen enlaces a los parches. Info:http://www.redhat.com/errata/ Red Hat archiva los fallos de seguridad Lista:http://www.redhat.com/mailman/listinfo/ bajo lo que denominan erratas. A Referencia:RHSA-… 1) continuación los problemas para cada versión de Red Hat se agrupan. Los avisos de seguridad se proveen como una página HTML con enlaces a los parches. Info:http://www.slackware.com/security La página de inicio contiene enlaces al Lista:http://www.slackware.com/lists/(slackware-security) archivo de seguridad de la lista de correo. Referencia:[slackware-security]… 1) No existe información adicional sobre seguridad en Slackware. Info:http://www.suse.de/en/private/support/ Ya no existe un enlace a la página de security/index.html seguridad tras un remodelado en el sitio Parches:http://www.suse.de/en/private/ web de SuSE. Existe información en la download/updates Lista:suse-security-announce lista de correos y los avisos. Los parches de Referencia:SUSE-SA… 1) seguridad para versiones individuales de SuSE Linux se muestran de color rojo en el sitio de actualizaciones generales. Contiene una corta descripción de la vulnerabilidad que soluciona el parche.
1) Todos los distribuidores muestran correos de seguridad en el campo Subject.
8
Número 15
WWW.LINUX- MAGAZINE.ES
Estos problemas también pueden ser aplicados a gdk-pixbuf, un paquete que contiene una librería de carga de imágenes usado con el entorno de escritorio GUI de Gnome. Además, Ludwig Nussel descubrió un error de desbordamiento de búfer en el modo en el que gdk-pixbuf procesaba imágenes XPM. Un atacante conocedor de este problema podría crear un fichero XPM cuidadosamente manipulado de forma que podría hacer que una aplicación linkada con gdk-pixbuf ejecutara código arbitrario o se colgara cuando el fichero fuera abierto por la víctima. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE, http://cve. mitre.org) ha asignado a este problema el ■ nombre CAN-2005-2976. Referencia Debian: DSA-911 Referencia Gentoo: GLSA-200511-14 <Referencia Red Hat: RHSA-2005:810, RHSA-2005:811 Referencia Suse: SUSE-SR:2005:026
■ PHP PHP es un lenguaje de programación embebido usado comunmente con el servidor Web HTTP Apache. Se encontró un defecto en la manera en la que PHP registra variables globales durante la petición de subida de un fichero. Un atacante podría presentar una petición POST en forma de datos/multiparte que sobreescribiera la matriz $GLOBALS, conduciendo posiblemente a la ejecución de comandos PHP arbitrarios. Esta vulnerabilidad sólo afecta a instalaciones que tienen habilitada register_globals en el fichero de configuración PHP, lo cual no es la opción recomendada. El Proyecto de Vulnerabilidades y Exposiciones Comunes (Common Vulnerabilities and Exposures o CVE, http://cve.mitre.org) ha asignado a este problema el nombre CAN-2005-3390. Se encontró un error en la función parse_str() de PHP. Si un script PHP solamente pasa un argumento a parse_str(), y el script puede ser forzado a abortar la ejecución (por ejemplo, debido a la configuración de memory_limit), el register_globals puede estar habilitado incluso si está
INSEGURIDADES
deshabilitado en el fichero de configuración PHP. Esta vulnerabilidad solamente afecta a instalaciones que tienen scripts PHP que usan la función parse_str de este modo (CVE-2005-3389). Se encontró un defecto de scripting entre sitios en la función phpinfo(). Si una víctima puede ser inducida fraudulentamente a que siga una URL maliciosa con una página que muestre la salida phpinfo(), puede ser posible inyectar javascript o HTML en la página mostrada o robar datos tales como cookies. Esta vulnerabilidad únicamente afecta a las instalaciones que permiten visualizar la salida de phpnfo(). Como la función phpinfo() produce una gran cantidad de datos sobre el estado actual de PHP, solamente debería ser usado durante el depurado o si está protegido mediante autenticación (CVE-20053388). Se encontró un defecto de denegación de servicio en la manera en la que PHP procesa los datos EXIF de imágenes. Un atacante podría hacer que PHP se colgara suministrando datos EXIF de imágenes maliciosamente manipulados.(CVE2005-3353). ■
Referencia Mandriva: MDKSA-2005:213 Referencia Red Hat: RHSA-2005:831 Referencia Slackware: SSA:2005-310-05 Referencia Suse: SUSE-SR:2005:026
■ ClamAV ClamAV es un escaneador de virus de Código Abierto. Se han descubierto algunas vulnerabilidades en las versiones precedentes a la 0.87.1: El desempaquetador OLE2 en clamd permite a atacantes remotos utilizar de un fichero DOC para originar un DoS con un árbol de propiedad inválida (CVE-2005-3239). El desempaquetador FSG permite a los atacantes remotos originar “corrupción en la memoria” y ejecutar código arbitrario mediante un fichero FSG 1.33 manipulado (CVE-2005-3303). La función tnef_attachment() permite que atacantes remotos causen un DoS (bucle infinito y un agotamiento de memoria) a través de un valor manipulado en un fichero CAB que hace que ClamAV escanee repetidamente el mismo bloque (CVE-2005-3500). Atacantes remotos podrían producir un DoS (bucle
WWW.LINUX- MAGAZINE.ES
infinito) a través de un fichero CAB manipulado (CVE-205-3501). Una comprobación indebida de límites en petite.c podría permitir que los atacantes llevaran a cabo ataques desconocidos a través de vectores desconocidos (CVE-2005-3587). ■ Referencia Mandriva: MDKSA-2005:205 Referencia Suse: SUSE-SR:2005:026
■ Fetchmail Fetchmail es una utilidad para la recuperación de correo. Thomas Wolff y Miloslav Trmac descubrieron una condición de carrera en el programa fetchmail.conf. fetchmail.conf crea un fichero de configuración de salida inicial con permisos inseguros y solamente después de escribir hace los permisos más restrictivos. Durante ese período, las contraseñas y otros datos podrían ser expuestos a otros usuarios en el sistema a menos que el usuario use una configu■ ración umask restrictiva. Referencia Debian: DSA-900 Referencia Mandriva: MDKSA-2005:209 Referencia Gentoo: GLSA 200510-25 Referencia Red Hat: RHSA-2005:809-6
Número 15
9
NOTICIAS DEL KERNEL LINUX USER Schlagwort sollte hier stehen
NOTICIAS DESDE EL KERNEL Sus Labores El kernel siempre está siendo sometido a tareas de limpieza para mantenerlo como los chorros del oro. Recientemente, la mayoría de las referencias que aún le quedaban a DriverFS fueron elminadas por Eike Beer. A DriverFS se le viene denominando SysFS desde hace ya bastante tiempo, pero varios documentos y archivos fuente seguían refiriéndose a él por su antiguo nombre, ya fuese porque arreglar las referencias al nombre no era muy importante o bien porque los mantenedores originales habían migrado a otros proyectos. Adrian Bunk, por su parte, lleva ya tiempo trabajando en la completa eliminación de los ya obsoletos drivers de sonido OSS y, recientemente, ha programado el borrado de varios de ellos. Al decir obsoletos, se refiere a que existen sustitutos ALSA completos y funcionales listos para asumir sus funciones. Desafortunadamente, no siempre está claro cómo de bien ha de funcionar un driver ALSA antes de considerársele un sustituto adecuado. Por ejemplo, algunos de estos drivers ALSA son mucho mayores que sus equivalentes OSS, lo que puede suponer un problema para la gente que trabaje en sistemas embebidos, aún si la versión ALSA soporta todo lo soportado por el anterior driver OSS. A pesar de las dificultades, Adrian desmantela pieza a
pieza OSS. No es un trabajo muy satisfactorio, pero como resultado aporta un kernel más limpio y feliz. Russell King también trabaja para limpiar el kernel de código obsoleto, lo que incluye un buen número de funciones que se habían quedado anticuadas desde hace tiempo. Por desgracia, en algunos casos, la eliminación de este código rompe varios drivers como los de MWave y ibmasm. La situación actual con funciones en desuso se ha vuelto complicada debido al hecho de que muchos de los drivers afectados no estaban siendo mantenidos, y por lo tanto no se actualizaban. El resultado final de todo esto ha sido que Max Asbock ha corregido ibmasm, mientras que AlanCox ha parcheado MWave. Aparte de trabajar en OSS, Adrian también se ha hecho responsable del trivial patch Monkey de Rusty Russell. El Trivial Patch Monkey es un sistema semiautomático que recoge parches del kernel extremadamente simples y obvios para evitar que cualquier otro tenga que ocuparse de hacerles el seguimiento y reenviarlos si no se aplican la primera vez. El motivo original por la que Rusty empezó el Trivial Patch Monkey era precisamente debido a que muchos de estos parches no se aplicaban la primera vez y los desarrolladores encontraban frustrante el tener que reenviar parches obviamente correctos una y otra vez.
La lista de correo del kernel de Linux comprende lo principal de las actividades de desarrollo de Linux. El volumen del tráfico es inmenso, alcanzándose a menudo los diez mil mensajes semanales. Mantenerse al día de todo lo que sucede en el desarrollo del kernel es casi imposible para una sola persona. Sin embargo Zack Brown es uno de los pocos valientes que lo intentan y a partir de ahora, podrá leerse lo último de las discusiones y decisiones con respecto del kernel de Linux llevados de la mano de este experto. Zack ha publicado un resumen online semanal llamado “The Kernel Traffic Newsletter” durante cinco años. Linux Magazine te trae ahora la quintaesencia de las actividades del kernel de Linux del mayor especialista en el tema.
10
Número 15
WWW.LINUX- MAGAZINE.ES
El desarrollo inicial del patch monkey se llevó a cabo en una época en la que Linux Torvalds encontraba dificultoso mantenerse al día con el vasto número de parches que se le remitían. Una de las soluciones para aliviar las tensiones de los desarrolladores era la de utilizar control de versiones. La otra era la de administrar los parches más sencillos y obvios con el Trivial Patch Monkey, que Rusty mantuvo durante años y que ahora es responsabilidad de Adrian.
Sistema de Ficheros eCryptFS Phillp Hallewell y Michael Halcrow han sometido la versión 0.1 de eCryptFS a evaluación con vistas a su inclusión en el árbol oficial del kernel. Ésta es la versión simplificada de lo que esperan del sistema, y han elegido someterlo a examen en este formato para facilitar el análisis y depurado del diseño básico. Si aprueba el examen y se incluye en el kernel, planean empezar a incluir prestaciones adicionales a la infraestructura básica. La idea fundamental de eCryptFS es la de hacer la encriptación de desencriptación completamente transparente para las aplicaciones del usuario. La encriptación se hace para cada fichero individual, con los metadatos criptográficos encapsulados dentro del mismo fichero. Esto permite a los usuarios tratar ficheros eCryptFS exactamente igual que otros tipos de ficheros no encriptados. Los ficheros pueden ser copiados de un lugar a otro, incluso a dominios no confiables, y seguirán siendo legibles exclusivamente por los usuarios con las credenciales criptográficas correctas. De esta manera, eCryptFS se comporta de manera similar a GNUPG u otras herramientas de encriptación con claves públicas. Debido a esta flexibilidad en el diseño básico, existe una gran anchura de manga para especificar las políticas de seguridad en un sistema dado. De momento, sin
NOTICIAS DEL KERNEL
Figura 1: Git es un juego de herramientas de bajo nivel muy poderosas.
embargo, Phillip y Michael han aportado excluivamente el soporte por montaje hasta que las características y diseño básicos puedan ser probadas adecuadamente. Parece claro que ya existe código adicional listo para ser incluido a medida que la oferta actual se gana su aprobación.
El Estado de GIT A los desarrolladores de git no hay quien los pare. El proyecto ha sobrepasado todas las expectativas, incluyendo las del mismo Torvalds, y para cuando leáis esto, probablemente se haya pasado a la versión 1.0. Y, a pesar de lo anterior, git sigue manteniéndose fiel a sus objetivos originales, en el sentido de que no aporta un interfaz sencillo tipo CVS que cualquiera pueda coger y ejecutar, sino que, tal y como Linux lo describió en un principio, se trata más bien de una serie de comandos de bajo nivel, sobre los cuales cualquiera puede escribir una serie de operaciones de alto nivel más amigables. A este respecto, Cogito sigue siendo el front-end más popular para git y provee de un sencillo interfaz a lo CVS que resalta la potencia subyacente. Si bien Linux hace tiempo que abandonó el cargo de líder del proyecto de git, sigue siendo una importante influencia. Además de escribir código, tal vez su mayor contribución sea la de mantener encarrilado el proyecto. A pesar de ser un proyecto relativamente pequeño, la elegancia de su diseño base no siempre es obvia y, en ocasiones, algunos desarrolladores se han encontrado resolviendo problemas que en realidad no existen. Por ejemplo, el protocolo de git no manejaba lo que alguna gente necesitaba y se abrió una discusión sobre la posibilidad de reeemplazarlo y de cómo afectaría esto en términos de compatibilidad retroactiva, hasta
que Linux apareció por allí y dijo: “¡Chicos, chicos! De hecho el protocolo está diseñado para ser extensible”. Uno de los problemas persistentes con git es el seguimiento de renombrado de ficheros. En la práctica, a menos que se desee utilizar un trozo de la historia del renombrado para algo, git administra sin ningún tipo de fallo el renombramiento. En otras palabras, en el nivel más básico, si se renombra un fichero en repositorio git, éste es capaz de hacer el seguimiento. Sin embargo, el interfaz diseñado para presentar estos cambios ante el usuario aún está por escribir y no parece una tarea sencilla. El problema radica en la insistente idea de Linus de que la función de detección de renombramiento pertenece al front-end. En su opinión, confiar en el usuario para que le diga cuándo se ha producido un renombramiento daría lugar a muchos casos de error, en parte debido al hecho de que en general los usuarios ni siquiera se dan cuenta de cómo se trasladan datos entre ficheros. Sin embargo, según Linus, la pista está ahí, dispuesta a ser seguida cuando el usuario lo requiera. El debate sobre el renombramiento es continuo, sin que nadie, ni siquiera el propio Linus, sepa a ciencia cierta qué es lo que se requiere para realizar un seguimiento de renombramientos preciso a la manera propuesta. A pesar de haber presentado descripciones detalladas de porciones de la solución, sigue bloqueado en algunos aspectos, y con éstos, todos los demás. Sin embargo, el debate posee las características de las cosas en las que Linus ha insistido en el pasado. Se obstina en que algo es correcto, a pesar de que contradice el saber popular y de que nadie, a excepción de él, ve cómo puede resolverse. A continuación se desencadenan peleas y flamewars. Al final todas las piezas acaban encajando y se convierten en el nuevo saber popular. Mientras tanto, algunos, como Jeff Garzik, están involucrados de manera muy activa en desarrollo utilizando git. Hace poco Jeff migró el desarrollo de ethtool a un repositorio git y se ha estado planteando algunas modificaciones inusuales para el propio git. Su última idea alocada es añadir soporte para un repositorio git de red puro. Hasta el momento, git se ha presentado como un sistema distribuido, en el sentido de que no hay repositorio central y que cada nodo actúa como el servidor para su propia versión de un proyecto dado. Jeff, por su lado, propone deshacerse
WWW.LINUX- MAGAZINE.ES
incluso de la noción de servidor de repositorio. En vez de que cada máquina sirva su propio repositorio, participarían muchos sistemas, sin que existiera una única máquina esencial para el mantenimiento de todo el conjunto. Los usuarios obtendrían la versión más reciente del proyecto consultando una red git, en lugar de a una única máquina en Internet. O una red git consultaría a otra y los repositorios de proyectos flotarían de un lado del mundo al otro sobre alas binarias. Es una idea desquiciada, pero también lo es git. Y lo es el seguimiento de renombramientos en el front-end. Y también lo es la implementación del control de las revisiones como una serie de interfaces similares a llamadas al sistema. Todo es una locura… pero es lo mejor que tiene.
Subsistema de Suspensión de Software Rafael J. Wysocki ha partido el código de la supensión de software en dos subsistemas independientes y, gracias a la aprobación de Pavel Machek, es probable que ésta sea la dirección que tome el árbol oficial. El objetivo es simplificar el código y hacerlo más coherente, para, con el tiempo, mover varias porciones al espacio de usuario. El subsistema primario es administrador de instantáneas, que crea las estructuras de datos que deben preservarse durante la suspensión del sistema. El subsistema secundario, y el que con toda probabilidad acabe en el espacio de usuario, es el administrador del swap que recoge lo que le entrega el código de la instantánea y lo escribe en el swap antes de la suspensión. Al reactivarse el sistema, el subsistema lee los datos del swap y recrea el sistema en ejecución. Este método le permite a Rafael eliminar tres cuartas partes de los datos de la instantánea que graba en el disco, lo que hace posible contar con más memoria durante la reactivación. Asimismo se elimina una restricción de tamaño que se imponía a los datos y desaparece la necesidad de algunas variables globales (lo que siempre es bueno). Rafael indica que su idea sigue siendo un prueba de concepto y que quedan por probar algunos detalles como las rutas de errores. Sin embargo, el diseño en sí se ha encontrado con una aprobación generalizada y es de esperar que será la dirección elegida para swusp.
Número 15
11
CORREO LINUX USER
Schlagwort sollte hier stehen
Correo del Lector
ACCESO DE ESCRITURA Estimados Sres: Soy un comprador bastante habitual de su revista aunque no sea un subscriptor. Tal vez por ser ligeramente torpe, mi distribución preferida es Mandrake/ Mandriva, aunque por ello me vea limitado, ya que no me permite ver DVDs y similares. Hace algún tiempo descubrí el “Penguin Liberation Front” y me di cuenta de que podría solucionar algunos de mis problemas, pero no suelo tener conexión a Internet y cuando la tengo, es una de esas vergonzosamente lentas. Como esta es la dirección de sugerencias para el DVD me gustaría proponerles que sacaran un DVD con estos paquetes que les digo. Seguramente muchos usuarios se alegrarán de que lo hagan, incluso quienes tengan una conexión rápida, ya que así no tendrán que esperar las descargas. Atentamente, Aitor Querido Aitor, Hay al menos dos buenas razones por las que algunos paquetes no se encuentran incluidos en ninguna distribución comercial, ni no comercial, ni en ningún DVD/CD de terceros. Primeramente, algunos de los programas que mencionas tienen licencias no-libres, lo que los hace incompatibles con su inclusión en una distro normal. Recuerda que la palabra “free” en “free software” se refiere a “free” de libre, no “free” de
12
Número 15
“gratuito”. Hay mucho software gratuito por ahí que, sin embargo, no permite su libre distribución. Por ejemplo, los plugins para visionar animaciones Flash de Macromedia/Adobe son gratuitos, pero no se pueden distribuir sin pasar por caja. Por esta razón, estos programas sólo se distribuyen incluidos en distros de pago. Segundo, casi todos, si no todos, los paquetes incluidos en los repositorios “no-oficiales”, contienen software que infringen patentes en diversas partes del mundo. Hay que tener en cuenta que Mandriva, Suse, Fedora/Red Hat, Ubuntu,… no sólo producen distribuciones para Europa donde, a pesar de los interesados funcionarios de la Oficina Europea de Patentes, las patentes sobre software no son aplicables, sino que también lo hacen para las américas y Japón, donde, no sólo son legales, sino que se anima a estas prácticas diseñadas para monopolizar el mercado. Linux Magazine también exporta a EE.UU., Méjico y otros países del continente americano y, a no ser que queramos acabar arruinados por pagar las fuertes multas que supone la distribución de material patentado, ni publicamos, ni publicaremos jamás este tipo de material, aunque nos pese. Hasta que no se acabe con estas leyes absurdas a nivel global, sería un suicidio. ¿Adónde hemos ido a parar? Compras legalmente un DVD de una película que nos gusta en unos grandes almacenes, pero a la hora de insertar el disco en el lector de nuestro portátil, se nos plantea un interesante dilema, a saber: Siendo un ciudadano temeroso de la ley, podemos o arrancar Windows y arriesgarnos a que ese círculo plateado de aspecto inocente nos instale un rootkit que nos comprometa el ordenador y nos fastidie el sistema, o podemos arrancar Linux y utilizar unos programas y codecs que, en algunos países autode-
WWW.LINUX- MAGAZINE.ES
nominados abanderados de la libertad, democracia y la libre competencia, conseguirían que sus creadores acabasen con sus huesos en un juzgado. Por tanto, es lógico que, como último recurso, esos mismos desarrolladores se refugien en servidores en “paraisos de patentes” y cuelguen en ellos programas a los que, según la lógica, todo consumidor debería tener derecho. ¿Quieres un DVD con todos los juguetes? Primero hay que cambiar el mundo… y da la casualidad de que vivimos en un momento histórico sin precedentes, donde el ciudadano de a pie tiene más poder que nunca para hacerlo. Milita, haz saber a tu eurodiputado lo que piensas de las patentes y cómo te afecta de manera directa. Persigue a los corruptos que se dejan sobornar por los lobbies e invítalos a que abandonen sus cargos. Empieza un blog para expresar tu punto de vista y enlaza con otros que tengan ideas similares a las tuyas. Aumentarás el perfil del movimiento anti-patentes y, por ende, la presión mediática para la búsqueda de una solución. Visita los IRCs de otros países, habla con tus amigos americanos para que hagan campaña como haces tú. Utiliza la abundante información en Internet para destrozar cualquier argumento a favor de las patentes de software. fsf.org, ffi.org y proinnova.org son buenos sitios donde empezar. Y, si te encuentras en condiciones de destrozar, destroza, no dejes piedra sobre piedra. No tengas piedad. Ellos no la tienen contigo. Paul “lo queremos y lo tendremos” Brown
Puedes enviar tus comentarios y sugerencias a: correo@linux-magazine.es
www.almogon.de
En Busca del Repositorio Perdido
Virus en Linux • PORTADA
Posibilidades de infección en Linux
¿SEGURO SEGURO? Mientras unos dicen que se avecina el gran ataque, otros afirman que no hay nada de qué preocuparse. Pero, ¿cuál es la verdadera historia acerca de la posibilidad de sufrir un virus en sistemas Linux? POR TOMASZ KOJM
P
uede que un sistema Linux no sea tan vulnerable como uno bajo Windows, pero si creemos que los virus para Linux no existen, vamos a tener que recapacitar. Los autores de virus tienen una variada gama de posibilidades de introducir virus en un sistema Linux, aunque el daño puede limitarse si somos mínimamente cuidadosos y seguimos algunas sencillas reglas. En este artículo vamos a describir algunos ejemplos de cómo funcionan los virus para Linux, y daremos algunos consejos para mantener nuestros equipos seguros.
Un Teórico Virus para Linux La mayoría de las distribuciones incluyen gzexe, un pequeño programa que comprime archivos ejecutables y los descomprime automáticamente al ejecutarlos. Por ejemplo, podemos copiar /bin/date en /tmp y ejecutar gzexe /tmp/date para comprimir el archivo ejecutable. El tamaño de /bin/date y de /tmp/date debería ser distinto, y además, el de este último considerablemente menor. Ejecutamos ambos archivos. ¿Notamos alguna diferencia? Todo ejecutable comprimido con gzexe incluye una pequeña sección de código al principio del archivo. Si abrimos /tmp/date con nuestro editor favorito, veremos que no es otra cosa sino un simple script de
shell. Bajo esta sección de código se sitúan la información en binario con el ejecutable comprimido. El código shell es el responsable de descomprimir la información en un archivo temporal y de ejecutarlo. Todo este proceso es transparente para el usuario, y con los veloces ordenadores de hoy día, el retardo en ejecutar archivos comprimidos es marginal. Imaginemos ahora una sección de código modificada que haga lo siguiente antes de descomprimir y ejecutar el código original: • busca aleatoriamente en $PATH algún archivo
ejecutable que se pueda escribir (o un archivo que sea propiedad del usuario en uso), que no sea un script de shell. • comprime el archivo ejecutable (puede incluir el código del script de shell de gzexe) e inserta la cabecera modificada en su interior. Esta sección de código se ajusta a la definición de virus que aparece en la Wikipedia: “un programa de ordenador que puede infectar otros programas modificándolos para incluir una copia de sí mismo” [1]. Llamémosle Linux.Gzipper. Como muestra este sencillo ejemplo, no es un gran desafío el escribir un pequeño virus para Linux. No debería sorprendernos que los autores de virus puedan usar métodos más sofisticados. El formato ELF (Executable and Linking) de los archivos ejecutables es muy similar al formato PE (Portable Executable) que usa Microsoft Windows y proporciona casi la
TEMA DE PORTADA Virus Linux.......................................... 13 Antivirus.............................................. 16 KlamAV................................................ 21 Amavisd-new...................................... 25
WWW.LINUX- MAGAZINE.ES
Número 15
13
PORTADA • Virus en Linux
Listado 1: Comenzamos con un Archivo Infectado 01 testuser@testsystem:~/testfiles$ ls -l 02 total 727 03 -rwxr-xr-x 1 testuser testuser 49084 Sep 4 03:32 cp 04 -rw-r--r-- 1 testuser testuser 651 Jul 28 2004 crontab 05 -rwxr-xr-x 1 testuser testuser 88038 Nov 6 17:51 date.infected
uso” que promocionan el modelo erróneo de un único usuario con altos privilegios, lo que abre la puerta a ataques de virus y permite a éstos infectar partes vitales del sistema operativo. Estas distribuciones podrían llamarse “de fácil infección” en lugar de “de fácil uso”.
06 -rw-r--r-- 1 testuser testuser 1489 Feb 10 2004 fam.conf
Las Diversas Caras de Linux
07 -rw-r--r-- 1 testuser testuser 292 Jun 18 02:05 hosts
Otra cosa que dificulta la propagación a los virus es la diversidad de distribuciones de Linux y las arquitecturas soportadas, así como las numerosas diferencias técnicas entre ellas. Por supuesto, un virus compilado para la arquitectura x86 no funcionará en un SPARC y viceversa. Incluso los virus “portables” escritos en lenguajes de script como Perl o la shell pueden fracasar en su intento por ejecutarse en función de los elementos que no estén disponibles en el sistema de la víctima.
08 -rwxr-xr-x 1 testuser testuser 71996 Sep 4 03:32 ls 09 -rw-r--r-- 1 testuser testuser 1426 Nov 6 01:44 passwd 10 testuser@testsystem:~/testfiles$ clamscan --no-summary 11 /home/testuser/testfiles/cp: OK 12 /home/testuser/testfiles/ls: OK 13 /home/testuser/testfiles/crontab: OK 14 /home/testuser/testfiles/hosts: OK 15 /home/testuser/testfiles/fam.conf: OK 16 /home/testuser/testfiles/date.infected: Linux.Rst.A FOUND 17 /home/testuser/testfiles/passwd: OK
misma funcionalidad. Es decir, los autores de virus podrían usar muchas técnicas avanzadas de infección de archivos ejecutables que han desarrollado para atacar sistemas Windows durante la última década. Por supuesto, ya existen un buen número de virus que infectan el sistema ELF. Es más, algunos virus pueden incluso infectar tanto archivos PE como ELF. Sin embargo, incluso los virus para Linux más avanzados se enfrentan al mismo problema que se encontró nuestro pequeño Gzipper: no es tan sencillo dañar un sistema Linux.
Protección Nativa Anti-Virus Los autores de virus explotan el hecho de que la mayoría de los usuarios de sistemas operativos comerciales están acostumbrados a trabajar con un alto nivel de privilegios que permite la manipulación directa de recursos críticos del sistema. En el caso de Linux, y de UNIX en general, es un principio fundamental que el usuario sólo debería usar la cuenta de root para acciones de administración y nunca en el uso cotidiano. Siempre que se obedezca esta regla, la mayoría de los virus no podrán hacer un daño global, ya que el mecanismo de permisos de archivos protege al sistema y a los ficheros de los usuarios. Por supuesto, un virus podría tratar de realizar una escalada de privilegios, pero en este caso, los sistemas con agujeros ya están de todos modos a merced de otros tipos de ataque, no solamente de virus.
14
Número 15
Propagar los problemas
Nuestro teórico Gzipper busca en $PATH archivos ejecutables que pueda infectar. Cuando Gzipper se ejecuta por un usuario sin privilegios, sólo será capaz de infectar archivos ejecutables que pertenezcan o se puedan escribir por este usuario, y en la mayoría de los casos no será capaz de extenderse más allá del entorno de dicho usuario. Desafortunadamente, existen algunas distribuciones de Linux “de fácil
Los virus, al contrario que los gusanos, no tienen mecanismos para replicarse entre sistemas. Sólo pueden propagarse junto al archivo anfitrión, contaminando otros archivos en el proceso. Hoy día, la mayoría de los usuarios y administradores de sistemas Linux instalan software de sus distribuciones o de fuentes oficiales que se consideran fiables. Además de esto, los paquetes oficiales suelen estar firmados
Listado 2: Propagamos la Infección 01 testuser@testsystem:~/testfiles$ ./date.infected 02 Sun Nov 6 18:02:46 CET 2005 03 testuser@testsystem:~/testfiles$ ls -l 04 total 1010 05 -rwxr-xr-x 1 testuser testuser 97890 Nov 6 18:02 cp 06 -rw-r--r-- 1 testuser testuser 651 Jul 28 2004 crontab 07 -rwxr-xr-x 1 testuser testuser 88038 Nov 6 17:51 date.infected 08 -rw-r--r-- 1 testuser testuser 1489 Feb 10 2004 fam.conf 09 -rw-r--r-- 1 testuser testuser 292 Jun 18 02:05 hosts 10 -rwxr-xr-x 1 testuser testuser 120802 Nov 6 18:02 ls 11 -rw-r--r-- 1 testuser testuser 1426 Nov 6 01:44 passwd 12 testuser@testsystem:~/testfiles$ clamscan --no-summary 13 /home/testuser/testfiles/cp: Linux.Rst.A FOUND 14 /home/testuser/testfiles/ls: Linux.Rst.A FOUND 15 /home/testuser/testfiles/crontab: OK 16 /home/testuser/testfiles/hosts: OK 17 /home/testuser/testfiles/fam.conf: OK 18 /home/testuser/testfiles/date.infected: Linux.Rst.A FOUND 19 /home/testuser/testfiles/passwd: OK
WWW.LINUX- MAGAZINE.ES
Virus en Linux • PORTADA
Listado 3: Hemos Creado una Puerta Trasera 01 testuser@testsystem:~/testfiles$ ps aux 02 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 03 [...] 04 testuser 28000 0.0 0.1 2116 876 ? S 18:02 0:00 ./date.infected 05 [...] 06 testuser@testsystem:~/testfiles$ netstat -upan 07 [...] 08 udp 0 0 0.0.0.0:5503 0.0.0.0:*28000/date.infected
digitalmente y se pueden verificar antes de la instalación. Desafortunadamente, incluso el mejor mecanismo de prevención no puede evitar un error humano. En septiembre de 2005, la versión oficial coreana de Mozilla Suite 1.7.6 y Thunderbird 1.0.2 para Linux resultó infectada con el virus Linux.RST.B. El incidente fue bastante serio porque el navegador Web generalmente se instala globalmente desde la cuenta de root para hacerlo disponible a todos los usuarios del sistema. La ejecución de la suite infectada desde una cuenta con privilegios podría permitir al virus infectar fácilmente archivos del sistema. La Fundación Mozilla publicó un aviso de seguridad, recomendando a los usuarios coreanos que hubiesen instalado productos infectados que escaneasen sus sistemas con un antivirus [2]. Estos incidentes de momento son bastante raros, pero es probable que se intensifiquen en el futuro a medida que se
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
incremente el software puesto a disposición por parte de terceras fuentes.
El Auténtico Problema
Los virus de ordenador a menudo llevan un payload, que es la acción especial que desarrollan después de propagarse. En nuestro ejemplo de Linux.Gzipper era comprimir los archivos objetivo antes de infectarlos. Aunque, en algunos casos, incluso este tipo de acciones tan inocentes pueden causar un serio malfuncionamiento del sistema, la mayoría de los virus en el mundo real no son tan simpáticos como Gzipper. La primera versión del virus RST se descubrió a finales de 2001. El nombre proviene de “Remote Shell Trojan”. RST trata de infectar archivos ejecutables en el directorio actual, y si tiene suficientes privilegios, también infecta los archivos de sistema de /bin. El Listado 1 muestra un directorio con unos cuantos archivos limpios y uno infectado con el virus. Si ejecutamos date.infected como usuario sin priviListado 4: Compilamos Hello, World legios, provocamos la infectestuser@testsystem:~/hello$ cat hello.c ción del directo#include <stdio.h> rio actual (Listado 2). Además, int main(int argc, char **argv) el virus activa su carga y arranca { un servidor en printf("Hello world!\n"); segundo plano return 0; que se pone a la } escucha del testuser@testsystem:~/hello$ gcc hello.c -o hello1 socket UDP (Listado 3). En este testuser@testsystem:~/hello$ ./hello1 momento, un Hello world! atacante con testuser@testsystem:~/hello$ ls -l conocimientos total 12 de un protocolo especial puede -rw-r--r-- 1 testuser testuser 100 Nov 6 18:46 hello.c tomar control -rwxr-xr-x 1 testuser testuser 7340 Nov 6 18:50 hello1 por la puerta
WWW.LINUX- MAGAZINE.ES
trasera y arrancar un shell remoto en el sistema infectado. Algunos de los virus Linux que existen implementan técnicas de infección muy interesantes. Linux.Svat es un ejemplo de este último tipo. En lugar de infectar directamente, intenta modificar el sistema operativo para crear archivos infectados. El Listado 4 muestra el proceso de compilación de un programa “Hello, World” estándar. La idea de Svat se basa en el diseño del compilador. Cuando GCC se encuentra una macro #include <file.h>, busca en primer lugar el archivo cabecera file.h en /usr/local/include y más tarde en /usr/include, que es el directorio donde están instalados todos los archivos cabecera importantes. El archivo stdio.h es uno de los archivos cabecera más usados. Cuando el archivo infectado por Linux.Svat se ejecuta desde la cuenta de root, se instala una nueva cabecera en /usr/local/include. El nuevo stdio.h incluye el original y además redefine la función del sistema close(), que a partir de ese momento llama a la rutina del virus virfunc() antes de cerrar los descriptores del archivo. La rutina tiene bugs y causa una violación de segmento si no tiene permiso de escritura en el directorio /usr/local/include. Este desliz en el código limita las oportunidades del virus para replicarse. La rutina de infección se incluirá en cada nuevo archivo que se compile haciendo uso de stdio.h. Debido a que nuestro archivo de ejemplo hello.c no llama a la función close(), el código del virus que tenemos en hello2 no se activará nunca.
Las Reglas de Oro Las reglas para protegernos de virus Linux son similares a las reglas para otros sistemas: 1.No usar nunca la cuenta de root para el trabajo rutinario. 2.Evitar la ejecución de archivos binarios de origen desconocido. Verificarlos previamente con escáners de rootkits y virus. 3.Verificar cuidadosamente cada archivo antes de ejecutarlo desde una cuenta de root. 4.Mantener el sistema operativo actualizado. Instalar regularmente las actualizaciones de seguridad. 5.Asegurar nuestro entorno con contraseñas difíciles de quebrantar y otras protecciones. 6.Comprobar los cambios en el sistema ■ con herramientas de integridad.
Número 15
15
PORTADA • Antivirus
Antivirus para Linux
ANTIVIRUS Así que desea un antivirus ¿no? A continuación vamos a mostrar lo que hemos encontrado tras realizar una gira en busca de los mejores antivirus para la plataforma Linux. POR JAMES MOHR
D
esde el famoso virus Bliss a principios de 1997, la prensa ha estado bastante tranquila en relación con los virus para la plataforma Linux. Sin embargo, dependiendo de la fuente a la que se consulte, se habla desde una docena hasta 400 virus, troyanos y otra clase de malware que es capaz de infectar sistemas Unix y Linux. Comparado con las decenas de miles de virus, gusanos y otras clases de infecciones que afectan a Windows, en Linux esta cantidad es bastante pequeña y las ocasiones de ser infectado por un virus son mucho menores. Pero como se aprendió en el artículo anterior, los antivirus para Linux son bastante importantes.
cada semana, es una motivación para disponer de una buena solución con la que combatir los virus. Cuando comencé este proyecto tan sólo esperaba encontrar unas pocas empresas que proporcionaran versiones de sus productos antivirus para Linux. Mientras llevaba a cabo la búsqueda, algunas empresas parecían que simplemente habían saltado a la moda de Linux, pero también encontré varias que poseían una solución antivirus para Linux muy profesional y eficaz. En este artículo, voy a investigar algunos de los antivirus más populares del entorno Linux.
Consiguiendo un Antivirus
Para el artículo, solamente he tenido en cuenta los productos que se podían descargar y usar gratuitamente, incluso si la versión disponible era simplemente una copia de evaluación. No he tenido en cuenta aquellos productos que sólo esta-
Si se está usando Linux como un servidor de ficheros o de correo electrónico en una empresa, realmente se debería considerar instalar un buen antivirus. En muchos casos, las docenas de virus que detecto
16
Número 15
La Colección
WWW.LINUX- MAGAZINE.ES
ban disponibles en CDs que había que solicitar. Los productos que solamente están disponibles en CDs son una excepción, porque he logrado bajarme una gran cantidad de antivirus. En algunos casos, existían versiones más avanzadas para los servidores de ficheros o de correo que no estaban disponibles para ser descargadas desde la web. Además de analizar productos que fueran capaces de identificar y eliminar los virus en nuestro laboratorio, también he evaluado la facilidad de uso de los mismos. Se espera que la instalación y el uso de los productos comerciales sean fáciles. No hay que ser un administrador de sistemas experimentado para poder instalarlo. Mi intención original fue hablar sobre versiones de “estaciones de trabajo”, pero no todas las empresas disponen de versiones de este tipo y en estos casos, elegí un producto cuya apariencia y funcionalidad fuera similar.
Antivirus • PORTADA
BitDefender La versión para Linux que descargué era BitDefender-Console-Antivirus-7.0.1-3, que venía como un fichero RPM. Aunque BitDefender [1] no soporta un amplio rango de sistemas operativos como lo hacen otros vendedores, proporciona un buen número de variantes de sus productos. Por ejemplo, disponen de versiones para Sendmail y Sendmail Milters, Qmail, Postfix y Courier. Además de los antivirus para Linux, también proporcionaban versiones gratuitas de sus antivirus para Windows. Aunque la realización del primer análisis fue más sencillo que con otros productos, el único fichero que BitDefender identificó inicialmente como virus fue el fichero de pruebas EICAR. Además de esto, la ayuda en línea no coincidía con la página man. Se hizo uso de un comando extraído de la página man que se suponía que incluía los archivos comprimidos, pero no fue analizado ningún fichero .zip. El antivirus no comenzó a analizar otros ficheros que no fueran los típicos ficheros ejecutables Windows (los terminados en .exe, .com, .bat) hasta que se usó la opción --all. Sin embargo, resultó bastante interesante que, incluso sin la opción --all, analizara los ficheros letter32.txt y body2.doc. Incluso cuando se usó --all, no funcionó todo como se esperaba. El antivirus informó que el fichero every.zip estaba “OK”, a pesar del hecho de que otros productos lo identificaban como infectado. Cuando se renombraba a .exe o .doc, el fichero era analizado e identificado como comprimido, y los ficheros comprimidos que contenía dentro se analizaban y se detectaba que estaban infectados, como lo habían identificado los otros productos.
Listado 1: Ejemplo de Salida de BitDefender 01 Results: 02 Folders :1 03 Files :64 04 Packed :0 05 Infected files :32
Listado 2: Ejemplo de Salida de ClamAV 01 ----------- SCAN SUMMARY ----------02 Known viruses: 40507 03 Engine version: 0.86.2 04 Scanned directories: 1 05 Scanned files: 69 06 Infected files: 69 07 Data scanned: 4.91 MB 08 Time: 3.705 sec (0 m 3 s)
Descubrí que el fichero de configuración contenía una lista de “extensiones” que el programa utilizaba para decidir si debía o no analizar un fichero. Cuando añadí “zip” a la lista, los ficheros se escasearon e identificaron correctamente. Parecía como si al no estar en la lista de “extensiones conocidas” el fichero no era analizado por defecto. Considerando que Linux no funciona con extensiones de ficheros tal como lo hace Windows y éste es un antivirus Linux, parecía como si el antivirus estuviese analizando ficheros en una máquina Windows. En comparación con otros productos, el fichero de configuración principal contiene solamente algunas opciones, aunque la mayoría de ellas eran autoexplicativas. Sin embargo, la documentación no explica cómo añadir opciones por defecto a este fichero al comienzo (incluso ni esta opción es posible). Con toda honestidad, tengo que decir que BitDefender es muy rápido analizando el correo. Algo que no ocurre con todos los demás productos. En su respuesta, admitieron que la documentación tenía que aclararse y fueron muy diligentes resolviendo los problemas. Aunque tuve problemas haciendo que el producto se ejecutara en condiciones, una vez que me hice una idea de cómo funcionaba, identificó todos los virus correctamente. Y como eso es la clave, creo que se debe considerar en serio a BitDefender, especialmente porque la versión para Linux es gratuita para los usuarios domésticos.
06 Suspect files :0
Clam AV
07 Warnings :0
Clam AV [2] fue el único antivirus de Código Abierto que encontré. Inicialmente pensé que sería necesario recompilarlo o que tan sólo podría instalarlo en unas
08 Identified viruses:7 09 I/O errors :2
WWW.LINUX- MAGAZINE.ES
pocas distribuciones, Para mi sorpresa, disponen de paquetes para la mayoría de las distribuciones Linux, además de para otros muchos sistemas operativos como Solares, AIX, FreeBSD e incluso BeOS. Existen versiones de Clam AV específicas para Sendmail Milters, además de para distintas versiones Windows, así como una versión “nativa” y otra versión que es parte del repositorio oficial Cygwin. Tras descargar e instalar el paquete RPM de clamav-0.86.2 y, al contrario que con otros productos, las páginas man se instalaron como debían; también man -k clam mostró todas las páginas. Realizar el primer análisis fue muy sencillo. Clam AV reconoció todos los virus, algo que no hicieron todos los productos comerciales. No se puede hablar exactamente de versiones para estaciones de trabajo y versiones para servidores de Clam AV, ya que se obtiene todo el software en un simple paquete. Además del típico análisis desde la línea de comandos, también incluía clamd, un servicio multihebra que permite el análisis para sistemas Linux y FreeBSD. El servicio clamd requiere que se compile e instale el módulo del kernel Dazuko. Aunque Clam AV no posee un gran número de opciones para la línea de comandos, definitivamente se mantiene a la altura de los productos comerciales con respecto a las opciones de configuración. Desafortunadamente, parece que no hay un fichero de configuración para especificar el comportamiento que se desee por defecto. Por ello, hay que especificar las opciones cada vez que se ejecute el programa. Pero es bastante sencillo escribir un script que realice esta tarea y no voy a desmerecer a ClamAV por ello. clamd y su programa de actualización posee ficheros de configuración, cada uno de ellos con un amplio rango de opciones. El analizador de la línea de comandos proporciona un par de buenas características. Por ejemplo, se pueden analizar los ficheros enviándolos a la entrada estándar de clamscan (por ejemplo, cat fichero | clamscan -). Aunque otros productos terminan con diferentes códigos de salida, dependiendo de si encontraron un virus o si se produjo un error, Clam AV proporcionó detalles del significado de estos códigos, una característica que pareció ser única entre todos los productos examinados. Ambas características permiten a Clam AV ser fácilmente integrado dentro de otras aplicaciones como servidores de correo.
Número 15
17
PORTADA • Antivirus
F-Prot F-Prot [3] de FRISK Software Internacional es quizás el antivirus más conocido para sistemas Linux. En un tiempo, el analizador de virus de F-Prot fue el único antivirus para Linux que estaba disponible gratuitamente para los usuarios domésticos. Aunque ya no es el único de este tipo, el antivirus F-Prot es aún gratuito y no dispone de fecha de caducidad para los usuarios domésticos. Existen versiones disponibles para Windows, para distintas versiones de UNIX y para eServers de IBM. Descargué e instalé la versión gratuita para estaciones de trabajo, conocida como versión 4.6.0. El producto venía como un paquete RPM. No había ficheros extras que contuviesen PDF, README o algo similar. En vez de ello, tuve que mirar en los ficheros que contenía en el paquete RPM para ver qué documentación estaba disponible y también para determinar qué programa tenía realmente que ejecutar para comenzar. Parece que hay que adivinar el comportamiento de algunas de las opciones, ya que F-Prot dispone de una documentación muy limitada en comparación con la de otros productos. Aunque la documentación es suficiente para hacer que el producto funcione, no proporciona mucho más. También, las páginas man de F-Prot hacen referencia a una página man que explica el fichero principal de configuración (f-prot.conf), que no está incluida aunque el fichero si que está. El número de opciones disponible es comparable con el de algunos productos comerciales, y en algunos casos, F-Prot es más fácil de usar. Mirando el fichero de configuración, se encuentran opciones que parecen que sólo se pueden aplicar a un servicio del sistema o a otro programa que se esté ejecutando en un servidor de ficheros o de correo, implicando que la versión gratuita es una versión simplificada de otro producto. Todos los virus fueron correctamente identificados por F-Prot. Si el reconocimiento de virus es la clave, entonces vale la pena tener en cuenta a FProt.
F-Secure F-Secure [4] posee quizás el mayor surtido de productos antivirus. Por ejemplo, su antivirus Suite F-Secure Enterprise contiene productos que van desde Windows Profesional a Servidores Citrix, pasarelas Linux, servidores Samba y muchos más.
18
Número 15
Se descargó la versión 4.52 de estaciones de trabajo para 30 días. Esta versión venía como un fichero .tgz con un script con un binario embebido. En las instrucciones, F-Secure decía que para eliminar el producto “simplemente hay que borrar el directorio de instalación”. Sin embargo, la eliminación deja algunos ficheros por el sistema. Sugieren que se use find para buscar estos ficheros, algo que no esperaba encontrarme en un producto comercial. Durante la instalación, me alegró ver que se pedía al usuario que definiera ciertas opciones sobre el comportamiento del programa. Sin embargo, al contrario que otros productos, el número de opciones está reducido al mínimo. No fue de mi agrado descubrir que esta versión no analizaba correctamente varios virus que estaban en el interior de ficheros zip. Por el contrario, informaba de un “error interno”. Esto sucedió en los mismos ficheros que los antivirus gratuitos y todos los otros antivirus comerciales habían informado de la presencia de virus. Para un producto comercial, el no reconocer todos los virus es inquietante y no encontré nada en el sitio web de F-Secure que me ayudara a resolver este problema. Además del analizador de la línea de comandos, también posee un servicio, que se ejecuta por medio de un script rc o con el analizador de la línea de comandos. Esta versión también proporciona un script, que inserta un trabajo en el cron con el objeto de que analice o actualice la base de datos. Aunque se espera que un buen administrador sea capaz de insertar una entrada en crontab, encuentro esta característica útil, ya que guía al usuario por todos los pasos necesarios. El fichero de configuración proporciona un gran número de diferentes configuraciones, incluyendo qué directorios se tienen que analizar y cuales no, qué utilidad de syslog usar (si así es como se quiere registrar la actividad del antivirus), qué acciones tiene que tomar, las extensiones de los ficheros a analizar, etc. Al contrario que otros productos, por defecto, fsav también analiza los ficheros sin extensiones.
AntiVir Antivir fue desarrollado por H+DEDV Datentechnik GMBH [5]. El antivirus AntiVir se proporciona por defecto con muchas de las versiones de Linux SuSE,
WWW.LINUX- MAGAZINE.ES
Listado 3: Ejemplo de Salida de F-prot 01 Results of virus scanning: 02 03 Files: 71 04 MBRs: 0 05 Boot sectors: 0 06 Objects scanned: 129 07 Infected: 67 08 Suspicious: 1 09 Disinfected: 0 10 Deleted: 0 11 Renamed: 0 12 13 Time: 0:01
también está disponible gratuitamente en su sitio web para uso doméstico. Intenté durante varios días descargarme la versión gratuita, no comercial, desde la web, pero recibí repetidamente errores del servidor, así que finalmente opté por descargar la versión “Professional” 2.1.4.8, que está disponible por un período de evaluación de 30 días. Mi negativa impresión inicial se debió al hecho de que incluso en su página “business solutions” parecía que el texto estaba traducido por alguien cuyo idioma nativo no era el inglés. En algunos casos, no podía comprender lo que estaban intentando decir. Estos problemas se extendían a la documentación online e incluso al script de instalación. Mi versión de Linux me proporciona una “licencia de evaluación” de AntiVir, y como ya tenía el producto instalado, supuse que lo mejor que podía hacer era desinstalar primero la versión previa. Aunque parecía que rpm había eliminado todos los ficheros, la base de datos RPM aún creía que el paquete estaba instalado, así que aparentemente algo iba mal. Parece que no está clara la forma en la que hay que desinstalar completamente el antivirus, y la respuesta del equipo de soporte de H + BEDV no fue muy útil. Como realmente no había comprado el producto, se ejecutó en modo “DEMO”. Esto significa que no era capaz de actualizar las definiciones de los virus. Afortunadamente, todos los virus que tenía eran lo suficientemente antiguos y estaban incluidos en la lista de definiciones, pero si el lector está planeando probar
Antivirus • PORTADA
Listado 4: Ejemplo de Salida de Sophos 01 67 files swept in 2 seconds. 02 2 errors were encountered. 03 60 viruses were discovered. 04 60 files out of 67 were infected. 05 Please send infected samples to Sophos for analysis. 06 For advice consult www.sophos.com, email support@sophos.com 07 or telephone +44 1235 559933 08 End of Sweep.
este antivirus en el futuro, esto podría ser un problema. Aunque el texto de la instalación, README y demás estaban en inglés, el producto tan sólo proporcionaba una versión en alemán del manual de usuario en PDF del “UNIX Server”. Cuando por fin fui capaz de descargar la versión personal, no tenía forma de desinstalar la versión profesional. No tenía instalado un RPM y lo único que encontré en la documentación o en el sitio web indicaba que la actualización se realizaba simplemente ejecutando de nuevo el script de instalación, así que eso fue lo que hice. Se identificó que ya había una versión instalada y trató de actualizarla. Como la versión personal viene con una clave, ya no volví a recibir más el mensaje indicando que era una versión de demostración. Si esto era o no el procedimiento correcto, es algo que no está todavía claro con el correo recibido del departamento de soporte de H + DEV. En comparación con otros softwares, la instalación se llevó algo más de tiempo porque el programa realiza multitud de preguntas al usuario sobre la configuración del mismo. Para la versión profesional, comprendí e incluso aprecié cosas como ésta. Sin embargo algunas de las cuestiones eran preguntas que un usuario normal no comprendería muy bien, así que la versión “personal” fue más una molestia que otra cosa. Parte del producto es AvGuard, que proporciona análisis de ficheros en tiempo real y requiere que se compile el módulo del kernel Dazuko, que fue originalmente desarrollado por H + DEDV.
Antivirus Kaspersky La versión para estaciones de trabajo Linux está disponible para ser descargada y utilizada durante un período de 30 días. Me descargué la versión 5.5-2. De los productos que miré, Kaspersky [6] fue sin dudas el que me dio la impresión de ser el producto más profesional. Aunque no quiero dar la impresión de que los otros no eran profesionales, Kaspersky fue quizás el paquete más completo de los que miré, y me refiero tanto a las características como a la presentación. Además de la versión para las estaciones de trabajo, Kaspersky dispone de versiones para servidores de ficheros tanto para plataformas Linux como para UNIX; la versión para el servidor de correo soporta tanto Sendmail como Qmail. También está disponible una versión para Sendmail Mister y una versión para el servidor Samba. Dependiendo del producto que se seleccione, dispone de un número diferente de paquetes con licencias predefinidas. Dentro del paquete que se descarga va un fichero PDF de 68 páginas, que por supuesto sobrepasaba la documentación proporcionada por otros productos. El fichero .tgz que me descargué contenía ficheros rpm, deb y tar.gz, así que instalé el RPM. Durante el proceso de instalación el programa me preguntó si deseaba instalar el módulo Webmin acompañante. Si no se instala Webmin en este momento, se puede instalar posteriormente. La versión para estaciones de trabajo también proporciona un servicio, que se ejecuta desde un script rc. Este servicio intercepta las operaciones del sistema de ficheros antes de que las aplicaciones puedan acceder. De forma general, esta función es muy útil, pero hay aplicaciones que se “cuelgan” si el servicio se está ejecutando e intentan acceder a un fichero infectado. También me di cuenta cuando estaba funcionando en mi sistema, que el rendimiento se veía afectado significativamente en algunos momentos cuando se estaba ejecutando kavmonitor. En algunos casos, la carga de la CPU llegaba casi al 100%, sin embargo, no me echaron atrás estas caídas ocasionales del rendimiento. El fichero de configuración es muy extenso, con todas las opciones que uno espera, además se le puede indicar que ejecute un programa particular dependiendo de si ha identificado un virus o si simplemente tiene alguna sospecha. Por ejemplo,
WWW.LINUX- MAGAZINE.ES
se puede enviar una notificación por correo electrónico al root, escribir una entrada en el syslog, etc. Tuve algunos problemas ejecutando un análisis conectado con un usuario distinto del root. Basado en algunas opciones del fichero de configuración por defecto, no fui capaz de escribir en un par de ficheros. Sin embargo, se le puede indicar al antivirus que lea de un fichero de configuración diferente, y para ello tiene que escribir en diferentes ficheros, para lo cual es necesario que la cuenta tenga los permisos necesarios. Las opciones de la línea de comandos son intimidatorias, simplemente porque hay infinidad de opciones, pero la documentación proporciona buenos ejemplos con los que empezar. No hace falta decir que identificó con toda precisión todos los virus que había en el sistema. El sistema de actualización es tan bueno como el programa y permite realizar actualizaciones automáticas de la base de datos de virus, incluso a través de un servidor proxy protegido con contraseña.
Sophos Este producto lo proporciona Sophos PLC [7]. Encontrar la versión apropiada en la web no fue una tarea sencilla, ya que terminé suponiendo que “Otros” significaba Linux. En este caso, “Otros” también significa otros sistemas operativos diferentes de Windows, entre ellos la mayoría de los vendedores UNIX e incluso SCO. También encontré una versión para OpenVMS. No estaba muy seguro de la versión que me descargué, ya que el fichero tenía el nombre linux.intel.libc6.glibc.2.2.tar.Z. Después de instalarlo, me enteré que la versión del antivirus era la 3.97.0. La instalación fue bastante simple, pero al contrario que otros productos, Sophos requiere que primero se cree de forma manual un usuario y un grupo especial. Luego se ejecuta el script, que parece que simplemente se limita a copiar los ficheros en los directorios apropiados, no es un paquete RPM. La desinstalación del producto tiene que realizarse manualmente siguiendo una lista de ficheros y directorios que deben borrarse. La realización manual del primer análisis no fue tan sencilla como la realizada con otros productos, ya que no estaba claro qué programa había que ejecutar para comenzar el proceso. Como no dispone de ningún fichero RPM, no pude revisar el
Número 15
19
PORTADA • Antivirus
contenido de ninguna página man. Tan sólo me llevó unos minutos averiguarlo. Aunque instalé el producto como root, se me presentaron algunos problemas cuando intenté ejecutar el primer análisis, ya que informaba de un directorio inexistente. Después de intentarlo unas cuantas veces, al fin conseguí echarlo a andar. El por qué no existían estos directorios en el sitio web de Sophos es algo que no se explica. Recibí una respuesta rápida de Sophos cuando les envié un correo preguntándoles por estos directorios y fueron de gran ayuda a la hora de resolver este problema. El primer análisis fue fácil y la herramienta rápidamente analizó mis ficheros infectados. Sin embargo, se “saltó” cinco de los ficheros y no identificó los virus en otros cinco ficheros. Cuando usé la opción -all, parecía que no analizaba algunos ficheros por defecto. Así que para que el antivirus analice todos los ficheros hay que utilizar las opciones -all y -archive. Tuve que averiguar qué ficheros no analizaba por defecto. Utilicé varias opciones para conseguirlo. Aunque eventualmente conseguí al fin analizar e identificar todos los ficheros infectados, me costó mucho trabajo.
Vexira Este producto lo proporciona Central Command, Inc.. Me descargué la versión 1.2.0 del Antivirus Vexira Command Line Virus Scanner [8]. Vexira no se instala realmente en el sistema, sino que se descomprime el fichero y se obtienen todos los archivos que se necesitan para ejecutar el programa. Aunque esto puede que esté bien para un sistema personal gratuito, la verdad es que no me hace mucha gracia encontrármelo en un producto profesional. En comparación con otros productos, no hay muchas diferencias con respecto al antivirus Vexira. Además de la versión que me descargué, existen versiones para servidores de correo (incluso para Sendmail Milters), servidores Samba, y un producto simplemente para “Servidores Linux”. Inicialmente, la línea de comandos me pareció algo extraña. Cuando se ejecuta un comando, no es inmediatamente obvio qué opciones y en qué orden han de introducirse para obtener una lista de ficheros infectados. Por defecto, la herramienta se para en cada fichero infectado y le pregunta al usuario qué es lo que tiene que hacer.
20
Número 15
Listado 5: Ejemplo de salida de Vexira 01 Summary of scanned objects' types 02 ------------------------------03 files (total) | 68 04 in archives | 59 05 mail parts | 6 06 07 Summary of malware pieces found 08 ------------------------------09 iworm | 67 10 virus | 3 11 mutant | 1 12 13 Summary of actions taken on alert 14 ------------------------------15 skipped | 71 16 17 Error summary 18 ------------------------------19 inaccessible target | 2
Mi opinión personal es que cuando se analiza un sistema lo que uno quiere saber es si tiene o no virus, antes de realizar nada. El antivirus me preguntó por cada virus que encontró, lo cual me pareció algo molesto. Como los ordenadores son herramientas realmente cómodas, uno espera que simplemente “funcione” fácilmente sin tener que estar consultando toda la documentación para tener que hacer un simple análisis del sistema. Al contrario que otros productos, Vexira no posee un sistema automático de actualización de su base de datos de virus. En vez de ello, hay que descargárselo por medio de FTP e instalar la base de datos manualmente, reemplazando la base de datos existente. Según el vendedor, esta descarga por medio de FTP es necesaria por “razones de seguridad” en caso de que su servidor de DNS esté “hackeado”. Sin embargo, esto también es aplicable al servidor web, así que personalmente no veo ninguna ventaja real para requerir una descarga manual de la base de datos. Aunque un administrador típico de Linux debería ser capaz de realizar un script simple que realice todo esto de forma automática, hay suficientes mecanismos
WWW.LINUX- MAGAZINE.ES
disponibles hoy en día para comprobar que el fichero que se descarga es legítimo o no. Como el principal objetivo a la hora de instalar un antivirus es encontrar y eliminar virus y otros malware, uno no debería atascarse en detalles como los mencionados. Vexira encontró todos los virus al igual que los otros productos, que es el punto básico de un antivirus. Una de las cosas que realmente me gustaron de él fue el resultado del análisis. Cuando encuentra un virus, Vexira informa si es (por ejemplo) “eliminable” o “NO eliminable”. Además la herramienta lista el número de los diferentes malware que encuentra, como los gusanos de Internet, los virus e incluso las mutaciones. Esta característica es algo que parece ser único. A pesar de los inconvenientes que he encontrado con el antivirus Vexira, tengo una buena opinión del mismo, tanto en lo referente al aspecto técnico como al que se refiere a mi relación con la empresa en general. Recibí respuestas a mis consultas realizadas por correo electrónico mucho más rápidamente que con las otras empresas y están abiertos a sugerencias y a críticas.
No Hay una Única Solución Como resumen tengo que decir que no he encontrado un único producto que sea “perfecto”. Como a menudo sucede con el software, hay que tomar una decisión sobre qué características son las más importantes para nosotros. Los productos que inmediatamente reconocen todos los virus puede que tengan características que no nos agraden del todo, y dependiendo de nuestras necesidades, un producto podría tener una característica que lo distinga de ■ los demás.
RECURSOS [1] Bitdefender: http://www.bitdefender. com [2] Clam AV: http://www.clamav.net [3] F-Prot: http://www.f-prot.com [4] F-Secure: http:// www.f-secure.com [5] H+BEDV: http:// www.hbedv.com [6] Kaspersky: http:// www.kaspersky. com [7] Sophos: http:// www.sophos.com [8] Vexira: http:// www.centralcommand. com
KlamAV • PORTADA
KlamAV acerca el antivirus ClamAV a nuestro escritorio KDE
KLAMOROSO
Puede que Linux no sea tan propenso a virus como Windows, pero ¿quién quiere cobijar el molesto malware? Ahora podemos acabar con los virus gracias a KlamAV, un front-end para el escritorio KDE del antivirus libre ClamAV. POR ROBERT HOGAN
S
i recibimos correos y descargamos archivos de fuentes no fiables, nuestro ordenador puede acabar siendo un repositorio para el malware. Aunque muy pocos de esos agentes malignos pueden realmente hacer daño a un sistema Linux, siguen siendo programas totalmente innecesarios, y en algunos casos corremos el riesgo de propagarlos a compañeros que usen Windows. Tiene sentido, por tanto, implementar algún sistema de protección frente a virus. Una de las grandes historias de éxito de software libre es ClamAV, un antivirus basado en análisis de firma para pasarelas de correo electrónico creado por
Tomasz Kojm, y hoy día con soporte de una comunidad creciente y una infraestructura de actualizaciones de primer nivel. El objetivo de KlamAV es proporcionar la excelente detección de virus de ClamAV al escritorio KDE.
podemos instalarlo de manera manual si descargamos el paquete de fuentes. ClamAV es requisito previo para la primera instalación, por lo que debemos descargarlo desde [3].
Obtener Clam y Klam
Escanear Archivos y Directorios
KlamAV comienza a aparecer en algunas de las más populares distros de Linux. Si KlamAV no está disponible en nuestro sistema, podemos instalarlo de varias maneras. La primera opción es el instalador disponible en [1]. Hacemos doble clic en el archivo descargado y se ejecuta Arkollon[2], que controla la compilación e instalación de KlamAV. También
La pestaña Scan de la ventana principal de KlamAV nos permite seleccionar los archivos y directorios que queremos escanear. A través de la pestaña Scan están disponibles todos los directorios de nuestro sistema. Podemos seleccionar cualquier combinación de directorios y escanearlos en un solo paso. KlamAV puede ejecutar varios escaneos de manera simultánea.
Figura 1: Arkollon, el instalador gráfico para Linux, en el momento de instalar KlamAV.
Figura 2: Seleccionamos directorios para escanearlos. Nótese que ya tenemos análisis en progreso en las pestañas ocultas.
WWW.LINUX- MAGAZINE.ES
Número 15
21
PORTADA •KlamAV
útil herramienta, simplemente tenemos que seleccionar la pestaña E-Mail Protection en KlamAV e indicarle que configure nuestro cliente de correo para analizar el correo entrante. Si nuestro cliente de correo no soporta la configuración automática, el diseño de KlamAV soporta cualquier cliente de correo que nos permita reconducir el correo por una tubería hacia un programa externo. Nos proporciona también las instrucciones para guiarnos en el sencillo proceso de configuración.
Actualizaciones
Figura 3: Mientras se ejecutan los análisis, podemos seleccionar otros archivos o directorios para escanearlos desde Konqueror.
Pulsamos con el botón derecho del ratón sobre un archivo o directorio para iniciar un análisis a través del menú de Konqueror. KlamAV abre una nueva pestaña de análisis y continúa cualquier otro análisis en marcha de manera ininterrumpida. Podemos incluso fijar la hora para futuros análisis. Una funcionalidad usual en muchos antivirus comerciales es el análisis “en acceso”, es decir, la posibilidad de realizar un análisis cada vez que el sistema realiza un acceso a un archivo. Gracias a Dazuko [4] que ha integrado el soporte de Dazuko en ClamAV, también tenemos disponible este tipo de análisis en KlamAV. Dazuko es un módulo del kernel que intercepta las llamadas a los archivos y permite que programas externos, como ClamAV, decidan si se debe realizar dicho acceso. Por una cuestión de conveniencia, sin embargo, debido a que no todos los kernels se crean de la misma manera, puede que tengamos que desmarcarlo en el momento de la instalación e instalarlo posteriormente de manera manual. La configuración es sencilla y podemos decidir bajo qué condiciones deben escanearse los archivos (por ejemplo, si se van a ejecutar, abrir, cerrar, leer o escribir). Si queremos usar esta característica, tendremos que afinar la combinación que
22
Número 15
nos venga mejor, pero debemos tener presente que es probablemente el elemento más experimental de ClamAV/ KlamAV, y que todo el área de análisis en acceso bajo Linux no se ecuentra lo suficientemente maduro.
Análisis de Correo
La parte más importante de toda protección antivirus de nuestro sistema es mantenerlo actualizado. ClamAV posee una red de actualización que rivaliza, y a menudo supera a las redes de productos comerciales, tanto en velocidad de respuesta como en precisión, a brotes de nuevos virus. En un reciente estudio realizado por Electric Mail se demostró que, en comparación con dos de los cinco mejores antivirus comerciales del mundo, ClamAV era el primero en responder el 77% de las veces para las últimas 50 nuevas variantes verificadas [5]. KlamAV nos permite activar el acceso permanente al fantástico servicio de actualización de ClamAV con sólo un par de clics. Para verificar las actualizaciones cada media hora, simplemente seleccionamos la pestaña Updates, marcamos 48 times a day y pulsamos sobre Update Virus Database Automatically. A continuación pulsamos sobre Upadate y nos olvidamos de todo lo anterior porque ya no tendremos que repetirlo nunca más.
Un irritante defecto de los escritorios de Linux es que el proceso que analiza el correo entrante congela completamente el cliente de correo mientras que se están descargando los mensajes. Gracias a la elegante arquitectura de ClamAV, KlamAV proporciona un componente llamado klammail para solucionar este problema. klammail es básicamente una utilidad en línea de comandos que acepta correo desde la entrada estándar, lo escanea con procesos ClamAV en segundo plano y muestra el resultado por la salida estándar. Debido a que el proceso de análisis se realiza con un demonio, no existen tiempos de arranque excesivos en el uso de klammail. Si el correo está infectado, klammail encapsula el virus en un mail preventivo y muestra un cuadro de aviso. Para usar esta Figura 4: Configuración de los análisis programados.
WWW.LINUX- MAGAZINE.ES
KlamAV • PORTADA
Figura 5: KlamAV verifica las actualizaciones por nosotros. Figura 6: Inspeccionamos la base de datos de firmas con el nave-
Además de las actualizaciones de la base de datos de firmas, es muy importante mantener nuestra copia de ClamAV al día. El motor de ClamAv contiene importantes chequeos de detección y está continuamente mejorándose y actualizándose. Si seleccionamos Update ClamAV automatically en la pestaña Updates, KlamAV comprueba una nueva versión de ClamAV cada vez que se inicia. Si la encuentra, la descarga e incluso la compila y la instala. Si olvidamos seleccionar esta opción, KlamAV nos avisa de que ClamAV está desactualizado y nos ofrece descargar e instalar la nueva versión.
el mundo acaba gador de virus de KlamAV. tarde o temprano acudiendo a Google para encontrar el administrador de cuarentena, de información de nombres del estilo de nuevo haciendo doble clic sobre el preGen.1024-PrScr.1. KlamAV intenta intesunto culpable. grar este paso en el proceso con el Por Último menor número de interrupciones posible. KlamAV es el primo humilde del formiCuando KlamAV encuentra un virus, dable sistema antivirus ClamAV en KDE. éste se muestra en la interfaz principal El analizador KlamAV proporciona la de análisis. Tenemos la opción de dejar potencia de ClamAV para nuestro en cuarentena todos los archivos escritorio KDE además de una interfaz inmediatamente (y posteriormente fácil de usar para escanear archivos y investigarlos más detenidamente en la controlar virus. pestaña Quarantine) o usar el botón El futuro del control del malware en el derecho del ratón para seleccionar uno o escritorio Linux recae en un buen más archivos para una investigación y número de direcciones, entre las que se cuarentena selectivas. encuentran la detección de rootkits, Si por ejemplo ClamAV descubre una análisis heurísticos, el desarrollo del versión de Worm.Mytob, podemos selecanálisis “en acceso” y la detección en cionar Search Worm.Mytob with Virusmemoria residente. Estas áreas se Que No Cunda El Pánico Pool. Esta opción abre la pestaña Virus tornarán más importantes a medida que Encontrar virus está bien, pero el reto es Browser. Aparece a continuación la base crezca la adopción de Linux, y ClamAV decidir qué hacer con los archivos de datos de firmas de ClamAV y un proporciona un sólido cimiento con las sospechosos. Los nombres de los virus navegador empotrado muestra la informiras puestas en cubrir las necesidades son bastante poco informativos, y todo mación acerca de Mytob existente en del usuario doméstico de Linux. VirusPool, una Para ver en acción a KlamAV exhaustiva base de podemos dirigirnos a la página del datos de virus proyecto y acceder al video-tutorial, o conocidos. bien directamente descargar el insta■ Mientras estalador desde [1]. mos en el explorador de virus, RECURSOS tenemos la posibilidad de investi[1] Página de KlamAV: http://klamav.sf. gar cualquiera de net los virus conoci[2] Arkollon (originalmente parte de dos por ClamAV Apollon): http://apollon.sf.net en un buen [3] Página de ClamAV: http://www. número de recurclamav.net sos en línea. Esta [4] Dazuko: http://www.dazuko.org posibilidad tam[5] http://www.linuxpipeline.com/ Figura 7: La opción auto-scan permite seleccionar los directorios a bién se encuentra 166400446 examinar en busca de virus. disponible desde
WWW.LINUX- MAGAZINE.ES
Número 15
23
Scan • PORTADA
Filtrando Filtrando el el Spam Spam yy los los Virus Virus en en el el Servidor Servidor de de Correo Correo con con Amavisd-new Amavisd-new
FILTRANDO Algunas veces la mejor forma de eliminar el correo no deseado es hacerlo antes de que llegue. Amavisd-new es un interfaz de código abierto para el servidor de correo que filtra los mensajes en busca de spam y virus. POR LARKIN CUNNINGHAM
L
a mayoría de los virus se propagan por el correo electrónico. Aunque aún es posible contagiarse con disquetes y CD-ROMs o por medio de un gusano de Internet o con herramientas que atacan directamente las vulnerabilidades del sistema operativo, lo más probable es que se reciban virus por medio del correo electrónico – a menudo por abrir, descuidadamente, ficheros adjuntos aparentemente inocentes. Desde luego, es importante tener un antivirus actualizado en el equipo, pero una buena defensa es la mejor solución y por este motivo debería instalarse una protección contra los spams y los virus en el servidor SMTP. La protección antivirus en el servidor de correo impide que los correos indeseados lleguen al pc y mantienen las cuentas POP3 o IMAP limpias de virus. El filtrado desde el servidor de correo reduce la carga de su PC de escritorio o portátil, reduce la cantidad de ancho de banda requerida y reduce considerablemente el riesgo de que lleguen el spam y los virus. Una ventaja añadida de proporcionar esta capa extra de protección es que, al usar un antivirus en el PC, que es diferente del antivirus del servidor SMTP, se reduce el riesgo de que el virus pase sin ser detectado.
Amavisd-new [1] es una herramienta de código abierto que sirve de interfaz entre un servidor de correo y un antivirus y otras formas de comprobar los contenidos. Aunque algunos antivirus proporcionan sus propios mecanismos para filtrar el correo en el servidor, Amavisd-new ofrece ventajas con respecto al rendimiento en algunos entornos, y además proporciona un punto de configuración sencillo y neutral para gestionar el filtrado, tanto del spam como de los correos infectados con virus.
Alto Rendimiento Amavisd-new es una aplicación basada en un script de Perl flexible y de alto rendimiento que se ejecuta como un servicio, con un proceso maestro y otro hijo. Actúa como un servidor SMTP, recibiendo el mensaje de correo del servidor SMTP (por ejemplo, Postfix, exim o qmail), procesándolo y enviándolo o devolviéndolo al servidor SMTP. Amavisd-new soporta herramientas antispam como SpamAssasin [2], además de un amplio rango de antivirus comerciales y de código abierto. El popular antivirus Clam [3] es soportado de tres formas diferentes; el servicio clamd
WWW.LINUX- MAGAZINE.ES
(mejor rendimiento), el paquete Perl Mail::ClamAV (no tan bueno) y la opción de la línea de comandos (como respaldo cuando clamd no esté disponible, por ejemplo). También soporta otros antivirus populares, incluidos F-Prot, Sophos, Grisoft’s AVG, KasperskyLab AVP, Antivir, F-Secure, McAffe y Panda. Pero tenga en cuenta la licencia del producto que escoja. Obviamente con Clamav no tendrá que pagarse ninguna, pero con alguna de las otras opciones puede que tenga que pagarse la licencia correspondiente para un servidor SMTP, que es significativamente superior que la licencia para un equipo. Amavisd-new puede ser configurada para bloquear los ficheros adjuntos con las extensiones potencialmente peligrosas, como .exe, .bat y .vbs (particularmente peligrosas para los clientes Windows que puedan estar usando el servidor SMTP). Se pueden también especificar un amplio rango de decodificadores/descompresores para examinar los archivos comprimidos como .cpio, .rpm, .deb, .zoo, .tar, .gz y .bz2. Teóricamente la aplicación puede soportar cualquier servidor SMTP, pero funciona mejor con los habituales, incluyendo Sendmail, exim y qmail. Aunque con el que mejor funciona de todos es con Postfix [4], el cual permite reintroducirse el correo a sí mismo después de filtrar el contenido.
Número 15
25
PORTADA • Scan
aplicaciones que van en segundo plano, la instalación es relativamente fácil. Amavisdnew no requiere la compilación de ningún código, ya que hace uso del intérprete de Perl.
Configurando Amavisd-new con SQL Figura 1: Amavisd-new es un script Perl bastante grande.
Requerimientos de Instalación Para instalar Amavisd-new, se necesita tener en funcionamiento una instalación de Perl. Se recomienda Perl 5.8.2 o posterior. Aunque con las versiones anteriores funciona, sin embargo, va mejor con las últimas. Hay que instalar una serie de paquetes de Perl (Tabla 1). Y hay que asegurarse de que se tienen actualizados todos los paquetes para contar con las últimas versiones. Obviamente, para un filtrado efectivo del spam, debe estar instalado el último paquete de Mail::SpamAssassin. Los spammers intentan ir siempre un paso por delante de SpamAssassin, así que siempre se debe actualizar este paquete tan pronto como aparezca una versión nueva. Además habría que instalar varios programas adicionales para permitir que se puedan analizar el mayor rango posible de ficheros adjuntos. Dichos programas adicionales incluyen gzip, bzip2, arc, lha, rar, zoo, pax, cpio, freeze, ripole, cabextract y muchos otros. Véase el sitio web de Amavisd-new [1] para más detalles. Después hay que configurar las
Tabla 1: Paquetes Perl Requeridos Archive::Tar Archive::Zip Compress::Zlib Convert::TNEF Convert::UUlib MIME::Base64 MIME::Parser Mail::Internet Net::Server Net::SMTP Digest::MD5 IO::Stringy Time::HiRes Unix::Syslog BerkeleyDB
26
Número 15
Hay diversas formas de configurar Amavisd-new. Se puede definir su configuración usando el fichero amavisd.conf, ficheros listas, ficheros de búsqueda hash, expresiones regulares y LDAP o búsquedas SQL. La solución SQL ofrece mayor libertad para implementar una herramienta que haga de interfaz con la configuración usando algún lenguaje de script como PHP. Se puede usar cualquier base de datos que soporte el estándar SQL y que esté soportado por las bibliotecas de Perl DBD/DBI. El SQL DDL (Data Definition Language) se proporciona en el fichero README.sql para crear las tablas, los índices y algunos datos de ejemplo. Se incluyen notas para MySQL, PostgreSQL y SQLite. También se soportan muchas otras bases de datos, incluyendo Oracle y DB2. Hay que tener en cuenta que muchas de las tablas tienen claves primarias de tipo numérico autoincremental, así que para Oracle, habrá que añadir varias secuencias y varios triggers además de las tablas. Es preciso especificar dos DSNs (Data Source Names). Un DSN se usa para las búsquedas y el otro para almacenamiento
(para los registros). Se puede mejorar el rendimiento usando una base de datos que sea muy rápida con los accesos de sólo lectura para realizar búsquedas y otra base de datos que sea rápida para las escrituras de los registros. Amavisd-new también permite especificar múltiples DSNs por si se producen fallos.
Políticas Si se está familiarizado con la configuración del cortafuegos, entonces se estará familiarizado con el término política. Una política del cortafuegos es un conjunto de instrucciones para especificarle qué hacer con ciertas clases de tráfico de red. Por ejemplo, una política del cortafuegos podría especificar si bloquear el tráfico de cierto puerto de red o si redirigirlo de un puerto a otro. La política de Amavisd-new es algo similar. Con cada política se puede dirigir a Amavisd-new para que se salte el filtrado del spam o el análisis antivirus, sea más duro o más permisivo con el spam, etiquete el campo Asunto del correo spam con una marca (como {Spam?}) y redirija todo el spam a una cuenta de spam predeterminada. Cada dominio de correo o usuario puede tener su propia política. Se puede especificar una política que cubra todas las cuentas de correo dentro de un dominio y también decidir tener políticas individuales para cada cuenta de correo dentro del mismo dominio. Por ejemplo, se puede tener una política por defecto para cubrir a todos los usuarios en un dominio (como
Tabla 1: Paquetes Perl Requeridos virus_lover No elimina el correo aunque esté infectado por un virus spam_lover No elimina el correo aunque esté identificado como spam Nota: La opción _lover no le indica a Amavisd-new que no lo analice, sino que simplemente ignore el resultado bypass_virus_checks No analiza el correo en busca de virus bypass_spam_checks No analiza el correo en busca de spam ni añade las cabeceras XSpam spam_modifies_subj Añade texto (una etiqueta) al principio del campo Asunto en el caso de que sea spam virus_quarantine_to Una cuenta de correo donde enviar los mensajes infectados spam_quarantine_to Una cuenta de correo donde enviar los spam spam_tag_level La marca de SpamAssassin que los correos spam llevan en la cabecera X-Spam spam_tag2_level La marca de SpamAssassin que los correos spam llevan en el campo Asunto spam_kill_level La marca de SpamAssassin que indica la acción “evasiva” a tomar, determinada por $final_spam_destiny en el fichero de configuración (por defecto se descarta el correo, por ejemplo, enviarlo a un agujero negro) spam_subject_tag El texto a usar para la etiqueta (véase spam_modifies_subj) spam_subject_tag2 El texto a usarse para la etiqueta con la marca más alta
WWW.LINUX- MAGAZINE.ES
Scan • PORTADA
Los registros y la ley En la actualidad, un asunto delicado para los ISP es el posible requerimiento de almacenar durante tres años los correos. Esto se produce en respuesta a las recientes atrocidades perpetradas por los terroristas, y está diseñado para proporcionar a los cuerpos de seguridad del estado información para rastrear las actividades terroristas, además de los registros de las llamadas realizadas por teléfonos y teléfonos móviles junto con los mensajes SMS. Almacenar los correos supondrá para los ISP disponer de una cantidad inmensa de espacio para dicho almacenamiento; el correspondiente a los registros generados por Amavisd-new podría cubrir muchos de los requerimientos de cualquier gobierno europeo o legislación local.
una política de aceptación total), pero quizás la cuenta del usuario Juan esté siendo inundada con spam. Una política individual para la cuenta de Juan podría tener una menor tolerancia. La Tabla 2 detalla algunas de las opciones para las políticas. Una tabla de usuarios permite asignar las políticas a dominios específicos y cuentas de correo individuales. Los campos de las tablas de los usuarios de correo electrónico determinan si múltiples cuentas de correo o sólo una única cuenta de correo será afectada por la política. Por ejemplo, el email @dominio.com se refiere a todas las cuentas del dominio @dominio.com. Pero, juan@dominio.com hace referencia a sólo una dirección de correo electrónico. Si tanto @dominio.com como juan@dominio.com existen en la tabla de usuarios, se le da preferencia a la dirección de correo que se especifica.
Listas Negras y Blancas Cuando los correos importantes que se desean recibir continuamente se bloquean porque se identifican como spam, hay que asegurarse que el emisor del mensaje quede exento del análisis antispam añadiéndolo en una lista blanca. Por el contrario, cuando se recibe continuamente spam desde una fuente que se sabe que es un spammer, se puede añadir la dirección de correo a una lista negra. Las listas negras y blancas de Amavisdnew funcionan por cruce de referencias entre la tabla mailaddr (dirección de correo) con la tabla de usuarios y la tabla wblist (lista negra/blanca).
Los correos de las listas negras y blancas se añaden a la tabla mailaddr con un único identificador. Las filas en la tabla wblist especifican las direcciones de correo y los usuarios de destino a los que se le aplican las reglas.
Registrando y Archivando Una de las nuevas características de Amavisd-new es la habilidad de registrar toda la actividad del correo. La información registrada es comprensible e incluye información sobre los emisores, los destinatarios, las horas, las fechas, los asuntos y la cantidad de spams y virus. El registro permite mantener estadísticas precisas del nivel de limpieza frente al spam y los virus de los correos recibidos. El hecho de que se puedan grabar estas estadísticas a nivel de usuario proporciona al administrador de sistemas una oportunidad para ver donde son más necesarios los recursos para el análisis de los contenidos. Esto proporciona a los ISP (Internet Service Provider) la oportunidad de tarifar el ancho de banda, el tiempo de proceso, el número de
Haciendo fácil la Administración y las Estadísticas El uso de una base de datos en vez de los ficheros de configuración permite una administración sencilla. Las opciones de la base de datos también permiten la actualización dinámica de los datos de configuración sin tener que reejecutar el servidor Amavisd-new. Lo mismo ocurre si se opta por configurar los usuarios de Postfix y los dominios en una base de datos SQL. Consultar la base de datos con SQL, es una manera fácil de obtener información para estadísticas de virus y spam. Se puede lograr con phpMyAdmin, por ejemplo, si se escoge como base de datos MySQL. Un ISP con un gran número de clientes podría desarrollar un interfaz que permitiera a sus clientes actualizar sus propias políticas para que sean más o menos agresivas contra el spam y los virus. Incluso podría permitir a los usuarios ver estadísticas sobre los correos limpios, con spam y con virus. Estas clases de estadísticas pueden ayudar a educar a los usuarios del correo. La Figura 2 muestra un ejemplo de la clase de estadísticas que fácilmente se puede presentar a los clientes. El ejemplo fue desarrollado usando ColdFusion MX7, pero podría hacerse en PHP con jpGraph.
WWW.LINUX- MAGAZINE.ES
Figura 2: Amavisd-new proporciona información detallada en los registros con la que se pueden generar gráficas.
mensajes procesados o el número de correos procesados con spam o virus.
Conclusión Para aquellos que están considerando construir una arquitectura robusta y escalable para combatir los spam y los virus, recomiendo que le echen un vistazo a la combinación de Postfix con Amavisd-new. Particularmente para los ISPs, hay un imperativo para proporcionar a los clientes un filtro antispam y antivirus, ya sea gratuitamente o bien como un extra del servicio prestado. El creciente nivel de spam y virus junto con la gran cantidad de clientes están poniendo al límite las infraestructuras de muchos ISPs. Una solución de código abierto con Postfix y Amavisd-new podría ser la respuesta. Tanto Postfix como Amavisd-new pueden ser configurados para hacer uso de MySQL, PostgreSQL u Oracle para obtener los datos. Es posible tener una base de datos central que permita el acceso de los servidores Postfix y Amavisd-new. Y es posible utilizar múltiples bases de datos para disponer de un sistema de alta tolerancia frente a fallos. Utilizando varias técnicas para evitar los fallos, incluyendo la configuración de registros DSN, es posible construir una infraestructura escalable, tole■ rante a fallos y de carga balanceada.
Recursos [1] Amavisd-new:http://www.ijs.si/ software/amavisd/ [2] SpamAssassin: http://spamassassin. apache.org [3] Antivirus Clam: http://www.clamav.net [4] Servidor SMTP Postfix: http://www. postfix.org
Número 15
27
EVALUACIÓN • Gnome 2.12
Un Vistazo Vistazo aa Gnome Gnome 2.12 2.12 Un
UN GNOME NUEVO Gnome 2.10 reconquista los escritorios con su regreso a valores como la simplicidad, claridad y facilidad de uso. El nuevo entorno de escritorio GNU Gnome 2.12 continúa haciendo énfasis en lo básico. POR CHRISTIAN MEYER
I
ncluso los mayores críticos de Gnome tienen que admitir que el escritorio GNU está ganando adeptos tanto en oficinas como en hogares debido a su ciclo de desarrollo y a su excelente calidad. Desde la versión 2.10, las herramientas desarrolladas específicamente para este entorno y su facilidad de uso han ayudado a llevar a Gnome a muchos escritorios a pesar del escepticismo inicial. Con la versión 2.10 el Proyecto Gnome volvió a sus valores tradicionales, apartando los detalles superfluos. La versión actual Gnome 2.12 mantiene la filosofía “más es menos” de su predecesor, concentrándose en lo esencial. Este artículo mostrará algunas de las nuevas características de Gnome 2.12.
Un Traje Nuevo La nueva versión se basa en el desarrollo de los temas de Glider de Gnome 2.10. A mediados del 2005 se inició una larga discusión acerca del tema, la cual tuvo su origen en la lista de correo del proyecto
28
Número 15
Gnome. Los participantes de la misma finalmente tomaron una decisión que fue secundada como positiva a través de las respuestas de los usuarios. Parecía que una versión ligeramente modificada de “Clearlooks” sería el estándar para las versiones futuras del escritorio Gnome.
El Panel y los Applets En esta versión 2.12 el panel y los applets presentan algunos trucos nuevos. Por ejemplo, la alineación del texto conmuta a vertical cuando el usuario mueve el panel al borde izquierdo o derecho de la pantalla. Este comportamiento ahorra espacio y es más intuitivo. Los programas ahora hacen parpadear sus nombres en la lista de ventanas para mostrar que o bien ha ocurrido algún evento importante o bien ya está listo para utilizarse. Esta característica nueva es realmente útil para las aplicaciones de mensajería como Gaim, o para herramientas de actualización como Synaptic.
WWW.LINUX-MAGAZINE.ES
Gnome finalmente dispone a partir de este momento del editor de menú (Figura 1). El editor es muy simple, espartano, lo que permite a los usuarios ocultar o mostrar las aplicaciones en los menús. Como nota positiva, decir que se puede reemplazar el editor con un programa que proporcione más características; muchas distribuciones proporcionan Smeg [1], por ejemplo, que también es bastante fácil de usar. El programa permite a los usuarios crear, modificar y borrar las entradas de los menús. Los applets del panel de Gnome, también han visto unas pocas, no por ello menos útiles, mejoras menores en comparación con Gnome 2.10. El applet montador de discos se ha rehecho completamente para poder soportar el mostrado o la ocultación con tan sólo “apuntar y pulsar”. Si descubre un CD en blanco, el applet sugiere la grabación del mismo. Gracias a una biblioteca Gnomevfs mejorada y la continua integración de HAL (la capa de abstracción hardware) ahora se puede confiar en el icono mostrado en el
Gnome 2.12 • EVALUACIÓN
En la actualidad las baGnome 2.12 viene con todas las caracrras laterales muestran las terísticas necesarias para crear CDs localizaciones, los favoritos directamente desde el administrador de y los medios extraíbles ficheros. montados. Esto es útil si se El Portapapeles desea acceder al directorio home rápidamente. Si se Puede ser que se esté familiarizado con arrastra un texto desde una esta situación incómoda: se copia un aplicación a una carpeta o texto desde una aplicación, se cierra la al escritorio, se podrá dar aplicación y se intenta pegar el texto cuenta de una característica dentro de otra aplicación pulsando la oculta: en este caso Nautípica combinación de teclas tilus crea un fichero nuevo [Ctrl]+[V]. Sorprendentemente, no para almacenar el texto. En sucede nada: el texto no se pega y el Figura 1: Gnome 2.12 viene con un editor de menús simple. las operaciones de arrastrar búfer que contenía el texto está vacío. y soltar, Nautilus muestra En la nueva versión de Gnome, un panel sin importar si éste es una unidad ahora una vista preliminar del texto servicio elimina esta experiencia frusde CD, una memoria USB o cualquier seleccionado. En las versiones anteriores trante. El servicio espera en segundo otro medio de almacenamiento del administrador de ficheros simpleplano y vigila este comportamiento sin extraíble. Esto evita las confusiones que mente se mostraba un icono genérico. provocar un descenso de rendimiento se producían hasta hace poco, y eran Puede ser que no se conozca el eletípico de otros entornos. El nuevo servimento Terminal del menú desplegable de parte del día a día, cuando se estaba tracio también sigue el estándar de Gnome Nautilus. Gnome 2.12 lo reemplaza con bajando con Gnome 2.10 debido a sus de las especificaciones Freedesktop [2]. una extensión de Nauiconos poco intuitivos. tilus que está influenEl applet de la batería también ha sido ciada por la caracterísmejorado; éste hace un uso experimentica anterior: después de tal de HAL y proporcionará soporte para navegar a una carpeta, los nuevos portátiles del futuro. El simplemente pulsando applet del tiempo dispone en estos con el botón derecho del momentos de una función de búsqueda ratón, aparece una venque elimina la necesidad de navegar por tana de terminal. Esta es la impresionante larga lista de localizauna característica que ciones para encontrar la ciudad del muchos usuarios han usuario. echado de menos en las Relanzamiento del Nautilus versiones anteriores, ya El administrador de ficheros Nautilus que la única forma de dispone de varias características nuevas añadirlo era usando un en Gnome 2.12. Los desarrolladores han script. estado ocupados eliminando gran cantiEl menú de contexto Figura 2: Se pueden reproducir los ficheros de audio desde el dad de errores. de Nautilus también interior del navegador Nautilus. Mejoras tales como el modo de espatiene en este momento El Navegador Web Epiphany cio del estilo Nautilus son ahora más un elemento Send to…, suponiendo que visibles. Se pueden expandir las carse instalen las extensiones más releLa nueva versión de Gnome posee un petas siguiendo la forma típica en vista vantes. La opción Send to… propornavegador web propio, Epiphany, que de árbol. Esto permite a los usuarios ciona a los usuarios la posibilidad de también se beneficia de las funcionalinavegar más rápidamente por las subenviar por correo ficheros (comprimidades mejoradas. Aunque la integración carpetas sin perder la pista de donde dos) o carpetas o usar un programa de de Firefox en Gnome continúa mejorándesean ir. mensajería instantáneo para enviarlo. dose, Epiphany aún recuerda que existe Si se prefiere el modo navegación, se En un futuro aparecerán nuevas extenla elección de navegadores. pueden encontrar algunos cambios siones: la arquitectura de Nautilus proEpiphany ahora dispone de no menos interesantes. Por ejemplo, el admiporciona un trampolín perfecto para de 19 añadidos, incluyendo una caracnistrador de ficheros proporciona ahora nuevos trabajos. terística de detección Online/Offline. una lista de rutas en vez del tradicional En muchas de las peticiones llevadas Esta característica detecta automáticacuadro de URL. Aquí se muestra delibea cabo por parte de los usuarios de mente si el usuario dispone de conexión radamente el cuadro de diálogo de Gnome a los desarrolladores se solia Internet, lo que puede ahorrar un ficheros Gtk para proporcionar una vista citaba otra característica importante: motón de problemas. más uniforme. Pulsando [Esc] se regresa una opción para grabar CDs de audio También dispone a patir de ahora de al cuadro de la URL. integrada en Nautilus. Por último, controles para las solapas, además de un
WWW.LINUX-MAGAZINE.ES
Número 15
29
EVALUACIÓN • Gnome 2.12
Figura 3: El editor de niveles de ejecución proporciona controles para especificar los servicios que se ejecutarán cuando el sistema arranque.
gestor de favoritos y la posibilidad de integrar sindicaciones de noticias. El hecho de que el navegador utilice actualmente la tecnología Rendezvous para publicar los favoritos a todos los usuarios de una red es también una buena noticia. Epiphany es fácilmente extensible haciendo uso de scripts Python. Para ello, los desarrolladores han integrado en este instante la biblioteca Pyphany, que anteriormente solía ser un añadido de Epiphany.
¡El Correo! La popular solución Gnome de Groupware, Evolution, no dispone solamente de una cantidad útil de mejoras en comparación con la versión anterior, los desarrolladores también se han encargado de simplificar la estructura del menú y de reducir la cantidad de memoria de la aplicación. Una nota para los usuarios concienciados con la seguridad: Evolution por fin soporta en la actualidad la encriptación PGP en línea. Y se pueden escuchar las pistas de música adjuntas al correo sin tener
Figura 4: El nuevo visor de ficheros Evince puede manejar ficheros PDF, PS y DVI.
30
Número 15
que extraerlas primero del mensaje. Los desarrolladores estarán interesados en oir que la biblioteca de correo, libcamel, ha sido ubicada en el servidor de datos de Evolution para soportar el acceso directo y sin complicaciones. En el futuro, Ximian/Novell se centrarán en la optimización de memoria, mejorando la velocidad cuando se analizan grandes cuentas, y en integrar CalDAV (que ya está disponible). CalDAV permite a los usuarios publicar calendarios de modo que otras personas lo puedan consultar; al mismo tiempo el protocolo proporciona una interfaz para su integración perfecta con el calendario Hula [3] y el servidor de correo que Novell está actualmente promocionando.
Figura 5: El nuevo administrador de claves Gnome 2.12 simplifica la gestión de claves digitales.
WWW.LINUX-MAGAZINE.ES
Gnome 2.12 • EVALUACIÓN
Control Total El centro de control Gnome proporciona a los usuarios un punto de control centralizado para los cambios en la configuración del escritorio. La concepción ampliamente extendida de que la única forma de configurar Gnome es por medio de una complicada herramienta similar al editor Windows Registry desapareció en la Gnome 2.8. La versión previa del centro de control presentó unos cuantos cambios para soportar más controles. La versión actual ahora añade un nuevo asistente que permite a los usuarios introducir sus datos personales: nombres, direcciones, direcciones de correo y los números de teléfonos. Estas credenciales son automáticamente utilizadas por la libreta de direcciones de Evolution. Esto es un indicativo de la estrecha relación existente entre las aplicaciones. Los cambios en otras partes del centro de control se basan en mejoras mínimas y en la eliminación de errores. Otra buena mejora, el cuadro de diálogo de la configuración del ratón, muestra ahora el cursor del tema instalado y permite seleccionar el tema preferido. Gnome System Tools incluyen programa nuevo para gestionar el nivel de ejecución actual (Figura 3). Gracias a la característica de congelación de Gnome 2.12, este programa es bastante básico actualmente, sin embargo, próximamente aparecerá en la siguiente versión un editor de niveles de ejecución más completo.
Caras Nuevas, Herramientas Familiares Evince (Figura 4) es la nueva estrella puesta en escena para la visualización de documentos. Al contrario que las versiones previas, que necesitaban un visor para cada formato de documento, Evince combina los mejores visores en una única aplicación. Evince proporciona a los usuarios la posibilidad de ver los ficheros PDF, PS y TIFF con la opción de soportar DjVU y Powerpoint; actualmente se está desarrollando el soporte para nuevos formatos como MSWord, Abiword y OpenOffice. Esta herramienta tiene todas las papeletas para convertirse en la “aplicación estrella” y por ello uno de los programas de referencia de Gnome.
A pesar de su corta historia (Evince ha estado en desarrollo solamente nueve meses) este visor de ficheros versátil soporta ya su uso en el mundo real. La función de búsqueda en particular es extremadamente madura: Evince utiliza para ello una hebra Xpdf denominada Poppler. También soporta la copia simple de pasajes de texto. Sus otras habilidades incluyen la visión Figura 6: Gestión de imágenes digitales con el visor de imágenes simultánea de múlti- Eye de Gnome. ples páginas y la visualización en pantalla completa habitual y Como el navegador Mozilla, Yelp tamel modo de presentación. Al mismo bién dispone actualmente de un control tiempo, Nautilus hace uso del poder de para las búsquedas basadas en texto. En Evince para proporcionar a los usuarios vez de abrir un cuadro de diálogo, vistas preliminares de los documentos aparece al pie de la ventana un cuadro de PDF en vez de mostrar los iconos genéritexto para la cadena a buscar. Este forcos. mato para las búsquedas proporciona a la Gnome presentó hace un año un herramienta un aspecto más organizado. administrador de claves para la gestión de Epiphany y otros programas también las contraseñas; las aplicaciones individdisponen de esta característica, que fue uales pueden utilizar el administrador de originalmente presentada por el naveclaves para los servicios seguros. El nuevo gador Firefox. Keyring Manager de Gnome 2.12 permite El visor Eye of Gnome (EOG para abrea los usuarios el control total a la hora de viar, Figura 6), que no ha estado bajo gestionar las claves (Figura 5). Se pueden desarrollo desde hace algún tiempo, crear, borrar y modificar o simplemente vuelve a estarlo de nuevo . EOG puede eliminarlas. Esta herramienta es la usar los perfiles ICC [6] para mostrar las primera aplicación desarrollada enteraimágenes con los colores calibrados. Los mente por el proyecto Gnome Love [4]. ficheros de los perfiles ICC son utilizados Los desarrolladores han dotado al comunmente por los gráficos profesionavegador de ayuda Yelp de un nuevo nales. motor de renderizado. Aunque la versión Se ha presentado recientemente una no oficial 2.10 fue la primera en tener el actualización menor de la herramienta de motor Gecko, Gnome aún tendrá Yelp búsqueda de Gnome. La nueva versión 2.8 por un periodo de seis meses. muestra un thumbnail con la vista previa El motor Gecko y las otras mejoras de en vez de los iconos genéricos. Por ello, Yelp realmente marcan la diferencia. La los desarrolladores también han aplicación se ejecuta más rápidamente y arreglado el diccionario de Gnome y el es mucho más estable que la versión preprotocolo del visor. Ambas aplicaciones via. Los problemas con las reglas de forson ahora mucho más simples y más mato propias del lenguaje son ya cosa intuitivas. del pasado. Las páginas de ayuda de Multimedia y Más Gnome utilizan el formato DocBook [5]; Yelp las convierte a HTML y las muestra. Totem (Figura 7), el reproductor multiLa herramienta de ayuda de Gnome no media estándar desde Gnome 2.10, ha tiene problemas manejando las páginas sido renovado. El programa muestra la de ayuda man y los ficheros de informapotencia de la tecnología GStreamer subción. yacente [7], aunque aún se puede seguir
WWW.LINUX-MAGAZINE.ES
Número 15
31
EVALUACIÓN • Gnome 2.12
utilizando Xine como alternativa. Gnome prefiere los formatos gratuitos y Totem los soporta sin excepción. Totem incluso proporciona una integración simple con los formatos de audio y video propietarios, como MP3 y DivX. El cambio más obvio de Totem es la lista integrada en la ventana principal. Esta disposición proporciona a los usuarios un acceso mucho más rápido a las colecciones. La herramienta añade en este momento soporte para los menús de los DVDs y los subtítulos. Se desarrolló un plug-in para Mozilla: Así que Totem reproduce ahora películas desde Mozilla/Firefox. Gnome 2.12 también viene con Soundjuicer, una aplicación para la extracción de las pistas de audio de los CDs. La versión actual dispone de características nuevas, incluyendo la posibilidad de escuchar las pistas antes de su extracción. Por defecto, Soundjuicer almacena el contenido del CD en el formato OGG.
Vectores Egipcios El kit de desarrollo de Gimp (Gtk+ para abreviar) ahora hace uso de la biblioteca vectorial Cairo. Una de las ventajas de Cairo es que los elementos gráficos pueden escalarse sin pérdida de detalles y sin la típica pixelación. Lo más importante para los desarrolladores de Gtk+ era que fuera compatible con las versiones anteriores.
GUADEC Habla Casi todo lo que se habló en la Conferencia de Desarrollo de Gnome GUADEC celebrada en Stuttgart, Alemania, está disponible en formato OGG; si está interesado se pueden descargar los ficheros en [8] y visualizarlos con Totem.
32
Número 15
A la vista: Gnome 2.14 Hoy por hoy se está trabajando en la siguiente versión de Gnome, la cual (como siempre) está prevista para seis meses después de la fecha de lanzamiento de la versión actual, es decir, para mediados de Marzo del 2006. El próximo escritorio de Gnome incluirá un gran número de mejoras que no estuvieron listas para la versión Gnome 2.12. Uno de los objetivos de diseño más importante es el comportamiento “inteligente” del escritorio, con una personalización casi autónoma puede utilizarse con o sin conexión de red. La reducción del consumo de memoria es otro objetivo importante de la próxima versión, como la mejora del rendimiento de los programas Gnome. Al mismo tiempo, los desarrolladores están proyectando integrar aún más el Panel con Nautilus, e integrar el gestor de descargas de Epiphany con Nautilus. Algunas partes del editor Gedit están siendo descritas por los desarrolladores actualmente, así que puede esperarse un nuevo aspecto para Gedit de Gnome 2.14. El proyecto “Ridley” [11] está tratando de consolidar la confusa biblioteca nimbus que rinden a Gnome y Gtk+ a simplificar los desarrollos de las aplicaciones Gnome. La idea es integrar pequeñas bibliotecas directamente con Gtk+. Parece más probable que Gtk+ 2.10 integrará las funcionalidades del núcleo Gnome de lion. Los mantenedores de paquetes ya están buscando esto. Los desarrolladores de GnomeMeeting están trabajando duramente en una nueva versión que lo pondrá al mismo nivel que Skype y otros programas propietarios de VoIP. La comunidad Mono continúa produciendo como churros más y más aplicaciones, como Banshee, que puede reproducir varios formatos de audio. Pero eso
WWW.LINUX-MAGAZINE.ES
no es todo: Banshee permitirá a los usuarios reproducir las pistas directamente, sincronizar sus iPods, importar audio desde los CDs y gestionar las listas de reproducción. La aplicación también dispone de un editor de etiquetas ID3. Los desarrolladores de GStreamer también intentan completar su trabajo de la nueva versión antes del próximo lanzamiento. Esto presentará una oportunidad ideal para integrar una variante libre de errores del marco de trabajo de audio de Gnome 2.14. El sitio web de GStreamer en [12] dispone de más detalles. Para una lista más detallada de los objetivos de diseño para la futura versión de Gnome 2.14, véase la hoja de ruta del ■ Proyecto Gnome en [13].
Recursos [1] Smeg: http://www.realistanew.com/ category/projects/smeg/ [2] Freedesktop: http://www.freedesktop. org [3] Proyecto Hula: http://www. hula-project.org [4] Proyecto Gnome Love: http://live. Gnome.org/GnomeLove [5] Información sobre DocBook: http:// live.Gnome.org/DocBook [6] Información sobre ICC: http://www. color.org/icc_specs2.html [7] GStreamer: http://www.gstreamer.net [8] GUADEC: http://stream.fluendo.com/ guadec/ [9] Biblioteca Vectorial Cairo: http:// cairographics.org/introduction [10] Motor Clearlooks basado en Cairo: http://www.stellingwerff.com/?p=5 [11] Proyecto Ridley: http://live.Gnome. org/ProjectRidley [12] GStreamer 0.10: http://sourceforge. net/mailarchive/forum. php?thread_id=8245644&forum_id=5 947 [13] Hoja de Ruta de Gnome: http://live. Gnome.org/RoadMap
EL AUTOR
Figura 7: Totem es el reproductor multimedia estándar de Gnome.
En el futuro, los usuarios podrán acelerar las representaciones gracias a OpenGL. Las demostraciones iniciales parecen extremadamente prometedoras y demuestran que Cairo y Gtk+ tienen bastante potencial. Actualmente los desarrolladores están trabajando en un motor Gtk basado en Cairo [10]. La Fundación Mozilla está también pensando en utilizar Cairo en la versión 1.9.
Christian Meyer preside Gnome en Alemania desde su fundación, en Octubre de 2004, y lleva implicado en este proyecto desde hace cinco años. Se puede contactar con él por correo electrónico en chrisime@gnome.org.
Animación 3D • PRÁCTICO
Animación 3D bajo Software Libre
MUNDOS VIRTUALES Necesitamos buen software y mucha potencia de procesador para crear mundos virtuales. Afortunadamente para los animadores de hoy en día, tenemos potentes PCs a precios asequibles y excelentes herramientas de animación completamente libres. POR JOE CRAWFORD
N
EL AUTOR
o hace demasiado tiempo, la animación 3D de calidad profesional requería caras estaciones de trabajo. El software que ejecutaban, por ejemplo Maya (en la versión ilimitada), costaba más de 15.000 dólares a comienzos de 2002, y su tecnología se guardaba celosamente bajo restrictivas licencias. Mientras los precios del hardware comenzaban a bajar en picado, el precio del software se mantuvo demasiado alto para los aficionados, y con las duras condiciones de las licencias, se hacía casi impracticable el uso de herramientas de animación 3D y así, para mucha gente, la animación 3D en sus propios ordenadores era sólo un lejano sueño. Pero de un tiempo a esta parte, con la aparición de los primeros programas en Software Libre, la situación ha cambiado por completo. Se han proporcionado gráficos 3D al público en general, y se han abierto las tecnologías subJoe Crawford es el propietario de Joetainment Enterprises/ Celestine Studios, un estudio gráfico 3D que usa Software Libre. Joe imparte también diversos cursos de animación por ordenador.
yacentes para que los desarrolladores produzcan toda una nueva serie de aplicaciones. La expresión “7 grados de libertad” fue acuñada por el proyecto K3D. Alude a los 6 grados de libertad en el espacio tridimensional, además de la libertad de distribuir y modificar el código fuente. Este artículo describe alguno de las mejores herramientas en Software Libre para la animación 3D.
Animación 3D El proceso de animación en 3D se muestra en la Figura 1. Comienza con el modelado del objeto 3D. El siguiente paso son las texturas: se añade una especie de “piel”. Este paso le da a la superficie del modelo un aspecto natural con luz que se refleja y una estructura para dicha superficie. El mapeado UV proyecta mapas de bits 2D (por ejemplo vetas de madera) en una superficie 3D. Explicado de manera simple, es como pegar un cartel en una columna. El modelo 3D pueda ahora animarse. En el proceso de construcción se añaden las juntas a la figura. Estas juntas permiten al artista mover un objeto complejo de una manera similar a una marioneta. Tras completar la escena de animación básica, el animador añade los efectos especiales como agua, fuego
WWW.LINUX-MAGAZINE.ES
o humo. Se ilumina la escena ubicando los puntos de luz, como si fuera el rodaje de una película convencional. La etapa de post-producción se encarga de optimizar el producto casi acabado, combinándolo con la película o las escenas de video, y añadiéndole una banda sonora. Normalmente, se usan varios programas diferentes para crear una animación 3D. En primer lugar, necesitamos un programa para crear los modelos 3D. En muchos casos, la animación y el renderizado (conversión de los modelos terminados a imágenes fotorrealistas) se realizan desde programas diferentes. El renderizado es tan complejo que usualmente requiere una herramienta especializada.
Wings3D – Simplifica Formas Complejas Mientras que las formas geométricas son bastante fáciles de construir, las formas irregulares u orgánicas, como pueden ser la de una mano o el tronco de un árbol, son un gran reto. Wings3D [1], que toma su nombre del programa comercial “Nendo”, se ha posicionado como una herramienta especializada en este campo. Este particular punto fuerte se
Número 15
33
PRÁCTICO • Animación 3D
Figura 1: El proceso de producción, desde la idea hasta el producto acabado.
hace evidente cuando necesitamos modelar seres humanos o animales. Muchos años de desarrollo hacen de Wings3D una herramienta enormemente poderosa a la vez que intuitiva. Con una curva de aprendizaje de sólo unas horas, el usuario puede empezar el proceso creativo muy rápidamente. Aunque Wings3D se basa en polígonos, da la sensación de estar modelando con plastilina. La herramienta “Tweak” permite al usuario mover puntos de control en un espacio 3D de manera gradual hasta alcanzar la forma requerida. Así mismo, Wings3D tiene muchas funciones para dividir cuboides simples y crear formas de aspecto natural. Para ello, sólo tenemos que posicionar el ratón sobre el icono de menú. Presionamos [Del] y con el atajo de teclado solicitado vamos a definir el enlace. Wings3D se restringe básicamente al modelado y mapeado UV. No hay planes para introducir funcionalidades de animación en versiones futuras. Dicho esto, Wings3D soporta un buen número de formatos para exportar y así facilitar el intercambio de información con otros programas. Si estamos interesados en el modelado de formas orgánicas, Wings3D
34
Número 14
puede competir directamente con los programas comerciales existentes en el mercado.
Poder Blender
Figura 4), así como las funcionalidades de animación que son realmente rápidas. Blender usa OpenGL para la representación de la escena en pantalla, incluso para la interfaz gráfica de usuario, y aprovecha la aceleración hardware que proporcionan las tarjetas gráficas de hoy día. Esto permite al usuario la posibilidad de escalar imágenes o usar transparencias sin que se ralentice excesivamente el programa. Sin embargo, la interfaz está demasiado sobrecargada y está diseñada de una manera no demasiado ortodoxa. En lugar de menús y cuadros, Blender usa principalmente subventanas llenas de botones y barras de desplazamiento. El diseño de la interfaz carece de una lógica consistente. Incluso funciones tan básicas como cortar y pegar necesitan algo de tiempo para acostumbrarse en Blender, ya que usan [Alt]+[C] o [Alt]+[V], en lugar de la usual tecla [Ctrl]. Esto es consecuencia del hecho de que Blender se diseñó como una herramienta interna para los estudios de animación de la mítica consola NeoGeo. En 1998, uno de los fundadores de Neo-Geo, Ton Roosendaal, fundó la empresa Not a Number con la idea de continuar el desarrollo de la herramienta interna de animación que ahora conocemos como Blender. Su objetivo era lanzar la herramienta bajo Software Libre. Desafortunadamente, Not a Number cerró en 2001 debido a dificultades financieras, pero gracias a una campaña de donaciones se pudo comprar el
En estos momentos, Blender [2] es el único paquete de Software Libre que cubre todos los pasos en el proceso de producción 3D: modelado, mapeado UV, animación y renderizado de la escena final. También tiene algunas opciones de post-producción y un motor específico para juegos, el único de su clase en el sector 3D. Otro punto fuerte de Blender es la velocidad, que es superior a sus competidores comerciales. La subdivisión de superficies de Blender, Catmull-Clark, que crea curvas suaves a partir de bloques simples, es particuFigura 2: Wings3D es extremadamente potente a pesar de su senlarmente digna de cilla interfaz. mención (véase la
WWW.LINUX-MAGAZINE.ES
Animación 3D • PRÁCTICO
Scripts Para ayudarnos a automatizar tareas recurrentes, las herramientas gráficas suelen integrar un lenguaje de script. Los programas propietarios usan a menudo lenguajes propios, que tienen que aprender sus usuarios (por ejemplo, Maxscipt en 3D Studio Max). Los programas en Software Libre se caracterizan por el amplio uso de estándares abiertos, que permiten al usuario con algunas nociones de C o C++ un acceso mucho más fácil. Blender, por ejemplo, soporta scripts en Python.
los profesionales. personalizadas para cubrir sus requisitos K3D tiene una particulares. lista jerárquica El desarrollo de K3D no está en absoDeshacer/Rehacer, luto completo. Por ejemplo, las hepor ejemplo. Lo rramientas de modelado 3D no están tan cual significa básimaduras como las de Wings3D. Sin camente que si embargo, K3D ha optado por una después de restaufilosofía diferente, que de nuevo pone rar un estado y especial atención en las dependencias haberlo modifientre los objetos. Este método, conocido cado, podemos como paramétrico o modelado por provolver a aplicar cedimientos, implica que los cambios al los cambios que marco básico de un modelo se aplican de hicimos después manera inteligente a sus componentes. del punto al que Los desarrolladores han diseñado tamvolvimos. Esto bién una madura arquitectura de plugins debería ser una para proporcionar una sólida base para Figura 3: La interfaz de usuario de Blender con un modelo completo. funcionalidad extensiones futuras. deseable en la En el momento de escribir este código de Blender y liberarlo como Softmayoría de los programas, pero es espeartículo, el programa está en la versión ware Libre para la comunidad. cialmente útil en procesos de diseño 0.5 (desarrollo) y 0.4 (estable), y algunas La única desventaja de Blender de su creativo. funcionalidades clave aún no están pasado propietario es el hecho de que su K3D pone especial énfasis es definir la disponibles. Todavía se está trabajando interfaz se diseñó para profesionales que relación entre los objetos de una escena. en herramientas básicas como el escalausan la herramienta a diario. Esto lo Si estamos animando un cuerpo do y la rotación. Las funciones de anihace confuso e incluso algo desalentador humano, las partes del para el usuario normal. Necesitaremos modelo deben estar bastante paciencia para conseguir sacar gobernadas por una todo el poder que encierra este excelente enorme cantidad de programa, que debe ser uno de los más relaciones para crear potentes programas de Software Libre una impresión de natununca creados. Debido a su ya larga hoja ralidad: cuando el de ruta, Blender es extremadamente cuerpo comienza a estable y tiene una enorme comunidad caminar, el muslo se que proporciona modelos, documueve empezando por mentación y un buen soporte para comla cadera. Además, la batir problemas de cualquier usuario. parte inferior de la pierna se mueve desde K3D: ¿El Futuro? la rodilla. Ambos K3D [3] es uno de los desarrollos más movimientos deben recientes en el campo de los gráficos 3D. solaparse. En K3D, un La mayor ventaja de K3D es que se trata objeto puede controlar de un desarrollo nuevo, pero basado en a otro. Los usuarios la experiencia ya acumulada. Se consultó pueden guardar estas a desarrolladores profesionales del interdependencias, Figura 4: Blender con un modelo antes de aplicarle la subdimundo 3D para modificar el programa creando de esta mavisión de superficies Catmull-Clark. de trabajo y reflejar así las demandas de nera funcionalidades
WWW.LINUX-MAGAZINE.ES
Número 15
35
PRÁCTICO • Animación 3D
mación son complicadas de usar hoy por hoy. Y, como de momento los desarrolladores se están concentrando en la calidad más que en la velocidad, puede que tarde bastante en aparecer la versión 1.0 de K3D. Los modelos creados con K3D son compatibles con las especificaciones RenderMan, el estándar en la industria de la animación. Los modelos K3D pueden procesarse con herramientas profesionales como Photorealistic Renderman de Pixar. Sin embargo, K3D no se restringe a los productos comerciales. También soporta el excelente, y libre raytracer Yafray, que puede usarse para convertir modelos a imágenes finales. Su convincente diseño incluye una interfaz muy clara basada en GTK2 (véase la Figura 5), así que merece la pena, en definitiva, hacer el seguimiento de los próximos desarrollos de K3D.
Renderizado El proceso de convertir los modelos 3D a imagen final o a animaciones se suele denominar renderizado. Como es la única etapa del proceso de creación que va a ver la audiencia final, se trata de una fase muy importante. Y como el renderizado es, al mismo tiempo, un proceso muy complejo, suele ser llevado a cabo por herramientas especializadas. Por supuesto, tenemos que asegurarnos
Figura 6: Esta imagen muestra el potencial de la herramienta de renderizado de Aqsis para la creación de formas complejas.
de que el intercambio de información con las demás etapas sea el adecuado.
Yafray Yafray [4] es en estos momentos la herramienta de renderizado más potente del Software Libre. Puede generar imágenes extremadamente realistas y estilizadas. El modo en que se aplican las luces y sombras tiene un enorme efecto en el
Figura 5: K3D tiene una clara interfaz basada en GTK2.
36
Número 14
WWW.LINUX-MAGAZINE.ES
nivel de realismo a los ojos del observador. Yafray calcula el efecto de la luz sobre la superficie del modelo de una manera mucho más precisa que otros programas. Calcula sombreados suaves, reflexiones de luz y refracciones basadas en algoritmos de Fresnel. Traza también las rutas seguidas por los rayos de luz que se dispersan, o luz refractada por objetos transparentes. Esto se conoce como “iluminación global” o “cáusticas”. Normalmente, Yafray se ejecuta como un programa externo. Tiene, sin embargo, una API para plugins, de manera que otros programas puedan llamarlo. Por ejemplo Blender puede hacer esto para ofrecer al usuario una preview más concluyente. Aunque Yafray está de momento en la versión 0.0.8, las características que implementa el programa son más que suficientes para hacerlo interesante en tareas de producción. La calidad del renderizado es comparable a las herramientas profesionales que cuestan varios miles de dólares. Esto hace de Yafray, con la posible excepción de la herramienta de renderizado más básico que incluye Blender, el único programa de renderizado en Software Libre apto para producción en estos momentos. El renderizado requiere un gran número de cálculos complejos. Hablamos de tiempos de render de varias horas o incluso días. En estos
Animación 3D • PRÁCTICO
usuario de a pie puede ayudar en la elaboración de la documentación y los tutoriales. Esto evita muchos quebraderos de cabeza a la hora de aprender cómo funcionan los plugins que acompañan a las herramientas gráficas en Software Libre.
Conclusiones: Software Libre 3D
momentos, los desarrolladores están trabajando en un rediseño importante para poder aprovechar la potencia de cálculo de las GPUs de las tarjetas gráficas para los procesos de renderizado. Esto debería reducir significativamente los tiempos de computación en un futuro cercano.
Toxic Toxic [5] es un programa de renderizado basado en cálculos físicos exactos. Usa la “Función de Distribución de Reflexión Bidireccional”, entre otras, para generar imágenes de excelente calidad y extremadamente realistas. En muchos aspectos del proceso de renderizado, Toxic adopta métodos similares a los de Yafray, sin embargo, pone más énfasis en la precisión física. El objetivo es alcanzar resultados que no sólo parezcan realistas al ojo humano, sino que también emulen la realidad de una manera matemáticamente correcta. Toxic usa su propio, y bien documentado, formato de archivo XML. Sin embargo, no puede importar escenas de otros paquetes 3D, lo que dificulta enormemente su integración en un flujo de trabajo para producción.
Aqsis Aqsis [6] se caracteriza por el hecho de que proporciona el soporte más completo para la sintaxis estándar RenderMan para la definición de modelos 3D. Esto significa que es más fácil crear formas complejas con Aqsis que con otras herramientas de modelado. Desafortunadamente, Aqsis no incorpora raytra-
cing, esto es, un trazador de rayos de luz, al menos en el momento de escribir este artículo. Esto disminuye considerablemente el realismo de los resultados. Aqsis es en estos momentos más interesante para los desarrolladores que necesitan una herramienta libre que soporte el estándar RenderMan. Por otro lado, la incorporación de raytracing está contemplada en la hoja de ruta de los desarrolladores, y el trabajo en Aqsis progresa, de momento, muy deprisa. Aqsis es una interesante propuesta, pero hoy por hoy se encuentra en una etapa muy temprana de desarrollo.
Beneficios del Software Libre El acceso al código fuente es una gran ventaja para los estudios profesionales y los artistas freelance. Los estudios grandes pueden modificar el software estándar para ajustarse a sus propias necesidades. E incluso el usuario normal puede sacar provecho de pequeños hackeos al programa. Una característica de este tipo de software gráfico es que muchas funcionalidades pueden implementarse como plugins. En el caso de programas propietarios, los plugins suelen ser difíciles de encontrar y necesitan reinstalarse con cada instalación. Por contra, la comunidad de desarrolladores en Software Libre suele adoptar rápidamente el código fuente del plugin a la rama principal del programa. En el caso de Blender, muchas funcionalidades empezaron como plugins. También hay que contar con el hecho de que el
WWW.LINUX-MAGAZINE.ES
El futuro del Software Libre 3D se presenta halagüeño. Se están produciendo muchos diseños maravillosos con Blender y Yafray. Sin embargo, siguen sin resolverse algunos problemas. Por ejemplo, falta un formato estándar convincente que mejore el intercambio de datos entre programas. Así mismo, encontramos que a la hora de producir animaciones 3D de alta calidad tenemos que luchar con muchas herramientas sin interfaces estandarizadas. Esperemos que la experiencia de la enorme base de usuarios, parte de ellos profesionales, así como el compromiso de la comunidad de programadores, ayude a alumbrar el desarrollo de estas piezas que faltan, al igual que en otros campos del Software Libre. Por último, señalar que aún existen algunas lagunas en el flujo de trabajo en producción, que van desde el modelado inicial 3D hasta el lanzamiento de la película finalizada: los estudios profesionales aún usan herramientas propietarias para las tareas de montaje en post-producción. Proyectos como Jahshaka [8] o Cinelerra [9] podrían en un futuro terminar con esas lagunas, permitiendo así a los estudios que todo el ciclo del material generado por ordenador en una película se ■ realizase con Software Libre.
Recursos [1] Proyecto Wings3D: http://www. wings3d.com [2] Página de Blender con documentación y diversos recursos: http:// blender.org [3] K3D (documentación disponible en línea): http://k3d.sourceforge.net [4] Yafray: http://www.yafray.org [5] Toxic: http://www.toxicengine.org [6] Aqsis: http://www.aqsis.org [7] Povray (documentación, communidad): http://povray.org [8] Jahshaka: http://www.jahshaka.org [9] Cinelerra: http://heroinewarrior.com/ cinelerra.php3
Número 15
37
PRÁCTICO • Solfege
Aprender música con GNU Solfege 3.0.0
ENTRENAMIENTO MUSICAL Solfege nos ayuda a mejorar nuestro conocimiento musical y nos permite practicar identificando intervalos, escalas y acordes. POR HAGEN HÖPFNER
L
os profesionales con oído musical pueden identificar una nota con oír el tono. Entre otros, se sabe que Mozart tenía este don. El resto de los mortales nos tenemos que conformar con intentar aprender cómo se identifican correctamente las escalas, acordes e intervalos. Si queremos entrenar nuestro oído para identificar elementos musicales como acordes e intervalos, Solfege [1] puede ayudarnos (véase Figura 1). El programa recibe su nombre del sistema Solfege [2], una técnica tradicional de enseñanza musical, en la cual los estudiantes aprenden cómo leer las partituras e identificar los tonos.
Preludio Solfege está basado en Python, por lo que tendremos que instalarlo si no está ya en nuestro sistema Linux. El código fuente de la versión actual Solfege 3.0.0 está disponible en la página del proyecto en [1]. Los paquetes para Suse y Debian no sólo son antiguos, sino que fallaron en nuestro test. En otras palabras, se hizo imperativa una instalación manual.
38
Número 15
Para instalarlo en Suse Linux 9.3 se necesitan algunos paquetes adicionales. La lista de estos paquetes adicionales incluye gcc-c++, texinfo, glib2-devel, pkgconfig, python-gtk y python-devel. También necesitaremos el “Simple Wrapper and Interface Generator”, abreviado como Swig, así como el reproductor de midis timidity. Los usuarios de Debian necesitan también los paquetes críticos de Python y GTK, además de timidity y libglib2.0-dev. Seguimos el procedimiento estándar para compilar e instalar Solfedge: ./configure && make && su -c "make install". Esto genera el ejecutable en /usr/local/bin, como es usual en Linux.
Figura 2: Si necesitamos más formación en teoría musical, Solfege nos ofrece una referencia integrada.
Modo de Expresarse Para iniciar nuestro nuevo entrenador musical, tecleamos la orden solfege en una consola. La primera vez que ejecutamos Solfege, no podremos redimensionar la ventana principal. Para cambiar este comportamiento, seleccionamos Preferences en el menú Edit y habilitamos User resizeable main window en la pestaña Graphical Interface. Ahora nos dirigimos al menú Practise y seleccionamos Tests para abrir el menú de tests. La mejor manera de usar Solfege es ejercitarse con el programa de entrenamiento antes de empezar a hacer los tests. Necesitamos un 90% de respuestas correctas para aprobar el test.
Consejo
Figura 1: Solfege nos entrena en la identificación de acordes, intervalos y escalas.
WWW.LINUX-MAGAZINE.ES
¿Ha olvidado la mayor parte de la teoría musical que aprendió en el colegio? Solfege puede ofrecernos una tutoría extra, al menos en el caso de los intervalos (Figura2). Para ello, seleccionamos File | Theory | Intervals. Si no es suficiente, podemos mirar en la Wikipedia [3] o en algún buen libro de texto.
Solfege • PRÁCTICO
Las otras pestañas del cuadro nos dejan seleccionar el instrumento para el sonido a interpretar. Introducimos los tonos mayores y menores que podamos cantar en la pestaña User.
Entrenamiento En Solfege encontraremos más programas de entreFigura 3: Cuando pulsamos en el botón New interval, Solfege namiento que tests reproduce un intervalo y nos pide que lo identifiquemos. (véase la Tabla 1). Los métodos pueden clasificarse a grandes rasgos en cuatro grupos: • Acordes • Intervalos • Ritmos • Miscelánea Para practicar la identificación de acordes, elegimos una opción como Practise | Chords in root posiFigura 4: Solfege no nos confina al teclado. Podemos representar tion | Chords with 9 el intervalo en una teórica guitarra o incluso en un acordeón. in their name. Pulsando en el botón Solfege intenta identificar automáticaNew chord podremos seleccionar un mente nuestro hardware MIDI, o el emunuevo acorde. Se puede identificar el lador MIDI incorporado en la tarjeta de acorde con los botones a la izquierda sonido, en su caso. En nuestras pruebas, de la ventana. Si hemos acertado, el programa fallaba a la hora de generar Solfege muestra las notas del acorde. Si sonido de esta manera, por lo que era no estamos seguros después de preferible usar el reproductor timidity. escuchar una primera vez, podemos Para esto, abrimos el cuadro de confibien indicarle al programa que repita el guración en Edit | Preferences. En la pesacorde completo (Repeat) o bien que taña Sound setup, introducimos la ruta nos vaya indicando notas sueltas hasta Timidity en el cuadro a la derecha (Repeat arpeggio). de midi file player, marcamos la opción Para ejecutar un test similar con Use external midiplayer. intervalos, seleccionamos File | Intervals | Melodic interPrincipales Opciones de Compilador vals para arrancar esta función. PulEjercicios Tests samos a continuación Intervalos Melódicos Intervalos Melódicos en New interval para Intervalos Armónicos Intervalos Armónicos tocar dos tonos conAcorde en posición base Cantar intervalos Inversión de acordes Acorde en posición base secutivos (véase la Cantar intervalos Inversión de acordes Figura 3). Entonación (requiere CSound) La sección de ritmo Ritmo de Solfege está ubiDictado de notas cada en Practice | Escalas Rhythm. Pulsando en Identificación de tono New indicamos a Configuración libre Solfege que interprete
WWW.LINUX-MAGAZINE.ES
Figura 5: La pestaña Statistics nos proporciona un resumen estadístico de los resultados de los tests.
un ritmo. A continuación tenemos que intentar reproducir el ritmo a base de sus notas.
Cantar un Solo ¿Tuvimos que dejar las clases de canto para no ser demandado por daños y perjuicios? No hay problema: Solfege mantendrá nuestro secreto a salvo. Seleccionamos Practice | Sing intervals para mostrar un pentagrama vacío. Pulsamos en New, se reproduce una nota y se muestra una segunda en pantalla que tenemos que identificar. En función de nuestra habilidad, puede que sea segunda o haya una tercera, cuarta, quinta o sexta. Con Practise | Note dictation | Folk songs1 indicamos a Solfege que interprete extractos de canciones populares.
Abajo el Telón Solfege es un entrenador musical que cubre una amplia gama de técnicas. Desafortunadamente, Solfege aún tiene unos cuantos bugs, a pesar de su avanzada versión. Las muestras en el ejercicio de ritmos no están muy bien sincronizadas, lo cual hace que el ritmo suene diferente a lo que indican las notas. Además, la teoría de intervalos no ha encontrado su hueco, y los usuarios de otros países pueden encontrar que la traducción está incompleta. Aún así, dicho todo esto, Solfege es un pequeño programa interesante, útil y ■ por encima de todo, entretenido.
Recursos [1] Página de GNU Solfege: http://www. solfege.org [2] Solfeo: http://en.wikipedia.org/wiki/ Solmization [3] Intervalos: http://en.wikipedia.org/ wiki/Interval_%28music%29
Número 15
39
PRÁCTICO • Plan9
Sistema Operativo en Red Plan 9
EL VISITANTE DE OTRO MUNDO
Al principio de los tiempos, mucho antes del nacimiento de Linux, un extraño sistema alienígena surgió para cumplir las promesas de Unix. Los descendientes de aquel sistema siguen vivos entre nosotros. Hemos capturado a uno de ellos y lo hemos diseccionado. POR OLIVER FROMMEL
L
inux tiene sus raíces en los famosos laboratorios AT&T Bell Labs, cuna del sistema Unix original. Los programadores de Bell Labs han estado bastante ocupados desde entonces, y uno de los frutos de sus esfuerzos es el sistema operativo distribuido Plan 9 [1]. Plan 9 arrancó a finales de los años 80 como un nuevo sistema diseñado para solucionar algunos problemas de Unix que los ingenieros de Bell consideraban “demasiado profundos para arreglarlos”. Este nuevo sistema operativo introdujo de hecho algunas innovaciones que tuvieron influencia en sistemas posteriores. Pero hasta hace poco, Plan 9 estuvo bajo una
40
Número 15
licencia propietaria que lo hizo poco popular entre los usuarios. Bell Labs y una pequeña comunidad de programadores han continuado perfeccionando y desarrollando Plan 9. La licencia se fue liberando con el paso de los años, y finalmente en 2003 Plan 9 se liberó bajo una licencia de software libre reconocida. Una rama comercial, llamada Inferno, también está disponible bajo licencia libre [2]. Hemos echado un vistazo a la “4ª Edición” de Plan 9 para ver si esta legendaria alternativa sigue siendo tentadora.
Comenzamos La distribución toma forma en una imagen ISO de 65Mbytes, que también
WWW.LINUX-MAGAZINE.ES
puede funcionar como live CD. Si tenemos dificultades para arrancar desde el CD, podemos encontrar en la página Web un generador de disquetes de arranque que se ajuste a nuestro hardware. La instalación es espartana, pero está bien organizada y es más o menos “a prueba de tontos” (véase Figura 1). El instalador verifica el estado después de cada paso. También está disponible una imagen para tarjetas gráficas que soporten modo Vesa. Si preferimos no experimentar con la instalación completa de momento, puede que queramos probar suerte con una máquina virtual. Véase el cuadro “Plan 9 Virtual” para más detalles. Si
Plan9 • PRÁCTICO
En su lugar, el servidor ftps monta el directorio en /n/ftp en el servidor. El servidor 9660fs es el responsable de montar los CDROMs. Plan 9 fue uno de los primeros sistemas operativos que implementaron el sistema de archivos Proc para soportar el control de procesos basado en archivos. Figura 1: La instalación gráfica muestra la carga del sistema y una La funcionalidad ventana de log bajo el menú en modo texto. La herramienta sugiere básica de red la prolas cuatro particiones necesarias. porciona el protocolo de archivos de Plan estamos interesados, también podemos 9, 9P, que comprende cerca de 30 protocoprobar un port userspace [3] con las helos de transmisión. Se ha añadido una implementación de 9P para Linux [4] en la rramientas más importantes de Plan 9, rama principal del kernel 2.6.14, elimidisponible para Linux, Mac Os y los prinnando de esta manera los obstáculos para cipales *BSD. la interacción entre Linux y Plan 9.
Más Consistente que Unix
El concepto subyacente en Plan 9 es que se trata de un sistema operativo distribuido, no como en Unix, donde a las funcionalidades de red se añaden mecanismos tales como el login remoto y sistemas de archivos en red. En Plan 9, las operaciones en red forman parte de la base del sistema operativo. Por ejemplo, todos los recursos pueden teóricamente distribuirse de manera transparente a lo largo de una red Plan 9. El sistema oculta el hecho de que los recursos no son locales para el usuario. Plan 9 no sólo soporta servidores de archivos, sino también servidores de autenticación y servidores de CPU. Podemos usar Plan 9 para implementar sistemas grid como 9grid. Plan 9 se basa en el paradigma de Unix “Todo es un fichero”. Debido al gran número de añadidos, Unix se vio forzado cada vez más a aceptar cambios ad-hoc que contravenían este principio. Un ejemplo de esto es la espantosa interfaz de socket, que usa funciones de lectura y escritura diferentes de las de los archivos normales. Plan 9 pone fin a esto, proporcionando interfaces de sistema basadas en archivos, por ejemplo /net/tcp y /net/udp, como interfaces de red. La mayoría de los servicios siguen el principio del servidor e interactúan a través de interfaces basadas en archivos. Plan 9 no incluye el típico programa FTP.
Espacios de nombre Plan 9 lleva este diseño basado en archivos un paso más allá con el concepto de espacios de nombre. Tradicionalmente, Unix administraba todos sus recursos en un solo espacio de nombres, en el cual /dev/tty1 representa siempre el mismo terminal. Por contra, los programas de Plan 9 tienen sus propios espacios de nombres, de manera que /dev/window
siempre apunta a la ventana de la propia aplicación. El montaje de unión es otra importante característica. Éste ayuda a simplificar la administración de los recursos como archivos y directorios, montando múltiples directorios en uno único. Esto hace posible montar directorios con ejecutables del servidor de archivos en el directorio local /bin, que evita tener que recurrir a los típicos trucos con la variable PATH. Linux acaba de adoptar este diseño con el sistema de archivos mejorado, Union-FS.
Gráficos con Rio Al contrario que con X11 de Unix, Plan 9 integra directamente una interfaz gráfica de escritorio, y esto simplifica enormemente los modelos de programación. El modelo subyacente está basado en el Niklaus Wirth’s Oberon [5], que a su vez renderiza sobre el sistema Xerox Cedar. El escritorio de Plan 9 proporciona un modelo de programación simple con una interfaz de archivos y operaciones elementales. Por ejemplo, un simple cat /dev/screen > output crea una captura de pantalla de una aplicación. A su vez, la implementación Rio es realmente sofisticada: comprende los procesos concurrentes e hilos que se llaman recíprocamente. Rio puede verse como el final del histórico modelo de terminal en línea que se remonta a los días en los que las impresoras realmente reproducían la entrada de los usuarios. Linux aún tiene restos de esta
El Nombre Plan 9 recibe su nombre del título de la mítica película de serie B “Plan 9 from Outer Space”, del genial director aficionado de Hollywood, Ed Wood. Según el FAQ [8], el nombre continúa la tradición de Bell Labs de “seleccionar los nombres que estremezclan a la gente de marketing”. En la película, que está considerada como la mejor contribución de Wood al arte cinematográfico, un par de aliens inician un plan para resucitar a gente muerta y crear así un ejército de zombies con el que atacar las capitales del mundo. El propósito de esta dantesca misión es evitar que los humanos completen el desarrollo de la “bomba solar”, una singular arma con la que “explotar las partículas de luz” y destruir el universo.
WWW.LINUX-MAGAZINE.ES
Es interesante considerar que los ingenieros de Bell eligieron el nombre porque sentían que estaban resucitando los restos mortales de Unix para atacar el mundo. La sugerente similitud entre “Solaranite” (el término en inglés para la “bomba solar”) con “Solaris”, otra arma enemiga que saca su poder de un Sol diferente, probablemente sea una extensión de la metáfora, aunque las primeras versiones de Solaris aparecieron cuando Plan 9 estaba en su desarrollo más inicial. Otros nombres en Plan 9 hacen referencia a la cultura pop, como el editor Acme, cuyo nombre alude a la empresa de los dibujos animados del Correcaminos de la Warner Brothers. El antiguo sistema de ventanas se denominaba 8 1/2, por la famosa película de Fellini.
Número 15
41
PRÁCTICO • Plan9
Figura 3: Plan9 con varias ventanas de aplicaciones abiertas mostrando el juego de caracteres, un cliente de correo electrónico y un programa de resolución de laberintos.
Figura 2: Sistema Plan 9 en acción. La ventana de edición de Acme está escondida bajo la mascota, Glenda, como evidencian las opciones de menú: New, Cut, Paste y demás.
Figura 4: El sistema operativo Plan 9 destaca por su avanzada arquitectura multiproceso y su fluida administración de procesos en red.
basa en juegos de caracteres Unicode. Plan 9 usa la codificación UTF-8, que de hecho fue inventada por el equipo de programación de Plan 9 liderado por Rob Pike.
Seguridad
Figura 5: Vemos al sistema operativo Plan 9 ejecutando el navegador web Charon (arriba a la derecha), el explorador de archivos Fuoco y el editor de textos Acme.
herencia en forma de múltiples aplicaciones en ventanas de terminal, desde Xterm a la consola de KDE. Esto hace posible introducir una entrada en cualquier lugar de una ventana: el usuario simplemente selecciona un comando y utiliza el ratón para ejecutarlo. Como sistema avanzado de ventanas que es, Rio hace un importante uso de todos los botones del ratón que tengamos.
42
Número 15
El programa Acme es una extraña mezcla de shell, editor y sistema de ventanas. Acme sigue el principio que acabamos de señalar, pero añade unos menús elementales a las ventanas del terminal y redirecciona la salida a nuevas sub-ventanas (véase Figura 2). Existe una implementación X11 de Acme, llamada Wily, basada en la librería 9lib [6]. A pesar de su antigüedad, Rio puede tratar programas multi-lenguaje, ya que se
WWW.LINUX-MAGAZINE.ES
Plan 9 no tiene cuenta de superusuario, y por tanto no tiene el tipo de programas SUID que han causado un sinfín de problemas en Unix. Siguiendo un método similar a Kerberos, el sistema distribuido de Plan 9 no transmite contraseñas por la red sino que, en su lugar, transmite tickets encriptados. Una manera de crear una cuenta de usuario, es habilitar el sistema de archivos Fossil tecleando con /srv/fscons, e introduciendo a continuación el comando uname user. Los nuevos usuarios pueden iniciar sus entornos la primera vez que se loguean tecleando /sys/lib/newuser. Por supuesto, Plan 9 ha desarrollado herramientas para el lenguaje C. El compilador para la arquitectura x86 se llama 8c, el linker 8l y el constructor, mk. Para compilar un kernel nuevo con estas herramientas, el operador del sistema se sitúa en /sys/src/9/pc y edita el correspondiente
PRÁCTICO • Plan9
de Plan 9. Desafortunadamente, se introdujeron muchos cambios con la 4ª Edición, lo que ha dejado algunos documentos obsoletos, por lo que debemos verificar la versión previamente. A pesar de su fantástico diseño, Plan 9 no es perfecto. Por Figura 6: Acme es el editor por antonomasia de Plan 9. Aquí lo vemos en ejemplo, las acción con varias ventanas de edición abiertas, mostrando código de proventanas 9term gramas y contenidos de directorios. de Rio realizan el scroll inadearchivo de configuración, que puede cuadamente con bastante frecuencia y no denominarse de distinta manera en funmuestran el texto que buscamos. Acme ción del entorno: en el caso más sencillo, tiene menos fallos. El sistema completo se pc. pcauth es un servidor de autenticación, basa en un escritorio, y muchas funciones pcf un servidor de archivos Fossil, etc. Tras simplemente no están disponibles en la configurar el kernel, el administrador consola de texto. Un ejemplo de esto es la puede compilar e instalar con el comando posibilidad de eliminar procesos pulsando mk CONF=pcf install. El kernel tiene que la tecla [Del]. Otro problema es la pequeña ubicarse en la partición de arranque 9fat dimensión de su comunidad de usuarios, para poder arrancar. La partición se Comp.os.Plan9, que continúa trabajando habilita tecleando el comando 9fat. Aquí en el desarrollo de Plan 9, librando una es donde reside también el archivo de conconstante batalla contra la falta de recurfiguración de arranque plan9.ini. sos. El hecho de que Plan 9 no haya alcanNo Todo Brilla zado una mayor difusión puede Las páginas man proporcionan docuatribuirse sin duda a la anterior política mentación para las herramientas y métode licencias, que impedía una distribudos. Están disponibles online y en la Wiki ción sin obstáculos. Hoy día, Plan 9 es
Plan 9 Virtual Si no queremos sacrificar una partición primaria para dedicarla a Plan 9 de momento, podemos usar varios emuladores para experimentar. La manera más sencilla es usar VMware. La página de Plan 9 tiene incluso una imagen lista para usar. Esto evita la necesidad de instalarlo. Simplemente descargamos la imagen, la conectamos a la máquina virtual y arrancamos. Sin embargo, esta imagen sólo funciona en VMware 4. Plan 9 no funciona del todo en VMware 5, según los desarrolladores. En lugar de esto, los desarrolladores recomiendan el emulador libre Qemu, que es casi tan rápido como VMware con el módulo acelerador de pago
44
Número 15
Kqemu. Qemu puede arrancar directamente con la imagen ISO de Plan 9. En primer lugar creamos un disco imagen con el comando qemu-img, y a continuación arrancamos la ISO: qemu-img create plan9.img 2G qemu -cdrom plan9.iso -boot d U -hda plan9.img Tras completar la instalación, que puede llevarnos unas cuantas horas, arrancamos el nuevo sistema con qemu -boot c plan9.img. Como alternativa, existe una imagen del DVD de Xenoppix en [9]. Se trata de una variante de Knoppix que integra el monitor de máquina virtual Xen y puede arrancar tanto NetBSD como Plan 9.
WWW.LINUX-MAGAZINE.ES
Figura 7: Inferno es una implementación comercial pero de código abierto de Plan 9. Aquí vemos el sistema corriendo juegos y aplicaciones lúdicas.
Figura 8: Pantalla típica de Plan 9 que muestra en primer plano el navegador web Charon. Detrás del navegador vemos varios terminales y editores de texto.
bastante menos atractivo para los desarrolladores de software libre, ya que Linux les proporciona un sistema operativo que funciona muy bien, a pesar de algunos lastres debidos a la herencia de ■ Unix [7].
RECURSOS [1] Plan 9: http://www.cs.bell-labs.com/ plan9dist [2] Inferno por Vita Nuova: http://www. vitanuova.com [3] Plan 9 de Userspace: http://swtch. com/plan9port [4] V9FS para Linux: http://v9fs. sourceforge.net [5] Oberon: http://www.oberon.ethz.ch [6] Clon de Acme, Wily: http://sf.net/ projects/wily [7] Eric Raymond acerca de Plan 9: http:// www.faqs.org/docs/artu/plan9.html [8] Plan 9 FAQ: http://www.cs.bell-labs. com/wiki/plan9/FAQ [9] Xenoppix: http://unit.aist.go.jp/itri/ knoppix/xen/index-en.html
Perl • DESARROLLO
Páginas Web más dinámicas gracias a AJAX
PODER AJAX
La tecnología AJAX añade elementos dinámicos para mejorar las páginas más sosas. Todo lo que necesitamos es un programa en Perl en el lado del servidor y algo de código JavaScript en la parte
L
os desarrolladores Web despertaron abruptamente cuando Google presentó su servicio Google Maps. De repente los usuarios podían mover los mapas de manera dinámica, como si la aplicación se ejecutara en una interfaz gráfica de usuario, en lugar de en un navegador. Súbitamente, los tiempos de retardo clienteservidor eran difíciles de apreciar, dado que la página no tenía que recargarse para reflejar cambios en el estado de la aplicación. Hoy día las aplicaciones AJAX brotan por doquier por toda Internet. La beta de Yahoo! Webmail, por ejemplo, se parece bastante a una apli-
Figura 1: El administrador de fragmentos de texto en el navegador.
del cliente. POR MICHAEL SCHILLI cación de escritorio. Hay que fijarse con mucho detenimiento para apreciar que es nuestro navegador el que está detrás del espectáculo. AJAX (JavaScript Asíncrono y XML) se basa en HTML dinámico y JavaScript en la parte cliente. El Objeto XMLHttpRequest fue añadido originalmente por Microsoft y anduvo revoloteando durante un tiempo hasta que Google lo lanzó al estrellato. AJAX permite que un script escrito en JavaScript y descargado de una página web intercambie información de manera asíncrona con el servidor web. Pasa de esta manera información “de contrabando” de forma dinámica hasta la página HTML, ya que en principio sólo van a ocurrir cambios pequeños en la página. La Figura 1 muestra una aplicación de ejemplo que administra fragmentos de texto usados habitualmente en correos electrónicos y los sirve en un campo de texto para cortar y pegar. Podemos seleccionar Add new topic para añadir un fragmento de texto y que se guarde en el servidor. Update envía el texto correspondiente al servidor y Remove lo elimina.
WWW.LINUX- MAGAZINE.ES
La página se carga sólo una vez por el navegador. Los enlaces subrayados pueden parecer hiperenlaces, y se pueden pulsar, pero no provocan que el navegador salte hasta una nueva URL. En vez de esto, simplemente se ejecuta el código JavaScript especificado por el manejador del evento OnClick, comunicándose de esta manera con el servidor tras bastidores. El módulo de Perl CGI::Ajax escrito por Brent Pedersen simplifica enormemente la implementación de este mecanismo. Dicho módulo define un protocolo clienteservidor (en Java-Script y Perl), que puede usar el código en JavaScript de la parte cliente para llamar a las funciones Perl de la parte servidor, referenciando sus nombres y su lista de parámetros. Un objeto JavaScript XMLHttpRequest (ActiveXObject(“Microsoft.XMLHTTP”) en IE) habilita al navegador para que envíe peticiones GET al script CGI de la parte servidor. La petición activa una función Perl previamente especificada que devuelve uno o más valores. El código JavaScript los recoge y refresca los campos predefinidos en el explorador.
Número 15
45
DESARROLLO • Perl
botón radio que se definió en HTML con el manejador del evento OnClick, OnClick="display(['Lame Excuse'],['tarea', 'statusdiv'])", hace la llamada a la función JavaScript display() y le pasa los dos arrays señalados a la función. El primer array contiene el atributo id del botón radio seleccionado. Su texto seleccionado (Lame Excuse) se pasa a la función del servidor. El Figura 2: Comunicación entre el navegador, el motor de segundo array contiene JavaScript y el servidor web. los atributos id de las etiquetas HTML, que son El objeto CGI::Ajax creado por refrescadas por el manejador con el CGI::Ajax->new('display' => \&disvalor de retorno de la función del serviplay...), en el script CGI asegura que el dor tras completar la petición. De esta HTML devuelto contiene una sección manera, tanto el área de texto como el JavaScript. La aplicación web usa una estado del campo de texto se actualizan función llamada display para rellenar las con información fresca del servidor. áreas de texto del navegador con el fragEn nuestro caso, el botón de radio con mento de texto seleccionado en ese la id “Lame Excuse”, tiene también la momento. En correspondencia, se propiedad VALUE="Lame Excuse", lo define en el servidor una función Perl que quiere decir que a la función Perl llamada display(). El manejador display() de la parte servidor (línea 12 JavaScript la llama posteriormente en el Listado snip) se le pasa esta usando una petición HTTP request. Un cadena de texto como primer parámetro.
display() no hace otra cosa, aparte de recoger el bloque de texto que coincide con “Lame Excuse” desde la caché de la parte servidor y de enviarlo de vuelta hasta el navegador junto con un mensaje de estado. Aquí es donde el manejador de eventos de JavaScript aparece de nuevo, refrescando el campo de texto grande (id='tarea') y el campo de estado de la parte inferior (id='statusdiv') con las cadenas devueltas por display(). Todo esto se abstrae pulcramente por CGI::Ajax, que envía el código JavaScript necesario al navegador, y configura el manejador para que pueda acceder a las funciones Perl. En la parte cliente, snip hace mucho más que simplemente refrescar los campos de texto. Si el usuario elimina uno de los títulos al pulsar Remove, no sólo borra el botón de radio con el título, si no que también selecciona el primer título en la lista restante y carga el bloque de texto desde el servidor. CGI::Ajax no puede tratar el entramado de la parte cliente de esta manera: funciones adicionales en JavaScript vendrán en su ayuda. Como nota positiva destacar que CGI::Ajax es extremadamente fácil de usar. Como muestra el Listado 1, sólo
Listado 1: snip 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
46
#!/usr/bin/perl -w use strict; use CGI; use CGI::Ajax; use Cache::FileCache; use Template; my $cache = Cache::FileCache->new(); ############################# sub display { ############################# my ($topic) = @_; return $cache->get($topic), "Retrieved $topic"; } ############################# sub remove_me { ############################# my ($topic) = @_; $cache->remove($topic); return "Deleted $topic";
Número 15
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
} ############################# sub update_me { ############################# my ($topic, $text) = @_; $cache->set($topic, $text); my $disptext = $text; $disptext = substr($text, 0, 60) . "..." if length $text > 60; return "Topic '$topic' updated " . "with '$disptext'"; } ############################# sub show_html { ############################# my $template = Template->new(); my @keys =
WWW.LINUX- MAGAZINE.ES
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
sort $cache->get_keys(); $template->process( "snip.tmpl", { topics => \@keys }, \my $result) or die $template->error(); return $result; } ############################# # main ############################# my $cgi = CGI->new(); $cgi->charset("utf-8"); my $pjx = CGI::Ajax->new( 'display' => \&display, 'update_me' => \&update_me, 'remove_me' => \&remove_me ); print $pjx->build_html($cgi, \&show_html);
Perl â&#x20AC;˘ DESARROLLO
Listado 2: snip.js 001 // ##########################
038 // ##########################
002 function topic_add(topic) {
039 function topic_update() {
003 // ##########################
040 // ##########################
078 }
041 if(!id_selected()) {
079
042 alert("Create a new topic
080 for(var i = 0; i <
004 var itemTable = document.getElementById("topic s"); 005 var newRow = document.createElement("TR"); 006 var newCol1 =
document.createElement("TD"); 008 var input = document.createElement("INPUT" );
['tarea', 'statusdiv']);
first");
form.r.length; i++) {
043 return;
081 form.r[i].checked = 1;
044 }
082 break;
045 update_me( [
083 }
document.createElement("TD"); 007 var newCol2 =
077 display([id_selected()],
id_selected(),'tarea' ],
084 display([id_selected()],
046 'statusdiv');
['tarea', 'statusdiv']);
047 }
085 }
048
086
049 // ##########################
087 // ##########################
050 function topic_remove() {
088 function id_selected() {
009
051 // ##########################
089 // ##########################
010 if(topic.length == 0) {
052 var sel = id_selected();
090 sel =
011 alert("No topic name
053
specified.");
id_selected_first_pass();
054 if(!sel) { alert("No topic
012 return false;
available");
091 092 if(!
013 }
055 return;
document.getElementById(sel) )
014
056 }
{
015 input.name = "r";
057
016 input.type = "radio";
058 remove_me([sel], 'statusdiv');
017 input.id = topic;
059
018 input.value = topic;
060 var node =
019 input.onclick = function() { 020 display([topic],['tarea',
061 var row = node.parentNode.parentNode; 062 row.parentNode.removeChild
022 input.checked = 1;
('tarea').value = ""; 094 return;
document.getElementById(sel);
'statusdiv']); 021 };
093 document.getElementById
(row);
095 } 096 return sel; 097 } 098 099 // ########################## 100 function
023 newCol1.appendChild(input);
063 select_first();
024
064 }
101 // ##########################
025 var textnode =
065
102 var form =
document.createTextNode(topic) ;
id_selected_first_pass() {
066 // ##########################
document.getElementById("form"
067 function select_first() {
);
026 newCol2.appendChild(textnode);
068 // ##########################
103 if(! form.r) { return 0; }
027
069 var form =
104 if(! form.r.length) { return
028 itemTable.appendChild(newRow);
document.getElementById("form"
029 newRow.appendChild(newCol1);
);
form.r.id; } 105
030 newRow.appendChild(newCol2);
070 if(! form.r) { return; }
031
071 if(! form.r.length) {
032 document.getElementById
072 form.r.checked = 1;
107 if(form.r[i].checked) {
073 if(!
108 return form.r[i].id;
('tarea').value = ""; 033 document.getElementById ('new_topic').value = ""; 034 035 return false;
106 for(var i = 0; i < form.r.length; i++) {
document.getElementById(id_sel
109
ected())) {
110 }
074 document.getElementById ('tarea').value = "";
}
111 alert("Selected ID is unknown");
036 }
075 return;
112 return 0;
037
076 }
113 }
WWW.LINUX- MAGAZINE.ES
NĂşmero 15
47
DESARROLLO • Perl
mente, que existe tanto en la parte cliente JavaScript como en el universo Perl del servidor. La función select_first() selecciona la primera entrada en la lista de botones radio y hace la petición del bloque de texto para el título correspondiente. Llama primero al método document.getElementById para buscar la etiqueta HTML con la ID de form (el formulario HTML en snip.tmpl). Todos los botones de radio se llaman r, por lo que form.r debería ser un array que computa las entradas de cada botón de radio encontrado. Si la lista de títulos está vacía, select_first() no selecciona nada, obviamente, Figura 3: Plantilla HTML que procesa snip usando el conni se comunica con el junto de herramientas de plantillas. servidor. Los hiperenlaces de etinecesitamos definir funciones para las quetas tipo <A> que se usan en snip distintas acciones del cliente (eliminar/ deberían obtener un return false como actualizar/mostrar) y proporcionar una última acción de sus manejadores función show_html, que devuelve el OnClick. Esto asegura que el navegador HTML de la aplicación cliente en la ejecuta el código JavaScript asignado al carga inicial. enlace, en lugar de seguir el falso atributo HREF. HTML y Perl Separados La plantilla carga la librería snip.js en El script Perl snip toma el HMTL a primer lugar (véase Listado 2). La libreenviar de la plantilla snip.tmpl, que se ría proporciona un buen número de muestra en la Figura 3. El conjunto de funciones que permiten a la interfaz herramientas de plantilla cargan la gráfica de usuario que funcione ademencionada plantilla y proporcionan cuadamente. La función de JavaScript un buen número de términos que nos topic_add en snip.js espera una cadena permiten insertar bucles for sencillos o del título y añade una nueva entrada condiciones. con su nombre al final de la tabla de Usa [% FOREACH topic = topics %] botones radio. para iterar sobre el array @topics pretopic_remove() elimina un título de viamente proporcionado por snip con la lista de botones de radio y envía una los títulos de los bloques de texto y petición al servidor, que en respuesta genera un cierto número de botones borra el fragmento de texto de la radio, cada uno en una tabla de filas caché. separadas. [% topic %] devuelve el id_selected() genera la propiedad id valor de la variable de plantilla topic del botón de radio seleccionado, es cada vez. La propiedad id de cada decir, el título de la entrada que quiere botón de radio se configura con la ver el usuario. Si la lista está vacía, cadena de texto del título, y el maneFirefox puede confundirse y seguir jador del evento OnClick llama a la devolviendo un valor. Para solucionar función display() descrita previaeste fallo, id_selected() vuelve a veri-
48
Número 15
WWW.LINUX- MAGAZINE.ES
ficar el resultado de id_selected_first_pass() y devuelve undefined si pilla a Firefox haciendo trampas. Si la lista de botones radio tiene dos o más entradas, form.r.length devuelve el tamaño de la lista. Si la lista tiene sólo una sola entrada, form.r.length devuelve un valor no definido. Si la lista está vacía, form.r no está definida. El flag checked puede ahora verificarse, bien a través de form.r.checked, o bien a través del elemento “i” del array: form.r[i].checked. Tras esto, select_first() llama a la función display() para obtener desde el servidor el texto del título seleccionado.
Asperezas Este script sólo pretende ser un ejemplo. Para conservar la simplicidad se ha dejado fuera del script, el código para tratar las condiciones de error. Podrían también aparecer algunos problemas de compatibilidad con navegadores distintos de Firefox.
Instalación El script requiere los módulos Class::Accessor, CGI::Ajax y Template de CPAN. A continuación añadimos el script snip (¡ejecutable!) la plantilla snip.tmpl (en el cgi-bin del servidor web) y el script de JavaScript snip.js directamente bajo la raíz de documentos (usualmente htdocs). Si el terminal utilizado para cortar y pegar no entiende UTF-8, deberíamos marcar como comentario la línea 68 de snip para indicarle al servidor web que envíe charset=iso-8859-1 en la cabecera CGI en su lugar. Y si preferimos no tener la caché de documentos bajo /tmp, tendremos que especificar nuestro directorio preferido en la línea 9: my $cache = Cache::File-Cache->new({cache_root => "/ruta"}). Finalmente, apuntamos nuestro navegador http://server/cgi-bin/snip, y, suponiendo que tenemos JavaScript activado, la función de fragmentos de texto debería funcionar, comunicándose con el servidor, y manteniendo el repositorio de fragmen■ tos en el servidor actualizado.
RECURSOS [1] Listados del artículo: http://www. linux-magazine.com/Magazine/ Downloads/62/Perl
AOLServer II • DESARROLLO
Desarrollo web con AOLServer
SERVICIO INMEDIATO Es muy común ver a un desarrollador Web tener que ocuparse de absolutamente todo, desde la gestión de la base de datos, pasando por el diseño o el código, ya sea éste en JavaScript, PHP, etc. ¿Alguno se encuentra en ésta situación? Pues con AOLserver se puede dividir este trabajo sin apenas sufrimiento, veamos cómo. POR PIETRO ZUCO
E
n el número de diciembre de Linux Magazine hablamos sobre la instalación y configuración del AOLserver, por lo que en este artículo no nos centraremos en estos detalles. Para quien no tenga a mano la revista, es importante recordar que existen paquetes para Debian cuya instalación es relativamente sencilla. Esta vez nos centraremos más en la forma de implementar el diseño Web con AOLserver. Como veremos, ofrece unas posibilidades cuanto menos singulares para el desarrollo Web, que pueden hacernos ahorrar tiempo, especialmente en situaciones donde las herramientas convencionales no nos puedan dar una solución.
Todo es TCL AOLserver se apoya en el lenguaje interpretado TCL. Quizás a algunas personas les pueda parecer que es una lengua muerta o incluso pueda sonar a arcaico, pero la verdad es que la unión y la dependencia de AOLserver con TCL es la principal ventaja que tiene este versátil servidor Web. AOLserver proporciona una potente API en TCL con un conjunto muy amplio de funciones capaces de controlar el servidor, incluso a muy bajo nivel.
Por ejemplo, podemos reiniciar el servidor con un simple link del mismo modo que nos posibilita un fácil manejo de las conexiones contra bases de datos SQL. Si tenemos en cuenta que AOLserver también permite lanzar varios servidores sobre una sola máquina, podemos realizar scripts en TCL de ámbito común o dedicados para un servidor concreto, pudiendo aplicar de esta forma múltiples configuraciones personalizadas para cada servicio. El uso de TCL no sólo está limitado a scripts específicos, sino que también posibilita la incorporación de código embebido en HTML a través del lenguaje ADP (AOLserver Dynamic Pages). Vamos a ver cómo se une todo esto para crear una Web.
Divide y vencerás… El cóctel de tecnologías expuestas más arriba, TCL, SQL y ADP dan lugar a la posibilidad de emprender la creación de una Web dividiendo claramente la programación, el diseño y el acceso a bases de datos. Por lo tanto, cada especialista podría dedicarse a realizar el trabajo para el que está realmente capacitado sin necesidad de verse obligado a entender todo lo que hay detrás de cualquier diseño Web.
WWW.LINUX- MAGAZINE.ES
Esto tiene varias ventajas, entre las cuales destaca la posibilidad que ahorrarse el esfuerzo de tener que planificar claramente hasta donde tienen que llegar los roles de cada persona involucrada en el desarrollo de un sitio Web. Para desarrollos de gran envergadura, se podría contar con personas especializadas en bases de datos que no tienen porqué entender de diseño, y diseñadores que no tienen porqué entender de programación, trabajando todos de forma transparente. Es importante tener en cuenta que todo cuanto aquí se expone es una de las tantas formas en las que podemos organizar el trabajo. AOLserver nos permite tener mucha flexibilidad, lo cual puede tener sus ventajas e inconvenientes. En este artículo se plantea la forma de intentar diversificar el trabajo para no centralizarlo en una sola o unas cuantas personas que gestionen todo al mismo tiempo. Por lo tanto, diseños y maneras de estructurar el desarrollo con AOLserver son extremadamente variados y seguramente encontraremos muchos otros diferentes.
Manos a la obra Es difícil abarcar en poco espacio y en un sólo código todos los elementos que
Número 15
49
DESARROLLO • AOLServer II
Listado 1: fichero1.adp
Figura 1: Una Web estaría compuesta por tres ficheros.
nos serán útiles en el diseño de nuestra Web, por lo que vamos a ver por separado las partes más importantes. Como ejemplo, diseñaremos una Web que nos permita almacenar en una base de datos nuestra música por categorías, autor y formatos. El diseño de la Web será como se ve en la figura 1. No debemos confundirnos. Este diagrama muestra la forma en la que estaría compuesta una página Web separando su diseño en tres ficheros independientes. Es importante tener presente que sería también factible utilizar un diseño tradicional. AOLserver puede procesar Webs basadas en ficheros ADP, TCL o HTML, por lo que no estamos obligados a interactuar sólo con tres ficheros. Lo que aquí se expone es una solución al caso concreto en el que queramos dividir las partes de un desarrollo sin tener que lidiar con los típicos obstáculos que nos podemos encontrar en la mayoría de los casos, con otras tecnologías. Supongamos que la carpeta donde reside nuestra Web es /var/www. Dentro de esta carpeta podemos colocar directamente ficheros ADP, TCL o HTML. Para que los ficheros TCL sean procesados directamente, es necesario editar el fichero de configuración del AOLserver, que en el caso de Debian se encuentra en /etc/aolserver4/ aolserver4.tcl. Dentro de la sección ns_section “ns/server/${servername}” agregamos la línea: ns_param enabletclpages On;
Si no hacemos esto las páginas con extensión TCL se verán como texto llano en el navegador sin ser procesadas. En los listados 1 y 2 vemos algunos de los ficheros ADP que contendrán la mayor parte de nuestro código HTML.
50
Número 15
01 <HTML> 02 <HEAD> 03 <TITLE> 04 Ejemplo Base de Datos 05 </TITLE> 06 </HEAD> 07 <BODY> 08 <FORM ACTION="fichero2.adp" METHOD="GET"> 09 <INPUT....> 10 11 <!-- Aquí podemos incluir 12 todo el código HTML que 13 necesitemos. La acción 14 del formulario es pasar 15 estos datos a un fichero 16 ADP que ejecutará una 17 función guardada en la 18 librería TCL del 19 AOLserver -->
Listado 2: fichero2.adp 01 <HTML> 02 <HEAD 03 <TITLE> 04 05 </TITLE> 06 </HEAD> 07 <BODY> 08 09 <% 10 ns_puts [inicializar] 11 %> 12 13 <!-- Aquí seguimos colocando el 14 resto del código que 15 necesitemos. Es importante 16 notar que el código ADP 17 se debe incluir entre los 18 marcadores <% ... %> -->
Como podemos ver en este fragmento de código ADP se hace una llamada a la función inicializar que efectúa una comprobación sobre la base de datos. La
WWW.LINUX- MAGAZINE.ES
Listado 3: fichero3.tcl 01 proc inicializar {} { 02 set db [ns_db [ns_config [ns_dbconfigpath]]] 03 04 #De esta forma conectamos con la base de datos: 05 #ns_db necesita que se le pase el handler para conectar 06 #con la base de datos. 07 #ns_config necesita como parámetro la ruta hacia el 08 #fichero de configuración de AOLserver 09 #ns_configpath devuelve esa ruta 10 } 11 12 #Aquí colocaríamos otras funciones que pudiéramos necesitar
función inicializar ha sido definda por nosotros, pudiendo ser accesible desde cualquier otro fichero ADP que la pudiera necesitar. El código de esta función no está en el fichero ADP y puede haber sido desarrollado por otra persona. El diseñador sólo se ocupa de llamar a esta función si lo considera oportuno. Pero ¿dónde está definida esta función? En este punto tenemos que hacer una distinción. Podemos tener el código en ficheros TCL bajo la misma carpeta que los ficheros ADP, o podemos tenerlos como librerías que se cargan cada vez que se arranca el servidor. En nuestro ejemplo usaremos el segundo caso que suele ser el menos documentado, pero también el de ejecución más rápida. La función inicializar que hemos usado en nuestro fichero ADP se encuentra en un fichero llamado funciones.tcl definido por nosotros y que reside en la carpeta (En Debian) /usr/ lib/aolserver4/modules/tcl/ . Cuando arrancamos el servidor el contenido de estos ficheros se mapea internamente y
Listado 4: fichero4.sql 01 CREATE TABLE musica ( 02 estilo varchar(50), 03 autor varchar(100), 04 formato varchar(4) 05 );
AOLServer II • DESARROLLO
sus funciones son accesibles por otras aplicaciones. AOLserver carga primero el fichero init.tcl , luego cargará los demás en orden alfabético. Parte del código del fichero funciones.tcl lo podemos ver en el listado 4. Es importante notar en este código que el lenguaje utilizado es TCL, pero debemos usar el API que trae el AOLserver. Las funciones definidas en este API empiezan siempre por ns_… dado que originalmente el AOLserver se llamaba NavyServer y las siglas NS se conservaron por motivos de compatibilidad con código antiguo. Por último nos queda crear el fichero SQL que contendrá la estructura que la función inicializar creará en la base de datos. En estos ejemplos se utiliza PostgreSQL, pero AOLserver es compatible también con Oracle. Ver listado 4. La carga del fichero .sql la podemos hacer ya sea desde una función en el fichero funciones.tcl, o desde código ADP. De esta forma tenemos el diseño de la Web con todo lo que esto implica (tablas, imágenes, disposición de los objetos, etc) independientemente del código, que puede bien residir como librerías del AOLserver o bien ser un fichero TCL llamado por el ADP. Por otra parte la estructura de la base de datos puede residir en el mismo ADP, en el TCL o en un fichero SQL separado. ¿Es un poco confuso? ¿Qué hago, uso ADP llamando a TCL y desde éste un fichero SQL? ¡Tranquilidad! Lo importante es hacer notar que en realidad podemos hacer cualquier combinación posible, y aquí es donde reside la principal ventaja. Por más extraño que pueda ser vuestro método de trabajo o por más inusuales que puedan ser las condiciones de vuestro equipo de desarrollo, casi siempre se podrá adoptar un modelo que satisfaga nuestras necesidades.
Pero no termina aquí. Hay algo más que puede hacer AOLserver y que no lo hubiéramos imaginado.
Mapeo de rutas AOLserver nos permite asociar una ruta a una función. ¿Suena raro? Por ejemplo, tengo una función que consulta la base de datos para proporcionarme información sobre una tabla y me gustaría ejecutarla sólo cuando en el navegador accedamos a la ruta http:// nuestro.domino/ejemplos/describetabla. En este caso, se acceda a esta ruta por un link externo o escribiéndolo en nuestro navegador, habrá una función llamada describetabla que se ejecutará. Esta ruta no tiene nada que ver con la ruta en nuestra carpeta /www/var/. Podríamos pensar al ver esta dirección que existe una carpeta llamada describetabla, pero en realidad AOLserver crea un mapa de rutas a la hora de arrancar y asigna a cada una la función en TCL que hayamos definido. Para poder implementar una función de este tipo debemos crear un fichero TCL en la carpeta de módulos, /usr/lib/ aolserver4/modules/tcl/ que contenga las funciones y el código qe necesitemos, pero una de estas funciones será la que coincidirá en nombre con la ruta y será la función que se ejecutará primero respecto a las demás. Ver listado 5. Como podemos ver en el listado 5, la primera línea define qué ruta se asociará a una función determinada. En nuestro caso la ruta ../ejemplos/describetabla ejecutará el fragmento de código de la función describetabla que mostrará una descripción por columnas del contenido de una tabla en la base de datos. Si deseáramos ejecutar el mismo código en otra ruta, sólo deberíamos cambiar el encabezado: ns_register_proc GETU /ejemplos2/describetablaU funcion1
Figura 2: Mensaje en inglés usando la ruta ../ejemplos/en.
WWW.LINUX- MAGAZINE.ES
Listado 5: fichero5.tcl 01 ns_register_proc GET /ejemplos/describetabla describetabla 02 03 proc describetabla {conn ignore} { 04 if {[ns_conn urlc $conn] != 4} { 05 return [ns_returnbadrequest $conn \ 06 "Falta la tabla "] 07 } 08 set pool [lindex [ns_conn urlv $conn] 2] 09 if {[lsearch $pool [ns_db pools]] == -1} { 10 return [ns_returnbadrequest $conn \ 11 "El Pool $pool no existe"] 12 } 13 set db [ns_db gethandle $pool] 14 set table [lindex [ns_conn urlv $conn] 3] 15 set tinfo [ns_table info $db $table] 16 if {$tinfo == ""} { 17 return [ns_returnbadrequest $conn \ 18 "La tabla $table no existe"] 19 } 20 set output "<dl>" 21 set size [ns_column count $tinfo] 22 for {set i 0} {$i < $size} {incr i} { 23 append output "<dt>[ns_column name $tinfo $i] \ 24 <dd>[ns_column typebyindex $tinfo $i]</dd>" 25 } 26 append output "</dl><hr>" 27 ns_returnnotice $conn 200 "Tabla $table en pool $pool" $output 28 }
En este caso para ejecutar la función describetabla deberíamos escribir en el navegador http://nuestro.dominio/ ejemplos2/describetabla. Ha quedado claro que la existencia de una carpeta que corresponda a la ruta anterior no tiene importancia. AOLserver realmente no está buscando nada en una carpeta.
Número 15
51
DESARROLLO • AOLServer II
fichero de configuración /etc/aolserver4/ aolserver4.tcl. La sección que debemos editar es:
Figura 3: Mensaje en inglés usando la ruta ../ejemplos/es.
ns_section "ns/server/U ${servername}/tcl" ns_param autocloseU true ; ns_param debugU false ; ns_param nsvbucketsU 8 ; ns_param statlevelßs 0 ; ns_param statmaxbufU 100 ; ns_param libraryU $homedir/servers/U ${servername}/modules/tcl ;
Aquí vemos que el parámetro ns_param library contiene la ruta en la que encontrar las librerías. Cada nuevo fichero TCL que incluyamos en esta carpeta será mapeado en la ejecución de AOLserver.
Conclusión Figura 4: AOLserver permite ejecutar cada servidor como un hilo separado con configuraciones independientes.
Sólo llama a una función que tiene mapeada respecto a una ruta, y esto tiene preferencia incluso si tuviéramos una carpeta en la misma ruta que la función. Es importante notar que el código HTML debe de ser explícitamente indicado dado que no estamos trabajando
Listado 6: fichero6.tcl 01 ns_register_proc GET /ejemplos/es holamundo 02 ns_register_proc GET /ejemplos/en helloworld 03 04 proc holamundo {conn context} { 05 ns_return $conn 200 text/plain "Hola Mundo" 06 } 07 08 proc helloworld {conn context} { 09 ns_return $conn 200 text/plain "Hello World" 10 }
52
Número 15
con ADP sino con TCL, y por lo tanto es código asimilable sólo por AOLserver, que se encargará de devolver el texto que aparecerá en pantalla. Incluso podemos mapear varias rutas en un mismo fichero. Ver Listado 6. En este ejemplo vemos cómo definimos dos funciones, mapeadas respecto a rutas, en un mismo fichero. Si accedemos a la ruta ../ejemplos/es se nos mostrará el mensaje en español. Si accedemos a ../ejemplos/en se nos mostrará el mismo mensaje en inglés.
AOLserver nos permite mucha flexibilidad a la hora de implementar el diseño Web. Podemos implementar el desarrollo de forma simple y tradicional, trabajando sólo con HTML o bien fraccionar el desarrollo de la forma que más nos convenga. Éste es el punto más importante a tener en cuenta, dado que no sólo proporciona al desarrollador Web la libertad de fraccionar y modularizar su código como considere oportuno, sino que también proporciona al analista la posibilidad de dividir el desarrollo de un portal Web en cuantos recursos sea necesario manteniendo a cada uno independiente del desarrollo ■ de sus compañeros.
Varios servidores Por último queda indicar que AOLserver permite mantener varios servidores independientes como se muestra en la figura 2. Estos servidores son útiles en una configuración donde queramos tener más de un dominio asociado a una misma IP, como es el caso de los VirtualHost de Apache. Cada uno de estos servidores puede tener librerías comunes donde guardar el código TCL o librerías separadas. La ruta donde guardar este código se define en el
WWW.LINUX- MAGAZINE.ES
RECURSOS [1] Página principal de AOLserver: http:// www.aolserver.com [2] Documentación extensa (wiki): http:// panoptic.com/wiki/aolserver/ AOLserver_Wiki [3] Documentación TCL: http://www. aolserver.com/docs/devel/tcl/ [4] Documentación ADP: http:// jamesthornton.com/aolserver/devel/ tcl/adp-overview.html
Python • DESARROLLO
La serpiente que se muerde la cola.
META-PYTHON Con la llegada de Ruby On Rails los programadores están redescubriendo un concepto no demasiado moderno, pero sorprendente… ¿programas que modifican programas?. POR JOSÉ Mª RUIZ
L
os lenguajes dinámicos (donde el tipo de variable se define en tiempo de ejecución) siempre han sido degradados a lenguajes de segunda clase. Esto se debe a que se suelen emplear para resolver problemas rápidamente de manera «sucia», ya que siempre se podrá programar en algo «serio» como C, C++ o Java. Pero esto no es del todo cierto. Los lenguajes dinámicos poseen ciertas ventajas sobre los estáticos, ventajas que los estáticos están constantemente intentando imitar.
¿Meta… qué? Una de estas ventajas es la metaprogramación. Es una palabra extraña, así que es conveniente comenzar explicando un poco su significado. Meta podríamos traducirlo como «a nivel superior». Un metalenguaje es un lenguaje para hablar de un lenguaje. El metalenguaje está a un nivel superior respecto al lenguaje que describe. Si digo «la palabra coche es un sustantivo» estoy empleando el castellano para hablar del castellano y en «la palabra car es un sustantivo» empleo el castellano para hablar del inglés. Por tanto el castellano es el metalenguaje en ambos casos. La metaprogramación consiste en programas que pueden modificarse a sí mismos o a otros programas. Dicho de esta manera puede resultar lioso y complicado. Pero imaginemos por un momento que fuese posible
cambiar elementos del programa en tiempo real, no datos, sino el programa en sí. Podemos imaginarnos un objeto que no «hable» cierto protocolo (por protocolo nos referimos a un conjunto de métodos que permiten interactuar con el objeto, por ejemplo para guardarlo en disco duro). En determinado momento surge la necesidad de que ese objeto «hable» ese protocolo, pero el diseñador del programa no tuvo en cuenta esa circunstancia, así que puede resolverlo envolviendo el objeto dentro de otro objeto o heredarlo de una superclase que sí responda a ese protocolo. Ahora bien, si esta circunstancia se repite con muchos protocolos, entonces la jerarquía de herencia de las clases comienza a complicarse innecesariamente con código repetido en muchas ramas. C++ intenta acercarse a una solución mediante el uso de los Templates. Java por su parte provee al programador de la reflexión (los objetos pueden hacer preguntas a otros objetos) y, desde Java 1.5, las clases genéricas, algo así como los Templates de C++. En la denominada jerarquía o extensión horizontal no heredamos sino que hacemos uso de herramientas que están a los lados, no «arriba» como las superclases. Por tanto este tipo de extensiones no requieren aumentar la jerarquía de objetos con nuevas clases. Aún así existe otra posibilidad… ¿y si pudiésemos añadir métodos en caliente a nuestros objetos? De esa manera cuando un objeto necesite hablar cierto protocolo simplemente se añade a sí mismo los métodos necesarios, digamos que puede DECORARSE como los árboles de Navidad, donde vamos colgando bolas y adornos a nuestro antojo.
WWW.LINUX- MAGAZINE.ES
Conceptos básicos En los míticos laboratorios de Palo Alto de Xerox, Gregor Kiczales y otros desarrollaron a mediados de los 90 el concepto MOP, Meta Object Protocol. La idea es la de definir toda la maquinaria necesaria para trabajar en objetos en dos niveles. En el primero, el Metanivel, se usan las primitivas del lenguaje para crear objetos. En el segundo se usa esa maquinaria (crear clases, instancias, métodos…) para ¡volver a definirlo todo de nuevo!. ¿Cuál es el objetivo? Si una clase está definida usando clases entonces podré modificarla, puesto que no es más que una estructura de datos que está «viva» durante la ejecución del programa. Esto permite cosas muy interesantes. Ver Figura 1.
Listado 1 01 02 03 04 05 06 07 08 09 10 11 12
>>> >>> ... ... >>> ... ... >>> >>> >>> 1 >>>
class Clase1: def __init__(self,valor): self.valor = valor def imprime(self): print self.valor objeto = Clase1("1") objeto.imprime = imprime objeto.imprime(objeto)
¿Qué ha pasado aquí? Hemos definido una clase y una función, hemos creado una instancia de la clase y hemos añadido la función a la ¡instancia de la clase!. ¿Que ocurre si creamos un segundo objeto? >>> objeto2 = Clase1("2") >>> objeto2.imprime(objeto2) Traceback (most recent callU
Número 15
53
DESARROLLO • Python
last): File "<stdin>", line 1, in ? AttributeError: Clase1 instanceU has no attribute 'imprime' >>>
¡objeto2 no tiene imprime! Luego la modificación a objeto sólo le afectaba a él mismo y no al resto de instancias de Clase1. ¿Y cómo es posible asignar cosas a una instancia? Pues porque Python representa las instancias como diccionarios, las asignaciones: objeto.imprime = imprime objeto['imprime'] = imprime
son equivalentes. Además, las funciones se comportan en Python de igual forma que los datos, se pueden asignar a variables y pasar como parámetros. Podemos modificar el comportamiento de las instancias, pero ¿qué ocurre con las clases? >>> Clase1.imprime = imprime >>> objeto3 = Clase1("Hola") >>> objeto3.imprime() Hola >>>
Pues también se pueden modificar en caliente. No sólo eso, sino que a partir de ese momento cualquier instancia tendrá acceso a esas modificaciones. ¿Qué ocurre si hemos declarado la instancia antes de la modificación y añadimos una función a la clase después? (ver
Listado 2 01 >>> class Clase2: 02 ... def __init__(self,valor): 03 ... self.valor = valor 04 ... 05 >>> objeto4 = Clase2("Hola")>>> def imprime(self): 06 ... print self.valor 07 ... 08 >>> Clase2.imprime = imprime 09 >>> objeto4.imprime() 10 Hola 11 >>>
Figura 2) La modificación de la clase afecta a todas sus instancias, pasadas o futuras.
54
Número 15
Todas estas características nos abren un amplio abanico de posibilidades. Podemos modificar jerarquías de objetos en tiempo de ejecución para que puedan adaptarse a nuevos protocolos. No vamos a prestar demasiada atención a las metaclases en sí, en un próximo artículo las veremos, sino a un patrón de diseño que nos permitirá añadir funcionalidad de manera controlada, hablamos del patrón Decorator.
Entorno de una función Para las sucesivas secciones es importante entender cómo funcionan el paso de parámetros en Python. En Python los parámetros de una función son en realidad una lista. De hecho Python recoge los parámetros y genera una lista con ellos. Esto se indica en la cabecera de la función mediante un * delante del nombre de la lista que guarda los parámetros. Una función acepta como segundo parámetro un diccionario, indicado mediante la aparición de ** para los argumentos con nombre. De esta manera cualquier función en realidad acepta los parámetros: funcion(*args, **kwdargs)
Se suelen usar los nombres «*args» y « kwdargs» para nombrarlos. Es importante saber esto para poder crear funciones sin saber qué parámetros aceptarán, puesto que al final todas las funciones aceptan esos dos parámetros en realidad.
Decorator ¿Qué es un Decorator? Pues es un patrón de diseño del famoso libro Design Patterns. Se ganó su fama debido a que dio nombre a numerosas técnicas ya establecidas. Las reunió y creó el concepto de patrón de diseño: un conjunto de objetos y comportamientos definidos que surgen con cierta facilidad en el desarrollo de cualquier sistema medianamente complejo. En el mundo de la programación orientada a objetos son famosos muchos de estos patrones de diseño, el Observer o el Proxy son ejemplos de ello. El patrón Decorator es menos conocido porque realiza la tarea algo complicada de entender, y por tanto no todo el mundo se atreve a trabajar con él. Decorator modifica funciones. Digamos que recorre nuestro código e inserta comportamiento adicional en él.
WWW.LINUX- MAGAZINE.ES
Su nombre viene de que podemos verlo como un algoritmo que en el árbol de código va añadiendo nuevo código de manera automática. Es algo parecido a lo que ocurre cuando en una página web vemos siempre el mismo menú en la misma posición a pesar de que cambiemos de una sección a otra. El «decorado» envuelve el contenido de la página. El mundo de Python ha vivido una especie de guerra entre distintos grupos de sus desarrolladores por hallar la mejor sintaxis para este patrón. La comunidad Python es casi obsesiva respecto a su sintaxis, quieren que sea clara y concisa. Al final se impuso la siguiente sintaxis: @decorator def funcion(): loquesea
@decorator es el nombre del Decorator que vamos a emplear. Tiene que llevar siempre delante una arroba y debe estar seguido de la función a decorar. Visto así no parece muy útil, pero imaginemos una función, digamos VisitaWeb, a la que añadimos el siguiente Decorator: @guardar_log def VisitaWeb(): ...
Guardaría en un log la información de cada visita, con cada ejecución de VisitaWeb(), y esto sin tener que añadir nada nuevo a VisitaWeb y pudiendo emplear en otros lugares @guardar_log. Por ejemplo en CompraEfectuada() o VisitaPeligrosa(). Podemos añadir funcionalidad a código ya existente sin modificar nada, simplemente acompañando el código de una línea que indique qué Decorator aplicar. Pero no acaba ahí la cosa, podemos anidar Decorators: @comprueba_acceso @guardar_log def VisitaWeb(): ...
Ahora bien, ¿qué clase de magia negra o vudú se esconde detrás de algo tan útil? ¿por qué no nos lo enseñan en el segundo párrafo de cualquier tutorial de Python? Pues porque hasta hace poco era extremadamente complejo añadir
Python • DESARROLLO
Decorators en Python, y a pesar de las mejoras sigue siendo un proceso complejo.
Crear un Decorator Un Decorator es una función que acepta como parámetro una función y devuelve como resultado una función. Un poco lioso ¿no? Desde luego que lo es, así que comencemos con un ejemplo sencillo. Queremos una Decorator que escriba por pantalla el nombre de la función sobre la que se aplique cada vez que ésta se ejecute. Un Decorator no deja de ser una función Python como cualquier otra, veamos su definición y resultado en la Figura 3. escribeNombre acepta una función y
Listado 3: Decorator escribeNombre 01 def escribeNombre (f): 02 def decorator (*args, **kwds): 03 print "==> Ejecutando ", f.func_name 04 f(*args, **kwds) 05 06 return decorator 07 08 @escribeNombre 09 def funcion(): 10 print "Hola soy la función" 11 12 @escribeNombre 13 def suma(a,b): 14 print "Resultado: ", a+b
crea otra que hemos dado en llamar decorator. El nombre de esta última función no importa porque se perderá, así que podemos usar siempre el mismo nombre para distinguirla. El objetivo de esta función es ser devuelta y asignada en lugar de la función original. La función interna decorator añade el código u operaciones que sean necesarias y ejecuta en algún momento (o no, depende de lo que queramos) la función original. Como podemos observar en la ejecución de la Figura 4, ahora, cada vez que se ejecute funcion o suma se imprime un mensaje en pantalla. Si queremos eliminar ese comportamiento sólo tenemos que quitar @escribeNombre de la definición de la función en cuestión.
Listado 4: Ejemplo de Decorator 01 02 03 04 05 06 07
>>> suma(1,2) ==> Ejecutando suma Resultado: 3 >>> funcion() ==> Ejecutando funcion Hola soy la función >>>
Programación avanzada Ahora vamos a ver una de las construcciones más potentes que puede tener un lenguaje de programación. Es anterior a los Objetos y aún así, a veces es mucho más simple y potente. De hecho ya hemos hecho uso de ella. Como diría un periodista: ¿dónde?, ¿cuándo?, ¿por qué? y ¿quién? Fijémonos de nuevo en la Figura 3. ¿Hay algo raro ahí? No es fácil darse cuenta, ¡y eso que son 5 líneas de código! La gran pregunta es… ¿qué ocurre con la f en decorator? ¿Nada? Repasemos lo que sabemos de las variables. A pesar del hecho de que una función pueda ir en una variable extrañe a algún lector, es algo que los programadores de C y C++ acostumbran a hacer mediante el uso de punteros a funciones. f es una variable que referencia a una función. Visto así no es nada especial, lo raro es que f es el parámetro que recibe escribeNombre, se crea la función decorator y salimos. Pero existen varias decorator anónimas, al menos una por suma y otra por funcion. En ese momento f en otros lenguajes de programación no apuntaría a nada, estaría en el limbo de las variables. Veamos un ejemplo para entenderlo. En la Figura 5 definimos un decorator al que hemos llamado de manera extremadamente original: cierre. cierre genera una función que hace uso del parámetro que le pasamos, el parámetro valor. Cuando la función hace uso de
Listado 5: Función cierre 01 def cierre (valor): 02 03 def incrementa (cantidad): 04 return cantidad + valor 05 06 return incrementa
WWW.LINUX- MAGAZINE.ES
valor ¡captura su contenido!. A partir de ese momento esa función hará uso del contenido que poseyera valor durante su definición. ¿Es raro? La verdad que en un primer momento si, a no ser que el lector tenga conocimientos de Lisp o Scheme ;). No en vano Peter Norvig, ver Referencia [1], dice que Python es Lisp con otra sintaxis. Pero cuidado, no creamos que lo que ocurre es que valor se convierte en una constante. No, sino que se CIERRA un entorno alrededor de cierre. Es como si junto a cierre fuese una variable llamada valor a la que cierre puede hacer referencia como si fuese global, pero ¡sólo para él mismo!.
Listado 6: Prueba de «cierre» 01 02 03 04 05 06 07
>>> >>> >>> 4 >>> 9 >>>
a = cierre(3) b = cierre(8) a(1) b(1)
En la Figura 6 podemos ver un ejemplo de interacción con cierre.Es importante tomar buena nota de los cierres, puesto que nos permiten generar funciones que guardan valores. Y esto es vital para los Decorators.
Dos Decorators mejor que uno Para finalizar vamos a hacer algo útil con esta técnica. Generalmente se habla de los Decorators en términos de servicios que nos gustaría añadir al código. Los más típicos son crear registros de uso, de seguridad, sistemas de cacheo o persistencia. También se hace mucho hincapié en los multimétodos. Estos últimos consisten en algo parecido a la sobrecarga de C++ o Java, esto es, poder definir muchas funciones y que se ejecuten en base a los tipos o cantidad de parámetros, pero que todas tengan el mismo nombre. Un ejemplo podría ser la función suma(a,b). No es lo mismo sumar enteros que flotantes, quebrados o números complejos. En realidad cada tipo de número requiere su propia suma. Nosotros vamos a crear dos servicios de ejemplo. Uno será para facilitar el debug-
Número 15
55
DESARROLLO • Python
01 def debug(f): 02 03
nombre = f.func_name
04 05
def envoltura(*args, **kwargs):
06
resultado = f(*args, **kwargs)
07
print "Llamando a", nombre," con ", args, kwargs, " y devuelve ", repr(resultado)
08
return resultado
09 10
return envoltura
11 12 def cachea(f): 13 14
# Cierre
15
cache = {}
16
def envoltura(*args, **kwargs):
17
llave_1 = hash(args)
18
llave_2 = hash(tuple(kwargs.iteritems()))
19
try:
20
resultado = cache[llave_1,llave_2]
21
print "****CACHE****"
22
except KeyError:
23 24 cache[llave_1,llave_2] = f(*args,**kwargs) 25
resultado = cache[llave_1,llave_2]
26 27
return resultado
28 29
return envoltura
30 31 class Calculadora: 32
def __init__ (self, valor):
33
self.valor = valor
34 35
def getValor (self):
36
return self.valor
37 38
@debug
39
@cachea
40
def suma(self, valor):
41
resultado = self.valor + valor
42
56
return resultado
Número 15
ging de un programa, el otro será un cacheador de valores. El cacheador hay que explicarlo un poco. Imaginemos una situación donde necesitamos calcular un valor muy complejo una y otra vez, pero que el cálculo sea siempre el mismo y devuelva siempre el mismo valor para los parámetros dados. O, mirando a la Web, imaginemos que generamos la misma página y que sólo la actualizamos cada cierto tiempo. Hacer algo así requiere mucha maquinaria, tenemos que capturar la petición, determinar si los parámetros para el cálculo o página web han variado o se da cierta circunstancia (¿han pasado 5 minutos desde la última vez que se ha invocado a la función?) y entonces devolver el valor o calcularlo de nuevo. Necesitamos al menos un objeto y lo que es peor: cada función que requiera de esta propiedad deberá implementarla de nuevo o heredar de un objeto que la implemente. Pero en Python no tenemos herencia múltiple, así que acabaremos con dos versiones de cada objeto: Pagina y CacheaPagina, Cálculo y CacheaCálculo. Los Decorators solucionan este problema de una forma genérica y muy elegante. Fijémonos en la Figura 7. Se definen dos Decorators: cachea y debug. debug es simple, se parece mucho al último ejemplo, simplemente imprime información de la función (su nombre, parámetros y resultado) con cada ejecución de la misma. cachea realiza más trabajo. La clave es la variable cache que es un diccionario donde almacenamos los parámetros que se pasan a la función en cuestión. cache está dentro del cierre que creamos con el Decorator. Cuando recibimos los parámetros intentamos hallar el valor de la función en el diccionario cache. Si no aparecen, entonces tenemos que calcularlos y almacenarlos cache usando los parámetros como llave. Pero si aparecen, simplemente devolvemos el valor asociado. De esta manera podemos cachear resultados. La mayor complicación, aparte de todo lo que hemos estado hablando en este capítulo, se debe a que los diccionarios no pueden ser usados para generar un hash,
WWW.LINUX- MAGAZINE.ES
y kwargs es un diccionario. Si un objeto no se puede reducir a un hash, entonces no puede ser usado como llave en un diccionario. Por eso hemos de generar una tupla a partir de kwargs, y a partir de ella generar un hash. Por seguir esa dinámica hacemos lo mismo con args, aunque no sería necesario. Cuando se intenta acceder a un valor en un diccionario, y ese valor no existe, el diccionario arroja una excepción KeyError (error en la llave pasada). Así que intentamos el acceso dentro de una estructura try y capturamos esa excepción, que nos indicará cuándo tenemos que calcular el valor. Como ejemplo, en la clase Calculadora hacemos uso de los dos Decorators, de manera que no sólo cacheamos, sino que además mostramos información de debug para la función sobre la que los apliquemos.
Decorando proyectos El concepto de los Decorators es parecido al de la ahora famosa Aspect Oriented Programming (AOP). Conforme avanzan los años, los estudiosos se van dando cuenta de que la Programación Orientada a Objetos no es la mejor solución a todos los problemas y puede llegar a resultar engorrosa. Los Decorators no son más que otro de los mecanismos de extensión horizontal que están comenzando a hacerse hueco en la caja de herramientas de los mejores diseñadores. Y por eso Python los ha incorporado ;)■
RECURSOS [1] http://www.norvig.com
EL AUTOR
Listado 7: Decorators «debug» y «cachea»
José María Ruiz actualmente está realizando el Proyecto Fin de Carrera de Ingeniería Técnica en Informática de Sistemas. Lleva 8 años usando y desarrollando software libre y, desde hace dos, se está especializando en FreeBSD.
La Columna de Charly • ADMINISTRACIÓN
El Día a Día del Administrador de Sistemas: Mod_evasive
MANIOBRAS EVASIVAS El servidor web Apache puede luchar contra los ataques DoS. Sólo necesita la pequeña ayuda de Mod_evasive. POR CHARLY KÜHNAST
T
odo administrador conoce y odia los ataques de Denegación-de-Servicios. No importa si el causante es un simple estúpido, un mal intencionado o un enfermo. Lo realmente importante es que una oleada impresionante de peticiones dirigidas al servidor provoca que se cuelgue, haciendo subir la adrenalina del administrador hasta el límite. Los servidores Web son los más atacados. AEMM proporciona a Apache un mecanismo de autodefensa. El paquete denominado “Apache Evasive Maneuvers Module” tiene un nombre demasiado largo, por lo que la mayoría de los administradores simplemente se refieren a él como Mod_evasive [1], aunque es el nombre del módulo AEMM de Apache. El Mod_evasive utiliza una lista negra. El módulo comprueba las peticiones entrantes contra una lista para encontrar si varias peticiones del mismo tipo han sido recibidas desde la misma IP en los últimos segundos. El valor umbral es configurable. A la vez, el Mod_evasive comprueba si el solicitante ha llamado a más de 50 objetos en los últimos segundos.
SYSADMIN Logrotate…......................................58
Logrotate es una herramienta útil para manejar los ficheros de registros. Métodos Nmap……........................60
Mostraremos algunas técnicas para encontrar agujeros de seguridad en su red con Nmap. Trickle...............…….........................67
Controla el tráfico en tu red
Si se cumple alguna de estas condiciones, Apache envía un 403 en vez de la respuesta esperada, lo que ahorra bastante ancho de banda. A la vez, Mod_evasive también puede escribir una entrada en Syslog o enviar un mensaje de correo. Desde el punto de vista del atacante, esto significa que cualquier petición recibida en los próximos 10 segundos desde su IP provocará un 403. Y este período se extiende si el atacante persiste.
Aplicaciones Prácticas Ejecuto Apache 2.0 en mi máquina de pruebas, pero el léeme del paquete también trae instrucciones para Apache 1.3 e iPlanet. La mayoría de las versiones de Apache incluyen una aplicación de ayuda denominada Apxs (Apache Extension Tool) para ayudarle a añadir módulos. (Suse Linux oculta la herramienta en el paquete Apache-devel). Tecleando apxs -i -a -c mod_evasive20.c
Listado 1: Mod_evasive en httpd.conf 01 02 03 04 05 06 07 08
<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSEmailNotify admin@dos-victim.com 09 </IfModule>
WWW.LINUX-MAGAZINE.ES
se compila el módulo, cópielo en el directorio modules de Apache y añada una entrada en el httpd.conf (Listado 1). No se olvide de recargar Apache. DOSHashTableSize es el tamaño de la tabla hash con los URIs y el acceso a hosts. A pesar de los requerimientos de memoria, puede que desee incrementar este valor si su sistema es muy utilizado. DOSPageCount especifica cuantas veces un host puede llamar a una página en un DOSPageInterval sin provocar los mecanismos de protección. El mismo destino espera a los clientes que solicitan el mismo objeto mediante el mismo listener más de DOSSiteCount veces por DOSSiteInterval. La variable DOSBlockingPeriod especifica el período de bloqueo para el atacante. No necesita dar un valor alto aquí, ya que el contador comienza en cero con cada nuevo ataque. Mod_evasive tiene algunas limitaciones. Si los ataques DoS son tan intensos que consumen todo su ancho de banda a pesar de AEMM, o si el hardware del servidor no puede dar paso, el ataque tendrá éxito a pesar de todos sus esfuerzos. Pero no se desespere; puede usar la instrucción DOSSystemCommand para provocar una reacción y enviar señales ■ de humo usando IPchains.
RECURSOS [1] Mod_evasive: http://www. nuclearelephant.com/projects/ mod_evasive/
Número 15
57
ADMINISTRACIÓN • Logs
Trucos: Logrotate
ROTANDO LOS REGISTROS Cada sistema Linux produce gran cantidad de datos en los registros. Para impedir que el disco duro se llene existe una aplicación que ayuda a rotar los ficheros de registros y se deshace de los datos obsoletos. POR MARC ANDRÉ SELIG
T
ienes que ser un tipo de persona muy especial si disfrutas analizando los ficheros de registros. Pero debe admitirse que los ficheros de registros de /var/log proporcionan a los administradores el tipo de información que necesitan para descubrir el origen de los errores misteriosos del sistema. También proporcionan información si los servicios en el sistema están funcionando. Si tiene cualquier problema instalando un servicio o ejecutando un script, los registros pueden indicarle lo que va mal. Los administradores paranoicos (y deberían serlo todos) comprueban sus sistemas en busca de accesos no autorizados y bloquean cualquier traza que encuentran. Los registros de información también pueden usarse para controlar el comportamiento del equipo. Por ejemplo, un servidor SMTP podría ver una dirección IP como autorizada para enviar correo si el
fichero de registro tiene una entrada de login correcta para el buzón. O un cortafuegos podría desplegar un filtro de paquetes para bloquear automáticamente una dirección IP siguiendo un ataque obvio. Si no se leen los ficheros de registros, aún se les puede echar un vistazo. Éstos consumen más y más espacio en el disco duro o en la partición /var. El consumo gradual de espacio de disco, tarde o temprano hará que el equipo caiga. El manejo de los ficheros de registro (evaluación, archivado, eliminación) es una tarea administrativa tradicional. Pero ahora que Linux ha empezado a conquistar los escritorios, es absurdo esperar que los usuarios manejen la administración de los archivos de registro. Hace años que se presentaron algunas herramientas totalmente automatizadas para ayudar con la tarea de manejar los ficheros de registros.
Listado 1: Fichero Ejemplo de logrotate.conf
Un sistema Linux no borra los ficheros de registros, los rota. Primero renombra un fichero como XXX.log a XXX.log.0 (o algo parecido). Este paso es importante, ya que el programa de limpieza automático no tiene forma de conocer si el proceso está actualmente accediendo al fichero de registro. Si un proceso tiene abierto el fichero de registro, posee un manejador de ficheros exactamente para ese fichero, y escribirá al archivo independientemente de si otro proceso lo ha renombrado o lo ha suprimido. Tras renombrar el fichero, el protocolo de limpieza necesita volver a crear los ficheros de registros nuevos (en blanco) e indicarle al proceso correspondiente que el
01 02 03 04 05 06 07 08 09 10 11 12 13 14
58
weekly rotate 4 create compress delaycompress /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } include /etc/logrotate.d
Número 15
¡No Borre, Rote!
WWW.LINUX-MAGAZINE.ES
fichero de registro se ha cambiado. El proceso de escritura necesita cerrar cualquier fichero de registro que se esté usando y reabrir estos ficheros, así se reciben las versiones actualizadas (en blanco) que pueden actualizarlos. Cuando la herramienta de gestión del fichero de registro central necesita encontrar qué procesos escribir en qué ficheros de registro. El hecho de que muchos servicios utilicen syslog hace que esto sea más fácil de manejar, pero aún hay paquetes (como Apache) que insisten en utilizar sus propios ficheros de registro por rendimiento u otras razones.
Configuración Modular Para establecer este mecanismo en un sistema Linux libremente configurable y extensible, muchos desarrolladores utilizan el paquete Logrotate. Éste utiliza una configuración modular como muchos otros
Listado 2: /etc/logrotate.d/ apache2 01 02 03 04 05 06 07 08 09 10 11 12
/var/log/apache2/*.log { missingok rotate 52 notifempty create 640 root adm sharedscripts postrotate if [ -f /var/run/apache2.pid ]; then /etc/init.d/apache2 restart >/dev/null fi endscript }
Logs • ADMINISTRACIÓN
paquetes centralizados. Las variables del núcleo se establecen mediante un fichero de configuración central. El fichero realiza una anotación de la frecuencia en la que Logrotate debe rotar el fichero de registro, qué tamaño deben tener los registros antiguos, si se comprimen estos ficheros y así continuamente. El fichero de configuración central se llama /etc/logrotate.conf. Además, cada paquete software puede añadir una entrada al fichero de configuración de Logrotate durante la instalación. Por supuesto, no se debería escribir en el fichero de configuración central. Esto podría conducir a inconsistencias; en vez de esto, Logrotate utiliza un directorio de configuración denominado /etc/logrotate.d. Los paquetes pueden almacenar sus propios mini ficheros de configuración Logrotate bajo su nombre de paquete. Estos ficheros indican lo que hay hacer con el fichero de registro rotado. La entrada de configuración para un servidor proxy puede ser, por ejemplo, /etc/logrotate.d/ squid.
Un Ejemplo El Listado 1 proporciona un ejemplo de un /etc/logrotate.conf mínimo. Basándose en esta configuración, Logrotate rotaría los ficheros de registros semanalmente y proporcionaría un total de cuatro versiones previas. Tras cada rotación, la herramienta creará un nuevo fichero de registro y comprimirá las versiones previas semanales. El Listado 1 especifica el fichero de registro de Logrotate a manejar, /var/log/ wtmp. La aplicación tan sólo crea este fichero una vez al mes, manejando los permisos para el fichero de root y el grupo utmp. La palabra reservada rotate 1 en la línea 11 le indica a Logrotate que guarde tan sólo la versión anterior. logrotate.conf no especifica como manejar los otros ficheros; en cambio estos se manejan por trocitos de configuración del /etc/logrotate.d, que tienen la directiva habilitada en la línea 14. Ignora cualquier fichero creado mediante editores, ficheros de versiones de sistemas de control, trozos dejados por gestores de paquetes (por ejemplo, *.rpmsave o *.dpkg-old) y ficheros con extensión .disabled.
Tratamiento Especial para Apache Los ficheros /etc/logrotate.d incluyen el fichero apache2, con un ejemplo para Apache (Listado 2) que contiene opciones especiales para rotar los registros de Apache. Este listado comienza con la ruta a
los ficheros de registro. Apache viene configurado para guardar los ficheros de registro bajo /var/log/apache2. La configuración por defecto del Listado 1, se aplica a todos los ficheros en /var/log/ apache2; primero: Logrotate rota los ficheros semanalmente, comprime los ficheros de la semana y crea un fichero nuevo por cada fichero que rota. La línea 5 del Listado 2 asigna privilegios de acceso específicos a los registros nuevos y vacíos para impedir que los usuarios normales los visualicen. Una suposición que hace el ejemplo es que los registros del servidor web son más importantes para las operaciones del sistema y para la facturación. Se necesita que el sistema mantenga los registros de un año completo, creando 52 generaciones, a una tasa de una generación por semana. Si Apache falla al ejecutarse por alguna razón desconocida, lo que conduciría a un registro perdido, el programa no lo rotará como se estipula con la palabra reservada notifempty. El Listado 2 también contiene instrucciones sobre cómo hacer que Apache conozca el momento en el que se van a rotar los ficheros. El mensaje se envía después de cada evento, como se indica con la palabra reservada postrotate (la palabra reservada para un mensaje anterior a la rotación es prerotate). Dicha palabra va seguida de unas cuantas líneas del script, que se cierra con la palabra reservada endscript. Las líneas de la 8 a la 10 dicen: si Apache se está ejecutando (es decir, si el fichero PID existe) la correspondencia en el script Init se encargará de relanzarlo. La palabra reservada sharedscript de la línea 6 le indica a Logrotate que llame a este script de información una única vez, incluso cuando se rotan múltiples ficheros de registro. Ejecuta una rotación una vez que se ha completado para todos los ficheros de registro.
Sofisticado La configuración en los Listados 1 y 3 proporciona ejemplos de cómo configurar los servicios estándar en las distribuciones más comunes de Linux. Pero logrotate dispone de más trucos: el Listado 3 configura un filtro de paquetes, por ejemplo. Esta configuración supone que los registros del filtro de paquetes se almacenarán en ipfilterbulk.log. Los ficheros podrían ser enormes en un servidor típico y su tamaño impediría una evaluación manual. Un script (que no se muestra aquí por razones de espacio) analizará el fichero en busca de informa-
WWW.LINUX-MAGAZINE.ES
ción relevante y crítica, escribiéndola en el fichero ipfilter-high.log. El Listado 3 tiene que tratar estos dos ficheros de forma bastante diferente. Rota ipfilter-bulk.log si el fichero llega a un tamaño de 20 Mbytes, pero normalmente no más de una vez al día. Logrotate comprime los ficheros de registros antiguos usando bzip2. El siguiente paso es notificar al servicio de los cambios del fichero; para ello se usa la directiva postrotate en el script Init apropiado, como en el ejemplo anterior de Apache. ipfilter-high.log requiere un tipo de tratamiento diferente. Como podría contener información crítica en el tiempo, logrotate rota este fichero una vez cada día y, además, envía un correo al administrador. Le proporciona bastantes avisos y tiempo suficiente para hacerse cargo de los registros. logrotate normalmente atiende a los ficheros de registros más antiguos, pero la directiva mailfirst le indica que envíe el fichero actual tan pronto como termine la rotación. Los datos críticos simplemente no se descartan tras unas cuantas semanas, sino que se mantienen por razones forenses, en nuestro caso, 730 días, o dos años. Para impedir que los ficheros de registros antiguos se acumulen en el directorio /var/ log, logrotate los mueve a un directorio ■ separado en /var/log/ipfilter-old.d.
Listado 3: Dos Registros Distintos en un Filtrado de Paquetes 01 02 03 04 05 06 07 08
/var/log/ipfilter-bulk.log { size 20M rotate 10 compress compresscmd bzip2 compressext bz2 postrotate /etc/init.d/sysklogd reload >/dev/null 09 endscript 10 } 11 12 /var/log/ipfilter-high.log { 13 daily 14 rotate 730 15 olddir /var/log/ipfilter-old.d 16 nocompress 17 mail <I>ich<I>@<I>meine.domain.de<I > 18 mailfirst 19 }
Número 15
59
ADMINISTRACIÓN • Nmap
Comprendiendo las técnicas de análisis con Nmap
ESCANEANDO ¿Cómo puede el popular escáner Nmap identificar los agujeros de seguridad de la red? En este artículo se van a examinar varias técnicas de análisis con Nmap. POR CHRISTIAN NEY
E
l escaneado de redes es casi tan antiguo como las propias redes. Antes los hackers solían usar modems para comprobar bloques de números telefónicos y grabar las respuestas en un proceso conocido como “wardialing”. Hoy en día, los escáneres de puertos envían paquetes IP especialmente manipulados a través de Internet para detectar e identificar sistemas en funcionamiento. Nmap (Network Mapper [1]), que fue en un primer momento presentado por Fyodor en septiembre de 1997 [2], es probablemente una de las utilidades más completas para escanear redes. Fyodor no estaba muy contento con las características que proporcionaban herramientas como Strobe [3] o Pscan [4]. Quería una herramienta que realizara algo que aún no se había visto, algo que consiguió con Nmap. El escáner Nmap se incluye con la mayoría de las distribuciones populares de Linux y si se dispone de una distribución que no lo incluya, se puede obtener desde el sitio web del proyecto
60
Número 15
en [1]. Nmap utiliza huellas TCP para identificar el sistema operativo del equipo escaneado. Puede proporcionar bastante información de una máquina, identificando los servicios que están activos y las versiones de los mismos. La inmensa cantidad de funciones que proporciona Nmap implica que el programa posee un número impresionante de parámetros para la línea de comandos. Dispone de unos 15 métodos para escanear un equipo, con unas 20 configuraciones para cada uno de ellos, que pueden llegar a producir paquetes realmente extraños. No se necesita disponer de conocimientos de experto para poder utilizar Nmap, aunque los usuarios principiantes podrían confundirse con los comandos más sofisticados. Sin embargo, para conseguir un control pleno de toda la potencia de Nmap sí que es necesario disponer de algunos conocimientos previos. Este artículo describe algunas de las técnicas que Nmap utiliza para descubrir vulnerabilidades.
El Truco de las Tres Cartas Nmap usa un proceso de escaneado de tres etapas. Por defecto, los tres pasos son como siguen: • Nmap envía un ping a la máquina objetivo. El usuario puede elegir entre una solicitud habitual de Echo o de alguna técnica propia de Nmap para identificar si un equipo está en funcionamiento. • Por defecto, se realiza una búsqueda inversa para averiguar el nombre del equipo a partir de su dirección IP. • Nmap escanea los puertos de la máquina utilizando la técnica seleccionada. Presionando [Ctrl]+[C] se
WWW.LINUX- MAGAZINE.ES
termina el proceso, en el caso de que le parezca que está durando demasiado. Si se le ha indicado a Nmap que escriba los resultados a un fichero de registro, puede seguir, posteriormente, escaneando el equipo desde el punto en que se interrumpió. Nmap distingue entre cuatro posibles estados a la hora de comprobar los puertos (Tabla 2). La ventaja principal de Nmap consiste en el amplio rango de técnicas de escaneado de que dispone.
No es sólo para los Chicos Malos Aunque Nmap, a veces se utiliza malintencionadamente como una herramienta “Black Hat”, también puede ayudar a los administradores simplificando el proceso de análisis de la red. Los administradores de red pueden encontrar las vulnerabilidades antes de que los atacantes puedan tener la oportunidad de descubrir servicios olvidados y peligrosos. La herramienta también ayuda a los administradores a comprobar el inventario, comprobar las reglas del cortafuegos y documentar la versión de los parches y las actualizaciones. Nmap fue originalmente desarrollado para Linux, aunque actualmente se puede ejecutar en Windows, BSD y diversas versiones de Unix. Existen varias interfaces gráficas para Unix (Nmapfe, Figura 1) y para los sistemas operativos basados en Windows (Nmapwin [5]). PHP-Nmap [6] (véase la Figura 2) incluso permite a los usuarios controlar el escáner desde un navegador web. La página oficial de Nmap contiene una lista de otros proyectos basados en Nmap [7], incluido una versión para Zaurus de Sharp.
Nmap • ADMINISTRACIÓN
un simple connect(), que hace uso de la función de conexión del sistema operativo para establecer una conexión compatible con los RFCs basada en el típico saludo en tres partes (three-way handshake). El escáner envía un paquete TCP con el flag SYN (Figura 4) y con los puertos de origen y destino apropiados. Si no hay ningún servicio a la escucha en el puerto de destino, el otro sistema devuelve un paquete Figura 1: La interfaz gráfica de Nmap elimina la necesidad de RST en respuesta para cerrar la conexión; si aprender la enorme cantidad de opciones y proporciona a los no, el sistema de desadministradores una línea de comandos rápida (véase al pie de tino responde con un la figura). paquete en donde los En vez de simplemente abrir una coneflags SYN y ACK están activados. Un xión TCP normal, el programa transmite paquete ACK completa el saludo y paquetes especialmente manipulados establece la conexión, que Nmap que contravienen los RFCs. Nmap inmediatamente cierra enviando un obtiene entonces conclusiones basánreset (Listado 1). dose en la reacción de la máquina Escaneando a Medias escaneada. Para algunas de estas técnicas, la herramienta necesita de los priviSi se dispone de los privilegios de root, legios del usuario root, ya que ha de traes preferible el escaneado TCP-SYN. bajar con sockets raw y de este modo Esta técnica ahorra recursos de la red y poder crear los paquetes propios. del sistema; no se basa en ningún sistema operativo específico y es sigilosa. Primitivas de Escaneado En vez de establecer una conexión TCP Sin los privilegios del root (Figura 3), completa, Nmap simplemente transmite Nmap está restringido a escanear con el primer paquete SYN del saludo en
Tabla 1: Técnicas de Escaneado Técnica de Escaneado TCPSYN TCP connect() FIN Xmas Null Ping
Sintaxis -sS -sT -sF -sX -sN -sP
Version Detection UDP IP Protocol ACK Window RPC List Idle FTP Bounce
-sV -sU -sO -sA -sW -sR -sL -sI -b
Uso Escáner Sigiloso Escaneado sin los privilegios de root Escáner Sigiloso Escáner Sigiloso Escáner Sigiloso Indetificación de equipos en funcionamiento Identificación de Servicios Encuentra servicios UDP Descubre los protocolos soportados Identifica cortafuegos Escáner ACK avanzado Información sobre los servicios RPC Para realizar pruebas Escaneado a través de un tercero Histórico
WWW.LINUX- MAGAZINE.ES
tres partes. Un puerto cerrado reaccionará enviando un flag RST para limpiar la conexión medio abierta. Un puerto abierto responderá con un SYN/ ACK, que Nmap cerrará transmitiendo un reset (Listado 2). El servicio escaneado no se dará cuenta de este proceso, que no deja ningún rastro en los ficheros de registro. Este truco simple no activará los sistemas de detección de intrusos como Snort [8] o Prelude [9]. Una inusual petición de conexión en una gran cantidad de puertos simultáneamente se conoce como escaneado de puertos. Snort registra la siguiente información: [**] [100:1:1] spp_portscan: U PORTSCAN DETECTED U from 192.168.5.22 (THRESHOLD U 4 connections exceeded in U 0 seconds) [**] 10/05-19:40:49.540435
A menudo se puede evitar ser detectado por un sistema indicándole a Nmap que vaya más despacio. Esto disimula los paquetes entre los paquetes del tráfico normal. Incluso se pueden usar técnicas como escaneado FIN, Xmas o Null.
Alto Secreto Estas técnicas extremadamente sigilosas no se basan en la solicitud o apertura de una conexión; sino en el envío de una trama al sistema de destino. FIN, Xmas y Null difieren sólo en los flags TCP que tienen activados (Figura 4), ninguno de los cuales se producen en un tráfico normal de red. Ninguna de estas técnicas hace uso del flag SYN. El paquete de respuesta o la carencia del mismo le indican a Nmap todo lo que necesita para saber sobre la disponibilidad del
Figura 2: Nmap dispone también de una interfaz web, aunque esta interfaz no ofrece el acceso a todas las características del programa.
Número 15
61
ADMINISTRACIÓN • Nmap
sistema de destino. La pila TCP estándar con puertos cerrados responderá enviando un paquete RST para resetear la conexión. Si algún servicio de red está a la escucha en el puerto de destino, el sistema escaneado no será capaz de encontrar una conexión que concuerde con el paquete solicitante. Desafortunadamente, los RFCs no proporcionan instrucciones claras con lo que hay que hacer con los paquetes de esta clase. Como consecuencia de ello, las diferentes implementaciones de la pila TCP
Buscando Equipos Nmap no sólo ayuda a los administradores en la búsqueda de sistemas y servicios en una máquina individual; si fuera necesario, puede escanear subredes completas en busca de máquinas. El escáner Ping es una herramienta ideal para este escenario. Como sugiere el nombre, el comando ping genera una Solicitud de Eco ICMP que solicita una Respuesta de Eco ICMP de un sistema en funcionamiento. Como el protocolo ICMP no utiliza ningún puerto que Nmap pueda investigar, el escáner tan sólo necesita dos tramas por máquina y esto hace que sea muy rápido. Por el contrario, si no se recibe una respuesta, no hay forma de saber si el sistema está realmente apagado o si un filtrador de paquetes simplemente ha eliminado el mensage ICMP. Los escáneres ping se utilizan habitualmente para preparar el camino a investigaciones más intensivas. Un escáner Ping proporciona al usuario una forma rápida de comprobar la reacción de un sistema, haciendo que sea más fácil aplicar escáneres de puerto que consumen más tiempo sobre los sistemas que estén en marcha.
Fuera del Dique El escáner List proporciona al usuario la opción de comprobar sus configuraciones para posibles fuentes de error antes de que suceda. El escáner simplemente le indica al usuario qué sistemas debería Nmap investigar y cómo, sin realizar realmente ningún escaneado. Sin embargo, hay que tener cuidado: reacuérdese que Nmap intenta resolver la dirección IP realizando una búsqueda inversa, así que hay que asegurarse de deshabilitar este comportamiento.
62
Número 15
reaccionan de manera diferente ante esta situación; el Listado 3 muestra el modo en que actúa un sistema Linux ante esta situación, ignorando el paquete inesperado. Los sistemas Windows reaccionan de manera diferente. La respuesta de un sistema Windows es Figura 3: Sin los privilegios de root, Nmap está restringido a resetear la conexión, una pequeña selección de técnicas para identificar los puertos sin tener en cuenta que abiertos disponibles en la red. el puerto esté abierto o cerrado. Esto permite a Nmap identipuerto. Los candidatos potenciales son ficar el sistema operativo, ya que este identificados anteriormente con las técnicomportamiento sólo es propio de los cas de escaneado de puertos (escáneres sistemas Windows y de alguna otra pila Connect o SYN). La detección de la verTCP exótica. sión abre una conexión normal y se comunica con el servicio que está a la Si el destino no responde, Nmap escucha. Normalmente produce una informa que el puerto está cerrado o filentrada en los ficheros de registro. Nmap trado (véase la Tabla 2); los cortafuegos almacena los resultados como nmap-sertienden a descartar los paquetes de esta vice-probe en su base de datos. La versión clase sin comentario. Si se necesitan 3.93 incluye 2895 firmas de servicios. más detalles, probablemente se desee Nmap puede aplicar la técnica para activar la detección de versiones (tamidentificar los servicios individuales de bién conocida como version probe): un sistema completo. “OS fingerprinting” esta técnica no intenta pasar inadveres la técnica de identificar remotamente tida y hace uso de otra más agresiva el sistema operativo y es una de las caracpara la identificación de puertos. terísticas avanzadas de Nmap, siendo Perforando indiscutiblemente, Nmap, el maestro en La detección de versiones no busca los este campo. puertos abiertos, sino que investiga el La técnica se basa en las ligeras variaservicio que está a la escucha en un ciones subyacentes en el comportamiento de Listado 1: Escáner Connect la pila TCP. Una base de 01 Port closed: datos con02 192.168.5.22 -> 192.168.5.10 TCP 60319 > 80 [SYN] tiene las 03 192.168.5.10 -> 192.168.5.22 TCP 80 > 60319 [RST, ACK] diferencias 04 específicas 05 Port open: como “fin06 192.168.5.22 -> 192.168.5.10 TCP 60320 > 80 [SYN] gerprints” o 07 192.168.5.10 -> 192.168.5.22 TCP 80 > 60320 [SYN, ACK] “huellas”: En 08 192.168.5.22 -> 192.168.5.10 TCP 60320 > 80 [ACK] Nmap 3.93, 09 192.168.5.22 -> 192.168.5.10 TCP 60320 > 80 [RST, ACK] nmap-os-fingerprints Listado 2: Escáneres TCP-SYN tiene unas 01 Port closed: 1707 02 192.168.5.22 -> 192.168.5.10 TCP 56522 > 80 [SYN] entradas. 03 192.168.5.10 -> 192.168.5.22 TCP 80 > 56522 [RST, ACK] Comparando 04 los resulta05 Port open: dos con la 06 192.168.5.22 -> 192.168.5.10 TCP 60420 > 80 [SYN] lista se con07 192.168.5.10 -> 192.168.5.22 TCP 80 > 60420 [SYN, ACK] sigue identi08 192.168.5.22 -> 192.168.5.10 TCP 60420 > 80 [RST] ficar la pila
WWW.LINUX- MAGAZINE.ES
Nmap • ADMINISTRACIÓN
del protocolo y el sistema operativo. El escáner es sorprendentemente sigiloso. Se realiza sin conectarse a aplicaciones específicas y tan sólo hace uso de unas 30 tramas simples. OS fingerprinting comienza con un simple escaneado de puertos y luego realiza ocho pequeñas comprobaciones, todas ellas envían paquetes especialmente manipulados al sistema destino. Algunos de estos paquetes nunca aparecerían en el tráfico normal de la red y hace que sean una presa fácil para los IDS de los sistemas. El sistema destino no se da cuenta de que está siendo escaneado. Al mismo tiempo, la opción de marca de tiempo de TCP revela el tiempo del sistema. Si Nmap es incapaz de identificar el sistema destino, presenta los datos al usuario y si el usuario es capaz de identificar el sistema, éste puede publicar la firma por medio de una página de Envío en [10]. Así es como los usuarios de Nmap pueden ayudar a mejorar la utilidad de identificación.
Sin Filtros En escenarios donde Nmap es incapaz de distinguir entre un puerto filtrado y un puerto abierto (Tabla 2), los escáneres ACK pueden ayudar a aclarar la situación. Los escáneres
Tabla 2: Estado de los Puertos Estado Abierto
Explicación La comunicación a través de este puerto es posible sin ninguna restricción. Filtrado Probablemente el puerto esté siendo bloqueado por un cortafuegos. Si un escáner SYN o Connect descubre puertos que estén abiertos o filtrados, puede ser que el administrador haya cometido el error de implementar una configuración DROP insegura. Sin Filtrar Los escáneres ACK o de Ventanas descubren los puertos sin filtrar. La comunicación con el puerto en cuestión es posible, pero se nece sitan utilizar otras técnicas de escaneado para obtener mayor información. Cerrado El puerto está correctamente bloqueado por el cortafuegos o no hay ningún servicio a la escucha en esta dirección. En ambos casos la comunicación es imposible.
Figura 4: Nmpa utiliza los campos de las cabeceras TCP para descubrir los detalles de los sistemas. Además de los flags normales ACK, RST y SYN (amarillo), algunas técnicas usan combinaciones inusuales de otros flags (rosa).
ACK son una técnica sencilla y sigilosa y aunque puede que no ayude a identificar un puerto como abierto, detectará si hay un cortafuegos. Para ello, Nmap transmite un paquete simple ACK al equipo de destino, que responderá devolviendo un RST. Si la respuesta es un “ICMP Destination Unreachable” en vez de un reset, se puede suponer que la respuesta ha sido bloqueada por un cortafuegos, es decir, el puerto está siendo filtrado. Nmap también usa escáneres de ventanas TCP, una variación del escáner ACK, para identificar los puertos abiertos. El escáner de nuevo comienza transmitiendo un paquete ACK, pero adicionalmente evalúa el tamaño de la ventana establecida por el sistema de destino en su respuesta. Los paquetes RST con un tamaño de ventana de cero le indican al escáner que el puerto está abierto. Como el número de sistemas operativos que responderán a esta técnica es bastante pequeño y continuará menguando en el futuro, el escáner de ventana puede proporcionar adicionalmente más información sobre la plataforma de destino. Por ello, esta
técnica es una buena elección si se necesita más información sobre el sistema.
Más allá de TCP Además de TCP, Nmap puede realizar escáneres UDP. Hay pocas opciones para esta técnica, ya que el protocolo no hace uso del flag SYN ni otros. Esto hace que el escáner UDP sea bastante simple: el objetivo responde a las peticiones para los puertos cerrados con un paquete “ICMP Port Unreachable”, mientras que los puertos abiertos responderán habitualmente con datos de alguna clase. Si no hay respuesta, Nmap clasifica el puerto como abierto o filtrado (Tabla 2). En caso de duda, la detección de versiones podría ayudar. Como la mayoría de los sistemas reducen los mensajes de error ICMP a unos pocos paquetes por segundo, Nmap detecta este comportamiento. Por ello los escáneres UDP pueden tardar un rato.
A Bajo Nivel El escaneado del protocolo IP no tiene nada que hacer con la identificación de
Figura 5: La cabecera IP contiene el campo IPID (rosa), que especifica el número de fragmentos contiguos.
WWW.LINUX- MAGAZINE.ES
Número 15
63
ADMINISTRACIÓN • Nmap
Listado 3: FIN, Xmas y Null 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
FIN scan, Port closed: 192.168.5.22 -> 192.168.5.10 TCP 56485 > 80 [FIN] 192.168.5.10 -> 192.168.5.22 TCP 80 > 56485 [RST, ACK] FIN Scan, Port open: 192.168.5.22 -> 192.168.5.10 TCP 43406 > 80 [FIN] 192.168.5.22 -> 192.168.5.10 TCP 43407 > 80 [FIN] Xmas Scan, Port closed: 192.168.5.22 -> 192.168.5.10 TCP 49499 > 80 [FIN, PSH, URG] 192.168.5.10 -> 192.168.5.22 TCP 80 > 49499 [RST, ACK] Xmas Scan, Port open: 192.168.5.22 -> 192.168.5.10 TCP 47109 > 80 [FIN, PSH, URG] 192.168.5.22 -> 192.168.5.10 TCP 47110 > 80 [FIN, PSH, URG] Null Scan, Port closed: 192.168.5.22 -> 192.168.5.10 TCP 50508 > 80 [] 192.168.5.10 -> 192.168.5.22 TCP 80 > 50508 [RST, ACK] Null Scan, Port open: 192.168.5.22 -> 192.168.5.10 TCP 55971 > 80 [] 192.168.5.22 -> 192.168.5.10 TCP 55972 > 80 []
puertos específicos; simplemente le indica al usuario qué protocolos de Nivel 4 soporta el destino. Con un cliente Linux, Nmap normalmente descubrirá ICMP (Internet Control Message Protocol), IGMP (Internet Group Multicast Protocol), TCP, UDP e IPv6 (para un túnel IPv6 sobre IPv4). Comprueba todos los números de protocolos entre 1 y 255, esperando sus respuestas. Esta información permite a Nmap averiguar qué clase de sistema está escaneando. Se puede realizar una identificación básica con este conocimiento, ya que tan sólo los routers y algunos servidores especiales usan VRRP (Virtual Router Redundancy Protocol) o la alternativa gratuita CARP, por ejemplo.
64
Número 15
Llamando a todas las Estaciones Los escáneres RPC pueden identificar servicios tales como NFS y NIS, que están basados en esta tecnología, junto con los puertos que utilizan. Los escáneres RPC tan sólo tienen sentido si van seguidos de otros escáneres que proporcionen información de los puertos abiertos. El escaneado RPC habilita automáticamente la detección de versiones. Para ayudar a descubrir servicios RPC ocultos, esta técnica utiliza adicionalmente la instrucción RPC especial PROC=0. Esta instrucción no le pide, en realidad, al servicio que haga algo, sino que fuerza al servicio a revelar su existencia. Los servicios que no están basados en RPC fallan a la hora de identificar la instrucción y no responden. Como los escáneres RPC se basan en interaccionar con la aplicación, no son sig-
WWW.LINUX- MAGAZINE.ES
ilosos, aunque con un poco de suerte pueden revelar bastantes detalles de los sistemas bajo investigación.
Pistas Falsas En algunas situaciones, incluso la técnica de escaneado más sigilosa de Nmap puede dejar demasiadas pistas. Un analizador podría necesitar información detallada que tan sólo podría revelar un escáner fácilmente identificable. El truco, en este caso, es alimentarlo con IDS de sistemas y señuelos para mantenerlo ocupado. Cuando Nmap utiliza señuelos, simula otros escáneres desde un número preestablecido de direcciones IP inventadas para ocultar el proceso de escaneado real. Aunque esto hace que sea más probable ser detectado, el ruido ocasionado desde la dirección falsa hace que sea más difícil identificar al atacante real. Desde el punto de vista del administrador del sistema, el escaneado de señuelos es una buena prueba para averiguar el funcionamiento del equipo, el cortafuegos y la detección de Intrusos. Por defecto, Nmap puede llegar a simular hasta 128 equipos al mismo tiempo. Si se dispone de una máquina potente con una buena conexión de red, probablemente se desee incrementar el valor de la constante MAX_DECOYS en nmap.h y recompilar Nmap.
Zombies Los escáneres ociosos se realizan por la máquina sin la necesidad de un tercero. Este tipo de escáneres eliminan la necesidad para la máquina escaneadora de intercambiar paquetes con el destino en cualquier momento del proceso. Nmap maneja la IP inventada requerida autónomamente. Para que esta técnica funcione debe aplicarse la siguiente condición: • El equipo zombie (el tercero sin implicación, también conocido como proxy) debe tener poca o ninguna carga de red para evitar que se modifique el IPID (El campo de identificación de la cabecera IP, véase la Figura 5). • La IPID del zombie debe ser predecible. Un sistema adecuado incrementará la IPID en uno para cada paquete nuevo. Nmap rápidamente identifica un sis-
Nmap • ADMINISTRACIÓN
Ciego) si el IPID del reset resultante se ha incrementado en una cuenta de cinco.
Visión Ciega
tema zombie adecuado. El programa envía seis paquetes SYN/ACK al equipo zombie y comprueba si se produce un incremento lineal de los IPIDs de los paquetes RST de la respuesta. Si esto no se produce, el escaneado termina indicándole al usuario: Idlescan is unable to obtain meaningful results from proxy 192.168.5.99 (192.168.5.99). I’m sorry it didn’t work out. QUITTING!. Si los IPIDs se incrementan de manera predecible, Nmap repite el proceso cuatro veces, utilizando paquetes cuya dirección de origen coincide con la dirección del sistema que se desea investigar en el proceso. El zombie entonces envía paquetes de reset al equipo de destino en vez de enviárselo al escáner. Para obtener los resultados, Nmap envía un paquete más SYN/ACK al zombie, utilizando su propia dirección IP fuente esta vez. Nmap sólo intentará realizar un escáner Ocioso (o
Nmap utiliza una solución similar para investigar el objetivo: envía paquetes SYN al destino, utilizando la dirección del zombie como dirección fuente. El destino escaneado responderá a las peticiones de los puertos cerrados con un RST, que el zombie ignorará. Por el contrario, los puertos abiertos intentarán pasar al siguiente estado del intercambio de saludos, enviando un paquete SYN/ACK. Como el zombie no sabe nada sobre la conexión responderá con un reset, incrementando al mismo tiempo el IPID. El equipo que está realizando el escaneado puede luego preguntar al zombie por el valor de su contador (Figura 6). Para acelerar este proceso, Nmap inteligentemente supone que la mayoría de los puertos estarán cerrados. Empieza con 30 puertos TCP seleccionados aleatoriamente y envía paquetes SYN a cada uno de ellos. Si el IPID se incrementa, Nmap sabrá ahora cuantos puertos del rango a escanear están abiertos. En la segunda fase, Nmap reduce el número de puertos y continúa restringiendo el rango hasta que pueda determinar qué número de puertos son.
Ejemplos Los siguientes ejemplos están escogidos para mostrar que Nmap no es una herramienta para los hackers, sino que es una ayuda muy valiosa para los administradores. Antes de decidirse a experimentar con estas técnicas, el lector debe saber que jugar con los protocolos no está completamente libre de riesgo: los sistemas críticos pueden reaccionar de manera imprevista. Derribar un sistema importante es una prueba de fuego a la hora de identificar una vulnerabilidad crítica, pero en este caso, puede que sea demasiado dañina la comprobación y sea peor el remedio que la enfermedad. Imagínese un escáner que bloquee la pila TCP de su sistema de telefonía de Internet, por poner un ejemplo y eche por tierra sus sistemas de comunicación. Para las comprobaciones rutinarias, puede que se desee añadir la dirección IP de los sistemas críticos a un fichero y especificar la opción --excludefile con este fichero para escanear la red completa, pero sin molestar a los sistemas críticos. Nmap posee un amplio rango de características de registro para documentar y comparar los resultados de los escáneres. La opción -oA habilita tres formatos útiles y prepara la forma para la evaluación manual o automatizada de los datos proporcionados por el escáner. NDiff [11] es útil para comparar los datos procedentes de varios escáneres.
Problemas de Licencia Puede ocurrir que las organizaciones con oficinas distribuidas geográficamente no dispongan de administradores en cada una de ellas. Nmap puede mostrarle una imagen clara de lo que sucede en dichas oficinas. Esto no es sólo una buena idea referente a la seguridad, sino que da sentido al hecho de comprobar qué programas se están ejecutando en las máquinas para evitar los problemas de las licencias. Un simple escáner Ping puede proporcionar un resumen de las máquinas; las técnicas más complejas proporcionan información del estado de los parches y ayudan a identificar a los equipos:
Figura 6: Los escáneres ociosos son una técnica que implican a un tercero también conocido como zombie o proxy. Los paquetes enviados al destino se originan por el zombie. El atacante obtiene conclusiones comprobando los cambios sufridos en los IPID (el campo de identificación de las cabeceras IP).
WWW.LINUX- MAGAZINE.ES
nmap -vv -sS -O -T Polite -n U -oA remote 192.168.6.0/24
Número 15
65
ADMINISTRACIÓN • Nmap
variante menos agresiva en cuestiones de tiempo. -oA remote proporciona un registro más descriptivo. Nmap posee tres formatos de registro estándar: uno fácilmente legible remote.nmap; remote.gnmap, que le permite así mismo investigar con Grep y remote.xml que proporciona un fichero XML.
Intrusiones En las redes basadas en Windows es bastante común la intrusión de gusanos y herramientas spyware como Backorifice, que aún se encuentran con frecuencia. Nmap ayuda a los administradores creativos a establecer “IDS de pobres” buscando los puertos utilizados por los programas malware habituales: nmap -vv -sS -n --excludefile U exceptions -p wormports -oA U infected 192.168.5.0/24
El comando anterior le indica a Nmap que sea lo más descriptivo posible, -vv. Una lista de puertos potencialmente peligrosos conocidos siguen al parámetro -p. Los gusanos utilizan estos puertos para enviar comandos, cargar código peligroso o propagarse. Los equipos la red 192.168.5.0/24 serán escaneados utilizando el escáner SYN sS, pero sin resolución de nombres -n. Los equipos en el fichero de excepciones se omitirán del escáner. Los
66
Número 15
resultados del escáner se incluirán en los ficheros titulados infected.nmap, infected.gnmap e infected.xml. La detección de versiones de Nmap, característica -sV hace un buen
opción -A son nuevas. Los resultados proporcionan más información sobre los parches y las actualizaciones olvidadas. Pero téngase en cuenta que algunos parches de seguridad no incrementan el número de versión. Nmap no es el sustituto de un gestor de parches real.
Versátil y Potente Nmap posee gran cantidad de escáneres con técnicas sofisticadas y sigilosas. El hecho de que la herramienta pueda ser utilizada por los atacantes no debería determinar el uso que los administradores puedan hacer de ella. Su uso proporciona una información importante, y en algunos casos, sorprendente ■ sobre la red. trabajo detectando malware que esté a la escucha en los puertos estándar. Nmap referencia a su base de datos interna para identificar los servicios en cuestión. Sin embargo, el proceso consume bastante tiempo y puede ocasionar una carga considerable para la red, que lo hace impracticable en la mayoría de los casos.
EL AUTOR
Esto le indica a Nmap que use un escáner SYN -sS para investigar una subred de clase C 192.168.6.0 y que recolecte información sobre el sistema operativo (detección OS -O). Aquí no tiene sentido que se resuelvan las direcciones IP para obtener los nombres de los equipos; -n deshabilita la búsqueda inversa. Para evitar sobrecargar la conexión WAN, -T Polite conmuta a una
Christian Ney es administrador de sistemas Unix y Cortafuegos de una línea aérea regional y colabora en varios proyectos de código abierto en su tiempo libre.
Parcheando Los gusanos, virus y otras clases de malware hacen uso de las vulnerabilidades públicamente conocidas y de los sistemas que no han sido parcheados. SQL Slammer es un ejemplo de un gusano que ha ganado notoriedad debido a su éxito a la hora de expandirse, pero OpenSSL también tiene mala publicidad debida al gusano Scalper. Para comprobar si un sistema posee una vulnerabilidad de esta clase, sígase el ejemplo mostrado anteriormente. Puede ser que se prefiera realizar la detección de la versión y la detección de la versión del sistema operativo de forma separada para evitar la sobrecarga de la red: nmap -vv -sS -A -n U --excludefile exceptions -oA U version 192.168.5.0/24
De nuevo, la técnica básica subyacente es un escáner SYN -sS y las opciones son más o menos las mismas. La detección de versiones y las técnicas de identificación del SO, combinadas con la
WWW.LINUX- MAGAZINE.ES
Recursos [1] Nmap: http:// www.insecure.org/ nmap/ [2] Fyodor, “The Art of Port Scanning”, Phrack 51: http://www.phrack.org/ phrack/51/P51-11 [3] Strobe: http://ftp.surfnet.nl/security/ coast/scanners/strobe/ [4] Pscan: http://www. packetstormsecurity.com/UNIX/ scanners/pscan.c [5] Nmapwin: http://nmapwin. sourceforge.net [6] PHP-Nmap: http://phpnmap. sourceforge.net [7] Proyectos relacionados con Nmap: http://www.insecure.org/nmap/ nmap_relatedprojects.html [8] Snort IDS: http://www.snort.org [9] Prelude IDS: http://www.prelude-ids. org [10] Identificación de servicios y puertos: http://www.insecure.org/cgi-bin/ nmap-submit.cgi [11] NDiff: http://www.vinecorp.com/ndiff/ [12] OpenSSL: http://www.openssl.org
Trickle • ADMINISTRACIÓN
Acelerar las descargas con Trickle
CONTROL DEL TRÁFICO ¿Sufre nuestra conexión a Internet el castigo de un exceso de descargas? Si es el caso, deberíamos probar Trickle, un sencillo programa que nos ofrece un control más preciso en el tráfico de nuestra conexión a la red. POR OLIVER FROMMEL
L
as descargas de grandes ficheros pueden dejar nuestra conexión prácticamente inutilizable. Algo parecido a lo que ya ocurría en épocas pasadas, en las que el usuario tenía que esperar segundos hasta ver el eco de lo que pulsaba en pantalla. TCP/IP necesita suficiente capacidad en ambas direcciones. Sin importar si estamos descargando o subiendo información, los paquetes viajan en ambas direcciones. El dispositivo en el extremo de la recepción de una descarga tiene que confirmar la recepción de cada paquete que recibe, y obviamente esta confirmación viaja en dirección contraria hacia la fuente.
Moldeado de Tráfico Fácil Para usar el ancho de banda de manera más eficiente, es importante tener un control más preciso sobre los paquetes que entran y salen de nuestra máquina. Linux tiene ciertas funcionalidades de administración de colas que proporcionan una amplia gama de métodos de traffic shaping, basados en diversos algoritmos. El traffic shaping es una técnica para controlar el tráfico entrante y
saliente y hacer un uso óptimo de la capacidad de la conexión. No hace falta decirlo: el sistema es tan complicado como su nombre (véase [1]). La herramienta Trickle [2] soluciona el problema proporcionando un comando sencillo con sólo unas pocas opciones. Trickle normalmente es sencillo de compilar. Requiere sólo Libevent [3] y algunas otras librerías estándar.
Sin privilegios Trickle ni siquiera necesita privilegios de administrador para controlar el tráfico. Normalmente, Glibc proporciona aplicaciones con ciertas funciones de red que les permiten establecer conexiones con Internet, transferir archivos y demás. Cuando Trickle arranca, usa la variable de entorno LD_PRELOAD para cargar su propia librería dinámica, que incluye funciones de red. Funcionan igual que las originales, pero que además registran los flujos de tráfico. Trickle funciona con la mayoría de los programas, salvo unas pocas excepciones. Si encontramos dificultades para poner Trickle en marcha con nuestra aplicación favorita, deberíamos
WWW.LINUX-MAGAZINE.ES
echarle un vistazo al cuadro “Restricciones”. Algunas aplicaciones no usan el mecanismo por defecto. Para someter a un programa al control de ancho de banda, necesitamos arrancarlo con el comando trickle. El parámetro -d nos permite especificar un límite para la tasa de descarga: trickle -d 50 U ftp ftp.redhat.com
Esto le indica a Trickle que asegure que el flujo de descarga de la conexión FTP no
Figura 1: Sin el control de Trickle, la descarga FTP consume todo el ancho de banda disponible. Si fijamos un límite, tendremos capacidad suficiente para otras aplicaciones de red.
Número 15
67
ADMINISTRACIÓN • Trickle
excederá los 50 Kbps de ancho de banda de media. La opción -u hace lo mismo para el flujo de subida. Otros programas FTP que se ejecuten al mismo tiempo no se ven afectados por Trickle y podrían continuar apoderándose de la conexión. Para proporcionar un control más preciso, tendremos que habilitar Trickle para que controle todos los programas que envíen o reciban información por Internet. El demonio de Trickle, trickled, se ocupa de esto, registrando todas las conexiones de Trickle y controlando el ancho de banda total consumido.
Controles Globales De nuevo, el demonio soporta los dos sencillos parámetros que comentamos anteriormente, -d y -u, pero en este caso referidos al ancho de banda total: trickled -d 50 -u 5 -f -N 5
Este comando fija la tasa de descarga a 50 Kbps y la de subida a 5 Kbps. El parámetro -f le indica al demonio que se ejecute en segundo plano. -N 5 hace que el demonio refresque las estadísticas cada 5 segundos. Si omitimos el parámetro -d, Trickle fijará las tasas de subida y bajada a 10 Kbps. Podemos guardar configuraciones de manera permanente en el archivo /etc/trickled.conf, o fijar la opción -c y especificar un nombre de archivo. Trickle programa la comunicación con el demonio al iniciarse (normalmente a
Restricciones Debido a que el mecanismo asociado a LD_PRELOAD usa librerías dinámicas, Trickle no funcionará con los denominados binarios estáticos que no usan Glibc. El comando ldd nos indicará el tipo de programa que le estamos pidiendo a Trickle que controle. Al mismo tiempo, ldd nos ofrece una lista de librerías dinámicas: ldd /usr/bin/wget | grep libc.so libc.so.6 => U /lib/libc.so.6 (0x00add000). Si ldd no nos muestra ningún resultado, podemos suponer que el candidato es un programa estático. Podemos verificarlo tecleando el comando archivo /usr/bin/wget. Además de esto, Trickle no puede tratar programas SUID, que desactivan el mecanismo asociado a LD_PRELOAD por razones de seguridad.
68
Número 15
través de un socket Unix llamado /tmp/ .trickled.sock), y controla los programas cliente en función de nuestras reglas. Si la conexión con el servidor se interrumpe, Trickle sigue funcionando, pero sin respetar los límites. Si el servidor funciona con un límite de descarga de 10 Kbps, al teclear trickle wget http://www.w3.org se respetará el límite. Pero si desconectamos el servidor mientras se está efectuando la descarga, la tasa de descarga se incrementará.
Suavizado Podemos usar el archivo de configuración /etc/trickled.conf para definir las prioridades de los servicios de manera individual. Los valores menores representan prioridades mayores. Internamente, Trickle trata el orden de los paquetes en una cola. Este método significa que podemos conseguir velocidades de descarga bastante buenas y aún así poder usar sesiones ssh sin problemas. Veamos un sencillo ejemplo de un archivo de configuración: [ssh] Priority = 1 [www] Priority = 8
La documentación también recomienda los parámetros Time-Smoothing y Length-Smoothing para evitar fluctuaciones en la tasas de transferencia. Al contrario que con las opciones en línea de comandos, -d y -l, podemos fijar los parámetros en el archivo de configuración de manera individual para cada servicio (SSH, FTP, WWW,…): [ssh] Priority = 1 Time-Smoothing = Length-Smoothing [www] Priority = 8 Time-Smoothing = Length-Smoothing
0.1 = 2
5 = 20
Estos valores definen el tiempo y la longitud de normalización que Trickle aplica al programa que está controlando. Para transferencias de archivos grandes se recomiendan los valores mayores, mientras que las aplicaciones interactivas deberían usar valores menores. Ninguno de estos valores tuvo demasiado efecto en las pruebas, pero podemos experimentar por nuestra cuenta.
WWW.LINUX-MAGAZINE.ES
Límites Existen ciertos límites a lo que puede hacer un sistema de estas características. No importa si el kernel se está ejecutando en espacio de usuario, ni la influencia de los búfers (que se fijan para mantener unos pocos paquetes), ni tampoco de la naturaleza dinámica de las redes. Trickle calcula las tasas sobre un periodo específico de tiempo. Como la tasa comienza con un valor bajo y comienza a crecer con el tiempo, la herramienta debería llegar más allá de la marca y subir por encima del valor que tenemos como objetivo. -w especifica el número de bytes en el cual Trickle debería intentar evitar el tráfico a ráfagas, aunque debemos decir que esta configuración tuvo poco efecto en nuestras pruebas. La diferencia con el valor por defecto de 512 bytes era apenas perceptible. Dicho esto, Trickle aún hace un buen trabajo sin necesidad de un ajuste fino.
Idóneo Para Casa Trickle está diseñado principalmente para proporcionar al usuario un mayor control de los flujos de tráfico generados o recibidos por aplicaciones individuales. Un uso multiusuario es concebible, pero implicaría escribir scripts por encima para controlar todas las aplicaciones involucradas, por lo que puede que sea preferible una solución basada en QDisc (véase [1]). El programa puede tratar sólo conexiones TCP, las típicas en la mayoría de servicios con alto volumen de transferencia. La mayoría de los usuarios podrán vivir con el hecho de que Trickle no puede tratar tráfico DNS, por ejemplo. La herramienta de traffic shaping Trickle es definitivamente una buena solución para los lectores que necesiten un método rápido y sencillo de mantener una sesión interactiva mientras que se transfieren grandes canti■ dades de información.
Recursos [1] CÓMO “Advanced Routing and Traffic Control”: http://lartc.org [2] Trickle: http://monkey.org/~marius/ pages/?page=trickle [3] Libevent: http://www.monkey.org/ ~provos/libevent
Bienvenidos a Linux User Ésta es la sección dedicada a la presentación de software interesante y útil que nos ayuda en nuestro quehacer diario con el escritorio Linux. Aquí aprenderemos a utilizar software estándar de una manera más eficiente, adquiriremos valiosos conocimientos y descubriremos nuevas y apasionantes aplicaciones.
Ktools: Kat
70
Aprendemos a utilizar la herramienta de búsqueda de escritorio Kat para encontrar imágenes, archivos de sonido y multimedia.
Desktopía: Whaw
76
Si estás cansado de torear con el solapamiento de ventanas, Whaw te ayudará a organizarlas apilándolas una al lado de otra o en cascada con un solo clic.
Gtools: Gnumeric
78
OpenOffice Calc es adecuado para muchas aplicaciones de hojas de cálculo, pero si necesitas una aplicación que consuma menos recursos, prueba con Gnumeric.
Educación: Moodle III
80
Vemos las posibilidades de integrar portfolios electrónicos y bitácoras, utilizar recursos multimedia, así como el cumplimiento de los estándares educativos.
Línea de comandos: wget
84
Wget es laa herramienta por antonomasia para la descarga no interactiva de recursos de Internet. Aprende a descargarte ficheros o sitios completos.
Juegos: Enemy Territory
86
Te transportamos a las violentas trincheras y campos de batalla de la segunda guerra mundial en el impactante Enemy Territory.
WWW.LINUX- MAGAZINE.COM
ISSUE 52 MARCH 2005
73
LINUX USER • KTools: Kat
Búsquedas de escritorio con Kat
UN GATO OCUPADO
La herramienta de búsqueda de escritorio Kat encuentra mucho más que cadenas de texto. POR ROBERTO CAPPUCCIO
L
os motores de búsquedas de escritorio ofrecen nuevas e interesantes oportunidades para que los usuarios puedan acceder a información sobre sus propios ordenadores. Esta nueva casta de herramientas permite buscar en el propio ordenador de uno de la misma manera que buscaría en Internet. No sorprende que la primera herramienta de esta categoría fuera creada por Google. Otro gigante de la industria de la Informática, Apple, también investiga en esta dirección, integrando su propio motor de búsqueda de escritorio, el llamado Spotlight, dentro de un entorno operativo. La idea es que la gente no necesita saber que están usando una herramienta de búsqueda. Hace aproximadamente un año, pensé que había llegado el momento de equipar a Linux con una herramienta avanzada de búsqueda de escritorio, de modo que comencé a desarrollar Kat (Figura 1). Evidentemente era consciente de la existencia de herramientas como locate o find que llevan a cabo
70
Número 15
búsquedas en el sistema de ficheros. Desafortunadamente esas herramientas carecen de algunas de las características más importantes de una moderna utilidad de búsqueda de escritorio: solamente permiten extraer información dentro de ficheros de texto, no se consideran los metadatos y sus índices han de ser compilados manualmente. Por otra parte, únicamente buscan información en ficheros. En la actualidad, los sistemas informáticos contienen mucha otra información que se encuentra fuera del sistema de ficheros, tales como direcciones de correo, emails, contactos, listas de juegos, etc. Nos pusimos a crear una herramienta que buscaba en todas las fuentes posibles e incluso consideramos las relaciones entre fragmentos de información.
Desarrollo de Kat La nocion convencional de una herramienta de búsqueda es un programa que examina ficheros en busca de una coincidencia con una cadena de texto alfanumérico. La mayoría de la gente es
WWW.LINUX- MAGAZINE.ES
consciente de que un motor de búsqueda de escritorio es bastante exótico, pero para apreciar realmente la complejidad de una herramienta como Kat, se deben considerar algunas de las complicaciones implícitas en el diseño. Kat debe recuperar información relevante de un masivo juego de datos, tomando en consideración no solamente los nombres de los ficheros, sino también sus contenidos y metadatos. Para imágenes, se debe generar un thumbnail, de modo que los usuarios dispondrán de una ocasión más propicia para buscar dentro del posiblemente extenso juego de imágenes recuperadas. También se desea seguir la pista a las relaciones entre las distintas piezas
KTools: Kat • LINUX USER
Figura 1: La utilidad de búsqueda de Kat permite buscar por nombres de fichero, metadatos, ficheros de texto y más.
de información. Debido a que Kat debe procesar diferentes tipos de datos, debe ser capaz de leer distintos formatos de fichero. Como se verá más adelante en las secciones que siguen, la estructura del motor de búsqueda de Kat refleja los objetivos de este diseño.
Indexador El primer paso en la construcción de Kat fue el diseño de un indexador. Consta de un bucle que atraviesa todas las carpetas contenidas en el directorio base especificado por el usuario. Kat permite a sus usuarios elegir qué parte del disco quieren indexar. Recomendamos que cada usuario indexe su propio directorio de inicio, aunque también se permiten otras opciones. Con objeto de extraer toda la información que sea posible, el indexador necesita un modo con el que enfrentarse a los diferentes formatos en los que se guardan los ficheros. Para documentos de texto, el formato de fichero podría ser PDF, DOC, PS u otro formato que no guarde el texto de forma legible. Depen-
diendo del formato, a veces el texto estará comprimido, a veces dividido en bloques y a veces escrito en forma codificada. La mejor solución para el indexador Kat es, obviamente, que sea modular. El sistema de plugin kfile, cortesía de KDE, viene muy bien. kfile incluye plugins tanto para la extracción de metadatos como para la producción de thumbnails. Cada plugin está hecho a medida para extraer información de un tipo MIME predefinido. Afortunadamente, KDE viene con muchos de esos plugins, así que no existe la necesidad de compilar los nuestros propios para metadatos y thumbnails. La tabla 1 muestra una lista de los formatos desde los cuales Kat puede extraer metadatos. Cuando comenzamos con el desarrollo de Kat, carecíamos de una serie de plugins capaces de extraer texto completo de los documentos. Decidimos simular el comportamiento de otros plugins por medio de la creación de otra clase de plugins kfile llamados “plugins a texto
Tabla 1: Formatos con Metadatos Legibles de Kat au deb font mp3 pdf rgb theora vcf
avi diff iso mpc png rpm tiff wav
bmp dvi ics ogg pnm rproject torrent xbm
cpp exr jpeg palm po sid trash xpm
dds flac m3u pcs ps tga ts
WWW.LINUX- MAGAZINE.ES
completo”. Seguidamente comenzamos a implementarlos para los formatos más populares como PDF y Word. Al principio pensamos que era una buena cosa escribir los plugins nosostros mismos, pero pronto se convirtió en una tarea imposible. Algunas de las librerías de código abierto creadas para permitir la extracción de texto desde varios formatos no estaban escritas en C++, e incluso algunas otras ni siquiera en C. Trasladar todo el código hasta el proyecto hubiera sido una tarea extensísima. Otra alternativa podría haber sido enlazar nuestro código a librerías disponibles, pero esto también se convirtió en algo impracticable: mientras que es fácil encontrar utilidades independientes para la extracción de textos de ficheros, no lo es tanto encontrar librerías. La solución fue permitir que nuestro código llamara a herramientas externas, denominadas ayudantes, para la extracción de texto de los ficheros. Aunque esta técnica no resulta tan práctica desde el punto de vista del usuario, sin embargo nos permitió crear muchos plugins y dar a Kat la posibilidad de manejar numerosos formatos de escritorio comunes, tales como HTML, RTF, PDF, PS, DocBook, TEX, DVI y formatos nativos como el MS Office, OpenOffice y las suites KOffice. En el futuro, cuando las librerías se encuentren disponibles, nos sentiremos extremadamente felices de enlazarnos a ellos en lugar de que los usuarios tengan que instalar una larga lista de programas adicionales.
Codificación y Recodificación Una vez que Kat recibe el texto de uno de sus ayudantes, debe: *Adivinar el lenguaje en el que está escrito el documento. *Adivinar el código usado en el texto. *Decodificar el texto usando el decodificador adecuado. *Recodificar el texto en un código más práctico (UTF8). Si se ha intentado abrir un fichero en un formato que es diferente del formato en el que fue guardado, incluso un pequeño cambio en el carácter de codificación puede causar errores y texto ilegible. Dichos errores serán compuestos si el texto incluye una variedad de lenguajes y alfabetos. De cualquier forma Kat
Número 15
71
LINUX USER • KTools: Kat
Figura 2: Creación de un catálogo nuevo.
Cachear Muchos usuarios se quejan del tamaño de la base de datos de Kat. Kat cachea al menos una copia de todo lo que consigue indexar. Esto permite visionar un documento sin tener que abrirlo. Por otra parte, en el caso de medios extraíbles, permite que se copie el documento, incluso si el medio que contiene el documento original no está presente. Para reducir la cantidad de espacio requerido para la caché, Kat almacena el texto en modo comprimido. En una próxima versión, los usuarios podrán elegir si desean una caché o si prefieren más espacio libre en sus discos. Aquéllos que elijan mantener la caché podrán presentar los resultados como en Google, es decir, con una pareja de filas en las que las palabras encontradas estarán subrayadas en el texto del documento. Esta característica permite también mantener una histórico del documento. Por ejemplo, supongamos que se modificó un documento de forma incorrecta accidentalmente. Si se necesita conseguir el original, se podrá abrirse una copia cacheada de una fecha previa a la modificación. Esta característica aún no ha sido implementada en Kat, pero se encuentra dentro de nuestra lista de tareas pendientes.
72
Número 15
Figura 3: Las etiquetas Mime Types administran los tipos Mime disponibles para Kat.
debe leer correctamente el texto en su formato original y salvarlo en un único formato conocido para procesamiento uniforme. El formato Unicode fue desarrollado como una codificación única para todos los lenguajes y alfabetos. Es una extensa tabla de más de 100.000 caracteres. Desafortunadamente el formato requiere 4 bytes por cada carácter, lo cual significa que el documento resultante necesitará 4 veces el espacio requerido por un fichero ASCII. Para resolver este problema, se han desarrollado dos versiones de Unicode: UTF8 y UTF16, los cuales requieren solamente 1 y 2 bytes respectivamente. Para salvar espacio, Kat usa UTF8. Para interpretar correctamente el texto original, hay que adivinar el lenguaje y la codificación de cada documento. Este problema se resuelve a través de lingüística computacional. Cada lenguaje o codificación tiene ciertas característcas que lo hacen fácil de adivinar. El algoritmo usado para adivinar el lenguaje se denomina categorización del documento basado en ngrm. Dicho algoritmo divide el texto en pequeñas piezas, cada una de las cuales tiene una longuitud que varía entre uno a cinco caracteres. Las distintas piezas, llamadas ngrams, se clasifican luego según el número de veces que ocurren en el texto. Esta lista de clasificación de ngrams se
WWW.LINUX- MAGAZINE.ES
conoce como perfil lingüístico, el cual puede servir como si fuera la huella para un lenguaje específico. Si dos documen-
La Interfaz Gráfica de Usuario Hasta el momento, el proyecto Kat ha estado centrado en la compilación de una infraestructura de búsqueda de escritorio sólida. Este énfasis sobre el motor se traduce en que hemos tenido que invertir comparativamente menos tiempo en producir una buena GUI. Puede pensarse en el cliente actual de Kat como el prototipo cuya meta es la demostración del uso del API. Esto permite a los usuarios iniciar búsquedas, buscar catálogos y abrir documentos. También les permite buscar dentro de catálógos, pero el verdadero GUI, que actualmente se encuentra en desarrollo, no se parecerá a la versión actual. Se están diseñando dibujos y compilando modelos para realizar tests de usabilidad. Puede comprobarse el estado del rediseño de la GUI en las páginas Wiki. Los usuarios de la nueva GUI de Kat pueden incluso no notar que están usándolo. El cuadro de búsqueda se integrará en el entorno operativo de tal modo que simplemente se encontrará en todas partes. Cada vez que un usuario necesite buscar algo, allí estará Kat. Sirva como ejemplo el hecho de que se sigue trabajando para añadir capacidades de búsqueda de Kat al diálogo de apertura de fichero estándar.
KTools: Kat • LINUX USER
tos han sido escritos en el mismo lemguaje, no importa el dominio al que pertenezcan, presentarán el mismo perfil lingüístico. En colaboración con el autor de una librería para adivinar lenguaje, se desarrolló un método para la extensión de la técnica ngram para incluir la codificación. La librería resultante la utiliza en la actualidad Kat para la primera fase de administración del lenguaje. La librería Qt, que es la librería subyacente de KDE, maneja las tareas de decodificación y recodificación del texto. Usa UTF8 internamente, permitiendo decodificar el texto escrito en unos 40 caracteres de formatos de codificación, incluyendo las series ISO8859 así como muchas otras europeas, asiátias y del medio Este.
Indexado Reverso Figura 4: Podemos acceder a las opciones avanzadas de configuración mediante el módulo de control de Kat.
Enlaces Contextuales Hace algunos meses tuvimos la oportunidad de discutir nuestras metas y estrategias con los miembros del equipo de desarrollo del motor de enlaces contextuales de Tenor. El fin último de Tenor es producir una herramienta que rastree los enlaces que conectan las diferentes trozos de información almacenadas en un ordenador. Scott Wheeler, el principal autor del concepto Tenor, dijo sobre su proyecto: “Lo más interesante de Tenor es que hace preguntas más importantes que las herramientas de búsqueda de escritorio recientes. Esto va más allá de: ‘¿Cuál de mis ficheros contiene esta información?‘ aunque también puede hacerlo. Pero la cuestión es que también dice: ‘¿Qué tiene que ver con esto?‘ y hace posible buscar a través de esas relaciones.” La idea es no perder de vista la información contextual que se está desperdiciando ahora. Si un usuario guarda una imagen adjuntada a un mensaje de correo, una parte importante del contexto se pierde para siempre: ¿Quién me ha enviado la imagen? ¿Contiene mi agenda la dirección del remitente? ¿He recibido otros mensajes del mismo remitente? ¿He recibido más ficheros gráficos en sus
otros mensajes? ¿En qué otro lugar he usado esta imagen? Un motor de búsqueda de escritorio tradicional no puede responder a estas simples cuetiones. Con la idea de ser más efectivos, este tipo de información ha de ser seleccionada por el sistema de la forma más transparente y automatizada posible. Los usuarios incluso no deberían notar que hay un proceso corriendo en segundo plano. Y, lo más importante, el proceso requerirá la colaboración más activa de las aplicaciones. Cada vez que un usuario cree, borre o mueva un trozo de información, la aplicación usada para llevar a cabo esa determinada acción deberá notificarlo a Kat para que dicha información no se pierda. Una gran parte de la información de contexto llega a través de documentos almacenados en el sistema de ficheros, de modo que Kat es la base perfecta para un motor de enlazado contextual como Tenor. Actualmente se ha vuelto a trabajar en el API para facilitar la adición de una capa contextual al actual esquema de almacenamiento. Cuando se haya acabado, se comenzará con la integración de un enlazado de contexto dentro de Kat.
WWW.LINUX- MAGAZINE.ES
Una vez que el texto ha sido recodificado a un formato normalizado, Kat debe compilar lo que se ha denominado el “reverse index”. Un reverse index (índice inverso) es una lista en la que cada palabra del documento está vinculada a los documentos en los que aparece dicha palabra. La dirección normal de los datos es documento --> palabras. Cuando se accede a los datos en un indice inverso, la estructura es la opuesta: palabra --> documento. La creación de este índice puede parecer trivial, pero no lo es. Incluye conceptos tales como: *señalización de frases (división de la oración en palabras); *procedencia de palabras (emparejar palabras en singular/plural o formas conjugadas); *administración de palabras de interrupción (exclusión del índice de palabras frecuentes que no son útiles para la búsqueda, tales como artículos, pronombres, etc); *puntuación por proximidad y rango. Los algoritmos usados en las primeras ediciones de Kat resultaron demasiado lentos e ineficientes, así que para la próxima, está en proyecto sustituirlos con librerías externas especializadas en texto completo y recuperación. Una de las elecciones posibles es Lucene, una librería del proyecto Apache.
Número 15
73
LINUX USER • KTools: Kat
Lucene se escribió originalmente en Java y se encuentra disponible en varios portes, como los portes C# usados por Beagle y el C++ que se está planeando usar. Con objeto de simplificar el proceso de adopción de Lucene, hemos pedido al autor la posibilidad de portarlo a C++/Qt, el entorno usado en KDE. Aceptó nuestra propuesta, creando la librería CLuceneQt. En los próximos meses, estaremos colaborando con él para introducir esta librería en la infraestructura de Kat. Otra opción posible para indexar es a través del indexador FT3. FT3 es una implementación de técnicas de indexación inversa utilizadas por Lucene. Usa FQLite3 para almacenamiento, la misma base de datos que emplea Kat. El hecho de que Kat esté basado en la misma base de datos de programas de fondo que FT3, hace que la introducción de los algoritmos FT3 en Kat sea extremadamente simple. Nuestra meta final es ofrecer a los usuarios la posibilidad de elegir entre
Mantenimiento de Kat Se está planeando llevar a cabo una comprobación de Kat en un importante número de entornos usando una amplia variedad de documentos. Dicho plan requiere tiempo, pero también material, y material significa dinero. Kat es un proyecto independiente que no patrocina una gran empresa, lo que significa que depende de la comunidad para su mantenimiento. Actualmente se está buscando un patrocinador. Mandriva se ha ofrecido amablemente a alojar nuestro sitio web, aunque se necesitan otros patrocinadores para otros aspectos del proyecto. No sólo se necesitamos dinero. Si disponen de equipos en desuso o de partes de ordenadores, por favor, contacten con nosotros. El establecimiento de infraestructuras de pruebas acortaría el tiempto de desarrollo. Agradeceríamos especialmente las donaciones de portátiles no demasiado viejos (con procesadores más rápidos que 1.5 Ghz), discos duros grandes (de más de 100 Gb), módulos de memoria (para portátiles y equipos de sobremesa), etc. Para más información sobre cómo hacer donaciones puede visitarse el sitio web de Kat.
74
Número 15
diferentes fondo.
programas
de
El Demonio Una característica importante de Kat es su habilidad para actualizar el índice automáticamente cuando se produce un cambio en alguno de los ficheros o directorios que han sido indexados previamente. Esta actualización utiliza las señales emitidas mediante el módulo del kernel inotify. Cada vez que se crea, modifica, borra o renombra un fichero, inotify emite una señal que puede ser interceptada por cada aplicación y sobre la que actuar. Es importante recalcar que inotify es una adición reciente al kernel de Linux. Este módulo del kernel se ha convertido en una parte oficial del árbol del kernel de Linux solamente en la versión 2.6.13. Esto significa que si se quieren obtener beneficios de la habilidad de Kat de actualizar automáticamente el índice, el sistema Linux ha de estar basado en una versión reciente de su kernel. Existen extensiones para antiguas versiones del kernel, pero sugerimos a los usuarios que actualicen sus sistemas Linux. Actualizar un sistema es, actualmente, una fácil tarea, ya que las nuevas versiones de la mayoría de las distribuciones (Mandriva, Ubuntu, Suse y otras distros) funcionan con un kernel inotify habilitado. Con objeto de recibir las notificaciones desde inotify, Kat necesita cooperar con el servicio demonio que corre en segundo plano. Este demonio Kat recibe las señales desde inotify y
WWW.LINUX- MAGAZINE.ES
actualiza el índice. Además de esto, cada vez que el sistema se cierra y rearranca, el demonio Kat comprueba si el sistema de fichero ha permanecido igual. El demonio es la parte más delicada de Kat, ya que tiene que correr sin interrupción a través de todas la sesiones del usuario. Su administración
corre a cargo de un programador de tareas que puede ser configurado por el usuario. La implementación actual de ese programador de tareas está basada en porciones de tiempo. Si se configura Kat para que use el 10% del tiempo de la CPU, y si el trabajo de indexación lleva unos 10 minutos, Kat quedará desocupado 90 de los siguientes 100 minutos. Los desarrolladores son conscientes de las limitaciones de esta solución, por lo que se está proyectado desarrollar una nueva versión del programador que se activará cada vez que el ordenador se se encuentre desocupado y se desactive cuando reanude su actividad.
Interfaz del Programa de Aplicación Una de las metas principales incluidas en el proyecto de Kat es entregar una infraestructura de aplicación completa para búsquedas de escritorio para que otros desarrolladores puedan añadir capacidades de búsqueda a sus aplica-
KTools: Kat • LINUX USER
ciones. Se está trabajando actualmente en la compilación de documentación comprensible de cada clase y cada método del API de Kat. La página web de Kat contiene un enlace a la documentación de Kat. Ésta usa Aidox, una herramienta de documentación automatizada que lee los contenidos especiales insertados en el código y que compila muy bien documentos paginados que parecen los documentos de la librería Qt.
Uso de Kat Kat comienza a aparecer en cada vez más distros Linux. Si su distribución Linux no lo incluye, puede obtenerse desde su página web [1].Ésta incluye el código fuente y los paquetes para Suse, Mandriva, Fedora y Debian. La versión 0.6.4 de Kat (va con Mandriva 2006), crea durante la instalación un catálogo de inicio, de manera que el usuario medio nunca tendrá que enfrentarse con la administración del catálogo.
Cuando se corre Kat un diálogo de búsqueda pregunta si quiere introducirse la palabra que ha de buscar Kat dentro del catálogo (Figura 1). En la versión actual las búsquedas permitidas son simples: una única palabra cada vez. Se está trabajando en la actualidad en técnicas de búsqueda avanzadas que permitirán entradas complejas con operadores boleanos (AND, OR, NOT, etc.). Tras introducir la palabra, hay que presionar el botón Search y los resultados aparecerán en la parte inferior de la ventana. Si se necesita crear un nuevo catálogo para indexar otra carpeta, es necesario seleccionar Catalog | New. Un cuadro de diálogo solicitará información acerca del catálogo que se desea crear, tales como el nombre, descripción, notas, autor, y por último pero no menos importante, la opción para su auto-actualización (Figura 2). Para habilitar esta última opción, el usuario da instrucciones al demonio para que vigile la carpeta y de esta forma reaccione a los cambios, como pueden ser la creación de ficheros,
borrado o modificaciones de los mismos. Si el catálogo se compila para un medio de sólo lectura, como un CD-ROM, no tiene sentido habilitar la característica de auto-actualización, ya que los ficheros nunca necesitarán ser reindexados. Existen muchas opciones para configurar el procedimieto de indexado. Las otras pestañas visibles en la ventana, Mime Types (Figura 3), Metadata, Fulltext y Thumbnails, permiten a los usuarios seleccionar los tipos de ficheros que serán indexados y los que simplemente serán ignorados. Tan pronto como el usuario hace clic en OK el demonio comienza a compilar el índice para el nuevo catálogo creado. Puede monitorizarse el estado del proceso de indexación mediante un ■ clic en los iconos de Kat.
RECURSOS [1] Página web de Kat: http://kat. mandriva.com/
LINUX USER • Desktopía: Whaw
Organización de ventanas con Whaw
LA VENTANA INDISCRETA Si estás cansado de torear con el solapamiento de ventanas, Whaw te ayudará a organizarlas. POR HAGEN HÖPFNER 0.1.2 de [2], desempaquetar el archivo e instalar el programa usando ls tres etapas normales del proceso: ./configure && make && su -c "make install". Esto coloca los ejecutables en /usr/local/bin. El test que realizamos en nuestra máquina con Suse Linux 9.3 necesitó la librería popt-devel para construir el paquete. Debian, sin embargo, requirió las librerías libpopt y libxmu-dev.
N
inguna pantalla de ordenador activas en un área previamente es lo suficientemente grande definida. para organizar de forma coCompilación rrecta un gran número de ventanas. Antes de correr Whaw por primera vez, Éstas son susceptibles de solaparse se necesita compilar la herramienta a impidiendo que puedan verse otras que partir del código fuente. Para ello, será se encuentran detrás. Aunque algunos necesario descargar la versión actual administradores de ventana como KWin (el administrador de ventana de KDE) ofrecen configuraciones que permiten a los usuarios especificar el modo en el que las ventanas abiertas deben organizarse, sin embargo no ayudan a ordenar un revoltijo de ventanas que ya existe. Es aquí donde Whaw [1] puede ayudarnos. Es una herramienta de distribución de ventanas independiente del administrador de ventanas. No solamente soporta Gnome y KDE, sino que también funciona de manera bastante satisfactoria con administradores de ventana simples como WindowMaker. Whaw permite con un clic disponer las ventanas Figura 1: Al comienzo reina el caos. Las ventanas se encuentran desorganizadas. Es el momento idóneo para lado con lado o coloarrancar la herramienta de distribución de ventana independiente del administrador. car todas las ventanas
76
Número 15
WWW.LINUX- MAGAZINE.ES
Desktopía: Whaw • LINUX USER
Figura 2: Realineamiento vertical con Whaw.
Puesta en Escena Veamos al escenario original que presentamos en la Figura 1. Los tres terminales de ventana se solapan, y la situación se ve agravada por la ventana de The Gimp. Para permitir que el limpiador de ventana virtual se ponga seriamente a trabajar, se ha de introducir whaw en la consola, luego ha de moverse el ratón al extremo izquierdo superior de la pantalla para activar Whaw. El puntero del ratón se transforma en una flecha de cuatro puntas. A conti-
nuación se arrastra el ratón a la derecha a lo largo del borde superior de la pantalla. El puntero vuelve a cambiar de nuevo a una doble flecha que apunta a izquierda y derecha. En otras palabras, se ha seleccionado un alineamiento vertical. Con un click izquierdo sobre cualquier ventana se envía al kicker permitiendo el acceso a las ventanas subyacentes. Siguiendo los mismos pasos para todas las ventanas se conseguiria realinearlas. Seguidamente se mantiene pulsado el botón izquierdo del ratón y se arrastra
alrededor del área donde se desea queden posicionadas las ventanas. El programa manejará escalamiento y posicionamiento de forma automática. La Figura 2 muestra el resultado del realineamiento vertical en un área seleccionada del escritorio. Para extender las ventanas a lo largo de la longuitud de la pantalla, simplemente hay que seleccionar unas cuantas y hacer un clic derecho sobre el escritorio. Para realinear horizontalmente, primero ha de activarse Whaw mediante un clic en el ángulo izquierdo superior y luego arrastrar el ratón a lo largo del borde izquierdo de la pantalla. El puntero se transforma en una doble flecha señalando arriba y abajo para indicar el modo seleccionado. El procedimiento es similar al que se emplea en el realineamiento vertical. Si se selecciona una ventana equivocadamente, sólo es necesario arrastrar el ratón al ángulo izquierdo superior de la pantalla. Con ello Whaw revierte al escenario original, aunque permanece activo. Para deshabilitar la herramienta se hará un clic derecho ■ sobre el escritorio vacío.
LINUX USER • Gnumeric
La La Hoja Hoja de de Cálculo Cálculo Gnumeric Gnumeric de de Gnome Gnome
CONTABILIDAD RÁPIDA OpenOffice Calc es adecuado para la mayoría de las aplicaciones de hojas de cálculo, pero si se estás buscando una ejecución mejor y una aplicación que consuma menos recursos, prueba con el competidor de Calc, Gnumeric. POR OLIVER FROMMEL
L
as aplicaciones relativas a hojas de cálculo han jugado siempre un importante papel en los ordenadores. Uno de los primeros programas de hojas de cálculo comerciales, Lotus 123, fue considerado como referente para la compatibilidad de los llamados ordenadores compatibles IBM. Excel emergió unos cuantos años más tarde, llegando pronto a constituirse el “fichero Excel” en sinónimo de documento de una hoja de cálculo. Evidentemente, estas aplicaciones pueden hacer mucho más que el simple cálculo al que la mayoría de la gente reduce su uso. Donde realmente brillan es en los cálculos recurrentes de administración y en la visualización de los datos resultantes en forma de interesantes y fáciles cartas. En el mundo Linux, la herramienta de hoja de cálculo Gnumeric (Figura 1) se ha convertido en una aplicación extremadamente madura.
Entrada La edad de Gnumeric se le nota. Lanzado por el fundador de Gnome, Miguel de Icaza, Gnumeric es el programa más viejo de entre todos los de Gnome, un importante bloque de construcción del proyecto Gnome. Hoy por hoy, cuando se cumple el octavo año de su nacimiento, ofrece un amplio rango de funciones y una estabilidad envidiable. Además, el programa no pretende emular a su equivalente de Microsoft, Excel, sino que sigue su propio camino y en muchos
78
Número 15
casos le gana la mano a sus competidores. Los desarrolladores se han asegurado de que Gnumeric sea compatible con sus competidores, con unas cuantas excepciones, tales como los objetos MS Office embebidos. Y puede manejar todas las funciones matemáticas que ofrece Excel. Cuando se arranca a través del menu, o bien cuando se escribe gnumeric en la línea de comandos, aparece la ventana principal en cuestión de segundos. La hoja de cálculo OpenOffice Calc, por el contrario, necesita de hasta tres veces más. Cumplimentar manualmente una tabla con datos es bastante fácil: se hace clic en una celda y se introducen los valores que se necesitan. No hay necesidad de reescribir un valor para copiarlo en una celda vecina: se hace clic sobre el valor original y luego se arrastra el ratón hasta la esquina inferior derecha de la celda. El cursor del ratón se convierte en una delgada cruz. A continuación se pulsa y mantiene pulsado el botón del ratón y se arrastra un marco sobre las celdas a las cuales se desea copiar el valor original, luego se deja que Gnumeric acabe el trabajo.
Enumeraciones Sín Esfuerzo A menudo las hojas de cálculo contienen secuencias numéricas, por ejemplo, puede disponerse de valores numéricos en la primera columna para contar las
WWW.LINUX- MAGAZINE.ES
filas. Gnumeric vuelve a mostrar su potencia permitiendo introducir esos valores de una forma realmente simple. Se escribe el valor de comienzo en la primera celda y el siguiente en la segunda celda. Se seleccionan ambos manteniendo pulsado [Ctrl] (la tecla para múltiples selecciones en Gnumeric) haciendo clic sobre ambas celdas. A continuación se arrastra de nuevo el ratón a la esquina inferior derecha de la segunda celda. Seguidamente se hace clic y se arrastara para rellenar con la serie numérica en tantas celdas como se deseen (Figura 2). Gnumeric referencia los dos valores del comienzo para calcular el intervalo. Si se introducen 1 y 2 , por ejemplo, rellenará las celdas seleccionadas con 3,4,5,6, etc. Si se necesitan una serie de números pares, se introducirán como valores de entrada el 2 y el 4. Gnumeric ofrece 256 columnas por defecto, pero este límite puede ampliarse fácilmente si uno mismo compila el programa. Esto se hace cambiando en el fichero src/gnumeric.h los valores de SHEET_MAX_COLS y SHEET-MAX-ROWS
Genio Matemático Claro que la introducción de cifras en la filas no es de mucha utilidad a menos que se puedan realizar cálculos. Como ayuda para hacerlo, Gnumeric ofrece algunas funciones matemáticas, desde simples sumas y restas, a complejos cálculos estadísticos. Gumeric supera a la mayoría de sus competidores en términos de precisión y alcance funcional. Si se conoce el nombre de una función puede escribirse en la celda un signo igual seguido de dicho nombre. Los argu-
Gnumeric • LINUX USER
Figura 1: Gnumeric es una hoja de cálculo rápida y versátil con soporte para muchas funciones matemáticas y científicas.
mentos de la función serán típicamente otras celdas identificadas mediante una letra y un número. Por ejemplo, la celda superior izquierda es la A1. Para sumar A1 y A2, pueden escribirse en otra celda =sum(A1;A2). Si se copia esta fórmula y se inserta en otra celda, Gnumeric modifica automáticamente los nombres de los argumentos a emparejar, es decir, para la columna B se tendría =sum(B1;B2). Mientras el cursor de texto señala el lugar en la celda en el que se necesita insertar un argumento, simplemente se puede hacer clic sobre la celda requerida. El programa dibuja un marco blanco y negro alrededor de la celda y espera más entradas. Luego puede escribirse un punto y coma y hacer clic sobre más celdas para añadir más argumentos. Como alternativa, se puede hacer clic sobre el botón f(x) para insertar una función. Con esto se le está diciendo a Gnu-
Figura 2: Para crear series numéricas, introduce los dos primeros valores y luego arrastra a la esquina derecha del fondo de la selección.
meric que nos ofrezca una ventana con la lista de funciones disponibles. El programa lista las funciones mediante un campo de aplicación a la izquierda: bases de datos, científica, financiera, estadísticas, etc. [Ctr]+[F] abre la función de búsqueda, la cual no es muy práctica, ya que una búsqueda sólo busca los nombres de categorías. Esto mismo es igualmente aplicable a la lista de funciones. [Ctrl]+[F] presenta una pequeña ventana de búsqueda, aunque ésta está restringida al nombre de la función sin incluir las descripciones, lo cual podría ser más útil. En otras palabras, si se está buscando una función que resuelva un problema específico, es necesario conocer el nombre de la función antes de comenzar. Por otra parte, puede ser útil el hecho de que las descripciones de las funciones en Gnumeric digan si dichas funciones son compatibles con Excel. Después de seleccionar la función, se hace click sobre el botón Insert para arrancar el Formula Guru (Figura 3). El gurú provee de una línea de entrada para los argumentos de la función requerida. Puede seleccionarse una línea y hacer clic en la celda que contiene el valor requerido, antes que introducir el valor manualmente. Se presiona [Enter] en la fórmula experta para confirmar cada línea de argumento.
Interfaz Figura 3: La “Fórmula Guru” ayuda a los usuarios a introducir más fórmulas complejas.
Si se necesita una función que Gnumeric no ofrece, se puede añadir un plugin. Por
WWW.LINUX- MAGAZINE.ES
ejemplo, el programa ofrece plugins en C. La interfaz permite obtener el valor en la celda llamando a c.get_value, aunque desafortunadamente algunas distribuciones no incluyen dicha interfaz. De nuevo, sería necesario compilar Gnumeric desde el código fuente para poder explotar completamente el potencial de los plugins del programa. Gnumeric permite importar un tercer grupo de formatos tales como Excel, Quattro Pro, Multiplan, Lotus 123, OpenOffice Calc y Xbase. Gnumeric además lee ficheros de texto separados por comas (CSV) y tiene un experto para procesar ficheros de texto estructurados. Usa la interfaz GnomeDB para la lectura de entradas desde los formatos de las bases de datos tales como Postgresql o Mysql.
Una Buena Alternativa La hoja de cálculo de Gnumeric deja atrás a sus competidores con una amplia colección de funciones matemáticas y científicas. Incluso si muchas de las opciones avanzadas de Gnumeric son demasiado avanzadas, Gnumeric sigue siendo un potente pro■ grama para las tareas diarias.
RECURSOS [1] Gnumeric: http://www.gnome.org/ projects/gnumeric [2] Python en Gnumeric: http://www. gnome.org/projects/gnumeric/doc/ sect-extending-python.html
Número 15
79
LINUX USER • Educación
La plataforma educativa Moodle
EL PRESENTE Y EL FUTURO En el número anterior de esta serie de artículos iniciamos una enumeración de las posibilidades de una plataforma educativa en un aula real basándonos en ideas de Joan Queralt y Aníbal de la Torre. Acabaremos el repaso examinando los nuevos módulos y desarrollos de moodle: las posibilidades de integrar un portfolio electrónico y bitácoras personales, si es posible utilizar recursos multimedia o páginas web interactivas, el cumplimiento de los estándares educativos… Todo fascinante para un enseñante tecnófilo, el desafío es lograr que lo sea para todos los enseñantes. POR JUAN RAFAEL FERNÁNDEZ GARCÍA.
P
or falta de espacio tratamos en la segunda parte de forma sólo superficial cómo pueden los alumnos compartir recursos. Es un tema que tiene una importancia prioritaria desde una perspectiva constructivista y debemos tratarlo con más profundidad. Una enseñanza centrada en el que aprende tiene como una de sus consecuencias el aprendizaje de la autonomía. Este enfoque pedagógico conduce a la elaboración de una carpeta que resuma y ejemplifique los hitos y logros del que aprende: el llamado portfolio; Un espacio que el estudiante siente como propio y del que es responsable, su manifestación pública. Es lógico preguntarse por la posibilidad de construir una versión electrónica. ¿Es posible construir páginas personales y un ePortfolio en moodle?
¿Un ePortfolio en moodle? En las versiones anteriores y actual de moodle la única forma de compartir recursos personales es como adjuntos en los foros (un adjunto por mensaje) o como tareas que el profesor ha debido encargar previamente (un recurso por tarea). Por supuesto que los alumnos pueden participar en discusiones en foros o chats y construir un documento mediante el wiki, pero la jerarquía es evidente; lo que echamos de menos es un espacio personal donde puedan expresarse, investigar de forma individual o guardar sus mejores trabajos. Hasta ahora lo único parecido a un
80
Número 15
espacio personal son los wikis personales, donde es complicado incluir imágenes, ficheros, etc. La situación va a cambiar. El módulo MyFiles (ver la discusión en [1]), de Michael Penney, tiene el siguiente cometido [2]: «MyFiles es un sistema que permite almacenar y compartir ficheros personales en Moodle. Los estudiantes pueden enviar los ficheros guardados en su almacén personal de ficheros a las tareas de sus cursos». El módulo Portfolio de Matt Oquist (presentado en [3] y demostrado en [4]) utiliza MyFiles para ir más allá: «el bloque MyFiles permite a un usuario subir recursos y compartirlos con otros usuarios del sistema. Intento partir de esa base, añadiendo capacidades más amplias de control de acceso y de publicación y una página que muestre elementos del portfolio (en la que pueda buscarse por usuario, curso, categoría de cursos, tipo de elemento, nombre del portfolio (Profesional, Académico…), etc.». La versión 1.6 incluirá al fin bitácoras (Blogs) como «la herramienta principal para las actividades que impliquen reflexión» y canales RSS por usuario, curso y sitio. Desde un punto de vista psicológico, en los foros se participa pero uno es dueño de su bitácora. La experiencia prueba que a nuestros alumnos les encanta escribir, que lo único que no les gusta es escribir al dictado de sus profesores. Y para la versión 1.7 está prevista una página My
WWW.LINUX- MAGAZINE.ES
Moodle personal semipública, que proporcionará una vista global configurable de todos los cursos en los que estemos inscritos, sus fuentes RSS, etc. Volvamos ahora a la enumeración de ejemplos concretos de uso de la plataforma educativa. 8.- Nuestra octava sugerencia coincide con el deseo octavo de Joan Queralt: Quiero que los estudiantes visiten una página web donde hay información/actividades que después me han de enviar en forma de trabajo personal. La solución de Joan: «Tienes que crear un Recurso del tipo Enlace web de manera que la página web externa se abrirá en una nueva ventana del navegador, así no saldrán del curso. Que recojan la información que les pides y después la envíen según la forma que quieras (Diario, actualmente llamado Tarea de texto en línea, Foro, etc.).» ¿Qué tipos de recursos podemos integrar? Es posible crear enlaces a documentos en los formatos más conocidos (mp3, avi, mov, pero también doc, ppt…) y moodle elegirá el icono correspondiente a cada formato. El filtro Multimedia incrustará automáticamente los archivos multimedia que hayamos vinculado en nuestras páginas html (ver la figura 1). También podemos enlazar a recursos web que ejecuten java, flash o javascript y por tanto contengan actividades educativas interactivas. Se puede llamar a páginas con ejercicios
Educación • LINUX USER
Figura 1: Recurso multimedia incrustrado.
en JavaHotPotatoes ([5], el ejecutable funciona en una máquina virtual java pero las actividades generadas no utilizan más que html y javascript), JClic ([6], en java) o Mathenpoche ([7], en flash). Pero hay un segundo grado de integración posible: que los alumnos se hayan identificado ante la plataforma, los resultados de realizar los ejercicios pasen directamente a la base de datos de moodle y quede registro de su trabajo y de las calificaciones obtenidas. Quizás haya que insistir en la diferencia: por supuesto que es posible añadir como fichero un recurso de cualquier formato a la plataforma, y será el sistema operativo del usuario (mediante las cabeceras MIME) el que deberá solucionar el problema de con qué programa abrir el fichero; no estamos hablando de si no podemos colgar un fichero en flash, sino de si una actividad en flash usa la misma base de datos de resultados que la plataforma. Son cosas muy distintas. ¿Es posible esto? ¡Sí! En primer lugar el módulo Hot potatoes quiz, aunque marcado como «en desarrollo», está ya incluido en las distribuciones de moodle. Al añadir una actividad generada con (Java)HotPota-
Figura 3: Un ejemplo de HotPotatoes integrado.
toes podremos (figura 2) configurar el modo en que se presenta a los estudiantes, si la actividad se puede intentar varias veces, e incluso desde qué máquinas se puede realizar (la opción «Se requiere dirección de red» está pensada para restringir el acceso al cuestionario a las máquinas que se desee y en el momento que se elija). La figura 3 nos muestra un ejemplo de una actividad creada externamente e integrada en nuestro sitio web. ¿Hay modo de integrar las actividades realizadas en flash? Pues sí, hay un módulo experimental Flash, que habrá que descargar desde [8]. La figura 4 nos muestra el módulo en plena ejecución. En la figura 5 vemos los resultados incorporados a la base de datos de calificaciones del sitio. No conozco módulos que permitan la integración de actividades (j)clic. Sí se ha discutido la posibilidad de un módulo para WebQuests. Para ser más precisos se le ha sugerido y/o rogado a
Figura 4: Una actividad flash integrada.
Figura 2: Configuración de una actividad HotPotatoes.
Antonio Temprano, el autor de phpwebquest; puede leerse sobre el tema en [9], donde sus argumentos (en contra) son importantes. También en las páginas del curso de uso de moodle se ha discutido el tema (por ejemplo en [10]) y hay opiniones que afirman que el constructivismo de moodle supera a los generadores de webquests y los hace innecesarios.
WWW.LINUX- MAGAZINE.ES
Figura 5: Resultados de la actividad flash.
Comunicaciones multimedia 9.- (era el deseo sexto de Joan): Quiero que los estudiantes hagan una entrevista a una autora teatral amiga. Su solución: «Primero pide a los estudiantes que preparen las preguntas en grupo pequeño (ver deseo quinto). Cuando las tengáis todas preparadas las repartes entre todos los participantes y montas un Chat. Quedáis un día a una hora con la entrevistada (¡hace falta que esté registrada en el sistema!) y los estudiantes y que estos vayan planteando las preguntas haciendo un diálogo ordenado y moderado por el profe. Una vez acabado tendréis la trascripción de la entrevista que se puede imprimir, editar, etc.» Moodle integra un programa de chat y recientemente ha incorporado un módulo de mensajería. ¿Son los únicos medios síncronos en que pueden comunicarse los participantes en una actividad? En principio sí, lo cual es un inconveniente si lo que se espera es videoconferencia o telefonía IP. Pero no hay ningún motivo para que desde la página del curso no haya un enlace a una herramienta de videoconferencia por ejemplo si los medios disponibles (la potencia y accesibilidad del servidor) lo permiten. De hecho (ver [11]) el análisis de la solución de streaming de video de Dokeos (algo que se cita como superioridad técnica de esta otra plataforma educativa) que hace Martin Dougiamas el 28 de febrero de 2005 muestra que es perfectamente repetible en moodle: «Lo que el proyecto Dokeos utiliza realmente es icecast y winamp para hacer streaming unidireccional del profesor a los múltiples estudiantes. Esto es externo a la aplicación web y es perfectamente factible ahora mismo con moodle». El párrafo anterior es revelador. He escrito ya sobre cómo valoro el estilo
Número 15
81
LINUX USER • Educación
Figura 6: Importación de un curso.
Figura 7: Uso del módulo scorm.
Unix de software: pequeños programas que hagan bien una cosa; e integración con el resto del sistema operativo. Moodle constituía un problema desde este punto de vista: una herramienta que debe poderse instalar en servidores de cualquier sistema operativo. Pero ¿cómo crear un servidor de video en php multiplataforma? ¿no es superior java en este aspecto? Ahora tenemos una solución: no todo tiene que estar incluido en el código de moodle. ¿Por qué no utilizar las herramientas disponibles?
cliente y ser dueño. Una reciente entrada en la bitácora de David Wiley ([13]; hay traducción castellana parcial, [14]) nos da que pensar; viene a decir que lejos de las complicaciones técnicas un tanto inútiles que han creado los Objetos de Aprendizaje, la tarea insustituible de los profesores es contextualizar los recursos, ponerlos en un contexto educativo. ¿Qué condicionantes son necesarios para la reutilización de los recursos? «Mientras la gente desee (1) compartir abiertamente (2) materiales educativos que (3) se puedan representar correctamente en la mayoría de navegadores web y además (4) se proporcione acceso al código no ofuscado de dichos materiales». Nos suena, ¿verdad? Sin embargo el análisis de los procesos, el marcado detallado de los recursos son sumamente beneficiosos para la mejora de las estrategias y para que las máquinas nos ayuden a enseñar y aprender. Pero este marcado, este seguimiento de estándares debe (debería, puesto que no se ha conseguido) ser algo transparente para los profesores. Aunque el tema es fascinante hasta yo comprendo que este no es su sitio, tenemos que retomar el hilo.
Peculiar introducción a los estándares Los estándares son necesarios, en el caso que nos ocupa, necesitamos estándares para los llamados Objetos de Aprendizaje. Es necesario poder reutilizarlos e intercambiarlos entre los distintos gestores de contenidos educativos. De nuevo la racionalidad económica: hace falta que un curso o unos recursos generados con el WebCT de la universidad A puedan reutilizarse en el moodle de la academia B. Detrás de los creadores de estándares educativos (mejor educacionales, que los estándares no educan) hay organismos reguladores: el ejército de los Estados Unidos (SCORM), la Unión Europea (Ariadne), la industria. ¿Es que estos estándares son sólo complicaciones técnicas que únicamente tienen una justificación económica? Sí y no. Mal vamos si confundimos mercancías clásicas con formas de conocimiento; los profesores necesitamos poder intercambiar recursos independientemente de la plataforma que utilicemos. Mal podremos hacerlo si no tenemos el fichero fuente de la animación que vamos a utilizar, no podremos adaptarla a nuestras necesidades y a nuestra circunstancia ni posiblemente redistribuirla. Otra vez la diferencia entre ser
82
Número 15
Moodle y los estándares Se ha creado un estándar para empaquetar contenidos, se han creado metadatos para describir los recursos educativos (¿comprenden ahora la importancia de GNU Edu?), se ha estandarizado la información sobre los perfiles de los alumnos, se ha trabajado en la interoperabilidad entre tests y cuestionarios, en las metodologías, la secuenciación de los contenidos, la definición de las competencias, los repositorios digitales, la matriculación de los alumnos y la accesibilidad de los sistemas. ¿Cómo intercambiar cursos? Si son cursos de otro sitio moodle no hay más
WWW.LINUX- MAGAZINE.ES
que subir al espacio «Archivos del sitio» de la plataforma el fichero comprimido, pulsar en «Restaurar» (figura 6) e ir siguiendo las indicaciones. ¿Y los paquetes de otras plataformas? Según la documentación, actualmente (1.5.3) moodle puede importar sin problemas paquetes creados según el estándar SCORM 1.3 (SCORM 2004). El módulo scorm se encarga (figura 7). Hay también utilidades varias para ayudar a la migración, véase [15]. Y demos de cómo pasar por ejemplo de WebCT a moodle. Otro estándar, el IMS Learning Design, se ocupa de describir y codificar las metodologías educativas: el diseño pedagógico. Pues bien, para la versión 1.7 está previsto el soporte (perdón por repetir el anglicismo) preliminar para IMS LD nivel A. Más inmediato es un paso adelante dado con respecto a otro estándar, el IMS Simple Sequencing. Ya es posible (y en la 1.6 vendrá de serie) la integración con LAMS mediante una actividad o un formato de curso [16]. ¿Qué es LAMS? Aníbal de la Torre lo resume perfectamente [17]: «LAMS es una herramienta de diseño de secuencias de aprendizaje (…) que nos permite construir rutas a través de las cuales los alumnos pueden avanzar en función de sus logros. Además, LAMS Community dispone de un espacio para profesores donde a modo de repositorio, se pueden compartir secuencias ya hechas». Ahí está, como dice Aníbal, por si le sirve a alguien. Que en una educación presencial (o virtualmente presencial) tiene poco sentido. ¿Qué dicen los estándares sobre exámenes? Los organismos estandarizadores han analizado los tipos de cuestionarios, se han creado descriptores y modos de intercambiarlos. Es la especificación IMS Question & Test Interoperability. 10.- Los cuestionarios son el tema de nuestra última sugerencia (deseo décimo de Queralt): Quiero que los estudiantes completen un cuestionario autocorrectivo. Su solución: «Tienes que montar un Cuestionario siguiendo estos pasos: • Como probablemente todavía no tienes ninguna pregunta hecha vale la pena que ante todo crees una categoría de preguntas, p.ej: geografía, poesía, entomología, etc.
Educación • LINUX USER
los cuestionarios pueden ser mezcladas (aleatoriamente) para dificultar la copia entre los alumnos, estarán escritas en html completo y podrán contener imágenes y recursos multimedia. La figura 8 nos muestra un ejemplo de cuestionario con tres modalidades distintas de pregunta.
¿Todo perfecto? Figura 8: Un cuestionario.
• Una vez tengas la categoría, haz clic en el botón Muestra y podrás empezar a escribir preguntas de diferente tipo: de respuesta múltiple, de V/F, de respuesta corta, numérica, de relación, etc. • A medida que vas teniendo más y más preguntas en tu categoría puedes escoger, ponemos 10, y hacer un cuestionario: sólo tienes que seleccionar las 10 y añadirlas. • Finalmente guarda todo el cuestionario. Notas: Se pueden usar preguntas de otra categoría (y te ahorras trabajo). Se puede escribir un comentario a las respuestas correctas («¡Muy bien!») y a las incorrectas («Mírate la página 75 del libro»). La corrección es inmediata y el estudiante recibe el retorno al momento (8 de 10, p.ej.). Se pueden hacer aparecer las preguntas y las respuestas del cuestionario aleatoriamente, de manera que no haya dos cuestionarios en el mismo orden. Se puede permitir responder varias veces o sólo una. Se puede hacer que en el segundo intento sólo se tengan que responder las respuestas erróneas del primero. El profe tiene al final un informe, alumno por alumno, de qué respuestas ha acertado y cuáles no, así como del porcentaje de aciertos de cada pregunta (para cambiarla, si quiere)». El módulo Cuestionario ha mejorado bastante en la versión 1.5, hasta proporcionar toda una tipología (preguntas de opción múltiple, de respuesta corta, tipo verdadero/falso, de emparejamiento, numéricas, de respuesta incrustada estilo “cloze”…). Se han introducido nuevos formatos de exportación, IMS QTI (2.0) y XHTML. Los profesores pueden definir una base de datos de preguntas que podrán ser reutilizadas en diferentes cuestionarios. Las preguntas y las respuestas de
¿Es moodle una herramienta correcta desde el punto de vista de la accesibilidad? Hemos de decir que no, o que sólo parcialmente. Se están dando los primeros pasos necesarios: desde la versión 1.5 las páginas web cumplen las especificaciones XHTML Transitional 1.0 y por tanto son código html correcto; este es el primer paso para la conformidad con los criterios WAI (W3C) etc. Pero hay mucho camino por recorrer en este campo, demasiada predominancia del modelo visual clásico. Hay paquetes de idiomas para 43 lenguas distintas, lo cual es destacable. Y al fin se ha pasado a UTF-8. El problema aparece cuando se quiere que una intervención (sea un artículo, introducción a una actividad etc.) esté disponible en varios idiomas. Pensemos en un curso destinado a los padres y madres de alumnos inmigrantes, o en un cuestionario que se realiza como toma de contacto con los nuevos alumnos de un aula de Interculturalidad. Queremos que el texto les aparezca en su lengua materna en función de la configuración de los locales y del navegador. Esto es sólo parcialmente posible. Existe un filtro multilang que permite el uso de fragmentos de código como <span lang="en">Hello</span> <span lang="es">Hola</span>. Como puede apreciarse, una solución deficiente. Muy lejos de la potencia plurilingüe de herramientas como glasnost, comprobable en el sitio de OFSET [18];En este sentido le queda mucho camino por recorrer a moodle.
En el próximo número… Paso a paso, hemos ido acercándonos a la herramienta de más fondo teórico de las disponibles en el mundo del software libre educativo: Squeak. Squeak es otra forma de enfrentarse a un sistema operativo, próxima al espíritu
WWW.LINUX- MAGAZINE.ES
creativo de los pioneros. Es el programa que puede lograr que nuestros alumnos pasen de consumidores de software e información, de seguidores de caminos que han marcado otros, a dominadores conscientes de los recursos de la máquina. Esa es la importancia de Squeak y eso hace importante lo que se escribe sobre Squeak. La tarea de los que escribimos es hacer evidentes los significados. Y mostrar los ■ caminos que otros han abierto.
RECURSOS [1] Discusión sobre el recurso de módulo de Michael Penney: http://moodle. org/mod/forum/discuss.php?d=13359 [2] Cometido del módulo de Michael Penney: http://cdc.humboldt.edu/ moodle/course/view. php?id=3&topic=2 [3] Presentación del módulo Portfolio de Matt Oquist: http://moodle.org/mod/ forum/discuss.php?d=33201 [4] Demostración del módulo Portfolio de Matt Oquist: http://moodle.yi. org:1080/mdev/ [5] Hot Potatoes: http://hotpot.uvic.ca/ [6] JClic: http://clic.xtec.net/es/jclic/index. htm [7] MathenPoche: http://mathenpoche. sesamath.net/ [8] Módulo Flash para Moodle: http:// jamiep.org [9] y [10] Discusión sobre módulos WebQuest: http://bine.org.mx/padi/ mod/forum/discuss.php?d=92 [11] Análisis de la solución de streaming de video de Dokeos: http://moodle. org/mod/forum/discuss.php?d=5066 [12] Coccinella: http://hem.fyristorg.com/ matben/ [13] Bitácora de David Wiley… : RIP-ping on learning objects, http:// opencontent.org/blog/archives/238 [14] … y su traducción a castellano: http:// cent.uji.es/octeto/node/1917 [15] Utilidades de migración: http://cdc. humboldt.edu/moodle/mod/ netpublish/view.php?id=39 [16] LAMS: http://lamsfoundation.org/ integration/moodle/ [17] Definición de LAMS de Aníbal de la Torre: http://www.adelat.org/index. php?title=moodle_y_lams&more=1& c=1&tb=1&pb=1 [18] OFSET: http://www.ofset.org
Número 15
83
LINUX USER • Línea de Comandos
Descargas FTP y mirrors de sitios web con Wget
CONSÍGUELO TODO Wget descarga ficheros e incluso sitios web completos desde la línea de comandos. HEIKE JURZIK
E
xisten un buen número número de administradores de descarga basadas en GUI que permiten a los usuarios descargar ficheros y sitios web completos. Sin embargo, pocos son tan flexibles ni potentes como la instrucción de la línea de comandos wget. Wget descarga rápidamente cualquier cosa sin tener que teclear ni indicar demasiado. Wget “habla” HTTP, HTTPS y FTP; puede continuar transferencias interrumpidas e incluso dispone de una función de actualización que únicamente actualiza ficheros que han cambiado.
Por Todas Partes La sintaxis genérica para Wget es la siguiente: wget URL
Figura 1: La forma más simple del comando wget ignora las imágenes embebidas y no sigue los enlaces.
84
Número 15
La salida de la línea de comandos que imprime en la terminal permite ver qué está haciendo (Figura 1): en nuestro ejemplo, la herramienta está estableciendo una conexión a un servidor web (puerto 80 estándar) y descargando el fichero index.html a un directorio local, ignorando imágenes empotradas y sin seguir los enlaces. Si no se desea ver en la consola la salida de forma tan detallada, se puede especificar la opción -q (por quiet, es decir, funcionamiento silencioso). Sin embargo, cuando se le dice a wget que suprima la salida de mensajes de error y de información básica, conviene utilizar un término medio con la opción wget -nv. Ésta hará que el programa escriba una salida más corta en la consola pero que contiene alguna información. Para decirle que siga los enlaces locales en el servidor y refleje los datos recursivamente, habrá que añadir el parámetro -r. Si se hace de este modo es aconsejable especificar la profundidad de la recursion. Será preciso bajar un nivel para obtener tanto los index.html como todos los enlaces embebidos (tales como imágenes u otras páginas HTML): wget -r -l 1U www.linux-magazine.es
WWW.LINUX- MAGAZINE.ES
Si se configura el nivel de profundidad a -l 2, Wget extraerá los ficheros otro nivel por debajo de un primer nivel. En otras palabras, si index.html contiene un enlace a images.html, el administrador de descargas seguirá en este caso los enlaces a esta página. Se crea una carpeta para cada URL en el disco duro local, pero este funcionamiento puede cambiarse añadiendo otra opción. Puede especificarse -nH (“no Host”) para guardar todos los resultados en el directorio actual. Wget puede modificar los enlaces en ficheros HTML individuales. Por ejemplo, si se establece el parámetro -k, manejará referencias a imágenes, hojas de estilo, páginas HTML desde el mismo servidor, etc. Wget referencia enlaces a ficheros que ya ha descargado por medio de una ruta relativa, mientras que los ficheros que no han sido almacenados en el disco local mantendrán sus URLs completas.
¡Con Calma! Si una descarga voluminosa se interrumpe, no hay ni de que perocuparse ni es necesario comenzar desde el principio. Con la opción -c (de continue, esto es, continuar) continuará desde donde lo dejó la descarga previa. No importa si el intento de decarga original se hizo usando wget o un administrador de descarga gráfica, la herramienta compara los fragmentos con el original y continua a partir de allí. Mientras lo hace, presenta bastante información. Un ejemplo de la salida es The file is already fully U retrieved; nothing to do.
para archivos que ya existen en el disco duro. En los casos en los que se descargan repetidamente los mismos datos, es aconsejable especificar la opción -N, con la cual comparará el tamaño y la fecha de cada fichero con la copia local: $ wget -N U ftp://ftp.debian.de/debian-cd/U 3.1_r0a/i386/iso-cd/debian-U 31r0a-i386-binary-1.iso ... The sizes do not match U (local 7935840) - retrieving.
Si no ha cambiado nada, el administrador de descarga dirá algo parecido a:
Línea de Comandos • LINUX USER Server file not newer than U local file "index.html" U -- not retrieving.
Pero no hay que preocuparse si se olvida la opción: normalmente Wget no sobreescribe ficheros locales, sino que en su lugar crea un backup con un número de serie (index.html.1, index.html.2, etc.)
Especificación de Tipos de Ficheros Si sólo quieren descargarse ficheros de un tipo específico y se intenta pasar a Wget un asterisco (*) como un wildcard, la herramienta presentará el siguiente mensaje de error: wget U www.linux-magazine.com/*.jpg ... HTTP request sent, U awaiting response...U 404 Not Found 14:24:09 ERROR 404: Not Found.
En su lugar, es necesario hacer constar el tipo de fichero o una lista de tipos de ficheros a través de la opción -A. Por ejemplo:
Frugal Existen algunas opciones para restringir las funcionalidades de wget. Por ejemplo, si se tiene una conexión a Internet lenta y se prefiere no usar todo el ancho de banda para la descarga, puede restringirse ese ancho de banda especificando la opción -limit-rate=. Además, es necesario especificar el volumen en Kbytes por segundo, como en: wget --limit-rateU =20k ...
El parámetro también entiende valores en Mbytes. Para 10 MBps habría que introducir: wget --limit-rateU =10m ...
Si se prefiere restringir el volumen de descarga total, entonces usaremos el parámetro -Q. De nuevo se necesita hacer constar el volumen de datos. La opción sobreentiende valores en bytes, Kbytes o Mbytes. Por ejemplo, el comando siguiente wget -040m
wget -r -l 1 U -A jpg,png,giff...
Si se observa la salida atentamente, veremos que primero descarga el index.html, pero luego mueve los ficheros otra vez para dejar solamente las imágenes. También funciona en la dirección opuesta, y así, mediante el parámetro -R, permite a los usuarios ignorar tipos de ficheros específicos. De nuevo, el parámetro espera una lista de tipos de ficheros que no se quiere que sean transferidos al disco local. El siguiente comando wget -R avi,mpg,wmv ...
evita esos mamotréticos archivos de video que tanto ocupan en el disco duro.
Figura 2: Este podría ser su propio “~/wgetrc”. Los comentarios se indican con símbolos de almohadillas.
Descarga Segura Wget también puede coger datos desde servidores donde se necesita autenticarse a través de una clave de usuario y contraseña. Para usar esta opción, hay que pasar las credenciales al programa cuando se arranca: wget --http-user=U nombreusuarioU --http-passw=contraseña
Si se hace esto, habría que cuidarse de otros usuarios fisgones: si otro usuario corre el comando ps para presentar los procesos activos en la máquina, el comando wget será listado junto con el nombre de usuario y la contraseña en texto claro. Como solución, podría usarse un fichero de configuración ~/.wgetrc en el directorio de inicio. Se introduce lo siguiente, por ejemplo: http_user = nombreusuario http_passwd = contraseña
Y se guarda el fichero privado escribiendo
restringe el volumen de descarga a 40 Mbytes.
Completamente Automático Si se tiene alguna dificultad para recordar los parámetros para wget, o si se piensa que haciéndolo de este modo es una pérdida de tiempo, puede usarse un fichero de configuración oculto en el directorio de inicio en el que definiremos nuestras propias preferencias. Para crear un fichero de configuración, hay que copiar la plantilla global /etc/wgetrc al directorio de inicio cp /etc/wgetrc
y reemplazar off con on. La Figura 2 permite ver un fichero de configuración de muestra para wget.
~/.wgetrc
para, a continucación, arrancar un editor para modificar el fichero. El fichero tiene entradas para todas las opciones de la línea de comandos, aunque por defecto están deshabilitadas. Para configurar el parámetro -N por defecto, simplemente es necesario quitar el símbolo de la almohadilla (#) al principio de la siguiente línea #timestamping = off
WWW.LINUX- MAGAZINE.ES
chmod 600 ~/.wgetrc
Combinación Perfecta wget no espera la entrada del usuario, sino que sigue con el trabajo en segundo plano. Esta es una gran ventaja si se necesita correr wget en una máquina remota vía sesión SSH. Para hacerlo, primero se establece una sesión SSH y luego se arranca el programa Screen introduciendo screen
Tras escribir el comando wget y las opciones para que comience la descarga puede presionarse [Ctrl-A], [D] para abandonar Screen. Luego puede salirse, aunque todos los procesos que han sido arrancados continuarán corriendo. La próxima vez que entremos en la máquina remota escribiremos simplemente screen -r
para reestablecer la sesión Screen. Ahora puede comprobarse si wget realizó su tarea como se esperaba y recomenzó la ■ descarga si fue necesario.
Número 15
85
LINUX USER • Juegos
Return Return to to Castle Castle Wolfestein: Wolfestein: Enemy Enemy Territory Territory
ENEMY TERRITORY
En nuestra sección dedicada a los juegos, traemos este mes una leyenda de los videojuegos gratuitos y de código abierto que nos traslada a las violentas trincheras y campos de batalla de la segunda guerra mundial. POR VICENTE CARRO
I
nicialmente Enemy Territory [1] fue un proyecto de juego comercial de Activision e ID, pero el modo historia (que iba a ser desarrollado por Mad Doc software) no se llegó a terminar y, viendo la buena pinta de su modo online (creado por Splash Damage), se hizo público como un juego gratuito. Después, y tras el éxito inicial, se liberó su código fuente con una licencia pseudo-libre algo restrictiva que prohibe su uso comercial, pero que permitió disparar el éxito y fama del juego gracias a que constantemente aparecían nuevos mapas y modificaciones realizadas por los usuarios. Nosotros podemos disfrutar de la versión Linux de este juego gracias a Timothee Besset, quien actualmente también está involucrado en la programación del próximo Enemy territory: Quake Wars [2].
Figura 1: Acaba de comenzar una nueva partida y cada bando aparece reunido.
86
Número 15
Comienza la batalla El juego es un first person shooter (o juego de disparos de visión subjetiva) que nos sitúa en la segunda guerra mundial. Hemos de elegir en cada partida el bando al que pertenecemos. Además también elegiremos qué tipo de soldado especialista queremos ser. Las distintas especialidades tienen habilidades y armamento propias que además podrán ir evolucionando dentro de una misma campaña, aunque cuando se salga de la partida nuestra evolución se perderá, de modo que será preciso volver a empezar como soldados inexpertos la próxima vez. Enemy Territory tiene los modos de juego habituales en un juego online, destacando el modo campaña (campaign), donde habrá que pasar por todos los mapas que ofrezca la campaña elegida emulando una especie de modo historia; en el modo misión (single-map objective), dependiendo del mapa elegido, habrá que realizar alguna misión más o menos complicada. Las misiones, que pueden ir desde cargar un cañón descomunal con un proyectil hasta robar el oro de la ciudad entre otras muchas, pueden ser de hasta 64 jugadores y generalmente el lag (retraso en la conexión) es tan bajo que no se nota.
WWW.LINUX- MAGAZINE.ES
Figura 2: Algunos puntos de los mapas se convierten en trampas insalvables.
La música del juego se limita al tema de la pantalla de título. Durante el juego, en cambio, sólo se escuchan unos correctos efectos y sonidos ambientales así como la voz de un superior que nos informará de los avances en la partida. También dispondremos de un sistema de conversación automática que podemos usar pulsando la tecla v y después dos números más, haciendo que se puedan dar informaciones básicas muy rápidamente durante el juego y sin bajar la guardia más de un segundo. Como ejemplo, la secuencia de teclas v 5 4 hará que saludemos con un “Hi!”, y v 1 5 gritará avisando de una granada “Fire in the hole!”. La simplicidad de este sistema hará que, a las pocas veces de haberlo usado, ya empecemos a memorizarlo y días después ni siquiera pensaremos para responder cuando nos saluden durante la partida.
LINUX USER • Juegos
Figura 3: La guerra continúa incluso en lugares tan apacibles como éste.
Los gráficos del juego son muy correctos aunque hay que tener en cuenta que este juego fue lanzado en 2003. Afortunadamente a lo largo de este tiempo han ido apareciendo sucesivas actualizaciones con mejoras en general, con lo que el juego, a día de hoy, se ve muy bien. El motor de juego está muy bien optimizado y el rendimiento 3D será bueno en casi todas las configuraciones, aunque para obtener un rendimiento alto (superior a las 60 imágenes por segundo) tendremos que disponer de al menos una Nvidia Gforce 4. En ATI, lo hemos probado con una ATI Radeon 9600 pro con buen rendimiento, cercano a los 60 fps.
MODS Donde se nota una calidad gráfica más que notable es en las modificaciones completas o MODS del juego, como pueden ser Enemy Territory Fortress [3] y True Combat: Elite [4] entre otros. Estas modificaciones pueden ir desde mejoras de texturas y armamento, hasta juegos remodelados por completo, incluso a nivel de programación. En concreto E.T. Fortress es un MOD que convierte el juego en un clónico de Unreal Tournament, mientras que True Combat: Elite coloca el juego en nuestra actualidad, permitiéndonos ser del bando terrorista o de los comandos de operaciones especiales que tienen que evitar que los contrarios pongan una bomba en determinados objetivos. Por lógica, estos MODS mejorados tienen mayores requerimientos de hardware, y por lo tanto es posible que no rindan igual de bien que el Enemy Territory básico.
cultades con él. Sin embargo es conocido un problema de incompatibilidad con algunas tarjetas de sonido usando el controlador ALSA, pero en la mayoría de los casos, si apareciera el problema, podría solucionarse echando un vistazo a esta web [5] en inglés sobre el “bug” o bien preguntando en el foro de masguadajuegos.org [6]. Debido a la inmensa cantidad de mapas y modificaciones, es muy normal que las primeras partidas que juguemos alarguen su carga inicial (bastantes minutos o incluso horas en conexiones muy lentas), ya que se descargarán automáticamente los archivos que requiera el servidor. Y respecto a la jugabilidad, no hay problemas notorios más allá de las conocidas estrategias discutibles de juego online (como el “camping”, el “spawnkilling” y otros), o que en ciertos mapas haya pasillos o “puntos calientes” que se convierten en trampas mortales para cualquier jugador que pase por ellos, debido a que suelen estar situados a igual distancia de los puntos de regeneración de ambos bandos, con lo que se convierten en zonas con un fuego cruzado constante.
Instalación de Enemy Territory Para poder disfrutar de Enemy Territory en nuestro equipo lo primero que hay que hacer es descargarse su última versión (la 2.56 cuando se escribió este análisis) desde su página oficial [1]. Aunque para realizar la descarga será preciso registrarse previamente en dicha web. Como alternativa, en masguadajuegos han subido el instalador para que pueda descargarse directamente [7].
88
Número 15
En resumen Un gran juego, muy recomendable si gustan de los juegos online de visión subjetiva ambientados en la segunda guerra mundial, y que además funciona muy bien en ordenadores modestos. A esto hay que sumarle la inmensa comunidad de usuarios que lo ■ apoya y le augura una larga vida.
Puntuación Lo mejor • Alta calidad • Es gratuito y (casi) libre • Gran comunidad Lo peor • No existe versión offline • No es GPL • Tiene ya 3 años
8,5
RECURSOS [1] Enemy Territory http://www. enemy-territory.com [2] E.T.: Quake Wars http://www. enemyterritory.com/ [3] Enemy Territory Fortress http://www. etfgame.com/ [4] True Combat: Elite http://www. truecombat.com/intro.php [5] Problema con ALSA http://alsa. opensrc.org/index.php?page=FAQ023 [6] Masguadajuegos.org http://www. masguadajuegos.org
Problemas conocidos Este juego está muy bien programado y son pocos los que tienen difi-
Una vez con el instalador en nuestro disco duro, se le dan permisos de ejecución y se instala de la manera preferida (desde consola o haciéndole doble clic). Esto ejecutará el instalador gráfico que nos pedirá la contraseña de root. Si no se le da, pulsando Cancel, pedirá una ruta donde instalar el juego en la que tengamos permisos de escritura y ejecución con nuestro usuario actual. Tras aceptar, se realizará la instalación propiamente dicha. Una vez instalado, si la carpeta que le indicamos para el binario está en el PATH, para jugar bastará con ejecutar et en una terminal. Además la primera vez que se ejecute será necesario crear nuestro usuario y elegir el tipo de velocidad de nuestra conexión de red.
Figura 4: Algunos mapas han sido cuidados hasta el último detalle, como esta catedral.
WWW.LINUX- MAGAZINE.ES
[7] E.T. en masguadajuegos.net http:// www.masguadalinex.net/ masguadajuegos/?q=node/100
Konsultorio • COMUNIDAD
El consultorio de Klaus
¡PREGUNTA A KLAUS! Invitamos a Klaus Knopper, el legendario creador de Knoppix, a contestar vuestras preguntas referentes a la configuración en Linux. POR KLAUS KNOPPER
Tarjetas de Sonido He instalado varias distribuciones de Linux en mi ordenador y aún no había encontrado una que instalara satisfactoriamente el sistema de sonido hasta que me topé con Knoppix. Llegué a pensar que, simplemente, mi tarjeta de sonido no era compatible con Linux, hasta que me di cuenta de que Knoppix la configuraba perfectamente. Tengo un PC Gateway con una tarjeta de sonido Creative Technologies Audigy que aparenta ser un modelo bastante normal, pero debe tratarse de alguno poco común, ya que ninguna otra distro de Linux la instala correctamente. El sonido funciona perfectamente con Knoppix, sin embargo, por motivos profesionales, necesito utilizar otras distribuciones (tanto Suse como sistemas basados en Debian). Me pregunto cómo puedo utilizar la información de Knoppix para configurar los otros sistemas. ¿Cómo podría averiguar la manera en la que Knoppix ha configurado mi tarjeta de sonido, y exportar la configuración y el driver al resto de distros de mi disco duro? Y si no fuera posible, le agradecería que me comentara algo al respecto, de cara a poder solucionar mis problemas de configuración del sonido. El fallo a la hora de detectar y configurar su tarjeta de sonido puede estar causado simplemente por problemas de hardware a la hora de tratar las interrupciones. Knoppix tiene una cierta secuencia para sondear y configurar el hardware, extraída de una larga experiencia en configurar muchas placas y tarjetas. Por ejemplo,
parece que PCMCIA y USB/Firewire funcionan mejor con el resto de componentes del sistema si sus módulos se cargan previamente. Si se activan posteriormente pueden originar problemas con las interrupciones de otros componentes (como tarjetas de sonido) debido a fallos a la hora de asignar interrupciones, o simplemente a que ya no quedan interrupciones que se puedan compartir. A veces ocurre algo distinto. Si tenemos un dispositivo USB con soporte para audio (algunas webcams tienen micrófono y tarjeta de sonido interna), puede que se establezca como tarjeta de sonido “primaria”, quedando el resto de dispositivos de audio numerados sucesivamente (es decir, si /dev/dsp es el dispositivo detectado en primer lugar, /dev/dsp1 será el segundo, y así sucesivamente). El software de audio debería entonces configurarse para usar el dispositivo /dev/dsp* correcto, ya que puede que el primero de ellos no fuese el que queríamos (muy pocas webcams tienen altavoces). Todo lo dicho es también aplicable si tenemos una tarjeta de sonido de las baratas integrada en placa que no queremos usar si tenemos una PCI de mayor calidad. A pesar de que puede que hayamos deshabilitado la tarjeta de sonido integrada en la BIOS, algunas (la mayoría) de las distribuciones de Linux configuran el chipset interno como la tarjeta de sonido primaria si la detectan antes que la PCI. Con tus pruebas con Knoppix, parece que tuviste suerte y el módulo de la tarjeta de sonido se cargó en el momento adecuado, y además no hubo conflicto de
WWW.LINUX-MAGAZINE.ES
interrupciones con otros dispositivos. Comprueba /proc/interrupts para ver la disposición de las interrupciones en el sistema. cat /proc/interrupts
Puedes exportar esta información a otras distribuciones simplemente colocando la información que te muestra Knoppix en los archivos de configuración adecuados de la distro que prefieras. Por tanto, tras la instalación de tu sistema (ignorando en principio que la tarjeta de sonido no esté funcionando), sólo tenemos que modificar /etc/modules que es el archivo que la mayoría de las distribuciones utilizan para obtener los nombres de los módulos que deben cargar en el arranque. Obtenemos esta información observando la salida del comando lsmod (siempre que nuestra tarjeta de sonido no esté rota, claro), que muestra todos los módulos del kernel que se han cargado, en orden inverso (kernel 2.6.x). En otras palabras, el módulo que coincida con la primera tarjeta de sonido detectada debe ser en realidad el ÚLTIMO módulo de tarjeta de sonido de la lista. En Knoppix, podemos usar el siguiente comando para averiguar lo que Knoppix considera que es la mejor elección en cuanto a módulos de componentes hardware a cargar: hwsetup -v -n -p
Junto con la información de lsmod, podemos ya identificar el nombre del módulo de nuestra tarjeta de sonido y
Número 15
89
COMUNIDAD · Konsultorio
añadirla a /etc/modules (en algún lugar más bien al comienzo) de nuestro sistema. Puede que queramos también verificar las entradas sound-slot-* añadidas incorrectamente a /etc/modules.conf o /etc/modutils/* (para Debian, debemos ejecutar update-modules tras las modificaciones) y poder así eliminarlas de estos archivos de configuración. En algunas distribuciones puede que exista un administrador gráfico que haga todo esto, pero lo que hemos comentado aquí es el procedimiento genérico que debe seguirse.
Problemas con el Lector CD He intentado instalar Linux en mi ordenador un par de veces. La instalación desde CD siempre ha ido bien hasta que la termino, momento en el cual el lector de CD queda inaccesible. Esto me ha pasado tanto en Fedora Core como en Suse 9.0. ¿Alguna idea de qué puede estar ocurriendo? Esto ocurre también en algunas versiones de Knoppix tras instalarlo con knoppix-installer. El procedimiento de instalación normalmente no copia todos los archivos de configuración al disco duro, especialmente /ec/fstab, el archivo de configuración por defecto del sistema de archivos, que muchas veces se rehace durante la instalación para que coincida con las rutas específicas de dispositivos como CDROMs, DVDs, memorias USB y similares. En consecuencia, los iconos en KDE o GNOME de estos dispositivos puede que apunten a rutas que estimen correctas. Si pulsamos sobre estos iconos, puede que aparezca un mensaje como directory/mountpoint does not exist, o incluso no such device. Para comprobar la configuración de nuestro sistema de archivos, debemos en primer lugar comprobar detenidamente /etc/fstab (como usuario root si vamos a cambiar algo). La sintaxis genérica de este archivo de configuración es: device mountpoint U filesystem-type U filesystem-option-list U backup-frequency U checking-order
90
Número 15
separados por espacios, donde las dos últimas columnas (backup + checking) son de menor importancia para los medios extraíbles y se fijan a 0 en este caso. La línea comentada se corresponde con un comando mount como: mount -t U filesystem-type -o U filesystem-option-list U device mountpoint
Ahora, deberíamos verificar si el CDROM (u otro periférico) están listados adecuadamente, y si sus puntos de montaje son directorios vacíos que no esté usando nadie más. Yo suelo usar /mnt/nombredispositivo. Si faltan los puntos de montaje, deberíamos crearlos como corresponde. Los puntos de montaje son las ubicaciones donde queremos que aparezca el contenido del dispositivo. Si consideramos que los puntos de montaje deberían aparecer en lugares diferentes a los mostrados en /etc/fstab, podemos cambiarlos a nuestro gusto. Una entrada típica de un CDROM sería algo como: /dev/hdc /mnt/cdrom iso9660 U ro,users,noauto 0 0
La opción ro hace que el sistema de archivos sea de sólo lectura (que es el caso del CDROM de todas formas), y users permite que CUALQUIER usuario monte y desmonte el CD (sin necesidad de permiso de root). Si queremos asegurarnos que sólo el usuario que monte un CD pueda desmontarlo, debemos especificar user (sin la s final) en su lugar. Por tanto, esta línea significa que cualquier usuario puede montar y desmontar un CD desde la unidad maestro o desde una IDE secundaria que contenga un sistema de archivos de CDROM (iso9669/Rockridge/Joliet) en el directorio /mnt/cdrom. Debemos asegurarnos de tener la opción noauto en la lista. Si no, nuestro sistema trata de montar el CD automáticamente al arrancar (mount -a) y nos mostrará un molesto mensaje de error como corrupt filesystem si no hay un CD para montar. Si tenemos pensado usar CDs con sistemas de archivos diferentes a iso9660, sería recomendable indicar la opción auto en lugar de iso9660.
WWW.LINUX-MAGAZINE.ES
Ya podemos, con el siguiente comando, montar un CD de manera manual: mount /mnt/cdrom
como usuario normal, sin privilegios. Si queremos hacer esto con sólo pulsar un botón, podemos incorporar un icono de KDE: pulsamos el botón de menú con el ratón sobre el escritorio, seleccionamos New | Device Link | CD-Rom, y en la configuración, seleccionamos la entrada que nos ofrece: /mnt/cdrom. Eso sería todo. Nótese que KDE desde la versión 3.2 y posteriores soporta la configuración automática de iconos de escritorio para dispositivos (usando el panel de control). Sin embargo, yo prefiero el método manual, ya que no me fío del todo de las funcionalidades automáticas. La siguiente línea debe ser la entrada de /etc/fstab para permitir a los usuarios que monten y desmonten memorias USB o memorias de cámaras digitales. Estos dispositivos se tratan internamente como particiones de discos SCSI, por regla general. Verificamos la salida de dmesg justo después de conectarlo, si no somos capaces de adivinar su nombre de dispositivo. /dev/sda1 /mnt/sda1 U vfat rw,users,umask=U 000,noauto 0 0
La opción umask=000 remplaza virtualmente los inexistentes permisos de archivos DOS con permisos tipo UNIX que permiten que cualquiera pueda leer y escribir archivos en estos dispositivos de almacenamiento. Esto no es, obviamente, recomendable en sistemas multiusuario. Con varios usuarios concurrentes, podríamos utilizar user en lugar de users y no usar la opción umask.
¿Qué Portátil? Estoy a punto de comprarme un portátil. He oído que algunas funcionalidades como la gestión del consumo, conexiones inalámbricas y otras típicas de portátiles, suelen ser complicadas de configurar bajo Linux. ¿Podría decirme qué portátiles son los más compatibles con Linux? ¿Qué aspectos debería tener en cuenta? ¿Algún componente o tecnología que sea recomendable evitar? Si encuentro problemas al configurar la conexión inalámbrica, ¿existe alguna configuración
Konsultorio • COMUNIDAD
común que deba verificar en primer lugar? Entiendo que es complicado dar cualquier consejo genérico para resolver estos problemas, ya que para empezar ni siquiera he comprado el portátil aún. Aún así, me gustaría saber los pasos genéricos para identificar el origen del problema en el caso de las comunicaciones inalámbricas. Los portátiles son, y siempre fueron, “diferentes”… Debido a las limitaciones de espacio físico y aspectos de gestión de consumo, los portátiles usan chipsets que son, en el mejor de los casos, extraños, pero compatibles con los chipsets de los ordenadores de escritorio. Sin embargo, a veces son especialmente singulares y sólo existen drivers para ciertas versiones de ciertos sistemas operativos (esto es cierto incluso para Linux, con módulos de los que sólo hay binarios, que sólo funcionan con un kernel específico). Por tanto, tras una actualización mayor, puede que perdamos componentes de estos portátiles debido a que dejan de tener soporte en el último “service pack” (Me imagino que sabes a qué me refiero…). Los problemas con la gestión de consumo y los chipsets existen para TODOS los sistemas operativos. Algunos portátiles funcionan mejor con Linux que con Windows, en otros la cosa cambia. Desafortunadamente no existe una regla general, excepto “no comprar nada que acabe de salir, mejor esperar los resultados de pruebas e informes de compatibilidad”. Si seguimos esta regla, las “ofertas irrepetibles” no son viables, ya que no tenemos manera de saber por adelantado qué componentes vamos a encontrar. (El vendedor normalmente no sabrá decirnos mucho al respecto, y si abrimos la carcasa se anula la garantía). Existen algunos vendedores de portátiles que trabajan equipos probados y verificados bajo Linux. Pueden decirnos qué partes funcionan adecuadamente y cuáles dan problemas, incluso si no vamos a comprarles a ellos el portátil. También podemos acudir a páginas web especializadas en Linux y portátiles, como http://www. linux-laptop.net/, o simplemente buscar en Google portátiles con características específicas bajo Linux. La gestión de consumo no suele ser tan problemática como puedas haber oído. Más bien puede ser el hecho de que algunas placas madre tienen serios errores en la implementación de los estándares ACPI, y
Linux trata de solventarlos de manera más o menos automática apagando funcionalidades ante la asignación incorrecta de interrupciones o cálculos erróneos de la frecuencia de la CPU. En algunos casos, puede que logremos hacer funcionar un portátil que da problemas habilitando algunas opciones de arranque del kernel como: acpi=off noapic U pnpbios=off pci=bios
que básicamente nos devuelve a la vieja, pero segura, configuración de los ordenadores antiguos. A veces, podemos encontrarnos incluso con placas madre en las que tenemos que arrancar el kernel con: acpi=force
o incluso irqpoll
para conseguir que cosas como la compatibilidad parcial de los controladores de disco funcionen. (Solían acribillar al kernel con mensajes de error como “aieee- interrup lost”). Otro problema importante es el de los chipsets gráficos. Hoy día, los principales fabricantes mantienen las especificaciones de los chipsets bajo grandes secretos. (Mi suposición es que sólo tratan de ocultar cómo hacer trampas de cara a los benchmarks). Es más, podemos incluso lograr que chipsets gráficos non-existing (por la id del dispositivo) terminen funcionando con XFree86 o Xorg si tocamos la tecla adecuada en las opciones de configuración. A veces, tenemos que especificar un chipset incorrecto en los archivos de configuración para que las cosas funcionen. Es realmente molesto. Entonces, cuando ya estamos hartos de probar y probar, terminamos quemando la placa… y ve ahora y compra un portátil completamente nuevo con la ultimísima tarjeta gráfica “16-pipes3D-nunca-vista-en-un-portátil”… Yo recomiendo mirar más bien un portátil que tenga un chipset “normal” que se use también en ordenadores de sobremesa, que se sepa que funciona con los drivers estándar de Linux XFree/Xorg. No deberíamos fiarnos de los fabricantes que prometen que disponen de aceleración para Linux, pero que sólo facilitan binarios para alguna distribución, y que señalan
WWW.LINUX-MAGAZINE.ES
que “probablemente” funcionen en otras distros. Estas funcionalidades normalmente dejan de funcionar en la siguiente actualización, si es que llegan a funcionar del todo desde un inicio, a pesar de las promesas de los vendedores. Si tenemos los juegos en mente, deberíamos verificar si el chipset del portátil deseado soporta aceleración directamente por XFree o Xorg, o al menos que esté comprobado que funciona sin fallos la aceleración 3D con los plugins binarios proporcionados por el fabricante (aunque ya estás advertido…). Existe una edición de juegos de knoppix en liveCD que contiene los drivers para aceleración gráfica de juegos, disponible en http://games-knoppix.unix-ag.uni-kl.de/. Puede ser buena idea probar el CD y algunos juegos en el portátil antes de comprarlo. En general, es una buena idea ejecutar Knoppix con o sin las opciones de arranque en un portátil para probar y verificar los componentes hardware. Como muchos portátiles NO soportan DDC (plug and play para monitores), puede que tengamos que arrancar con: knoppix screen=1400x1050 U vsync=75
para conmutar a resolución 1400x1050 a 75Hz cuando arrancan las X, ya que por defecto, Knoppix trata de arrancar con una resolución de 1024x768 y una frecuencia vertical en torno a los 72Hz si no se especifica nada. Debemos cambiar la opción screen=resolution a la pantalla que se vaya a usar en realidad. Las tarjetas Wifi (o las “nuevas” tarjetas de red) pueden también presentar problemas si no están soportadas de manera nativa por el kernel de Linux aún. Para algunas tarjetas podemos utilizar el driver suministrado para Windows junto con el módulo del kernel ndiswrapper (http://ndiswrapper. sourceforge.net/), para cargar el archivo *.inf. Prism/Prism2/Orinoco, Atmel y algunos otros chipsets usados ampliamente están soportados por el kernel de Linux, aunque algunas tarjetas necesitan firmware específico que debe ubicarse con el nombre concreto de la tarjeta en el directorio /usr/lib/hotplug/firmware. Por tanto, “probar antes de comprar” es el mejor consejo que puedo ofrecer. ■
Número 15
91
ยกHazte con tus ejemplares atrasados! #04
#05
#06
#07
#08
#09
#10
#11
#12
o d a t o g a
o d a t o g a
W W W. L I N U X - M A G A Z I N E . E S / AT R A S A D O S
¡pídelos ya! el REPOSITORIO
de conocimientos LINUX más COMPLETO
¡No esperes a que se agoten! #13
#14
W W W. L I N U X - M A G A Z I N E . E S / AT R A S A D O S
EVENTOS
LinuxPark CeBIT
Festival Digital de Andalucía
Fecha: 9-15 Marzo
Fecha: 10-23 Abril
LinuxWorld Conf. & Expo España
Ciudad: Hannover, Alemania
Ciudad: Málaga, España
Fecha: 18-19 Abril
Sitio Web: http://www.cebit.de Calendario de Eventos Evento O'Reilly Emerging Technology Conference UKUUG Spring Conference 2006 LinuxWorld Conference & Expo Australia LinuxWorld Conference & Expo Boston Festival Digital de Andalucía 7º Fórum Internacional Software Libre III Jorn. Soft. Libre Univ. Cádiz LinuxWorld & NetworkWorld Canada LinuxWorld Conference & Expo Italy LinuxWorld Conference & Expo SA LinuxWorld Conference & Expo Brazil LinuxWorld Conference & Expo Japan 6º Fórum Internacional Software Livre LinuxWorld Conference & Expo Robocup OSCON 2006 LinuxWorld Conference & Expo LinuxWorld Conference & Expo NL LinuxWorld Conference & Expo UK
Ciudad: Madrid, España.
Sitio Web: http://www.festivaldigital.org
Fecha 06-06 Marzo 06 22-23 Marzo 06 28-30 Marzo 06 3-6 Abril 06 10-23 Abril 06 19-22 Abril 06 20-21 Abril 06 24-26 Abril 06 9-10 Mayo 06 16-19 Mayo 06 23-25 Mayo 06 31 Mayo - 6 Junio 06 4-6 Junio 06 5-7 Junio 06 14-20 Junio 06 24-28 Julio 06 14-17 Agosto 06 11-12 Octubre 06 25-26 Octubre 06
Sitio Web: www.linuxworldexpo.com
Ciudad San Diego, CA, EE.UU. Durham, Reino Unido Sydney, Australia Boston, MA, EE.UU Málaga, España Porto Alegre, Brasil Cádiz, España Toronto, Canada Milan, Italia ohanesburgo, S. África Sao Paulo, Brasil Tokio, Japón Porto Alegre, Brazil Korea Seúl, Korea Bremen, Alemania Portland, EE.UU. San Francisco, EE.UU. Utrecht, Holanda Londres, R.U.
Sitio Web http://conferences.oreillynet.com/etech www.ukuug.org/events/spring2006 www.linuxworldexpo.com.au www.linuxworldexpo.com http://www.festivaldigital.org http://fisl.softwarelivre.org http://osl.uca.es/jornadas/ www.lwnwexpo.plumcom.ca www.linuxworldexpo.it www.linuxworldexpo.co.za www.linuxworldexpo.com www.linuxworldexpo.com http://fisl.softwarelivre.org www.linuxworldkorea.com www.robocup2006.org/start http://conferences.oreillynet.com www.linuxworldexpo.com www.linuxworldexpo.nl www.linuxworldexpo.co.uk
Información de Contacto Director Paul C. Brown
Director Editorial Paul C. Brown
Coolaboradores Paul C. Brown, Jose Manuel González Vida, Juan Rafael Fernández, Pedro Orantes, José María Ruíz, Alberto Planas, Jose A. García, Ana Mª Ferreiro
Jefe de Producción Francisco Fernández
Traductores Paqui Martín Vergara, Paul C. Brown, Antonio Rueda, Víctor Tienda.
Subscripciones: www.linux-magazine.es/ magazine/subs
Maquetación Francisco Fernández Diseño de Portada Pinball info@pinball-werbeagentur.de Publicidad www.linux-magazine.es/pub/ Para España Expresando Comunicaciones info@exprecom.com Tel.: (+ 34) 952 216 406 Fax.: (+ 34) 952 217 115 Paul C. Brown pbrown@linux-magazine.es Tel.: (+ 34) 951 010 556 Fax.: (+ 34) 951 010 516 Para el Resto del Mundo Brian Osborn ads@linux-magazine.com Tel.: (+49) 6509 910 495 Fax.: (+49) 6509 910 497
94
Número 15
Precios Subscripción España: Europa: Resto del Mundo - Euros: Tel.: Fax.: subs@linux-magazine.es
54,90 € 64,90 € 84,90 € (+34) 951 010 556 (+34) 951 010 516
Linux Magazine Linux New Media Spain, S.L. Avda. Juan López Peñalver, 21 29590 - Campanillas Málaga ESPAÑA info@linuxnewmedia.es Tel.: (+34) 951 010 556 Fax.: (+34) 951 010 516
www.linux-magazine.es - España www.linux-magazine.com - Mundo www.linux-magazine.de - Alemania
WWW.LINUX- MAGAZINE.ES
Si bien se toman todas las medidas posibles para garantizar la precisión del contenido de los artículos publicados en Linux Magazine, la editorial no se hace responsable de imprecisiones aparecidas en la revista. Asimismo, Linux Magazine no comparte necesariamente las opiniones vertidas por sus colaboradores en sus artículos. El riesgo derivado del uso del DVD y el material que contiene corren por cuenta del lector. El DVD es estudiado escrupulosamente para confirmar que está libre de virus y errores. Copyright y Marcas Registradas © 2004 Linux New Media Spain, S.L. Linux New Media Spain S.L. prohíbe la reproducción total o parcial de los contenidos de Linux Magazine sin su permiso previo y por escrito. Linux es una Marca Registrada de Linus Torvalds. Impreso en Alemania Impresión: Dierichs Druck + Media GmbH Distribución: SGEL Depósito Legal: MA-116-2005 ISSN edición impresa: 1576-4079 ISSN edición online: 1699-2237
Más del 30% de descuento respecto al precio de portada: Consigue 12 números por 54’90 Euros y todos los DVDs ¡Gratis!
A diferencia de otras publicaciones, Linux Magazine no llenará tu buzón de recordatorios para que renueves tu subscripción. Ésta se renovará automáticamente cada año. Recibirás una confirmación aproximadamente 30 días antes del final de tu periodo de subscripción, pero no se requiere que hagas nada para seguir suscrito.
¡No te pierdas Linux Magazine nunca más! La subscripción te asegura que recibas los conocimientos Linux de más alta calidad en tu domicilio cada mes.
Si por cualquier motivo decides dejar de leer Linux Magazine, puedes cancelar tu subscripción en cualquier momento. Te abonaremos el precio de todos los números que no hayas recibido. Sin preguntas, sin fechas de cancelación, sin problemas.
Linux Magazine es algo más que una revista de Linux. Patrocinamos grupos, congresos, proyectos y eventos relacionados con el Software Libre. Suscribiéndote a Linux Magazine garantizas que podamos seguir apoyando al Software Libre allá donde haga falta.
LINUX LOCAL
LINUX LOCAL Leyenda inux Local es tu directorio de servicios y empresas de Linux cerca de ti. ¿Necesitas soporte, hardware, formación? Consulta Linux Local y encuentra quién ofrece qué y dónde. El directorio se divide en regiones autónomas para ayudarte a localizar las empresas que ofrecen servicios cerca de ti. Utiliza la leyenda de la derecha para encontrar la empresa que ofrece el servicio que precises. Linux Local es tu guía de servicios Linux.
L
1.- Hardware 2.- Software / Desarollo 3.- Formación 4.- Soporte / Consultoría 5.- Servidores 6.- Redes 7.- Migración 8.- Hospedaje
Andalucía Logo
Empresa
Correo-e
Web
1
2 3 4 5 6
7 8
Gesinfo
info@gesinfoweb.com
www.gesinfoweb.com
BitRock
info@bitrock.com
bitrock.com
Properly Software
info@properly.es
www.properly.es/site
GuadaGames
vicentecarro@guadagames.com
www.guadagames.com
Exprecom
info@exprecom.com
www.exprecom.com
Empresa
Correo-e
Web
IWS
iws@iws.es
www.iws.es
Empresa
Correo-e
Web
Mono::labs
contacte@monolabs.com
www.monolabs.com
Datum
info@datum.ws
www.datum.ws
Cataluña Logo
1
2 3 4 5 6
7 8
Madrid Logo
1
2 3 4 5 6
7 8
¿Por qué no está su empresa en este directorio? LINUX MAGAZINE llega a miles de empresas, profesionales y usuarios cada mes. Si tiene servicios o productos Linux que ofrecer ¡Llámenos! Tlf.: +34 951 010 556 Fax: +34 951 010 516 info@linux-magazine.es
WWW.LINUX- MAGAZINE.ES
Número 15
97
PRÓXIMO NÚMERO
Mayo 2006: Número 16
PRÓXIMO NÚMERO DISTROS LIVE
PRÁCTICO
En el mundo de las Live distros que ejecutan un sistema operativo desde un medio extraíble, como un CD, no sólo existe Knoppix. De hecho, existen casi tantas Live distros como usos uno pueda imaginar para ellas. En el número 16 de Linux Magazine veremos las más populares y apuntaremos las maneras en las que una Live distro también puede salvar tu vida.
SSL-Explorer es un herramienta basada en web que facilita la creación de redes privada virtuales al simplificar la configuración para atravesar cortafuegos. El mes que viene veremos como se instala, configura y utiliza este interesantísmo programa. Por otro, lado, si lo que deseas es convertir tu PC en una estación para medios multimedia, te interesará el artículo sobre Mpeg Menu System V2, un interfaz que te permite correr videos y otros medios y que tiene un aspecto intuitvo y espectacular.
VOZ SOBRE IP Asterisk, Skype, Gizmo… el antiguo sueño de poder hablar por teléfono por Internet de manera totalmente gratuita parece que se hace por fin realidad para el común de los mortales. En nuestra sección de portada del mes que viene, veremos las herramientas disponibles en Linux para soportar comunicaciones de voz en la red. Describiremos Kphone, el teléfono del escritorio KDE, así como el popular sistema de telefonía Skype. Asimismo, tendremos un completo artículo sobre Asterisk, un PBX multiprotocolo para Linux que aporta servicios de buzones de voz, conferencia, respuestas de voz interactivas y colas de llamadas. Acabaremos nuestro repaso a la tecnología VoIP examinando el programa Linphone, un sistema telefónico web para Gnome.
A LA VENTA: ABRIL 2006 98
Número 15
WWW.LINUX- MAGAZINE.ES