You are on page 1of 75

DVD

Arranque
Este DVD contiene Scientific Linux, un sistema operativo completo y con aplicaciones listas para ser utilizadas. Scientific viene en versin Live, por lo que puede ser arrancada y probada sin instalar nada en el disco duro. Para empezar a usar tu Linux, inserta el DVD en el reproductor y rearranca el ordenador. Si no aparece el men del DVD, tienes que ajustar la BIOS para arrancar desde el disco. Para hacerlo, normalmente has de pulsar una tecla durante las primeras fases del arranque del ordenador (habitualmente F2 o Supr), buscar el men que permite cambiar la secuencia de arranque de dispositivos y colocar el lector de DVDs en el primer lugar de la secuencia. Posteriormente se guardan los cambios y se sale de la herramienta de configuracin para que se reinicie el arranque. Como cada BIOS es diferente, recomendamos consultar la documentacin del fabricante para realizar esta operacin. Para instalar Scientific de manera permanente en tu disco duro, busca la aplicacin de instalacin en la carpeta Desktop.

D est sticarlo DVD tu DVD diagno s para es que


e.e Si cre agazin nux-m evo. u n dvd@li s uno o m ie v te en

a O? stado, escrbenosue S O U T q e l o para EFEC en ma

SCIENTIFIC 6.2
ste mes os traemos en nuestro DVD una distro que jams habamos incluido antes, pero que est consolidndose tanto por su excelente pedigr, como por la solvencia de sus creadores. Scientific Linux [1] es la distro creada conjuntamente por el laboratorio Fermi [2] de Estados Unidos, y CERN [3] de Europa, ambos centros luminarios en el campo de la fsica terica y pioneros en avances cientficos y tecnolgicos. A la hora de escoger un sistema operativo que sirviese a ambas instituciones, tanto para estaciones de trabajo, como servidores, grids y clusters, y que adems permitiese la transferencia tecnolgica entre las dos organizaciones, optaron por GNU/Linux, y Scientific es el resultado. Diseado para la mxima compatibilidad y alta computacin, Scientific es un clon de Red Hat Enterprise Linux, en este caso de RHEL 6.2. Como tal, prima la estabilidad, integracin e interoperabildad por encima de la novedad. No hay que esperar las ltimas versiones de las ms novedosas aplicaciones en Scientific, ese no es su propsito. Ms bien lo que se busca es una distro slida y fiable en extremo, apropiada para su uso en empresas e instituciones, ya sea en su rol de servidor, como escritorio orientado a la productividad. I

RECURSOS
[1] Scientific Linux:

http://www.

scientificlinux.org/
[2] Fermilab: http://www.fnal.gov/ [3] CERN: http://www.cern.ch/

WWW.LINUX- MAGAZINE.ES

Nmero 82

EDITORIAL

ESTS LEYENDO LM
e disculpar el lector que me salga un poco de tema este mes y no dedique esta columna a hablar sobre si la escala G es preferible a la H, o del ltimo diorama que estoy construyendo, cosa que, como comprador de Lnea Magna, es lo que usted espera. La razn: tengo ordenador nuevo. Bueno, es de segunda mano, pero con un poco de limpiamuebles y paos de alcohol, quedar como una patena. Y es un verdadero ordenador: con monitor, teclado y todo. Es de la subasta del ayuntamiento de Munich que tanto est dando que hablar. Un amigo muniqus ha adquirido varias unidades y los est vendiendo por correo (lo intent en el MosBay, pero su cuenta fue cancelada fulminantemente). El mo, un IIOrion Pentacore del 2007, me lo deja por el precio de envo (gracias Oliver). Es un chollo, porque, aunque el teclado est en alemn y tengo que pagar la inevitable tasa MOStrans para cambiar las licencias del software a mi nombre, al ser aplicaciones que no se actualizan desde el 2006, me sale slo por 800 euros. Lo malo es que tampoco tienen soporte y, si habis tenido algn cacharro de estos en el pasado, ya sabis lo que significa que un slo componente se corrompa, aunque sea el Buscaminas: Hay que tirarlo todo a la basura. Pero, si a alguien le interesa, habr ms de donde ha venido ste. Con la crisis y el coste de las licencias, los bvaros no pueden mantener un parque tan grande y han anunciado que venden un 40% de los equipos. Adems, cuando implanten el nuevo MosOS 12, van a descubrir que un buen nmero de mquinas no va a poder con l y tendrn que volver a subastar para sufragar en parte la compra de hardware s soportado. Naturalmente, con el ritmo de devaluacin actual del hardware, que est en torno de un 50% cada tres meses, podrn sustituir como mucho una dcima parte de lo que subasten. Eso encoger su parque an ms. En total, calculo que el nmero de equipos de la administracin de Munich se quedar en un 25% de lo que era hace dos aos, y no en un 60%, como haban previsto. Eso significa que muchos funcionarios tendrn que volver a la mquina de escribir y a compartir tiempo de ordenador con sus compaeros. Segn Oliver, ya tienen a los sysadmins, que tambin han visto cmo han recortado sus servidores, calculando las combinacio-

nes para optimizar el tinglado. Pero ya pueden hacer cbalas, ya, que la hemorragia de fondos directamente achacable a la dependencia tecnolgica va a seguir, con miles de horas/hombre anuales de productividad perdidos. Smese el coste de volver al papel (el espacio para almacenar archivos, la papelera con membretes, y la logstica de trasladar toda esa celulosa de un sitio a otro no sale gratis) y, se mire como se mire, es una mala decisin. Claro que no hay muchas ms opciones y ninguna es buena. Se pueden subir los impuestos, como se ha hecho en algunas comunidades espaolas, pero eso siempre es impopular y, con el paro que hay, se cae en un crculo vicioso, donde lo que se recauda por un lado, se ha de soltar por el otro en concepto de subsidios, con lo que tampoco le llegar a las juntas y generalitats para las licencias y al final tendrn que reducir su parque informtico igual. Te pones a pensarlo y es que incluso en la administracin ms corrupta, al menos el dinero de las cuchipandas, prostitutas y palacetes se queda en el pas, al menos en parte alimenta a una economa local, aunque sea una economa subterrnea y negra. Mucho se fuga a Andorra, Gibraltar y Leichenstein, s. Pero y esto? La estafa de la informtica de estos ltimos 20 aos es una fuga de capital legal y consentida en toda regla. No ayuda en absoluto que, tal y como est montado el tinglado, no haya ninguna industria TI nacional que merezca la pena mencionar. Ni puede haberla, claro. A lo ms que se puede aspirar es a ser filial, partner o distribuidor de MOScorp. Hasta las ttulos acadmicos los expide el MOSchool hoy en da. No s exactamente a cunto asciende exactamente lo que aporta la industria TI al PIB nacional, y no lo s entre otras cosas porque he agotado mi suscripcin a MOSCarta y me quedan demasiadas pocas horas de MOSn este mes para consultar los Gophers de las instituciones relevantes. Tampoco creo que encontrara lo que busco: el MOStorage no permite ni siquiera a la Administracin publicar datos almacenados con sus tecnologas, incluso si han sido recabados a cargo de nuestros impuestos. Es ms, an en el caso improbable de que encontrara la informacin, es poco probable que el software que viene con el ordenador de Oliver me sirviera para descifrarla, no al menos sin comprar una licencia MOSCPAL

para el visualizador de documentos preinstalado. Con lo cual parece que, al final, le cueste lo que les cueste a los muniqueses, saldrn mejor parados con su vuelta obligatoria al papel. Al menos ellos podrn consultar sus propios documentos, aunque suponga tener que desplazarse a algn centro oficial para leerlos de un libro de registro. Ah va una confesin, querido lector: Hace aos, antes de desarrollar mi aficin por los trenes, all por los 80, yo era un fan de la informtica. Es ms, perteneca a un club y escribamos nuestros propios programas para nuestros propios Spectrums, Commodores y Apples (S! Apple, la misma empresa que ha hecho su fortuna como la mayor depositaria de propiedad intelectual e industrial del planeta, aos ha, fabricaba ordenadores). Poco a poco los equipos domsticos se hicieron ms ligeros, ms veloces, con mayor resolucin y ms memoria. Eso hubiera sido bueno si simultneamente se hubieran expandido las funcionalidades. Pero eso no es lo que ocurri, sino ms bien todo lo contrario: se elimin la funcionalidad de introducir instrucciones; en vez de un teclado, los nuevos modelos venan con joysticks; se suprimieron los lenguajes de programacin poniendo como excusa que suponan una amenaza para el usuario (y que podan invalidar la garanta) y se evolucion hacia la situacin actual, en la cual los nicos programas que se pueden ejecutar son los que se compran en EPROMs no grabables. Ha sido gradual, pero la potencia de los ordenadores se ha incrementado de manera indirectamente proporcional a su utilidad. Hoy en da, ya sabemos en qu ha quedado eso: la informtica domstica es un vehculo para la idiotizacin, mientras que la corporativa es un vehculo para la extorsin. Sinceramente, creo que ms hubiera valido que la revolucin informtica MOS nunca se hubiera producido. Y ahora hablemos de trenecitos elctriI cos

Paul C. Brown Director

Nmero 82

WWW.LINUX- MAGAZINE.ES

NOTICIAS

NOTICIAS
La Migracin de los Gobiernos
Parece que la clase poltica, responsable de administrar los bienes pblicos, ha descubierto la plvora del software libre y que con eso, al menos en parte, se puede ayudar a balancear las cuentas. Esto viene a colacin de la noticia sobre un nuevo decreto del gobierno vasco del que informa en un comunicado, en el cual se indica que El decreto proporcionar al sector TIC del Pas Vasco la posibilidad de ponerse a la vanguardia de la industria del software libre. Pues van a tener que correr mucho, por que llegan con 10 aos de retraso. En poltica eso ser poco ms de dos legislaturas. En tecnologa es una era geolgica. La razn del cambio, la que siempre se esgrime estos das: la pasta. Ninguna mencin a la implcita superioridad tcnica actual y potencial del SwL, de la transparencia, del respeto a estndares, la creacin de riqueza local y dems ventajas. De momento, tenemos buenas intenciones un tanto difusas y la noticia de que se ha adaptado una web para que un trmite lo puedan realizar los usuarios de GNU/ Linux y Mac, y no slo los de Windows, como ocurra hasta ahora. Mientras tanto, Extremadura se enfrenta a su particular RETO. Y es que RETO son las ocurrentes siglas de Reorganizacin del Entorno Tecnolgico Operativo. Segn Teodomiro Cayetano, quien se mostr evasivo sobre el tema en nuestra entrevista disponible en [2], los cambios afectarn de forma transversal a todos los departamentos y organismos del Gobierno, con el propsito principal de cambiar radicalmente el modelo organizativo y el entorno tecnolgico actualmente implantados. La declaracin de intenciones de la Junta con respecto al software libre se toca un poco de pasada, indicndose en la nota de prensa de CENATIC que Jos Antonio Monago resalt el pasado mircoles que el cambio que se est produciendo en la regin tambin es notable en nuevas tecnologas, siendo un camino que pasa por la apuesta por el software libre. En este sentido, ha anunci [sic] que los trabajadores de la Administracin Pblica utilizarn en un futuro muy prximo este software, que supondr un significativo ahorro para la Administracin. Segn CENATIC, el gobierno anterior no cumpli las expectativas de desarrollo TI en la Administracin y ahora se busca reorientar la misma para aproximarla y equipararla a la que debiera ser la realidad tecnolgica. Curiosamente, durante todo el tiempo que existi el CENATIC antes de que entrara el actual gobierno, la fundacin no dijo ni mu sobre este asunto del incumplimiento y s particip y se aprovech activamente de la organizacin de cuchipandas, magnos eventos y obras faranicas (incluyendo la construccin y adjudicacin de un enorme edificio de 1.500 metros cuadrados), de esos que tanto criticaba el seor Cayetano en aquella entrevista. Nos alegramos de que CENATIC haya descubierto su vena asctica y les encomendamos por su compromiso de colaboracin a reducir una burbuja que ellos mismos ayudaron a inflar. Pero lo que no vamos a hacer es felicitar a las instituciones por hacer lo correcto, por hacer lo que deberan haber hecho desde el principio, por ser un poco menos tteres de grandes corporaciones e intereses personales y por empezar a tratar con respeto los dineros que sus ciudadanos les I tienen encomendados.

RECURSOS
[1] El gobierno Vasco ahora quiere Software Libre: http://guai.internautas. org/html/480.html [2] RETO en Extremadura: http://www. cenatic.es/hemeroteca-de-cenatic/ 2-cenatic-en-la- red/39834-se- inician-las- actuaciones-del- plan- retodel- gobierno- de-extremadura [3] Teodomiro Cayetano habla con Linux Magazine: http://goo.gl/O7J4n

LibreOffice va ms All
Con ocasin de la publicacin de la versin 3.5.2 de LibreOffice, hay una interesante entrevista en Mucktware [1] con Charles H. Schultz, uno de los miembros fundadores del Open Document Foundation. De entre las cosas que nos enteramos, est el trabajo que se est realizando para llevar LibreOffice a Android y el proyecto LibreOffice Online. Segn Schultz, este ltimo proyecto tiene ms puntos en comn con Microsoft Office 365, donde se cuenta con un cliente local y se interacta con una interfaz a los documentos en la nube, que con Google Docs, donde toda la interfaz es web. Sin embargo, una importante distincin: A diferencia de MSOffice 365, donde all

your documents are belong to us (siendous Microsoft, naturalmente), en LibreOffice podrs utilizar la nube oficial del proyecto, Dropbox o servicios similares, otro proveedor de nube cualquiera o crear tu propia nube personal o corporativa, con lo que la privacidad de tus documentos est asegurada. Pero hay ms: LibreOffice tambin permitir la edicin colaborativa simultnea. Eike Rathke, de Red Hat, lleva ya algn tiempo trabajando en dotar a LibreOffice de la capacidad de permitir la edicin colaborativa y simultnea de documentos y, como muestra el vdeo demostrativo, es ms que un sueo. Las implicaciones son tremendas, permitiendo que varias personas introduzcan y corrijan los datos en un hoja de

clculo, acabando con la pesadilla de las mltiples versiones de un mismo documento y el desfase con versiones antiguas Las posibilidades son fantsticas. Esto convertir a LibreOffice en la suite ofimtica de referencia en la comparticin interactiva de documentos. I

RECURSOS
[1] Entrevista a Charles H. Schultaz:

http://www.muktware.com/news/ 3509/libreoffice-online-will-be-realcompetitor-microsoft-office-365
[2] LibreOffice como suite ofimtico colaborativo: http://people.gnome. org/~michael/blog/ 2012-03-26-collaboration.html

Nmero 82

WWW.LINUX- MAGAZINE.ES

PORTADA Trucos SSH

Haciendo ms cosas con SSH

CONEXIONES PROTEGIDAS
La mayora de los administradores saben que SSH es una herramienta til para establecer conexiones cifradas con ordenadores remotos. Pero SSH an puede hacer mucho ms, incluyendo transferir ficheros, reenviar puertos e incluso servir de base a una VPN genuina. POR THOMAS DRILLING
l trmino SSH (Shell Segura) se refiere tanto al protocolo de red como al conjunto de herramientas que brindan a los administradores la capacidad de conectarse a dispositivos remotos por medio de una conexin segura. SSH les permite disponer de una herramienta nica para conectarse a sistemas remotos, as como una coleccin de aplicaciones remotas para poder realizar ejecuciones remotas de programas, copiado remoto y acceso X11 remoto junto con diversos escenarios de reenvo de puertos. SSH surgi en 1995, mientras que la popular implementacin libre OpenSSH [1] lo hizo con el cambio del milenio SSH y las herramientas del paquete SSH ssh, slogin, scp y sftp han reemplazado completamente legendarias herramientas UNIX como rsh, rlogin, rcp y telnet. Cada uno de estos comandos ejecuta un intrprete de comandos en un equipo remoto y permite que los usuarios puedan invocar programas. Como cada cliente necesita una cuenta de usuario en el equipo donde se tienen que ejecutar los comandos, todos los comandos mencionados, por esta razn, realizan un proceso de autenticacin. Debido a que los comandos SSH utilizan una infraestructura criptogrfica de clave pblica, el paquete SSH tambin incluye las herramientas para el proceso de autenticacin ssh-keygen, ssh-agent y ssh-add. La sintaxis completa, incluyendo el conjunto entero de opciones, aparece cuando se teclea ssh sin parmetros o cuando se teclea el comando man ssh.

SSH Interactivo
Una vez que se abre una conexin SSH
ssh -l <I>usuario_remoto<I>

y se introduce la contrasea del usuario en el equipo remoto, SSH reenviar todas las entradas de teclado al equipo

remoto. Un hecho poco conocido es que se pueden utilizar secuencias de escape para controlar el propio SSH. La tilde al comienzo de una lnea le indica a SSH que espere una secuencia de escape; el siguiente carcter ser el comienzo del comando: por ejemplo, ~#> lista las conexiones SSH y ~ termina la conexin actual, algo til si la shell no responde. Para obtener una

lista de todos los comandos soportados, puede teclear ~? (Figura 1). La opcin -e permite especificar un carcter diferente para introducir secuencias de escape en SSH.

10

Nmero 82

WWW.LINUX- MAGAZINE.ES

Trucos SSH PORTADA

posibilidad de montar un sistema de ficheros remoto usando SSH; sin embargo, esta tcnica requiere el uso del mdulo FUSE (Sistema de Ficheros en el Espacio del Usuario [2]) en el lado cliente. En el lado del servidor, sshfs slo requiere un servidor SSH con un subsistema SFTP. Si instala el paquete sshfs en el lado cliente, el gestor de paquetes instalar automticamente fuse-utils y lib-fuse2. En el caso ms simple, la sintaxis para sshfs ser la siguiente:

Figura 1: SSH puede controlarse por medio de secuencias de escape.

Transferencia de Datos con Clientes Grficos


Algunos administradores de ficheros (por ejemplo, Midnight Commander) pueden utilizar una conexin SSH para acceder al sistema de ficheros de un equipo remoto (Figura 3). El mtodo mc no requiere de soporte en el kernel del equipo cliente. El administrador de ficheros de Gnome, Nautilus, tambin soporta el protocolo SSH; el administrador slo tiene que teclear la direccin necesaria como una URL completa en la barra de direcciones (por ejemplo, ssh:// ordenador/ruta). (La versin 3.2.1 actual de Nautilus en Gnome 3 no muestra por defecto la barra de direcciones, de modo que hay que presionar Ctrl + L para activarla, como se muestra en la Figura 4). Nautilus mostrar entonces el cuadro de dilogo de conexin SSH.

Dependiendo de la disposicin del teclado, puede que sea necesario presionar la tecla dos veces para obtener el carcter tilde (~) como sucede con Ubuntu antes de teclear el carcter requerido. (Tngase en cuenta que los caracteres visibles ~? de la Figura 1 son slo por motivos de ilustracin. En una situacin real, la secuencia de escape no aparecer como texto visible tras el prompt).

scp usuario@host:Fichero1 U Fichero2

Para realizar una copia recursiva de un rbol de directorios completo hay que aadirle el parmetro -r.

Sshfs
Si desea una solucin ms elegante, probablemente desee montar el sistema de ficheros remoto por medio de SSH, lo cual se puede hacer gracias a la herramienta sshfs (Figura 2). Como SSH autentica y cifra cualquier dato que se transfiera, sshfs es una herramienta muy til para transferir de forma segura datos a travs de Internet. Sshfs le proporciona a un usuario no privilegiado la

Copiando Ficheros
SSH permite transferir ficheros con el comando scp; sin embargo, la mayora de los administradores tienden a utilizar el comando rsync, mucho ms potente, lo que significa que scp est dejndose de utilizar, aunque es adecuado para la mayora de los casos. Tecleando man scp se obtiene la sintaxis completa. En el caso ms simple se introducira:
scp Fichero1 U nombre_usuario@host:Fichero2

Para transferir ficheros en la otra direccin, hay que teclear:

Figura 2: El contenido de /root en el servidor remoto, uno con SSH y el otro usando sshfs.

WWW.LINUX- MAGAZINE.ES

Nmero 82

11

PORTADA Trucos SSH

Por supuesto, el usuario podr conectarse al servidor SSH con un nombre de usuario diferente:
ssh://usuario@servidor/ruta

se puede acceder a SSH por medio del esclavo KIO fish, como sigue:
fish://equipo/ruta

o se puede incluir la cuenta del usuario: Si prefiere una solucin mejor, puede utilizar el asistente de Nautilus en Archivo | Conectar con el servidor , seleccionar la entrada ssh del cuadro desplegable Tipo de servicio en la parte de destalles de servidor del cuadro de dilogo Conectar con el servidor e introducir los datos de autenticacin en los cuadros de texto correspondientes del cuadro de dilogo. Por cierto, este tipo de conexin SFTP/ SSH funcionar con la mayora de las aplicaciones Gnome. KDE lleva bastante tiempo ofreciendo soporte a SSH. En Dolphin o Konqueror,
fish://usuario@equipo/ruta

Dolphin tambin ha dejado de mostrar a los usuarios la barra de direcciones URL por defecto en la ltima versin; sin embargo, podr encontrar rpidamente esta funcin en Ver | Direccin | Barra de direcciones editable. Dolphin mostrar entonces inmediatamente el cuadro de dilogo de autenticacin de usuarios; no obstante, usa el nombre de usuario local que actualmente se est utilizando por defecto y habr que sobrescribir los valores con los del usuario remoto.

Los usuarios de KDE pueden tambin aadir una carpeta de red SSH como marcador en Dolphin en Lugares | Red seleccionando Aadir carpeta de red. A propsito, la sintaxis Fish de KDE tambin sirve para acceder a ficheros remotos en el contexto completo de KDE por medio de Archivo | Abrir en la mayora de las aplicaciones KDE. Los usuarios tienen que activar las entradas de direcciones editables en el selector de ficheros de KDE; para ello, hay que hacer clic con el botn derecho del ratn en la ruta actual en el selector de ficheros para abrir el men desplegable del selector de ficheros, y seleccionar Editar en vez de Navegar, que viene por defecto.

Usando Compresin
SSH tambin soporta compresin, lo cual puede ser realmente til si la red es un cuello de botella. La compresin de la comunicacin entre ssh y sshd podra requerir ms sobrecarga computacional en ambos extremos, pero para compensarlo, SSH slo tiene que transferir alrededor del 50 por ciento de los paquetes. Si se tiene la compresin activada de forma permanente en el lado del servidor, usando una lnea Compression yes en el fichero /etc/ssh/sshd_config, se podrn acelerar las transferencias DSL o RDSI lentas en combinacin con el reenvo de puertos. De forma similar, es posible configurar la compresin de forma permanente en el lado cliente con una lnea Compression yes en $HOME/.ssh/config. Para activar temporalmente las transmisiones comprimidas, puede usarse simplemente la opcin -C, que no hay que confundir con -c, que especifica el tipo de cifrado en las conexiones cifradas.

Figura 3: Midnight Commander puede utilizar SSH para acceder a los directorios remotos.

sshfs usuario@host:ruta U punto-de-montaje-local U [opciones]

Modo Maestro
El modo maestro proporciona a los administradores la capacidad de abrir mltiples conexiones lgicas SSH sobre una conexin fsica abriendo una conexin SSH como maestra. Luego podr enrutar el resto de las conexiones SSH al mismo host con la misma cuenta de usuario en el otro extremo por medio de la conexin

Figura 4: Nautilus 3.2.1 fuerza al usuario a activar manualmente la barra de direcciones presionando [Ctrl]+[L].

14

Nmero 82

WWW.LINUX- MAGAZINE.ES

Trucos SSH PORTADA

maestra sin tener que abrir una conexin fsica nueva. En este caso, el cliente usa un socket UNIX en el maestro y no directamente en el servidor en el otro extremo; se debe especificar un socket maestro. La transferencia de mltiples sesiones por medio de un canal maestro tambin puede ofrecer beneficios importantes con respecto a la latencia. Para configurar esto hay que aadir las siguientes lneas al fichero $HOME/.ssh/config:
Host * ControlPath ~/.ssh/U master-%l-%r@%h:%p ControlMaster auto

Host * indica que el resto de la configuracin se usar para conectarse a cualquier host; por otro lado, se podra introducir un nombre de host esttico. ControlMaster auto le indica a SSH que utilice una conexin existente para el modo maestro si es posible; de otro modo, SSH abrir una conexin nueva. La siguiente entrada
ControlPath ~/.ssh/U master-%l-%r@%h:%p

le seala a SSH dnde tiene que crear el fichero del socket que represente la conexin. %r se reemplaza por el nombre de la conexin, %h por el del host y %p por el nmero de puerto. La conexin maestra ser entonces referenciada de la siguiente forma:
ssh -M -S $HOME/.ssh/socket U usuario@host

la prctica se restringe a Linux, BSD y UNIX. A pesar de que existen multitud de alternativas de control remoto de forma grfica, SSH tiene la ventaja de venir de forma gratuita en cualquier sistema Linux. Hay que admitir que el control remoto basado en GUI con SSH no es muy rpido, pero para un uso ocasional para la administracin de un sistema, el reenvo de X11 puede ser adecuado. Para activar el reenvo X11 es preciso utilizar la opcin -X (que no hay que confundir con la opcin -x en minsculas, que desactiva la funcin de reenvo de puertos). El reenvo X11 slo le proporciona al programa del ordenador remoto privilegios restringidos en la pantalla local, lo cual puede ocasionar que la aplicacin falle de forma ocasional. Si existen problemas debido a los privilegios, se le puede proporcionar al programa acceso completo con la opcin -Y, aunque esta opcin no se recomienda. Debemos evitar el uso de la opcin -Y si no se confa en el administrador del ordenador remoto; -Y instala un tnel, que un atacante podra utilizar tambin para atacar la pantalla usando el tnel de forma inversa. Por otro lado, se puede llamar a SSH con el parmetro -o en vez

de -X y pasar el valor ForwardX11=yes. Tambin tenemos la opcin de establecer ForwardX11 yes en $HOME/.ssh/config.

Construyendo Tneles con SSH


SSH tambin permite asegurar (virtualmente) cualquier otro protocolo, como el clsico POP3 o las conexiones inseguras VNC. El reenvo de puertos permite a los administradores redirigir puertos individuales a travs de una conexin SSH segura, con SSH actuando como proxy que acepte la conexin en un extremo del tnel SSH y conecte el extremo de la conexin con el servidor de destino en el otro extremo. SSH soporta dos modos de operacin diferentes, el reenvo de puertos locales y el reenvo de puertos remotos, que a menudo se denominan tneles salientes y entrantes aunque el reenvo de puertos locales se utiliza con mayor frecuencia. La direccin en la que se establece el tnel es decir, el reenvo local o remoto de puertos viene definido por los parmetros -L y -R. El reenvo de puertos local reenva una conexin desde un puerto de un cliente local libremente seleccionado a travs de un canal seguro SSH a un puerto del servidor remoto; esto es un tnel saliente

Para abrir cualquier conexin siguiente al mismo host con la misma cuenta de usuario, hay que teclear:
ssh -S $HOME/.ssh/socket U usuario@host

Reenvo X11
El reenvo X11 permite la ejecucin de programas con interfaz de usuario grfica en un ordenador remoto por medio de SSH y muestra su salida en el escritorio local. Esta tcnica funciona de forma independiente al sistema operativo del ordenador remoto, suponiendo que el programa siga el estndar X11, lo que en

Figura 5: Configurando un tnel SSH para proteger el protocolo FTP que no es seguro. El usuario puede abrir la conexin FTP segura desde el cliente usando un puerto local.

WWW.LINUX- MAGAZINE.ES

Nmero 82

15

PORTADA Trucos SSH

Figura 6: El parmetro -N evita que se abra el intrprete de comandos del sistema remoto en el reenvo de un puerto local.

clsico. La sintaxis general para iniciar el reenvo local de puertos es:


ssh usuarioremoto@hostremoto -LU localport:hostremoto:portremoto

El siguiente ejemplo crea un tnel para una conexin FTP insegura usando el puerto estndar 21 a travs de la conexin SSH. Un servidor FTP se encuentra en ejecucin en la mquina www. thomas-drilling.de, y el ordenador cliente ws1-kubu abre la conexin segura SSH y a continuacin ejecuta el cliente FTP en una sesin de terminal separada con una direccin de destino cuyo puerto es el 4444 del ordenador local.
drilling@ws1-kubu:~$ U sudo ssh dilli@www.U thomas-drilling.de -L 4444U :www.thomas-drilling.de:21

la cuenta de usuario dilli. Al mismo tiempo, se encuentra a la escucha del puerto 4444 de ws1-kubu para reenviar lo que le llegue al puerto 21 del ordenador www.thomas-drilling.de; las comunicaciones utilizan una conexin SSH previamente configurada. El administrador de la mquina local ws1-kubu puede crear una conexin FTP de esta forma (Figura 5):
drilling@ws1-kubu:~$ sudo U ftp localhost 4444

Segn la pgina del manual, la sintaxis de la funcin de reenvo de puertos es la siguiente:


ssh -L [bind_address:]port:U host:port user@remotehost

remoto. Por ello, se puede implementar como localhost:21 en vez de www.thomas- drilling.de:21, ya que localhost se refiere a la perspectiva del ordenador remoto. Cuando se elige un puerto de entrada (SSH), hay que tener en cuenta que el usuario no tiene permiso para utilizar un puerto privilegiado por debajo del 1024 a menos que se sea root, lo cual explica por qu se utilizan nmeros de puertos grandes para su uso local en el reenvo de puertos. El segundo parmetro port especifica el puerto de destino para la operacin de reenvo; de este modo, esta configuracin se refiere al nmero de puerto del servicio que se va a tunelar. S slo se desea realizar reenvo de puerto e impedir que se ejecute un intrprete de comandos del ordenador remoto, se puede aadir el parmetro -N (Figura 6). Si se quiere acceder, digamos, a un servidor de correo POP3 de un servidor virtual por medio de una conexin cifrada, se puede montar un tnel SSH cifrado para el puerto 110 del Vserver usando reenvo de puertos:
ssh usuario@servidor -L U 4444:servidor:110

Este comando abre una conexin segura SSH en el cliente SSH local al ordenador remoto www.thomas-drilling.de usando

Esta sintaxis es ligeramente confusa. Los parmetros host y remotehost en esta notacin sintctica se refieren al mismo servidor remoto, ya que host es desde el punto de vista del sistema

Ahora, lo nico que hay que hacer es poner localhost como servidor de correo POP3 y como puerto el 4444 en el cliente de correo electrnico, por ejemplo en Thunderbird, para cifrar la transmisin sin necesitar que el servidor de correo tenga que soportar SSL (Figura 7). El reenvo de puertos remotos funciona de forma similar pero al contrario que el reenvo de puertos locales; dicho de otro modo, la conexin llega al puerto del equipo en el que sshd se est ejecutando. El servidor redirige los datos a travs del tnel SSH a un puerto arbitrario configurable en el cliente. La sintaxis es la siguiente:
ssh usuarioremoto@servidoremoto U -R puertoremoto:localhost:U puertolocal

Reenvo Dinmico con SSH


Gracias a la opcin dinmica -D, un cliente SSH puede actuar como un servidor SOCKS (proxy SOCKS) y automatizar el acceso a servidores remotos por medio de tneles SSH. El reenvo de

Figura 7: El reenvo de puerto local permite asegurar el protocolo no seguro POP3 a la hora de acceder a un servidor de correo remoto, incluso si el servidor POP no soporta SSL.

18

Nmero 82

WWW.LINUX- MAGAZINE.ES

Trucos SSH PORTADA

puertos dinmicos es tambin til si deseamos acceder a un servicio que se encuentre en un servidor en casa o en una empresa por medio de un tnel seguro desde un punto de acceso WLAN pblico. Para el servicio es necesario un cliente SOCKS, como por ejemplo un navegador web. En las opciones de conexin del navegador, hay que introducir el cliente SSH local como servidor proxy con un nmero de puerto configurable. Como las transmisiones entre el ordenador cliente y el router WLAN no se encuentran cifradas en un punto de acceso WLAN y por ello pueden ser ledas por un sniffer en la red, esta solucin es siempre til si necesitamos transmitir credenciales de acceso o cualquier otro dato sensible para acceder a nuestro propio servidor por medio de la web. Se puede montar un tnel al sshd remoto de la siguiente forma:
ssh -D puerto usuario@servidor

en el navegador; la Figura 8 muestra un ejemplo usando Firefox. De nuevo, la opcin -N es til para indicarle al cliente que abra el tnel pero que no abra un intrprete de comandos en el servidor. El uso de un tnel SSH como proxy SOCKS est bastante relacionado con las VPN; la nica diferencia reside en que, aunque el trfico de datos desde las aplicaciones que se usan se va a travs del tnel SSH en la configuracin del proxy, las peticiones DNS no; esto quiere decir que el tnel no es adecuado para tareas tales como la navegacin annima. Si deseamos utilizar la tcnica del tnel con otros programas o servicios aparte de HTTP sobre SSH, los usuarios de Linux deberan tener en cuenta que algunos programas no soportan proxies SOCKS. Si fuera este el caso, se podra instalar en Linux tsocks y aadir el siguiente fichero de configuracin /etc/socks/tsocks.conf:
server = localhost server_port = 12222 server_type= 4

VPN sobre SSH: Un Tnel TUN/TAP


OpenSSH Version 4.3 o posteriores proporcionan la opcin -w que permite a los usuarios configurar una VPN con un tnel de Capa 2 o Capa 3 con adaptadores de red virtuales (interfaces TUN/ TAP). Sin embargo, esta tcnica involucra al servidor del administrador y la carga de los mdulos del kernel en el lado del cliente para los dispositivos TUN/TAP usando modprobe. Dicho de otro modo, la solucin no es apta para escenarios ad hoc como los cybercafs. Para configurar los adaptadores de red virtuales requeridos debemos introducir el siguiente comando:
ifconfig tun0 10.0.2.1 U netmask 255.255.255.252

La configuracin del servidor debera ser similar a sta:


ifconfig tun0 10.0.2.2 U netmask 255.255.255.252 route add -host host_destino U dev eth0

Ahora slo queda introducir el cliente SSH local y el puerto como proxy SOCKS

PORTADA Trucos SSH

del servidor as como el cliente OpenSSH. Adems, el ordenador de su casa necesita tener una direccin DnyDNS para que sea remotamente accesible. Una vez que el servidor SSH se encuentre funcionando en el ordenador de su casa, abra un tnel SSH con reenvo de puerto remoto para el puerto 22 en el servidor de la empresa haca el servidor sshd de su casa, pero usando la direccin DynDNS accesible pblicamente:
ssh usuario@ordenador_de_casa U -R 4444:ordenador_de_casa:22

Figura 8: Con el reenvo de puertos dinmicos, el cliente SSH acta como proxy SOCKS. El usuario slo tiene que aadir el localhost y el puerto correspondiente en la configuracin del servidor.

Tras introducir estos comandos, el usuario en el cliente podr establecer un tnel VPN:
ssh -l usuario -p sshd-puerto U -w0:0 host-destino

Adems, hay que activar la configuracin sshd en el servidor de Linux estableciendo la opcin PermitTunnel yes. Vase el artculo sobre conexiones con tneles SSH que aparece en este mismo nmero de la revista para aprender ms sobre tneles SSH.

Agujereando el Cortafuegos
Los mtodos discutidos aqu demuestran claramente la potencia de SSH, especialmente con el reenvo de puertos. Todos los ejemplos han sido expuestos en un entorno amigable. Pero SSH tambin puede ser utilizado en un entorno hostil. Por ejemplo, si nuestro propio cortafuegos bloquea el puerto 22, pero necesitamos acceder de forma segura a los datos

de nuestro ordenador de la oficina, se puede aplicar el siguiente truco, que de nuevo se basa en el reenvo de puertos remotos. Es necesario que en la empresa exista un servidor OpenSSH en ejecucin, incluso si el cortafuegos impide las peticiones al puerto 22. Para activar un servidor SSH, se pueden instalar tanto openssh-client como los componentes del servidor SSH en la forma de paquete ssh en el caso de que ninguno de los dos estuviese ya instalado en el sistema. Los administradores de Debian y Ubuntu pueden tambin ejecutar tasksel desde la lnea de comandos y luego seleccionar el grupo de paquetes Servidor OpenSSH. Para seguir este ejemplo, hay que ser administrador del servidor remoto, o tener la autorizacin para realizar los experimentos, ya que probablemente vaya a infringir las polticas de seguridad de su empresa. En casa, va a necesitar asegurarse de que es capaz de aceptar conexiones SSH; es probable que tenga que instalar tambin los paquetes

Luego, deje el tnel y ejecute ssh usuario@ordenador_de_casa -p 4444 a travs del tnel para abrir otro tnel hacia el servidor de la empresa usando el nmero de puerto especificado para el reenvo remoto (4444). Este ejemplo demuestra el principio de tneles inversos, aunque esta tcnica puede que no tenga xito en el escenario actual, ya que el cortafuegos de la empresa no permitir el paso a las peticiones al puerto 22. La mayora de los cortafuegos de las empresas estn configurados de esta forma, pero permiten las peticiones al puerto 80 (HTTP). Nada puede impedirnos dejar el servidor SSH de casa escuchando en un puerto diferente por ejemplo, el puerto 80. Pero, una vez ms, recuerde que podra estar violando las polticas de la empresa o incluso infringiendo las leyes en algunas jurisdicciones.

Conclusiones
SSH puede hacer mucho ms que simplemente abrir intrpretes de comandos remotos, y muchos administradores de sistemas an no han descubierto su potencial al completo. Si se toma el tiempo necesario para investigar las opciones, podra descubrir que SSH convierte en obsoletas las VPN propietarias para la transferencia de archivos. De hecho, suponiendo que tenga las ltimas versiones del servidor y del cliente SSH, SSH ofrece lo ltimo en seguridad para autenticacin y cifrado para un amplio rango de escenarios de accesos remotos.I

RECURSOS
[1] Sitio web de OpenSSH:

http://openssh.org
[2] FUSE: http://fuse.sourceforge.net

20

Nmero 82

WWW.LINUX- MAGAZINE.ES

Tneles SSH PORTADA

Configurar conexiones de tunel SSH con Sshuttle y PuTTY

El Tnel del Tiempo


Heiko Bennew itz - 123RF.c om

Una conexin a prueba de sniffers es una buena idea si accedemos a nuestros datos privados viajando. Sshuttle y PuTTY nos ayudan a crear una conexin segura con unos pasos de pre-configuracin mnimos. POR THOMAS DRILLING

l acceso remoto a travs de un enrutado inseguro como el de Internet presenta muchos riesgos: el sniffing de conexiones WLAN desde un punto de acceso pblico, por ejemplo, no es especialmente complicado para un intruso experimentado. Existen numerosas soluciones y productos disponibles en el mercado que nos permiten acceder con seguridad a nuestro propio servidor desde el exterior. La complejidad de estas herramientas vara con el tipo de uso y los requisitos de seguridad. Varias de estas soluciones existen nicamente para dar soporte a diversos modelos de tneles. La alternativa ms obvia para un tnel es una VPN. Desde el punto de vista funcional, cualquier tecnologa VPN tiene la tarea de hacer un tnel a travs del inseguro entorno de Internet. El clsico tnel VPN difiere de otros tipos de tneles sobre redes TCP/IP, ya que transporta todos los paquetes de red de forma independiente a los protocolos

de nivel superior. Pero un problema con la VPN es que no se puede configurar sobre la marcha: hay que planificarla y configurarla desde el principio. La herramienta Sshuttle [1] es til para la creacin de una VPN rpida. Se basa en una conexin SSH en combinacin con un proxy socks transparente, dndonos de esta manera una opcin para configurar una conexin segura con herramientas incorporadas. Sshuttle difiere de un tnel SSH basado en TUN/TAP (vase el cuadro titulado Tnel TUN/TAP),

reduciendo al mnimo la necesidad de una configuracin previa.

La VPN del Pobre


En contraste con la VPN clsica, un tnel SSH es bastante fcil de instalar y configurar. A diferencia de una VPN, un tnel SSH requiere un tnel separado para cada protocolo. Por otro lado, puede funcionar sin necesidad de un software complejo o especializado en el servidor o el cliente. Sshuttle, que fue creado por el estudiante canadiense Avery Pennarun [2],

Tnel TUN/TAP
La versin 4.3 o posterior de OpenSSH proporciona la opcin -w que permite a los usuarios configurar una VPN. Desde entonces, los usuarios son capaces de configurar tneles de Capa 2 o Capa 3 con adaptadores de red virtuales (interfaces TUN/TAP). Sin embargo, el enfoque de TUN/TAP no es til para el escenario descrito en este artculo debido a que se requiere algo de preparacin en el servidor y el cliente en forma de cargar los mdulos del kernel para los dispositivos TUN/TAP. Adems, es necesario configurar el demonio SSH en el servidor, permitiendo la opcin PermitTunnel yes. Los comandos del Listado 1 muestran cmo configurar los adaptadores de red virtuales correspondientes del servidor y cliente. Despus de hacer esto, el cliente tiene la opcin de utilizar SSH para un tnel VPN: $ ssh -l usuario -p puerto-sshd -w0:0 host_objetivo

WWW.LINUX- MAGAZINE.ES

Nmero 82

21

PORTADA Tneles SSH

agujero en la infraestructura de seguridad y tambin podra estar violando la poltica de empresa. Adems, Sshuttle es bastante nuevo y an no ha pasado pruebas exhaustivas.

PuTTY como Alternativa


Si slo tenemos acceso a un ordenador con Windows, podemos probar el cliente SSH PuTTY [3], que hace que sea muy fcil configurar un tnel SSH (vase la Figura 3). En el lado del cliente, el programa acta como un proxy Socks. Esto significa que necesitamos redireccionar los servicios sobre los que queremos hacer un tnel, como HTTP en un navegador web, a los proxies. Como usuario, slo tendremos que introducir el nombre del servidor al que abriremos la conexin SSH en la pestaa Sesin de PuTTY, y luego guardar el perfil cuando hayamos terminado. El cuadro de dilogo para la configuracin del tnel SSH se encuentra en el rbol jerrquico a la izquierda debajo de Conexin | SSH | Tneles (vase la Figura 4). Introducimos cualquier puerto libre en el cuadro de texto Puerto fuente. Entonces podremos acceder al proxy en este puerto, el 12222 en este ejemplo. A continuacin, habilitamos bien la opcin Auto o Dinmica y pulsamos sobre Abrir. El servidor SSH nos pide que confirmemos la firma en el primer contacto, y en una nueva ventana de terminal nos pide el nombre de usuario y la contrasea correspondiente. Si deseamos establecer una conexin similar trabajando desde un cliente Linux, podemos utilizar el siguiente comando:
$ ssh -N -D12222 U usuario@servidor

Figura 1: Sshuttle es muy til, ya que se basa enteramente en herramientas habituales de un ordenador con Linux.

es una herramienta de lnea de comandos, escrita en Python, que ofrece a los usuarios la capacidad de operar una VPN basada en SSH entre ordenadores Linux, BSD y MacOS X. Para utilizar Sshuttle es necesario tener acceso SSH a la mquina remota y tener configurado Python en su lugar correspondiente en los dos extremos de la conexin. Sshuttle implementa un servidor proxy transparente que no requiere ninguna configuracin, y al contrario que con el simple reenvo de puertos descrito anteriormente, en realidad nos permite pasar a travs de peticiones DNS. Sshuttle es relativamente nuevo, y es probable que no lo encontremos en los repositorios de Linux ms importantes. Las fuentes del programa, con licencia GPLv2, estn disponibles en Github en forma de archivo tar o zip. Descomprimimos el programa en un directorio. Slo necesitamos tener acceso de root en el cliente, ser root no es obligatorio para el servidor. El servidor o equipo remoto tiene que ejecutar el demonio SSH. Para implementar el software, iniciamos sesin en el cliente como root, cambiamos al directorio que contiene los archivos de programa des-

comprimidos, y establecemos una conexin con el host remoto tecleando el siguiente comando:
$ sshuttle -r U usuario@nombrehost 0.0.0.0/0 -vv

A continuacin, introducimos la contrasea para la cuenta de usuario en el host remoto o servidor, y esperamos a que el programa establezca la conexin (vase la Figura 1). Si no configuramos ninguna restriccin para la red (por ejemplo 0.0.0.0/0 aqu, que se puede abreviar como 0/0), Sshuttle ser de gran utilidad como un proxy para el trfico TCP, por ejemplo, si el cliente se encuentra en un entorno no confiable, como un punto de acceso pblico. Es fcil comprobar si el tnel est activo. Simplemente navegamos hasta un sitio web como http://www. stilllistener.addr.com/checkpoint1/test1. Si el tnel est funcionando, deberamos ver la direccin IP del servidor remoto o el host, de lo contrario, veremos la direccin del router local (vase la Figura 2). Se recomienda precaucin si vamos a utilizar Sshuttle desde el interior de la red de nuestra empresa: dado Listing 1: Un Tnel TUN/TAP que el pro01 # Client grama no nece02 ifconfig tun0 10.0.2.1 netmask 255.255.255.252 sita permisos 03 # Server 04 # IP address on target computer de root en el 05 ifconfig tun0 10.0.2.2 netmask 255.255.255.252 servidor o host 06 route add -host <i>target_host<i> dev eth0 remoto, abre un

-N evita lanzar un programa en el servidor, y -D nos permite especificar el puerto SOCKS local. Cuando utilizamos PuTTY, es una buena idea aadir la opcin -f para enviar la solicitud a segundo plano. Si todos los parmetros son correctos, PuTTY abrir la conexin SSH, y podremos aadir el cliente PuTTY como un proxy en alguna otra aplicacin. En Firefox 8, en el cuadro de preferencias, elegimos Avanzadas y pulsamos en la pestaa Redes. En la seccin Conexin , pulsamos el botn

22

Nmero 82

WWW.LINUX- MAGAZINE.ES

Tneles SSH PORTADA

Figura 2: Probamos el tnel con la pgina de prueba stilllistener.addr.com. Si el tnel no est funcionando, deberamos ver la direccin de nuestro router (izquierda). Si funciona, veremos la direccin del servidor remoto o el host (derecha).

Configuracin. Para empezar, habilitamos Configuracin manual del proxy e introducimos un valor de localhost para el host SOCKS . A continuacin, introducimos el nmero de puerto que hemos seleccionado en la configuracin de PuTTY para el Puerto , y adicionalmente nos aseguramos de que la opcin SOCKS v5 est activada. Si todo esto funciona, deberamos ser capaces de utilizar las aplicaciones web a travs del tnel. Para probar la configuracin slo tenemos que navegar

hasta una pgina web como http:// whatismyipaddress.com. Si la pgina web muestra la direccin IP del ordenador remoto en lugar de la direccin del host local, todo funciona segn lo previsto. La diferencia entre esta instalacin y una verdadera conexin VPN es que, aunque el trfico de datos desde las aplicaciones que utilizamos se ejecutan a travs del tnel establecido en la configuracin del proxy, las peticiones de DNS no lo hacen, lo que significa que el tnel SSH es no apto para navegacin annima. Si desea hacer un tnel con otros programas o servicios, adems de HTTP a travs de SSH, los usuarios de Linux deben tener en cuenta que algunos programas no son compatibles con servidores proxy SOCKS. Si este es el caso, podemos cambiar al wrapper de Tsocks, que proporciona acceso a la librera alternativa tsocks [4].

Figura 4: PuTTY ofrece un cuadro separado para configurar el tnel SSH.

tunelar los protocolos que utilicemos de forma segura a travs de Internet. Adicionalmente, Sshuttle incluso nos ayudar si el demonio SSH en el lado servidor no ha habilitado la funcin interna de tnel. I

RECURSOS
[1] Sshuttle: https://github.com/ apenwarr/sshuttle [2] Apenwarr: http://apenwarr.ca [3] PuTTY: http://www.chiark.greenend. org.uk/~sgtatham/putty/ [4] Librera Tsocks: http://tsocks.sourceforge.net/

Conclusiones
Si queremos evitar el esfuerzo de crear un software complejo para el acceso ocasional por VPN, Sshuttle es una opcin perfecta. El programa no requiere el reenvo de puertos y, si fuera necesario,

Figura 3: El cliente de SSH PuTTY permite a los usuarios establecer conexiones SSH desde un host de Windows.

WWW.LINUX- MAGAZINE.ES

Nmero 82

23

PORTADA Monitorizacin SSH con Ruby

Control de discos con SSH y Ruby

Observador Silencioso

Renjith Krishnan - 123RF.com

El seguimiento de una red repleta de discos puede ser algo complicado, pero Ruby y SSH pueden facilitar las cosas. POR DAVID BERUBE

a administracin de sistemas a menudo implica monitorizar muchos pequeos detalles. Como cualquier administrador de sistemas sabe, es fcil tener un pequeo problema, como un directorio /tmp o /var/ log lleno, y que se convierta en un masivo dolor de cabeza. Slo necesitamos tener una particin completa de una mquina vital para provocar el caos total. Afortunadamente, existen potentes herramientas de software libre que pueden resolver este problema. Muchas de ellas, como Zabbix y Cacti, pueden comprobar el espacio libre en disco, pero su configuracin es complicada, siendo a menudo ms complejas de lo necesario. Una desconfiguracin del sistema de monitorizacin puede dejarlo peligrosamente sin proteccin. En este artculo mostraremos una manera sencilla de asegurar que nuestro Linux y FreeBSD no se quedan sin espa-

cio en disco de forma inesperada. Un pequeo script utiliza SSH y Ruby para iniciar sesin automticamente en un cierto nmero de mquinas, descubre todas las particiones y comprueba el espacio en disco. La configuracin es mnima, slo hay que configurar el acceso SSH y aadir una tarea de cron recibiremos un correo electrnico cuando el espacio est bajo. Para empezar, vamos a suponer que deseamos medir todos los discos en los hosts test1.dominio , test2.dominio y test3.dominio.

Configuracin de una Sesin SSH


Lo primero que tenemos que hacer es crear una autenticacin SSH sin necesidad de contrasea. Si no lo hemos hecho previamente, es necesario generar un par de claves pblica/privada con el siguiente comando:
ssh-keygen -t rsa -N

Por ahora, cuando se nos pregunta si deseamos una contrasea, lo dejamos en blanco (vase la Figura 1). Una contrasea permite cifrar la clave, pero como el script va a ejecutarse sin supervisin, no introduciremos ninguna. (Valdra la pena usar una contrasea y almacenar las claves descifradas en memoria con sshagent, pero esto est fuera del alcance de este artculo.) A continuacin, cada servidor remoto debe estar configurado para aceptar la clave, por lo que necesitamos ejecutar el siguiente comando en cada uno de ellos:
cat ~/.ssh/id_rsa.pub | U ssh usuario@test1.dominioU cat - >> ~/.ssh/authorized_keys

Este comando nos pedir la contrasea para test1.dominio. Sin embargo, los futuros inicios de sesin utilizarn la autenticacin RSA en su lugar y no nos pedirn la clave (vase la Figura 2). Para

24

Nmero 82

WWW.LINUX- MAGAZINE.ES

Monitorizacin SSH con Ruby PORTADA

deshacer este proceso, eliminamos la lnea correspondiente del archivo ~/ .ssh/authorized_keys del servidor en cuestin. Para cada servidor que deseemos comprobar, es necesario repetir este proceso de autorizacin. Un sencillo comando ssh debera verificar que nuestro inicio de sesin ha funcionado.
ssh usuario@test1.dominio

El archivo id_rsa.pub realiza la misma funcin bsica que la contrasea de antes: sirve como una prueba de identidad para nuestra mquina, pero, a diferencia de una contrasea habitual, este archivo no se enva al servidor remoto, lo que es ms seguro y la mayor ventaja del cifrado de clave pblica.

Monitorizacin del Espacio en Disco


En este punto, ya podemos acceder con seguridad a las mquinas en cuestin. A continuacin necesitaremos una va para monitorizar los espacios en disco de las mismas. El Listado 1 muestra un script que hace justamente eso. Debemos tener en cuenta que la secuencia de comandos del Listado 1 requiere que tengamos instalado tanto el sistema RubyGems [1], como Ruby on Rails, adems de Ruby en s, por supuesto. Tras haber descargado e instaFigura 1: Los resultados de generar una nueva clave.

Y deberamos estar conectados sin tener que introducir una contrasea. Debido a las matemticas del cifrado de clave pblica, podemos tener confianza en la seguridad de este mecanismo, dando por hecho que la clave privada (~/.ssh/ id_rsa) permanece segura. Incluso si el archivo authorized_keys se recupera desde test1.dominio, se tendra que recuperar el archivo id_rsa.pub desde nuestra mquina local.

lado RubyGems, podemos instalar Rails de la siguiente manera:


gem install rails

Una vez que las dependencias se han instalado, el script es fcil de utilizar.

Listado 1: ssh_disk_monitor_rb
001 require rubygems 002 require action_view 003 require active_support/core_ext/numeric/bytes 004 include ActionView::Helpers::NumberHelper 005 require optparse 006 007 # Default values: 008 $block_size = 512.bytes 009 010 warning_limit_absolute = 128.megabytes / $block_size 011 warning_limit_ratio = 0.05 # 5 percent 012 skippable_filesystems = [ swapfs, devfs, procfs, iso9660] 013 skippable_mount_points = [] 014 email_to = nil 015 email_from = nobody@localhost 016 smtp_host = nil 017 smtp_port = nil 018 019 # Parse command line options from user: 020 021 OptionParser.new do |o| 022 023 o.on(-a LIMIT, --absolute-limit LIMIT, Absolute limit (megabytes, default 128)) { |x| warning_limit_absolute= (x.to_i.megabytes) / $block_size } 024 o.on(-r LIMIT, --ratio-limit LIMIT, Ratio limit (ratio, default 0.05)) { |x| warning_limit_ratio = x.to_f } 025 026 o.on(-b BLOCK_SIZE,--block-size BLOCK_SIZE, 035 036 o.parse! 037 038 end 039 040 hosts = ARGV 041 042 043 def format_blocks(blocks) 044 number_to_human_size(blocks.to_i*$block_size) 045 end 046 047 class MonitorResults 048 cattr_accessor :warnings, :errors, :email_body 049 @@warnings = [] 033 034 o.on(-h,--help, Print this message) { puts o; exit; } 030 031 o.on(--skippable_filesystems FS1,FS2,FS3, Skip file systems (defaults to swapfs, devfs, procfs, iso9660)) { |x| skippable_filesystems = x} 032 o.on(--skippable_mount_points /dir1,/dir2,/dir3, Skip mount points (defaults to none)) { |x| skippable_mount_points = x} 027 028 o.on(-m EMAIL, --mail-to EMAIL, Email results to EMAIL (default none)) { |x| email_to = x} 029 o.on(-f EMAIL, --mail-from EMAIL, Set from address when mailing results (default nobody@localhost)) { |x| email_from = x} Block size (bytes, default 512)) { |x| $block_size = x.to_i }

WWW.LINUX- MAGAZINE.ES

Nmero 82

25

PORTADA Monitorizacin SSH con Ruby

Listado 1: ssh_disk_monitor_rb (Cont.)


050 @@errors = [] 051 @@email_body = 052 053 def self.warn(w) 054 puts w 055 @@email_body << w << \n 056 @@warnings << w 088 089 057 end 058 def self.error(e) 059 puts e 060 @@email_body << e << \n 061 @@errors << e 093 094 end 095 096 last_line = #{hosts.length} hosts checked; << #{MonitorResults.warnings.length} war097 098 099 100 puts last_line 101 lines.each do |line| cols = line.split(/\s+/).map { |x| x.strip =~ /^[0-9]+/ ? x.to_i : x } fs, blocks, used, avail, capacity, mount_point = *cols 077 078 079 080 081 082 083 084 if avail.to_f < percentage_limit MonitorResults.warn #{host}: #{fs} (#{mount_point}) has #{format_blocks(avail)} free, should be over #{format_blocks(percentage_limit)} percentage_limit = warning_limit_ratio * capacity.to_f next if skippable_filesystems.include?(fs) next if skippable_mount_points.include?(mount_point) next if capacity == 0 102 MonitorResults.email_body << \n#{last_line} 103 104 if email_to 105 106 require mail 107 108 109 mail = Mail.new do email_to 110 to email_from 111 from 112 subject Free Disk Space Warning 113 115 116 mail.delivery_method :sendmail 117 118 mail.deliver! 119 120 end body MonitorResults.email_body 114 end nings, << #{MonitorResults.errors.length} errors. 062 end 063 end 064 065 hosts.each do |host| 066 067 begin 068 output = `ssh #{host} BLOCKSIZE=#{$block_size} df -P` 069 070 071 072 073 074 075 076 lines = output.split(/[\r\n]+/) lines.shift # remove header row for a filesystem of #{format_blocks(capacity)} 085 086 087 end if avail.to_f < warning_limit_absolute MonitorResults.warn #{host}: #{fs} (#{mount_point}) has #{format_blocks(avail)} free, should be over #{format_blocks(warning_limit_absolute)} end end

090 rescue 091 MonitorResults.error #{host}: error while checking: #{$!} 092 end

Por ejemplo, si deseamos comprobar tres mquinas, test1.dominio, test2.dominio y test3.dominio, podemos ejecutar:
ruby ssh_disk_monitor.rbU usuario@test1.dominioU usuario@test2.dominioU usuario@test3.dominio

El comando anterior inicia sesin en test1.dominio como usuario y verifica si hay poco espacio en disco (Figura 3). De forma predeterminada, tiene dos lmi-

tes: un lmite absoluto de 128 MB y un lmite de ratio de 0,05. El primero significa que si el espacio en el disco cae por debajo de 128 para (casi) cualquier dispositivo instalado, se presenta un aviso. El segundo significa que si la relacin de espacio libre a la capacidad total es menor que 0,05 (5%), se reportar una advertencia. (Como veremos en un segundo, ignorar automticamente algunos de los dispositivos, tales como sistemas de archivos de slo lectura). Con la opcin -a podemos eliminar el lmite absoluto, y con -r cambiamos el

lmite de ratio. Por ejemplo, el siguiente comando establece los lmites en 2048MB y el 2%:
ruby ssh_disk_monitor.rb U -a 2048 -r 0.02 U usuario@test1.dominio

El script ignora algunos tipos de sistemas de archivos de forma predeterminada, por ejemplo, devfs y SwapFs no se comprobarn. Podemos reemplazar la lista de sistema de archivos con la opcin --skippable_filesystems, e ignorar

26

Nmero 82

WWW.LINUX- MAGAZINE.ES

Monitorizacin SSH con Ruby PORTADA

En Ruby, los argumentos de lnea de comandos se almacenan en la matriz ARGV. Optparse elimina cualquier cosa que se parezca a una opcin de lnea de comandos (por ejemplo, si comienza por o --), y deja los elementos restantes en ARGV. Figura 2: Un archivo .ssh/id_rsa.pub de ejemplo. El script inicializa algunas variables utilizadas para los puntos de montaje mediante el uso contar advertencias y errores, y define de la opcin --skippable_mount_points. una funcin format_blocks. Esta funcin Por ejemplo, los siguientes comandos se utiliza posteriormente para formatear ignoran cualquier sistema de archivos tamaos de disco con formato indicado montado como /mnt/punto o /mnt/otropor el comando df a tamaos legibles: 1 punto: GB, 30 MB, etc. Para hacerlo hace uso de la funcin number_to_human_size ruby ssh_disk_monitor.rbU de Ruby on Rails. --skippable_mount_pointsU A continuacin, el script recorre todos /mnt/punto,/mnt/otropuntoU los nombres de host especificados en la usuario@test1.dominio lnea de comandos, los cuales se pasan a SSH, por lo que pueden ser nombres Por ltimo, debemos tener en cuenta simples o bajo la forma usuario@host. que podemos enviar los resultados con El espacio de disco en la mquina la opcin --mail-to: remota se recupera entonces de la siguiente manera: ruby ssh_disk_monitor.rbU
--mail-to una_direccion@dominioU usuario@test1.dominio output = `ssh #{hostU BLOCKSIZE=U #{$block_size} df -P`

/\s+/ , lo que significa que cada columna se separa por uno o ms caracteres en blanco. Con esta informacin, el script ignora las entradas que se encuentren en nuestra lista de sistemas de ficheros a omitir o puntos de montaje a omitir. Cada sistema de archivos se compara con los dos criterios: el ratio y los lmites absolutos. Si un sistema de archivos falla con uno de los dos criterios, el script genera una advertencia. Por ltimo, se imprime un resumen. Si se especific la opci --mail-to en la lnea de comandos, se enva un informe por correo electrnico a cualquier direccin que introdujera el usuario.

Conclusin
Con algo de programacin, los sistemas de vigilancia a travs de SSH pueden funcionar bien para un buen nmero de casos de uso. En este caso particular, es una buena solucin. En otros, es posible que no funcione tan bien, y si un gran nmero de scripts diferentes se conectan a travs de SSH, el retraso en la creacin de nuevas conexiones podra ser excesivo. En esos supuestos, es probable que sea ms prudente procesar las conexiones por lotes. Evidentemente, existen muchos otros enfoques y protocolos que se pueden utilizar por ejemplo, si necesitamos almacenar datos histricos, es posible que desee ver uno ms completo, como Zabbix [2], Cactus [3] o Nagios [4]. Sin embargo, el que hemos examinado aqu puede funcionar bien en muchos casos, sirviendo adems como un mecanismo de seguridad para protegernos contra errores de configuracin. I

El comando ssh se utiliza para ejecutar el comando df en la mquina remota. Debemos tener en cuenta que la forma particular utilizada es df -P, que estaCmo Funciona? blece que la salida ser (supuestaEl script del Listado 1 comienza por mente) compatible POSIX y, por lo analizar las opciones de lnea de comantanto, tericamente uniforme. En la dos. Para hacerlo, tenemos disponibles prctica, el tamao de bloque reporvarias libreras de Ruby. Este script en tado vara. El script suaviza las diferenparticular utiliza la librera optparse. cias estableciendo explcitamente la Optparse es parte de Ruby, por lo que variable de entorno BLOCKSIZE. El no necesitamos instalar nada especial. valor por defecto utilizado por este script es de 512 bytes, pero se puede reemplazar con la opcin -B. Seguidamente, el script analiza la salida. Divide cada lnea con la Figura 3: Un ejemplo de ejecucin de ssh_disk_monitor.rb. expresin regular

Por supuesto, todas estas opciones se pueden combinar como se desee. Aunque los comandos anteriores se ejecutaron de forma interactiva, por lo general se ejecutarn a partir de un cronjob.

RECURSOS
[1] RubyGems.org: http://rubygems.org/ [2] Zabbix: http://www.zabbix.com/ [3] Cacti: http://www.cacti.net/ [4] Nagios: http://www.nagios.org/

EL AUTOR
David Berube es consultor, orador y autor de Practical Rails Plugins, Practical Reporting with Ruby and Rails y Practical Ruby Gems. Podemos contactar con l en info@berubeconsulting. com.

WWW.LINUX- MAGAZINE.ES

Nmero 82

27

PRCTICO Arkose

Aislar aplicaciones en un entorno de pruebas con Arkose

Mark Spieler, Fotolia

Probando 1 2 3
Arkose le permite confinar software potencialmente peligroso en un entorno de pruebas sandbox virtual, que proteja su sistema de errores y prdida de datos. POR THOMAS DRILLING
n arenero sandbox permite a los nios jugar con seguridad sin destruir nada de valor. Este principio, que funciona perfectamente en el mundo real, tambin funciona en el reino virtual. El arenero digital tiene un objetivo ms restrictivo, pero la idea es la misma: crear un entorno para los programas, en el cual, cualquier dao que se pueda causar no afecte a todo el sistema. En este contexto, dao significa problemas con el cdigo y el entorno operativo. El objetivo es que cualquier efecto no deseado quede constreido al entorno de pruebas. Arkose [1], creado por Stphane Graber, es un entorno de pruebas que se basa en los mismos conceptos tecnolgicos que LXC (Linux Container, [2]). Arkose, que se introdujo en el kernel en la versin 2.6.29, se basa en los espacios de nombres del kernel [3] para aislar recursos y Cgroups [4] para restringirlos, lo que lo hace apropiado tanto para contener aplicaciones como sistemas. Segn el sitio web del proyecto, Arkose le permite arrancar cualquier binario instalado en un contenedor configurable. Puede elegir cunto espacio de disco usar, si debe tener acceso a la red y si debe ser capaz de acceder a su directorio /home.

Arkose se ha diseado para ser simple. No ofrece un abanico de caractersticas como los ms sofisticados entornos de pruebas, pero es rpido y sencillo. Es posible lanzar una aplicacin dentro de un entorno de pruebas con una simple orden o incluso desde el mismo gestor de archivos Nautilus (Figura 1). Tal y como veremos ms tarde en este artculo, Arkose usa el sistema de archivos superpuesto AuFS para simular el acceso al sistema de archivos local. Esto significa que la aplicacin que se ejecuta en el contenedor no sabe que se est ejecutando en un contenedor restringido. Adems, es prctico como herramienta de seguridad y para desarrollo. Este entorno de pruebas rpido y seguro permite construir y probar aplicaciones de manera que no harn ningn dao permanente al sistema anfitrin.

jerarquas en consideracin. El controlador de recursos de la memoria del kernel asla estos grupos del resto del sistema y restringe los programas que consumen mucha memoria si es necesario. Si Cgroups est activado en el kernel, se usar para gestionar todos los recursos, sin importarle si hay procesos de espacio de usuario, sus hilos o los hilos del kernel. AuFS [5], un derivado de UnionFS, muestra cambios del sistema de archivos en el entorno de pruebas. AuFS es un sistema de archivos superpuesto que se usa

Cmo Funciona Arkose?


La funcionalidad Cgroups ha estado disponible en las versiones del kernel de Linux desde la 2.6.24. Cgroups permite al kernel agrupar procesos y ejecutarlos en un proceso especfico, o usarlos como una unidad desde el punto de vista del scheduler. En un sistema Linux, esta tcnica permite seleccionar un grupo de procesos definido y asignarle recursos, mientras que el kernel puede tomar las

Figura 1: Arkose ofrece slo una mnima cantidad de opciones para configurar el entorno de pruebas.

28

Nmero 82

WWW.LINUX- MAGAZINE.ES

Arkose PRCTICO

para simular escritura en un medio donde no se puede escribir. De esta manera, Arkose da a cada usuario Linux una solucin sencilla para poner sus programas en un entorno de pruebas.

Instalacin
Usar Arkose en Natty Narwhal es muy sencillo. De hecho, Ubuntu 11.04 es la primera distro que aade Arkose de manera predeterminada a sus repositorios de paquetes e incluye una interfaz grfica con integracin en Nautilus. Para instalar Arkose en Ubuntu, seleccionamos los paquetes arkose, arkose-gui (la interfaz grfica) y arkose-nautilus (la integracin en Nautilus) del gestor de paquetes. Tendremos que cumplir los siguientes requisitos: la versin 1.3 necesita al menos el kernel 2.6.36 con AuFS2 habilitado esto viene predeterminado en Ubuntu 11.04. Tambin necesitaremos tener LXC, Python, GTK y un emulador de terminal X (estas herramientas son parte de la configuracin predeterminada de Ubuntu). Desafortunadamente, el repositorio de Ubuntu slo ofrece actualmente la versin 0.3.2 de Arkose, siendo recomendable instalar la versin actual de desarrollo 1.3.2 si deseamos trabajar con l. En Ubuntu Natty esto se puede hacer sin demasiados problemas, habilitando el repositorio PPA ppa:arkosedevel/stable, donde encontraremos tam-

bin la versin 1.3.2 para Ubuntu 10.10. Tambin se puede descargar la versin 1.3.1 directamente desde Launchpad [6]. La interfaz (arkose-gui) est disponible en el men Aplicaciones | Herramientas de sistema | Aplicacin de escritorio de entorno de pruebas Arkose despus de la instalacin. Lanzar un programa en el entorno de pruebas es muy sencillo: seleccionando Abrir en un entorno de pruebas en Nautilus necesita tener el paquete arkose-nautilus instalado para acceder a esta opcin (ver la Figura 1).

Configuracin
Arkose muestra un dilogo con la ruta al programa seleccionado o al binario. Pulsando Mostrar las opciones del entorno de pruebas se obtiene acceso a ms opciones (Figura 2). Tamao del contenedor permite definir el tamao mximo del contenedor. Esto establece un lmite a la cantidad de memoria RAM que el programa puede solicitar, al nmero de instancias que puede generar de s mismo y a la cantidad de documentos y archivos temporales que puede crear. Si queremos guardar la configuracin del programa y los cambios, despus de salir del entorno de pruebas, seleccionamos una de las siguientes opciones Directorio /home real (en lugar de copyon-write) o Directorio /tmp real (en lugar de copy-on-write). La opcin soporte de red debera ser obvia le proporciona acceso a la red al programa activo en el contenedor. La versin 1.3 aade la opcin Tipo de almacenamiento con dos botones de radio: ext4 (disco duro) y tmpfs (memoria). tmpfs le dice a Arkose que mantenga los cambios visibles al programa en la RAM en vez de escribirlos en ~/ .arkose/. Tambin puede lanzar Arkose tecleando sudo arkose en la lnea de comandos. Si se introduce man arkose, lista las opciones que son iguales a las disponibles en el cuadro de dilogo.

Figura 2: La integracin con Nautilus permite a los usuarios ejecutar cualquier binario en el entorno de pruebas.

Esta restriccin se ha levantado en la versin 1.3, la cual introduce un buen nmero de cambios decisivos. Por ejemplo, ahora, los programas gestionados por Arkose 1.3 pueden emitir sonido a travs de Pulseaudio y usar dispositivos de vdeo tipo webcams. Adems, Arkose tiene su propio Servidor X aislado. Por ltimo, pero no menos importante, la versin 1.3 enva actualmente comunicaciones a travs de D-Bus.

Conclusiones
Linux tiene un buen abanico de mtodos para encerrar aplicaciones crticas para la seguridad o potencialmente inestables en un entorno de pruebas. Las opciones van desde la simple redireccin del directorio raz, hasta una completa virtualizacin del sistema operativo en contenedores de recursos. Si lo nico que buscamos es aislar aplicaciones individuales, no necesitamos matar moscas a caonazos: con Arkose tenemos las solucin que buscamos, siendo una herramienta que nos permite instalar y usar complejas tecnologas de contenedor de Linux como un usuario normal. I

Herramientas de Prueba
Linux tiene un gran cantidad de tecnologas para pruebas, desde la redireccin a un sistema de archivos con chroot, hasta la virtualizacin de un entorno o sistema operativo (OpenVZ, Linux VServer), emulando de forma completa el hardware del anfitrin. Todas estas tecnologas que, o bien proporcionan un contexto virtual para un programa o restringen los derechos del mismo de manera que no puedan causar (virtualmente o no) daos en el anfitrin, los podemos calificar, en principio, como entornos de pruebas. Estas soluciones incluyen contenedores de recursos como OpenVZ, Linux VServer, Solaris Zones, Parallels Virtuozzo, User Mode Linux (UML), o LXC (Linux Container), todas las cuales son tecnologas de virtualizacin. Los programas como KVM/Qemu, Bochs, FAUmachine, o Xen y VMware, tambin crean entornos de pruebas. El desarrollador de Fedora Daniel Walsh viene desarrollando un entorno de pruebas basado en SELinux desde hace algn tiempo.

RECURSOS
[1] Arkose: http://www.stgraber.org/ category/arkose [2] Contenedores Linux (LXC): http://lxc.sourceforge.net [3] Espacios de nombre del Kernel: http://lxc.sourceforge.net/index.php/ about/kernel-namespaces [4] Cgroups: http://www.mjmwired.net/ kernel/Documentation/cgroups/ [5] AuFS: http://aufs.sourceforge.net [6] Arkose en Launchpad: https:// launchpad.net/arkose/trunk/1.3

Arkose 1.3
Un programa controlado por Arkose se ejecuta aislado del resto del sistema, de manera que no puede acceder a los servicios que se ejecutan en el sistema anfitrin, tales como D-Bus. De hecho, con Arkose 0.3.2, no se puede acceder siquiera a Pulseaudio.

WWW.LINUX- MAGAZINE.ES

Nmero 82

29

DESARROLLO Lazarus

Entorno de desarrollo Lazarus para Free Pascal

La Pizarra de Pascal
Lazarus es un IDE para Free Pascal que permite a los desarrolladores crear interfaces grficas multiplataforma con un par de clics y un poco de cdigo. POR TIM SCHURMANN
necesitamos de la paleta situada en la parte superior de la pantalla y la llevamos al dilogo Formulario esta es la manera en la que Lazarus se refiere a los dilogos y a las ventanas en el programa resultante. Una vez depositado el elemento, podemos usar las asas para redimensionarlo (igual que con una herramienta de dibujo) y ponerlo en la posicin correcta. El ajuste ms fino y la modificacin de las propiedades, tales como las etiquetas de botones, pertenecen al dominio del inspector de objetos. En una ventana de edicin, Lazarus genera automticamente el cdigo de fondo que ser necesario para aadir a la lgica del programa. El inspector de objetos nos ayudar a hacerlo. No solamente

om RFf.c , 123 r Cap Vikto

adir una interfaz de usuario ordenada para nuestros propios programas escritos en Object Pascal es una tarea aburrida y rutinaria que lleva mucho tiempo. Para simplificar las tareas repetitivas que derivan de los resultados de innumerables clases, Borland desarroll Delphi a mediados de los 90. En el entorno de desarrollo Delphi, los programadores pueden usar el ratn para armar una interfaz en poco tiempo. Por desgracia, Delphi es caro y slo est disponible para Windows. El entorno de desarrollo totalmente libre, Lazarus [1], ofrece una alternativa que est a la altura de su equivalente comercial. Depende del popular compilador Free Pascal, tiene un enorme abanico de funciones, est incluido en la mayora de las distribuciones y es compatible con el venerable Delphi en muchas reas. Adems funciona tambin en Windows y Mac OS X

Tablero de Dibujo
Cuando se arranca por primera vez, Lazarus bombardea al desarrollador con un montn de ventanas, pero los programadores de Delphi rpidamente se sentirn como en casa (Figura 1). Para empezar, seleccionamos el componente grfico que

Figura 1: Lazarus da la bienvenida a los desarrolladores con numerosas ventanas. El Formulario vaco en el centro es la ventana principal de la aplicacin resultante.

30

Nmero 82

WWW.LINUX- MAGAZINE.ES

Lazarus DESARROLLO

lista todos los posibles eventos que comprende la interfaz grfica seleccionada, sino que tambin nos permitir seleccionarlos para asignar los mtodos existentes o crear uno vaco.

Obligaciones y Arte
Lazarus ofrece el tpico conjunto de caractersticas de cualquier entorno de desarrollo. El gestor de proyecto nos ayuda a controlar todos los aspectos complejos, y una ventana del inspector de proyecto nos mantiene al tanto de todos los archivos y paquetes relacionados. Para compilar una aplicacin, normalmente slo necesitaremos pulsar el botn verde de ejecucin. Si fuera necesario, podemos asignar configuraciones individuales de compilacin para cada proyecto. Los errores se listan en una ventana aparte, y pulsando una alerta vamos directamente a la zona del cdigo relacionada (Figura 2). El depurador integrado nos ayuda a investigar cuelgues y paradas del programa en los puntos de ruptura que hemos definido previamente en la ventana del editor, o tambin podemos ejecutar paso a paso el programa para ver el valor de las variables. El editor ofrece la funcionalidades que podramos esperar de un IDE profesional, incluyendo el resaltado de sintaxis y el plegado de cdigo. El completado de cdigo sugiere mtodos posibles y nom-

Figura 3: El editor hace sugerencias mientras tecleamos.

bres de clases, y ayuda a rellenar parmetros e incluso aade los obligatorios end despus de begin (Figura 3). Un atajo de teclado nos permite aadir comentarios en las lneas seleccionadas o aplicarles sangrado. Podemos almacenar bloques de cdigo que usamos frecuentemente en plantillas. Para usar el cdigo, pulsamos un atajo de teclado seguido de Ctrl+J para decirle a Lazarus que reemplace toda la plantilla. El entorno de desarrollo incluye plantillas de cdigo para las constructos ms usua-

les, tales como bucles for, o bloques begin/end. Para declarar una clase, lo nico que necesitamos hacer es establecer los mtodos y propiedades y pulsar un atajo de teclado para crear automticamente un mtodo bsico vaco, junto con los correspondientes mtodos get y set. Quick Syntax Check descubre errores tipogrficos antes de la compilacin, y otros asistentes nos sealan bloques de cdigo abiertos o IFDEF/ENDIF.

Perro Gua
Lazarus tiene una buena seleccin de herramientas para ayudar a los desarrolladores a navegar por el cdigo. Por ejemplo, podemos buscar de una manera flexible y reemplazar el cdigo con el uso de expresiones regulares. Adems de esta bsqueda de texto completo, tenemos un navegador de cdigo que slo busca paquetes y nombre de unidades, as como designadores para un trmino especfico. La ventana CodeExplorer nos ayuda a hacer un seguimiento de los programas ms largos. Crea un esquema de todos los tipos, variables, interfaces, implementaciones y unidades que usamos, y salta a la correspondiente posicin en el cdigo con un simple clic. Code Observer, incluido en CodeExplorer, indica estilos de programacin deficientes, tales como indentacin incorrecta o procedimientos excesivamente largos o vacos. Otras ventanas nos muestran las dependencias entre las unidades y los formularios que hemos creado hasta ese momento. Un editor FPDoc

Figura 2: El depurador integrado permite a los desarrolladores investigar errores en el cdigo, tales como esta falta ortogrfica.

WWW.LINUX- MAGAZINE.ES

Nmero 82

31

DESARROLLO Lazarus

separado nos ayuda a documentar el cdigo en lnea con FPDoc estndar. Lazarus tambin permite la refactorizacin renombrando designadores en el proyecto, extrayendo el cdigo seleccionado en un nuevo procedimiento o invirtiendo las asignaciones (convirtiendo A := B; en B := A;). Adems, el editor registra automticamente los mtodos abstractos que an no hemos aplicado y crea un mtodo vaco. Lo nico que falta es un enlace a un sistema de control de versiones.

Clsico Moderno
Si ponemos un botn en un formulario en Lazarus, el entorno de desarrollo genera automticamente un objeto del tipo TButton por detrs. La clase correspondiente aparece por cortesa de la biblioteca Lazarus Component Library, tambin conocida por sus siglas LCL. Esta es una biblioteca de clase normal que podemos usar independientemente de Lazarus con unidades y clases que crean la interfaz para nuestro programa Object Pascal. LCL no dibuja elementos individuales de la interfaz grfica en la pantalla, sino

Figura 5: Lazarus incluye numerosos ejemplos de programas, tales como este gestor de direcciones que acta como un ejemplo de programacin de base de datos. Los iconos en el rea blanca de la ventana principal son los objetos conectores de la base de datos.

Libre Comercio
Lazarus enlaza estticamente LCL a la aplicacin Object Pascal. A pesar de ello, para permitir el desarrollo de programas comerciales, la biblioteca de clases est disponible bajo una licencia LGPL modificada. Desafortunadamente esto no es cierto para todas las unidades que contiene. Antes de usar un componente en una aplicacin comercial, es una buena idea comprobar la licencia embebida en el cdigo fuente del propio componente. Por cierto, Lazarus no tiene una licencia GPL.

que para ello se basa en una biblioteca heredada del sistema. Los desarrolladores tienen que elegir qu biblioteca usar al compilar. Los usuarios de Linux pueden seleccionar entre Qt, Gtk+ o Gtk2 y soporte para el conjunto de herramientas Free Pascal GUI [2]. fpGUI actualmente est en desarrollo. LCL est disponible para otros sistemas operativos. Soporta las funciones del sistema necesarias directamente en Windows y Windows CE, y podemos elegir entre Cocoa y Carbon en Mac OS X. La Figura 4 muestra la estructura de LCL y cmo se relaciona con los componentes individuales.

Transferencia de Conocimiento

Gracias a LCL, podemos escribir de forma sencilla aplicaciones multiplataforma que solamente necesitaremos recompilar en el sistema operativo objetivo (escribir una vez, compilar en cualquier parte). Lazarus es en s la prueba de lo bien que funciona en la prctica: el entorno de desarrollo se program enteramente usando LCL, y Figura 4: LCL funciona como una interfaz entre el programa nosotros podemos Object Pascal y las bibliotecas de la interfaz de usuario para los reconstruirlo rpidasistemas operativos soportados. mente al vuelo, para

usarlo con una biblioteca de interfaz grfica diferente, seleccionando un elemento del men. Los desarrolladores tienen que tener en cuenta dos pequeos problemas. Por un lado, un par de interfaces (p.ej, Qt) estn an oficialmente en beta, si bien son muy estables, y los desarrolladores las usan habitualmente en trabajos de produccin. Por otro lado, LCL intenta seguir las directrices de la interfaz grfica de usuario del sistema operativo de destino. Esto puede llevar a que los componentes acten de manera distinta en las diferentes plataformas. Por ejemplo, Windows no nos permitir escalar algunos dilogos con el ratn, sin embargo podemos hacerlo en X11. Adems, los sistemas operativos manejan los atajos de teclado de manera diferente. La wiki de Lazarus [3] incluye algunas pginas con consejos sobre la programacin multiplataforma para ayudar a los desarrolladores. LCL puede hacer ms que dibujar ventanas de colores en la pantalla. Contiene, por ejemplo, clases para acceder de manera sencilla y rpida a bases de datos, incluyendo PostgreSQL, dBase, y MySQL. En Lazarus, podemos poner los componentes del conector de la base de datos en un formulario, como si de cualquier otro elemento de la interfaz grfica se tratara. Los elementos aparecern como iconos y en la aplicacin final realizarn sus tareas de manera discreta, en segundo plano (Figura 5).

32

Nmero 82

WWW.LINUX- MAGAZINE.ES

Lazarus DESARROLLO

Un Viaje en el Tiempo
Basado en Algol 60, Niklaus Wirth desarroll el lenguaje de programacin estructurado Pascal a principios de los 70, fundamentalmente con un objetivo educativo. Debido al bajo precio del entorno de desarrollo Turbo Pascal de Borland, Pascal se hizo muy popular en los 80. Impulsado por el xito, Borland extendi el alcance funcional del paquete y el propio lenguaje. Al final de los 80, aadi conceptos orientados a objetos, lo que dio origen al denominado Object Pascal. A mediados de los 90, Borland introdujo un entorno de desarrollo completamente nuevo con el nombre de Delphi, el cual permite a los programadores desarrollar interfaces de manera sencilla y rpida para programas Object Pascal en un tablero de dibujo. La interfaz grfica subyacente era Visual Component Library, o VCL. Se dise completamente para Windows como el mismo Delphi. Borland intent introducirse en el mercado Linux en 2001 con Kylix. Realmente era una interfaz Delphi emulada en Wine capaz de crear de manera nativa programas grficos Linux en combinacin con la biblioteca de interfaz grfica de usuario CLX (Component Library for Cross-Platform Development), muy parecida a VCL. Hoy en da, Delphi lo desarrolla y comercializa Embarcadero Technologies. Kylix ha sido abandonado debido a su escaso xito. Insatisfecho con el enfoque de Borland, el estudiante Paul Klmpfl empez a trabajar en un compilador libre en los 90. La compatibilidad con Turbo Pascal y Delphi y su sencilla portabilidad hicieron rpidamente de Free Pascal uno de los compiladores libres ms populares de Pascal. Lo que faltaba era un entorno de desarrollo visual estilo Delphi. El proyecto Megido intent remediar esta situacin, pero fracas en 1999. Lazarus emergi de entre tantos proyectos muertos, de ah su nombre bblico.

Dos Orculos
Visual Component Library (VCL) de Delphi es el modelo seguido por LCL. TButton es un recuerdo intencionado para los desarrolladores que han trabajado con Delphi. A pesar de ello, LCL no es totalmente compatible con VCL. Algunas veces esto se debe a la independencia de la plataforma, y por tanto es intencionado, mientras que otras veces, los componentes simplemente faltan. Esto es particularmente cierto para las clases de las aplicaciones multimedia (p.ej., TAnimate), componentes especficos de Windows (p.ej., TMediaPlayer), y accesos de red (p.ej., ADO). Por tanto, es imposible pasar los programas Delphi y Kylix a Lazarus sin modificaciones. A pesar de que Lazarus nos proporciona una cierta cantidad de asistentes para ayudarnos con la conversin, el proceso normalmente implicar ajustes manuales por parte del desarrollador. La wiki de Lazarus proporciona una lista de diferencias y algunas pginas con consejos y guas para eventuales conversiones.

tos. En el mismo tiempo, un usuario con otro entorno de desarrollo ms anticuado slo llegara a crear un par de clases para los botones. La wiki [3] es muy completa y ayuda a los desarrolladores a dar sus primeros pasos en el aprendizaje de Lazarus. Incluso los recin llegados encontrarn muy tiles los tutoriales. Convertir desde Delphi es un proceso relativamente sencillo, aunque siempre habr algo que tengamos que hacer a mano. La recompensa es una aplicacin Object Pascal que se puede compilar para los principales sistemas operativos. A pesar de los ms de 10 aos de desarrollo, se sigue trabajando en Lazarus y en la LCL. Mientras que otros programas han recorrido distintos cambios de versin, en este momento el entorno de desarrollo cuenta con un cero a la izquierda cuando escribo este artculo, la versin actual es la 0.9.30. Sin embargo, esto no debe desanimarnos: Lazarus es muy estable y, en combinacin con Free Pascal, un serio competidor del asentado Delphi. I

Conclusiones
Una vez que nos hayamos familiarizado con un entorno que a primera vista pudiera parecer desordenado, Lazarus nos ayuda a crear, por ejemplo, una calculadora multiplataforma en un par de minu-

RECURSOS
[1] Lazarus: http://www.lazarus.freepascal.org/ [2] fpGUI: http://fpgui.sourceforge.net/ [3] Wiki de Lazarus: http://wiki.lazarus.freepascal.org/

WWW.LINUX- MAGAZINE.ES

Nmero 82

33

DESARROLLO Android Intents

Dominando los Intents de Android

A Toda Velocidad
Mostramos los fundamentos de los intents, uno de los aspectos clave en el desarrollo para Android. POR SHANE CONDER Y LAUREN DARCEY

ctividad (activity), intent, diseo (layout), manifiesto (manifest), servicio (service), receptor de broadcast (broadcast receiver), proveedor de contenidos (content provider) A los recin llegados al mundo de Android les pueden resultar desconcertantes y farragosos todos estos trminos. Estos componentes son importantes en la plataforma Android, pero si no se tiene experiencia, el mejor favor que uno se puede hacer es centrarse en las actividades elementos funcionales con los que se construyen las aplicaciones y los intents el aglutinante que une las actividades y, por ende, las aplicaciones. Los intents son lo que ms trabajo les cuesta a los desarrolladores. No importa el tipo de aplicacin que se desarrolle, necesitaremos comprenderlos y usarlos. En este tutorial veremos qu son, cmo funcionan y cul es la mejor forma de utilizarlos en una aplicacin.

o Le

om f.c RF 23 1 , te et ch an l B

Uri number = Uri.parseU (tel: 2125551212); Intent dial = new Intent( Intent.ACTION_DIAL, number); startActivity(dial);

tipo de accin especfica asociada a un tipo especfico de datos:


Uri address = Uri.Uri.parse(U http://androidbook.blogspotU .com); Intent surf = new Intent( Intent.ACTION_VIEW, address); startActivity(surf);

Qu es un Intent?
El intent es el mecanismo asncrono de transmisin de mensajes utilizado por el sistema operativo Android para hacer coincidir las peticiones de tareas con la correspondiente actividad de la aplicacin en ejecucin. Los intents se pueden usar para iniciar actividades desde dentro de la misma aplicacin, de una aplicacin diferente o para iniciar un servicio [3]. Mediante los intents tambin se pueden difundir eventos a lo largo y ancho de todo el sistema operativo. Con los intents podemos hacer transiciones entre las actividades de la propia aplicacin, o bien solicitar al sistema operativo que busque la actividad ms apropiada para la tarea a ejecutar. Por ejemplo, con el siguiente cdigo podemos hacer que la aplicacin inicie la aplicacin de Telfono y que marque un nmero especfico (Figura 1).

El usuario slo tiene que pulsar el botn de llamada y hablar. Al terminar de hablar, pulsando el botn de finalizacin de llamada, volvera a la aplicacin.

Cmo Funcionan los Intents?


Si las actividades (Activity, android.app.Activity) son los bloques con los que se construyen las aplicaciones de Android, los intents son el pegamento que los une, permitiendo al usuario pasar de una actividad a otra suavemente entre todas las del sistema operativo [4]. Un objeto Intent (android.content. Intent) se compone de una accin a realizar y los datos sobre los que actuar. Cuando creamos un objeto Intent, bsicamente le estamos pidiendo al sistema operativo que delegue la tarea que le describimos a una actividad especfica. Por ejemplo, un intent cuya accin es ACTION_VIEW y cuyos datos son una URL a un sitio web, se delega a una actividad de una aplicacin de navegacin web porque la actividad soporta ese

El sistema operativo Android busca la correspondencia entre el par accin/datos del intent con una actividad en la aplicacin Browser. El navegador se inicia en el primer plano; la actividad espera en segundo plano. El navegador carga el sitio web (Figura 2). Cuando el usuario termina, la actividad que cre el intent (la nuestra) contina su ejecucin.

Cdigo Fuente de Ejemplo


Para aquellos que estn interesados, hemos desarrollado una aplicacin de Android llamada Buenas Intenciones, en la que ilustramos algunos de los conceptos expuestos en este artculo. El cdigo fuente completo de esta aplicacin se encuentra disponible para su descarga [1]. Tambin necesitarn descargar el SDK de Android [2].

34

Nmero 82

WWW.LINUX- MAGAZINE.ES

Android Intents DESARROLLO

Figura 1: Usando un intent con la accin ACTION_DIAL para preparar una llamada.

Asociar un Intent a una Actividad Concreta


Para comprender cmo delega el sistema operativo Android los intents a actividades concretas dentro de las aplicaciones debemos profundizar un poco ms. Android sigue la pista a todas las aplicaciones instaladas en el dispositivo, as como a todas las actividades registradas con cada aplicacin a travs de los archivos de manifiesto. Cada definicin de <activity> especifica las acciones y tipos de datos que la actividad es capaz de manejar con la ayuda de filtros para intents. Android hace uso de esta informacin para decidir las correspondencias con las actividades ms apropiadas para encargarse de las peticiones en tiempo de ejecucin. Para ilustrar el mecanismo, volvamos al intent de navegacin web del ejemplo anterior. La aplicacin Navegador tiene un filtro de actividades para manejar intents de ACTION_VIEW con los datos de localizacin de sitios web (o lo que es lo mismo, las URLs), pero no tiene por qu ser la nica aplicacin en el sistema capaz de hacerlo. El usuario podra haber instalado otros navegadores, como Fennec, Opera o Dolphin. Cmo determina Android a qu aplicacin delegar el intent? No lo hace. Cuando hay varias actividades capaces de manejar un intent dado, es el usuario

quien decide qu aplicacin ser la encargada de hacerlo. Esta funcionalidad supone un factor diferencial para la plataforma Android en comparacin con otras plataformas mviles. La flexibilidad que aporta este mecanismo realmente merece la pena (tanto para el desarrollador como para el usuario), ya que una arquitectura as permite el uso de una gran variedad de aplicaciones, y aplicaciones como los navegadores web alternativos, las aplicaciones de correo electrnico, o las que sirven para compartir imgenes, atienden los mismos intents. La aplicacin en primer plano (por ejemplo, la nuestra propia), no necesita saber qu aplicacin ser la que atienda el intent, sino solamente asegurarse de que ser atendido. Esto implica algunas suposiciones por parte del desarrollador sobre qu aplicaciones estarn instaladas o disponibles en un dispositivo especfico. No hace falta ningn cdigo especial para gestionar diferentes clientes de correo o navegadores web. En lugar de eso, la aplicacin utiliza un intent para comunicar al sistema operativo qu es lo que quiere hacer, y es Android quien hace de casamentero, llevando la peticin a la aplicacin de turno para que complete la tarea. Mediante este mtodo, el usuario puede instalar cuantas aplicaciones se le antoje, conociendo todas ellas mgicamente la existencia del resto. De hecho, la aplicacin que el usuario finalmente acabe utilizando, puede no existir siquiera al publicar la nuestra. Qu ocurre cuando hay varias aplicaciones capaces de mostrar una pgina web? Se insta al usuario a elegir de entre una lista de aplicaciones (Figura 3) que soportan el par accin/datos, pudiendo adems marcar la casilla Por Defecto

Figura 2: Usando un intent con la accin ACTION_VIEW para visualizar contenido web.

para que se use siempre una aplicacin para un intent concreto. Otro ejemplo es el hecho de que los usuarios suelen compartir las capturas de sus cmaras con los amigos. Una aplicacin podra crear un intent con una accin de ACTION_SEND y definir como datos una fotografa. Muchas aplicaciones soportan este tipo de intent (Figura 4), pero cada una enva la imagen de una forma distinta. Por ejemplo, las aplicaciones de correo electrnico anexan la foto como archivo adjunto a un nuevo mensaje (Figura 5), mientras que otras aplicaciones, como por ejemplo Facebook o Twitter, la suben a la red social (Figura 6). Pero qu pasa si no hay ninguna aplicacin en el dispositivo capaz de atender ese intent? La aplicacin puede comprobar si

Uso de Intents para Mejorar Nuestras Aplicaciones


Podemos usar los intents para aadir potentes funcionalidades a nuestras aplicaciones. Por ejemplo, los podemos usar para: Iniciar una aplicacin de correo electrnico o de mensajera y enviar un mensaje. Iniciar un navegador y visualizar un sitio web o realizar una bsqueda. Iniciar la aplicacin de Telfono y marcar un nmero concreto. Iniciar la aplicacin de Maps y mostrar una ubicacin especfica. Iniciar la Cmara y capturar una imagen o un vdeo. Iniciar la Galera y escoger una imagen. Iniciar los Contactos y elegir uno. Grabar sonido y pasarlo por el motor de reconocimiento de locucin.

WWW.LINUX- MAGAZINE.ES

Nmero 82

35

DESARROLLO Android Intents

integrar sus aplicaciones con la nuestra, debemos documentar todos los intents soportados por nuestra aplicacin. Incluso podemos incluir nuestros intents personalizados en el registro de algn tercero [5].

Gestionando Transiciones entre Actividades Internas


Las aplicaciones de Android constan de mltiples actividades, cada una de ellas representando una pantalla o funcionalidad. A lo largo del ciclo de vida de una aplicacin, el usuario va pasando de una actividad a otra. Para llamar al mtodo startActivity() con un intent explcito que especifique qu actividad iniciar por su nombre de clase, usamos:
startActivity(new Intent( getApplicationContext(), MiOtraActividad.class));
Figura 3: Mltiples aplicaciones pueden soportar los mismos tipos de intents; el usuario elige con qu aplicacin atender la peticin. Aqu, los distintos navegadores web alternativos pueden atender los intents ACTION_VIEW para mostrar datos web.

hay en el dispositivo alguna aplicacin capaz de atender un intent determinado usando los mtodos proporcionados en la clase PackageManager, como por ejemplo queryIntentActivities() o queryBroadcastReceivers(). Estos mtodos proporcionan funcionalidades especiales al usuario slo cuando hay alguna aplicacin capaz de satisfacer la peticin.

Usando Diferentes Tipos de Acciones de Intent


Existen una serie de acciones de intent, como ACTION_VIEW, ACTION_EDIT o ACTION_SEND, que son utilizadas universalmente en la plataforma. Mediante el uso de tipos de acciones de intent comunes, garantizamos que la aplicacin sea compatible con otras instaladas en el dispositivo. En la documentacin de Android podemos encontrar informacin sobre los tipos especficos de acciones de intent, aadindose nuevos tipos con cada nueva publicacin de Android. El desarrollador puede definir tipos de datos y de acciones de intent personalizados para ajustarlos a las necesidades de su aplicacin. Creando intents personalizados se pueden desarrollar sofisticadas suites de aplicaciones. Sin embargo, para que otros desarrolladores puedan

Este intent le dice a Android que inicie una actividad llamada MiOtraActividad. Esta clase, para que se ejecute correctamente, debe implementarse en alguna otra parte de la aplicacin y registrarse en el archivo Manifest de la misma. Otra forma de iniciar una actividad es mediante el mtodo startActivityForResult(). Las actividades a veces devuelven resultados a la actividad padre. Por ejemplo, una actividad para la seleccin de contactos devuelve informacin acerca del contacto elegido por el usuario. La actividad padre ha de solicitar los resultados iniciando la actividad mediante el mtodo startActivityForResult(). El resultado se maneja en el mtodo onActivityResult() de la actividad padre. Asimismo, los datos de los resultados estn contenidos en un intent.

Figura 4: Muchas aplicaciones soportan el uso de intents con la accin ACTION_SEND para compartir imgenes.

extras. Por ejemplo, el siguiente cdigo crea un intent con un extra que es un entero que representa el nivel actual en el juego:
Intent intent = new Intent( getApplicationContext(), GameActivity.class); intent.putExtra( com.mamlambo.mygame.LEVEL, 7); startActivity(intent);

Pasando Datos Adicionales Usando Extras


Los intents se pueden usar para pasar informacin adicional entre actividades y, por extensin, entre aplicaciones. Esto se consigue incluyendo propiedades adicionales, llamadas extras, como parte del intent. Cada extra es un par nombre/valor. Se pueden leer y escribir extras especficos usando los mtodos get() y put() adecuadamente en la clase Intent. Al pasar informacin entre las actividades, podremos definir cualquier propiedad adicional que necesitemos. La nomenclatura es usar el paquete de la aplicacin como prefijo para los nombres de los

Una vez iniciada la nueva actividad, GameActivity, puede recuperar el intent que la inici para extraer los datos del nivel del juego desde los extras como parte de su mtodo onCreate():
Intent callingIntent = U getIntent(); int helpLevel = U callingIntent.getIntExtra( com.mamlambo.U mygame.LEVEL, 1);

La mayora de los intents usados comnmente utilizan extras. Diferentes intents soportan distintos campos extra, por lo que se ha de consultar la documentacin del SDK de Android para determinar qu extras estn soportados. Por ejemplo, el intent ACTION_SEND se usa para enviar a otros intents datos como imgenes o texto;

36

Nmero 82

WWW.LINUX- MAGAZINE.ES

DESARROLLO Android Intents

El Potencial de los Intents de Seleccin


Uno de los tipos de intents ms potentes son las actividades de seleccin. Las actividades de seleccin estn diseadas para ser iniciadas a travs del mtodo startActivityForResult(), mostrar un listado de elementos para que el usuario elija uno de entre ellos, y devolver el elemento escogido a la actividad padre. Con unas pocas lneas de cdigo, nuestra actividad puede iniciar un selector, permitiendo al usuario elegir una imagen especfica, un contacto o un tono, y recibir los resultados de la seleccin. Las actividades de seleccin se suelen iniciar con la accin de intent ACTION_PICK; algunos selectores especiales, como el de seleccin de tono, tienen su propio tipo de actividad (por ejemplo, RINGTONE_PICKER). En la aplicacin de muestra proporcionada hay un ejemplo de actividad de seleccin: la URI de contenido para las imgenes compartidas se usa con ACTION_PICK para permitir al usuario escoger una imagen de la Galera (Figura 7):
Intent galleryPicker = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media. INTERNAL_CONTENT_URI); startActivityForResult(U galleryPicker, GALLERY_PICKER_RESULT);

Figura 5: Si elegimos la aplicacin de correo electrnico para atender la peticin ACTION_SEND, la imagen se anexa como archivo adjunto de un nuevo mensaje.

este intent est detrs de la funcionalidad Compartir con un Amigo. El intent ACTION_SEND posee varios campos extra, como EXTRA_SUBJECT, EXTRA_EMAIL, EXTRA_CC o EXTRA_BCC, que permiten a la actividad que hace la llamada especificar el asunto del mensaje asociado al elemento a enviar, as como las direcciones de destino para el correo, el campo CC y el BCC incluidos en la informacin del intent. Una aplicacin (como pueda ser un cliente de correo) que reciba y maneje este intent, puede utilizar los campos para precumplimentar los campos del mensaje y ahorrarle al usuario la introduccin de ms datos.

Figura 7: Elegimos una imagen de la Galera con ACTION_PICK.

mtodo sendBroadcast() del contexto de aplicacin. Para esperar intents de difusin debemos registrarnos como receptores con el conveniente filtro de intents e implementar un BroadcastReceiver.

Conclusin
Los intents son increblemente potentes. Permiten al sistema operativo Android una mayor flexibilidad en cuanto a qu aplicaciones hay disponibles e instaladas en un dispositivo dado. Al desarrollador le conviene invertir tiempo aprendiendo a usar los intents de Android con eficacia para integrar sus aplicaciones con el resto del sistema operativo. I

Recepcin y Difusin de Intents


Por ltimo, podemos usar los intents para difundir eventos importantes por todo el sistema operativo. Nuestras aplicaciones pueden difundir intents que permiten al resto de aplicaciones engancharse a ellas y ampliarlas de formas interesantes. Por ejemplo, una aplicacin de correo electrnico podra difundir un intent cada vez que llega un mensaje; las aplicaciones antispam o antivirus esperan este tipo de intents para escanear los nuevos mensajes. Muchos eventos del sistema se anuncian mediante difusin. Por ejemplo, una aplicacin puede quedar a la espera y reaccionar ante avisos de baja carga de batera (ACTION_BATTERY_LOW) guardando los datos, reduciendo la actividad de red o simplemente ajustando la configuracin para ahorrar la batera restante. Las aplicaciones pueden difundir intents mediante el

RECURSOS
[1] Buenas intenciones: http://code.google.com/p/ android-mastering-intents-tutorial/ [2] SDK de Android para descarga: http://developer.android.com/sdk/ [3] Iniciando aplicaciones de Google mediante intents: http://developer.android.com/ guide/appendix/g-app-intents.html [4] Referencia para Desarrolladores de Android sobreintents: http:// developer.android.com/reference/ android/content/Intent.html [5] Registro iIntent de OpenIntents.org: http://www. openintents.org/en/intentstable

Figura 6: Si elegimos una aplicacin de redes sociales como Facebook, la imagen se sube a la cuenta de la red social.

38

Nmero 82

WWW.LINUX- MAGAZINE.ES

Python DESARROLLO

Procesado de imgenes con Python

Vaya Cara!
OpenCV, la librera de funciones para la programacin de visin por ordenador en tiempo real, nos permite reconocer caras, conducir coches y mucho ms. POR JOS MARA RUZ

Alguna vez te has preguntado cmo encuentra Facebook caras en las fotos para que las etiquetemos? Y qu hay del famoso coche de Google que se conduce solo? Ambos son ejemplos del uso de tcnicas avanzadas de procesado de imgenes. Estamos hablando de sistemas muy evolucionados resultado de dcadas de investigacin en algunas de las mejores universidades del mundo Podra algo quedar ms lejos del da a da del software libre? Espera un momento! podemos usar las mismas tcnicas desde Python usando OpenCV, cuya existencia debera hacernos a todos saltar de alegra, porque no slo es software libre, sino tambin una librera de tcnicas muy avanzadas.

Comencemos por las libreras en las que se basa OpenCV, que no son pocas. Nuestro objetivo es tener un conjunto mnimo de funcionalidades que incorporen la posibilidad de emplear cmaras. Asumir que estamos en Ubuntu, una de las distribuciones con los peores paquetes de OpenCV. Vamos a empezar por deshacernos de ffmpeg y de x264 para instalarlos nosotros manualmente.
shell> sudo apt-get \ remove ffmpeg x264 \ libx264-dev shell> sudo apt-get \ install build-essential \ git cmake

Para hacer la informacin correctamente usamos el comando checkinstall, que generar un paquete deb y lo instalar en el sistema. Ahora viene el plato fuerte, instalar OpenCV, para lo cual slo debera bastar ejecutar:
shell> fab full_install

Instalando OpenCV
El principal escollo de OpenCV es que instalarlo correctamente puede ser un lo. Los paquetes disponibles en distribuciones como Ubuntu se encuentran muy desfasados y no incorporan todas las opciones deseables. Si buscas en la Web cmo instalar OpenCV, vers numerosos tutoriales que incorporan suficientes pasos como para replantearte si merece la pena (por no hablar de que la inmensa mayora estarn en ingls). Por ello, vamos a repasar cmo se instalan todos los componentes necesarios de forma, y as te ahorrars una buena cantidad de horas.

Para la instalacin voy a emplear un script Fabric (ver Recurso 2) que puedes encontrar en el Listado 1. No espero que copies a mano este cdigo, pero prefiero ponerlo en un formato ejecutable que simplemente listar los pasos necesarios. En el caso de que te atrevas a ejecutarlo, slo tendrs que introducir (habiendo instalado Fabric previamente):
shell> fab ffmpeg

Es posible que este script fabric no instale todas las dependencias necesarias, por lo que hay que prestar atencin a cualquier fallo. En caso de encontrar que falta alguna librera, slo tendramos que instalarla con apt-get. S puedo asegurar que con todas las dependencias necesarias, este script fabric compila e instala exitosamente OpenCV.

Algunas Aclaraciones
Antes de comenzar a utilizar OpenCV conviene aclarar algunas situaciones confusas debidas a la escasa documenta-

Lo que estamos haciendo es descargar desde los repositorios Git tanto x264 como ffmpeg. Estas dos libreras nos permitirn trabajar con vdeo. Como puedes ver en los pasos, ambas hacen uso a su vez de gran nmero de otras libreras, por ejemplo de codificaccin de vdeo.

Figura 1: Captura de vdeo desde la webcam.

WWW.LINUX- MAGAZINE.ES

Nmero 82

39

vinga, 123RF.com

DESARROLLO Python

Las versiones 2.1 y 2.2 de OpenCV posean una interfaz diferente a la versin 2.3 (la ltima en el momento en que escribo este artculo). Nos podemos encontrar tutoriales que hacen referencia a cv.highgui, la librera de interfaz con sistemas de widgets grficos. Esta librera ha sido integrada en la versin 2.3 dentro del cv. Como resultado, en algunos tutoriales nos encontraremos llamadas como:
Figura 2: Reconociendo una cara.

Es recomendable por ahora usar la librera cv, que mantiene cierta compatibilidad hacia atrs, mientras que apenas hay cdigo y ejemplo de uso de cv2. Espero con estos consejos aclarar muchas de las dudas que le surgirn al lector cuando quiera expandir los ejemplos que veremos en este artculo (a m desde luego estos consejos me hubiesen venido muy bien!)

c = highgui.cvWaitKey(10)

Usando Nuestra WebCam


Nuestro primer ejemplo es uno de esos espectaculares, aunque no muy complicado, que nos hace ver lo valiosa que puede ser una librera. Vamos a crear un programa que mostrar la imagen de nuestra webcam (si la tuvisemos). La adquisicin de datos es muy importante en OpenCV, por lo que el soporte para el uso de cmaras est muy desarrollado:

cin. Comencemos por el hecho de que existen dos, o tres!, interfaces diferentes para usar OpenCV desde Python. La mayora de la comunidad OpenCV trabaja en C++, lenguaje nativo para OpenCV. Como resultado, el uso de Python es secundario y est sujeto a muchos cambios.

Cuando en la versin 2.3 se haran as:


c = cv.WaitKey(10)

Adems, dentro de la versin 2.3 hay dos versiones diferentes de la librera (por si no hubiese suficiente confusin). La versin 2.3 nos ofrece las libreras cv y cv2.

Listado 1: Script Fabric para Instalar OpenCV


01 from fabric.operations import local 02 from fabric.context_managers import lcd 03 import os.path 04 05 ROOT = os.path.dirname(os.path.realpath(__file__)) 06 SRC_DIR = os.path.join(ROOT,OpenCV-2.3.1 ) 07 08 def install_ffmpeg(): 09 local(sudo apt-get install libfaac-dev libmp3lame-dev\ 10 libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev \ 11 libvorbis-dev libx11-dev libxext-dev libxfixes-dev) 12 13 local(rm -rf ffmpeg) 14 local(git clone --depth 1 git://source.ffmpeg.org/ffmpeg) 15 with lcd(ffmpeg): 16 local(./configure --enable-gpl -- enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb \ 17 --enable-libopencore-amrwb -enable-libtheora --enable-libvorbis --enable-libx26 4\ 18 --enable-nonfree --enable-version3 -0enable-x11grab --enable-shared) 19 local(make) 20 local(sudo checkinstall --pkgname=ffmpeg --pkgversion=5:$(dat e +%Y%m%d%H%M)-git \ 21 --backup=no --deldoc=yes --fstrans=no --default) 22 local(hash x264 ffmpeg ffplay ffprobe) 23 24 def install_x264(): 25 26 27 28 29 30 local(rm -rf x264) local(git clone git://git.videolan.org/x264) with lcd(x264): local(./configure --enable-shared) local(make) local(sudo checkinstall --pkgname=x264 --pkgversion=3:$(./ver sion.sh | awk -F[ ] /POINT/{print $4+git$5}) \

31 --backup=no --deldoc=yes --fstrans=no --default) 32 33 def download_opencv(): 34 local(wget -c http://downloads.sourceforge.net/project/opencvli brary/opencv-unix/2.3.1/OpenCV-2.3.1a.tar.bz2) 35 36 def compile_opencv(): 37 with lcd(SRC_DIR): 38 local(rm -rf release) 39 local( mkdir release) 40 with lcd(os.path.join(SRC_DIR, release)): 41 local(cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..) 42 local(make) 43 local(sudo make install) 44 45 def full_install(): 46 local(sudo apt-get install libv4l-dev cmake build-essential python-dev libgtk2.0-dev) 47 48 49 50 local(rm -rf {0}.format(SRC_DIR)) download_opencv() local(tar jxpf OpenCV-2.3.1a.tar.bz2) compile_opencv()

40

Nmero 82

WWW.LINUX- MAGAZINE.ES

Python DESARROLLO

01 import cv 02 03 cv.NamedWindow(w1, 04 cv.CV_WINDOW_AUTOSIZE) 05 camara = cv.CaptureFromCAM(0) 06 07 c = None 08 09 while c != q: 10 c = chr(cv.WaitKey(10) & 255) 11 frame = cv.QueryFrame(camara) 12 cv.ShowImage(w1, frame)

Es tan sencillo que te quedas alucinado. Creamos una ventana con NamedWindow, donde el primer parmetro ser el ttulo de la ventana y el segundo un conjunto de flags que en este caso le indican a la ventana que se adapte al tamao de la imagen que recibir. Despus seleccionamos una cmara, en nuestro caso la nmero 0. OpenCV supone que existen muchas cmaras y las numera comenzando por 0. Curiosamente, el asunto de la captura de teclas tiene su cosa. La funcin WaitKey() acepta como parmetro un nmero de milisegundos y se bloquea durante ese tiempo esperando una tecla. Es importante mantener este nmero no muy alto (500 sera medio segundo), porque afectar al rendimiento de la captura. Si slo capturamos una imagen cada medio segundo porque invertimos

ese tiempo en esperar una tecla el vdeo, se ver a saltos. El problema de WaitKey() es que nos devuelve el nmero de la tecla que no se corresponde realmente con el nmero del carcter. Por eso tenemos que hacer una operacin AND a nivel binario con 255 que nos devuelve slo el valor de los ltimos bytes del valor devuelto. Como este valor se corresponde con el cdigo numrico de los caracteres, podemos usar la funcin chr(), que nos devolver el carcter. Es sorprendente cmo lo que podra parecer ms sencillo es lo ms complicado del cdigo. Lo siguientes pasos son capturar un frame, una imagen de la cmara, y mostrarlo en la ventana de nombre w1 que creamos antes. El bucle continuar hasta que pulsemos q, mostrando el vdeo en la ventana de forma similar a como se puede ver en la Figura 1.

Figura 3: OpenCV no tiene problemas distinguiendo caras ficticias.

Grabando Vdeo
Una cosa interesante que podemos hacer es grabar video. Dejo a la imaginacin del lector en qu situaciones esto sera interesante. Para conseguirlo, el cdigo es muy similar al anterior:
01 import cv 02 03 cv.NamedWindow(w1,

04 cv.CV_WINDOW_AUTOSIZE) 05 camara = cv.CaptureFromCAM(0) 06 writer = cv.CreateVideoWriter( 07 salida.avi, 08 cv.CV_FOURCC (M,J,P,G), 09 10, 10 (300,300)) 11 12 c = None 13 14 while c != q: 15 c = chr(cv.WaitKey(10) & 255) 16 frame = cv.QueryFrame(camara) 17 cv.ShowImage(w1, frame) 18 cv.WriteFrame(writer, frame)

Slo hay dos diferencias. Configuramos un VideoWriter que ser el encargado

Listado 2: Detectando Caras


01 import cv 02 import os.path 03 04 cv.NamedWindow(w1, cv.CV_WINDOW_AUTOSIZE) 05 camara = cv.CaptureFromCAM(0) 06 07 BASE = /usr/local/share/OpenCV/haarcascades/ 08 FILE = haarcascade_frontalface_default.xml 09 10 clasificador = cv.Load(os.path.join(BASE,FILE)) 11 12 def detecta_cara(frame): 13 size = cv.GetSize(frame) 14 15 grayscale = cv.CreateImage(size, 8, 1) 16 cv.CvtColor(frame, grayscale, cv.CV_BGR2GRAY) 17 cv.EqualizeHist(grayscale, grayscale) 18 19 storage = cv.CreateMemStorage(0) 20 21 caras = cv.HaarDetectObjects(grayscale, 22 clasificador, 23 storage, 24 1.2, 25 2, 26 cv.CV_HAAR_DO_CANNY_PRUNING, 27 (50, 50)) 28 29 for cara in caras: 30 ((x,y,width,height), value)= cara 31 32 cv.Rectangle(frame, 33 (int(x), 34 int(y)), 35 (int(x + width), 36 int(y + height)), 37 cv.RGB(0, 255, 0), 3, 8, 0) 38 39 c = None 40 41 while c != q: 42 c = chr(cv.WaitKey(10) & 255) 43 frame = cv.QueryFrame(camara) 44 detecta_cara(frame) 45 cv.ShowImage(w1, frame)

WWW.LINUX- MAGAZINE.ES

Nmero 82

41

DESARROLLO Python

de codificar el vdeo esta es la razn por la que antes compilamos la librera FFMPEG. La manera de especificar el cdec de vdeo es mediante a funcin CV_FOURCC(), que codifica los videos usando cuatro letras. A continuacin se especifican los fotogramas por segundo que queremos guardar (a

mayor nmero, ms potencia necesitaremos y mayor tamao tendr el vdeo) y el tamao del vdeo, cosa que de nuevo afectar a su tamao y resolucin. Grabar el vdeo ser tan sencillo como pasar a WriteFrame() tanto el writer como el frame a grabar.

Bsqueda de Caras
Si OpenCV slo nos permitiera grabar vdeo de forma sencilla, no estaran justificados los ms de 30 MB de cdigo que emplea la librera. Lo realmente interesante son los algoritmos que incorpora, que nos permitirn realizar innumerables tareas con la imagen. El libro de

Listado 3: Ahora Detectamos Caras y Ojos


01 import cv 02 import os.path 03 04 cv.NamedWindow(w1, cv.CV_WINDOW_AUTOSIZE) 05 camara = cv.CaptureFromCAM(0) 06 07 BASE = /usr/local/share/OpenCV/haarcascades/ 08 CARA = haarcascade_frontalface_default.xml 09 OJOS = haarcascade_righteye_2splits.xml#haarcascade_eye.xml 10 11 clas = { 12 cara : cv.Load(os.path.join(BASE,CARA)), 13 ojos : cv.Load(os.path.join(BASE,OJOS)) 14 } 15 16 def detecta_cara(frame): 17 size = cv.GetSize(frame) 18 19 grayscale = cv.CreateImage(size, 8, 1) 20 cv.CvtColor(frame, grayscale, cv.CV_BGR2GRAY) 21 cv.EqualizeHist(grayscale, grayscale) 22 23 storage = cv.CreateMemStorage(0) 24 25 caras = cv.HaarDetectObjects(grayscale, 26 clas[cara], 27 storage, 28 1.2, 29 2, 30 cv.CV_HAAR_DO_CANNY_PRUNING, 31 (50, 50)) 32 33 34 for cara in caras: 35 ((x,y,width,height), value)= cara 36 37 cv.Rectangle(frame, 38 (int(x), 39 int(y)), 40 (int(x + width), 41 int(y + height)), 42 cv.RGB(0, 255, 0), 43 3, 44 8, 45 0) 46 47 cv.SetImageROI(grayscale, cara[0]) 48 49 storage = cv.CreateMemStorage(0) 50 51 objects = cv.HaarDetectObjects(grayscale, 52 clas[ojos], 53 storage, 54 1.2, 55 2, 56 cv.CV_HAAR_DO_CANNY_PRUNING, 57 (40, 40)) 58 59 if objects and len(objects) <= 2: 60 for i in range(0,len(objects)): 61 obj = objects[i] 62 ((mx,my,width,height), value) = obj 63 circulo(frame, 64 x+mx, 65 y+my, 66 width, 67 height, 68 cv.RGB(255, 0, 0), 69 ) 70 71 def circulo(imagen, x, y, width, 72 height, 73 color = cv.RGB(255,0,255)): 74 75 centro = (int(x + width*0.5), 76 int(y + height*0.5)) 77 78 cv.Ellipse(imagen, 79 centro, 80 (int(width*0.5), int(height*0.5)), 81 0, 82 0, 83 360, 84 color, 85 4, 86 8, 87 0) 88 89 c = None 90 91 while c != q: 92 c = chr(cv.WaitKey(10) & 255) 93 frame = cv.QueryFrame(camara) 94 detecta_cara(frame) 95 cv.ShowImage(w1, frame)

42

Nmero 82

WWW.LINUX- MAGAZINE.ES

Python DESARROLLO

OpenCV tiene casi 600 pginas, y el campo del anlisis de imgenes es muy extenso. En lugar de enumerar todas sus posibilidades, vamos a centrarnos en una bien vistosa y til: localizar caras en imgenes. Para ello utilizaremos un mtodo denominado HaarCascade. Este mtodo emplea un sistema pre-entrenado para reconocer features. Una feature es una caracterstica interesante que un sistema de clasificacin puede ser entrenado para reconocer. Podemos entrenar un sistema para reconocer coches, esquinas, diferencias de luz o caras. Por fortuna para todos nosotros, OpenCV trae algunos clasificadores pre-entrenados. Antes hemos visto cmo nuestros programas son muy sencillos: creamos un bucle donde capturamos un frame y hacemos algo con l. Ahora lo que tenemos que hacer es pasar el frame a un clasificador, obtener informacin de l y hacer algo en la imagen en respuesta, ver Listado 2. Cada clasificador entrenado est descrito en un fichero que se encontrar en los directorios donde se haya instalado OpenCV. Por eso componemos la ruta y cargamos el clasificador con Load(). El resultado ser un objeto de clase HaarClassifierCascade. El nuevo cdigo est realmente concentrado en detecta_cara. Cada vez que capturamos un frame, se lo pasamos a esta funcin. Obtenemos el tamao del frame y generamos una nueva imagen en escala de grises de ese tamao. Con la funcin CvtColor(), convertimos el frame original a escala de grises. Hacemos esto porque los clasificadores estn entrenados usando escalas de grises que dan mejores resultados que las imgenes a color. Despus equalizamos la imagen, la aplanamos haciendo las diferencias entre los puntos ms oscuros y claros menores, y no tan bruscas. De nuevo, esto ayudar al clasificador. OpenCV necesita algn sitio donde guardar resultados intermedios al procesar las imgenes nosotros vamos a usar la memoria. Por ello utilizamos CreateMemStorage para generar un objeto que se encargar de almacenar en memoria esa informacin. Ahora es cuando lanzamos el clasificador con HaarDetectObjects(), que nos devolver una lista de rectngulos (x, y,

ancho y alto) por cada objeto detectado. Acepta como parmetros la imagen a analizar, el clasificador, el rea de almacenamiento intermedio, factor de escala, nmero de vecinos, flags, tamao mnimo del objeto y tamao mximo del objeto. El factor de escala es un nmero por el que se multiplicar la denominada ventana de bsqueda. Las caras pueden ser de distintos tamaos, se pueden ver ms grandes o ms pequeas el factor de escala controla esas variaciones. El nmero de vecinos controla cuntos rectngulos (medida usada por el clasificador) puede abarcar un objeto. Estos datos soy muy tcnicos y realmente no nos interesan ahora mismo. Quiz s puede resultar interesante el ltimo valor que se ve en el ejemplo, el tamao mnimo del objeto. Define el tamao mnimo de la ventana de bsqueda. Si es muy pequeo, el clasificador puede ver caras donde no las hay, as que s es un valor interesante a ajustar. Basta ya de tecnicismos, el resultado de esta funcin ser una lista que procesamos a continuacin. Lo que haremos ser pintar un cuadrado al lado sobre cada rectngulo encontrado. El resultado se puede ver en la Figura 2. Trat de engaar al clasificador con un zafio dibujo y no surti efecto, ver Figura 3, por lo que podemos decir que funciona bastante bien.

Figura 4: Reconociendo cara y ojos.

Features
Se conoce con el nombre de Features a las caractersticas interesantes que se buscan en un conjunto de datos. Por ejemplo, el clasificador que hemos usado antes busca la feature cara. OpenCV incorpora muchos ms clasificadores destinados a reconocer rostros y partes de rostros. El problema es que si lanzamos un clasificador que busca ojos en una imagen, puede encontrarlos donde estn. Por eso se suele buscar primero una feature sencilla y que acote una regin del espacio (una cara), y despus se busca dentro de ella features ms pequeas, como ojos o narices. En el Listado 3 vemos las nuevas funciones detecta_cara() y circulo(). La primera acta como la que vimos en el Listado 2, pero ahora para cada cara que se detecte efecta una serie de acciones. El resultado de este clasificador se puede ver en la Figura 4.

La primera consiste en indicarle a OpenCV que los prximos algoritmos que se lancen trabajarn sobre el rea delimitada por la cara encontrada. Esto ahorra muchsimo tiempo, adems de reducir drsticamente la posibilidad de encontrar errores. Buscamos donde sabemos que encontramos cosas. Para ello empleamos la funcin SetImageROI(). Volvemos a lanzar la funcin HaarDetectObjects(), esta vez con el clasificador para ojos. Como slo nos interesan a lo sumo 2 o menos de 2 ojos (3 sera algo realmente raro!), nos limitamos a esos casos. Y dibujaremos un crculo para cada ojo. Hay que tener cuidado con las coordenadas, porque como ahora trabajamos dentro del rectngulo que encuadra la cara, las coordenadas devueltas por el clasificador estarn dadas de forma relativa a ese rectngulo. Por eso sumamos las nuevas coordenadas (como mx) a las antiguas de la cara para as obtener coordenadas absolutas para la imagen.

Conclusin
Con muy pocas lneas de cdigo hemos podido crear un analizador de imgenes que adems detecta nuestros ojos y nuestra cara. La potencia de OpenCV es increble, y es una suerte tremenda que dispongamos de una librera de anlisis de tanta calidad en el mundo del software libre. Creo que es una herramienta potentsima que puede permitir a cualquiera comenzar a realizar proyectos divertidos e interesantes que nunca hubieran imaginado posible. I

RECURSOS
[1] OpenCV: http://opencv.willowgarage. com/wiki/

WWW.LINUX- MAGAZINE.ES

Nmero 82

43

DESARROLLO Perl: Herramientas

Un saco lleno de trucos para el entusiasta de Perl

Truco y Trato
Si eres un usuario habitual de shell que navega, hace bsquedas de texto o instala mdulos de CPAN, definitivamente apreciars los scripts de ayuda y los mdulos que ahorran teclear. POR MIKE SCHILLI
ecientemente migr a un nuevo equipo de desarrollo de escritorio, y aprovech esta oportunidad no slo para poner en orden mi desbordado directorio home, sino para reconstruirlo por completo. A lo largo de los aos se haban acumulado cientos de scripts de ayuda, parcialmente obsoletos. Para introducir algn tipo de orden en este caos, decid empezar desde cero e instalar los scripts que realmente echaba en falta en mi trabajo diario, y de una manera reproducible, por supuesto, reducir el impacto del siguiente paso.

Enlaces Repo
Todos mis scripts se trasladaron a los subdirectorios de diferentes repositorios Git para el control de versiones y replicacin. Para permitir al usuario llamar a los helpers sin especificar una ruta de acceso, en mi directorio home existen enlaces simblicos desde la ruta bin hasta los scripts verdaderos. Otro script, binlinks (vase el Listado 1), mapea los scripts seleccionados en el repositorio Git hasta los enlaces del directorio bin local del usuario en su rea DATA. Por ejemplo, el script logtemp, que uso para consultar mi sensor de temperatura [2], se queda en el repositorio Git articles, mientras que mi herramienta para convertir repositorios escrita a mano, cvs2git, est mejor en el repositorio sandbox de los laboratorios experimentales Schilli. Cuando un nuevo script necesita ser aadido a la ruta bin, el desarrollador slo tiene que aadirlo al rea DATA de los binlinks y luego llamar al script binlinks. El script comprueba entonces todas las entradas para ver si el vnculo requerido ya existe en ~/bin y crea un enlace si no es el caso. Que el propio binlinks resida en un repositorio Git debera ser auto-explicativo. Utiliza el mdulo Sysadm::Install de CPAN, simplemente por la funcin mkd, que crea nuevos directorios de profundidad arbitraria sin ms, y genera una salida Log4perl informativa para documentar el proceso.

enlaces simblicos. Si un enlace simblico apunta a un archivo de otro directorio, los desarrolladores querrn cambiar a ese directorio para seguir trabajando all. El comando lcd, con el enlace como parmetro, se encarga de esto (vase la Figura 1). Evidentemente los usuarios de la vieja escuela de Unix sabemos que en un script shell no se puede cambiar el directorio actual del usuario. Los scripts se ejecutan en sub-shells, y cuando terminan, no hay efectos secundarios notables sobre quien los llame. Por esta razn, lcd se define como una funcin Bash en el archivo de inicio .bashrc del intrprete de comandos Bash:
function lcd () U { cd `symlinkdir $1`; \ pwd; ls; }

Siga el Enlace
Como se puede ver, muchos scripts que son llamados son en realidad

Si alguien realiza la llamada lcd bin/cvs2git, la funcin Bash pasa el argumento bin/cvs2git al script symlinkdir, y luego llama al comando cd con el directorio impreso. El Listado 2 muestra la implementacin de symlinkdir. El script utiliza la llamada al sistema readlink() para seguir el enlace que se pasa como parmetro, y repite esto hasta que el resultado ya no es un enlace. La funcin dirname() del mdulo File::Basename extrae el directorio de la ruta resultante, y la lnea 19 la imprime en la salida estndar, donde la funcin Bash lcd() la recoge, cambia al directorio correspondiente, genera como salida el directorio con pwd, y luego llama a ls para listar sus entradas.

Instalador de CPAN Frugal


Es complicado ver algn artculo de esta seccin que no necesite instalar mdulos de CPAN adicionales. Esto es normalmente un proceso rpido e indoloro gracias a una shell de CPAN, al que se puede

44

Nmero 82

WWW.LINUX- MAGAZINE.ES

Perl: Herramientas DESARROLLO

Figura 3: El frugal mdulo App::cpanminus de CPAN y su script de ayuda cpanm instalan el mdulo necesario sin ningn problema.

cir rpidamente a que la cuenta del desarrollador acabe cerrada por los proveedores de alojamiento baratos. La Figura 2 muestra lo que sucede en el proveedor de hosting compartido Figura 2: Demasiado para los proveedores de hosting econmicos: el DreamHost, incluso uso de una shell de CPAN para instalar un mdulo de Perl equivale a antes de que el shell de CPAN tirar de la anilla. pueda cargar el llamar con perl - MCPAN - eshell, o bien mdulo deseado desde CPAN. Al parecer, usando el comando cpan que acompaa a utiliza demasiada memoria, y para evitar las distribuciones de Perl relativamente que otras cuentas compartidas sufran, recientes. DreamHost desenchufa, demasiado Sin embargo, debido a que el shell de pronto para mi gusto. CPAN no es precisamente frugal en el uso Aqu es donde el mdulo de CPAN de los recursos, este proceso puede conduApp::cpanminus entra en escena. La
Figura 1: La funcin lcd cambia al directorio que contiene el script al que apunta el enlace simblico.

Figura 3 muestra la escueta salida de este poco impresionante chico para todo. Es tan frugal en el uso de los recursos, que incluso los proveedores de hosting baratos con sus estrictas reglas no detectan tensin en sus recursos y dejan que contine sin trabas. Al igual que su hermano mayor CPAN.pm, cpanminus tambin puede manejar las rutas locales de los mdulos. Para permitir a los usuarios con cuentas sin permisos suficientes instalar mdulos de CPAN, y para evitar perturbar al bien organizado sistema del gestor de paquetes, los expertos recomiendan el uso de local::lib si la distribucin Linux de su eleccin no incluye un mdulo de Perl y lo necesita instalado. Al trabajar como root (por ltima vez), podemos utilizar el gestor de paquetes para instalar el local::lib. En Ubuntu, tendramos que escribir lo siguiente:
sudo apt-get install U liblocal-lib-perl

Listado 1: binlinks
01 #!/usr/local/bin/perl -w 02 ############################# 03 # binlinks - Link git-ver04 # sioned scripts to bin dir 05 # Mike Schilli, 2011 06 # (m@perlmeister.com) 07 ############################# 08 use strict; 09 use Log::Log4perl qw(:easy); 10 use File::Basename; 11 use Sysadm::Install qw(mkd); 12 13 Log::Log4perl->easy_init( 14 $DEBUG); 15 16 my ($home) = glob ~; 17 my $home_bin = $home/bin; 18 19 while (<DATA>) { 20 chomp; 21 22 my ($linkbase, $src) = 23 split , $_; 24 25 $src = $home/$src; 26 my $binpath = 27 $home_bin/$linkbase; 28 29 if (-l $binpath) { 30 DEBUG 31 $binpath already exists; 32 next; 33 } elsif (-e $binpath) { 34 ERROR 35 $binpath already exists,, 36 but not a link!; 37 next; 38 } 39 40 INFO 41 Linking $binpath -> $src; 42 43 symlink $src, $binpath 44 or LOGDIE Cannot link . 45 $binpath->$src ($!); 46 } 47 48 __DATA__ 49 logtemp git/articles/temper/eg/logtemp 50 cvs2git git/sandbox/cvs2git/cvs2git

Si un proveedor de hosting no permite el acceso como root y no nos permitie la ins-

Listado 2: symlinkdir
01 #!/usr/local/bin/perl -w 02 use strict; 03 use File::Basename; 04 05 my ($link) = @ARGV; 06 07 die No link specified 08 unless $link; 09 die 10 $link not a symbolic link 11 unless -l $link; 12 13 while (-l $link) { 14 $link = readlink($link); 15 } 16 17 $link = dirname($link) 18 unless -d $link; 19 print $link\n;

WWW.LINUX- MAGAZINE.ES

Nmero 82

45

DESARROLLO Perl: Herramientas

talacin de la til librera local local:.lib, podemos descargar el tarball desde CPAN, descomprimirlo, y escribir
perl Makefile.PL --bootstrap make install

find . -type file U -exec grep blabla {}U /dev/null \;

A continuacin aadimos lo siguiente en el archivo de inicio de nuestro shell Bash (generalmente .bashrc):
eval $(perl U -I$HOME/perl5/lib/perlU -Mlocal::lib)

Este cdigo configura las variables PERL_MM_OPT y PERL5LIB de manera que los mdulos que se instalen ahora con una shell de CPAN (o con cpanminus ) terminen en el directorio perl5 bajo el directorio home del usuario sin permisos de root. Esto sucede cuando un usuario escribe make install. Al mismo tiempo, los scripts Perl que listan use SomeModule en su cdigo para enlazar un mdulo de Perl sern capaces de encontrarlos en la ruta de acceso local. Si un script (por ejemplo, un cronjob) no tiene acceso a estas variables de entorno desde .bashrc, una entrada explcita use local::lib insertada en el cdigo del programa antes de cargar los mdulos necesarios instalados localmente, tambin har el trabajo.

Pero esto significa teclear mucho, y hay que hacer un esfuerzo para pensarlo, sobre todo cuando se trata con /dev/null, que tambin muestra los nombres de archivo para coincidencias individuales, y el punto y coma enmascarado, que es extraamente necesario para indicarle a la opcin -exec que el comando pasado ya est completo. Yo sola utilizar un sript findgrep para iniciar una bsqueda de texto recursiva, pero con ack [3], los usuarios simplemente pueden cargar el potente comando desde CPAN (cpanm ack); tecleamos
$ ack blabla

y eso es todo. Habiendo dicho esto, ack es bastante estricto en cuanto a los tipos de archivos. Slo buscar en los que aparezca texto en base a la extensin; si necesitamos buscar en todos los archivos, tenemos que teclar ack -a blabla. Si el rendimiento es un factor importante, el a menudo pasado por alto
$ git grep blabla

tante, cul es la longitud mxima de lnea, y cundo debera dividir el formateador las lneas de cdigo largas? La pgina del manual de perltidy lista las opciones para todos estos estilos y describe sus efectos. El Listado 3 muestra la configuracin para los listados de Perl en Linux Magazine. El ancho de lnea es un gran reto con 29 caracteres, y el formateador indenta las lneas en bloques de dos caracteres (-i=2). Si divide una lnea, indenta el resto de la lnea en dos caracteres (-ci=2) en la lnea siguiente. Las instrucciones else siguen a la llave de cierre del bloque if directamente, sin necesidad de un salto de lnea (else abrazado, -ce). Dado que el espacio es un bien escaso en la revista y a los editores no les gusta malgastarlo, vertical tightness se configura al valor mximo, -vt=2. Mediante esta opcin, el formateador ahorra saltos de lnea donde se pueda. Por ltimo, para ahorrar an ms espacio, -nbbc especifica que no hay lneas en blanco delante de los comentarios en una lnea completa. Para indicarle al formateador que remodele un script en Perl con las opciones definidas, el desarrollador debe llamarlo de la siguiente manera:
perltidy -pro=U path/perltidyrc nombrescript

Bsqueda de Texto
Muy a menudo, los desarrolladores buscan una cadena de texto especfica que saben que se encuentra en algn lugar dentro de los diversos archivos de cdigo fuente de un proyecto. Si el texto blabla se esconde en algn lugar de un archivo bajo la ruta actual, en el shell, podemos ejecutar el comando find:

es una opcin preferible en un repositorio Git. Debido a que git guarda los archivos que gestiona en un ndice, no tiene que recorrer los rboles de archivos en una bsqueda recursiva. Este proceso gana frente a enfoques menos sofisticados, especialmente para los archivos que an no estn en la cach del bfer del sistema operativo y que residen en directorios muy anidados.

Si el script es sintcticamente correcto, el resultado es un archivo nombrescript.tdy con el formato correcto. Si lo preferimos, podemos hacer esto
:nnoremap <buffer>U <silent> X :w<Enter>1GdG\ :.!perltidy -pro=U path/perltidyrcU <%<Enter>

Formato Automtico
Para asegurarse de que la cosecha propia de scripts Perl cumple con los estndares vigentes, los programadores obedientes los ejecutan a travs del embellecedor perltidy una vez estn listos. El script est disponible como un mdulo de CPAN (cpanm perltidy) y soporta una gran cantidad de configuraciones que responden a cualquier estilo. Dnde colocamos las llaves, en la lnea del if o en la lnea siguiente? Sigue directamente el else a la llave que cierra, o la sigue tras un salto de lnea? Hay un espacio en blanco entre los parntesis, separando las llamadas a funciones y sus argumentos? Y lo ms impor-

Listado 3: perltidyrc
01 # Opciones perltidy para scripts Perl en Linux Magazine 02 03 -l=29 # ancho de lnea 04 -i=2 # indent acin de columna 2 05 -ci=2 # indent acin de continuacin de columna 2 06 -ce # else abrazado 07 -vt=2 # constriccin vertical 08 -nbbc # sin lnea en blanco antes de comentarios de lnea completa

para crear un comando de vim que maneje el formato en el editor al presionar X. A esto es lo que yo llamo comodidad. I

RECURSOS
[1] Listados de este artculo: http://www.linux-magazine.es/ Magazine/Downloads/82 [2] Entre los Lmites por Michael Schilli, Linux Magazine n 71, pg. 57: http://www.linux-magazine.es/ issue/71/057-060_PerlLM71.pdf [3] ack: http://betterthangrep.com

46

Nmero 82

WWW.LINUX- MAGAZINE.ES

La Columna de Charly ADMINISTRACIN

El da a da del administrador de sistemas: E-Log

Ms Vatios?
Si te has visto obligado a tener que vender tu coleccin de revistas de Linux para pagar tu ltima factura de la luz, te ayudamos a descubrir cmo ahorrar energa suponiendo que tengas un contador de la luz de ltima generacin. POR CHARLY KHNAST
ace un par de aos, mi factura de la luz era algo que le encantaba a la compaa elctrica. Ms o menos, me confirmaron que slo consuma un par de kilovatios/hora menos de los necesarios para aplicarme los descuentos otorgados a los grandes usuarios industriales. En ese momento, mi hogar tena dos adultos, un beb y dos racks de 19 pulgadas. En aquella poca sola decir: Pero no ves que tengo calienta-biberones y monitores para bebe! Mi pareja siempre ha tenido sentido del humor, pero este shock elctrico financiero generaba algunos remordimientos de conciencia por mi parte. Ahora, cuando compro hardware, me aseguro de que el equipo sea un ordenador y no un calentador elctrico. Nuestro contador elctrico era una de esas cajas negras en la que unos discos de metal giraban al ritmo de mi consumo elctrico. Hace poco hemos instalado un sistema fotovoltaico en el tejado de casa y nos han puesto un nuevo contador digital. Al igual que casi todas las estaciones de peaje, mi medidor tiene un pequeo LED de infrarrojos que manda cdigo Morse que se lee cada par de segundos. Lo nico que necesita para realizar la lectura es un foto-semiconductor que recibe los datos del medidor, convierte la seal y los pasa al puerto serie del ordena-

Figura 1: El grfico, creado con RRDtool, muestra el consumo elctrico en casa del administrador de sistemas como una lnea roja y la energa proporcionada por los mdulos fotovoltaicos (PV) como zona verde.

dor Linux. Probablemente los manitas de la electrnica deseen montarse sus propios dispositivos [1]. Los materiales les costarn alrededor de 10 dlares. Quien prefiera mantenerse alejado de los soldadores, como un servidor, puede comprar una cabeza ptica lista para usarse en una tienda. Como mi servidor Linux, que vive slo a dos metros de distancia del medidor elctrico, actualmente no tiene puerto serie, tambin he comprado un mdulo Ethernet que enva los datos del contador a travs de la red cada segundo.

Apagn
Ahora los datos estn al alcance de mi ordenador, pero a primera vista no significan mucho para mi (Listado 1). Necesito ms informacin [2] para interpretarlos. Como su salida est en formato hexadecimal Smart Message Language (SML), lo nico que necesita hacer es mapear las secuencias SML al medidor de datos. Para ver el consumo actual, hay que echarle un vistazo al valor real energy consumption. Este bloque de datos empieza con 77070100010800FF. Algunos bytes despus aparece la secuencia 621E52FF; esto me indica que lo siguiente que va a leer el medidor est en watios-hora con un slo decimal. Justo detrs existe una secuencia hexadecimal

Listado 1: Cdigo Hexadecimal del Contador


mac=00:08:DC:17:5D:B1 boot=1 fw=02.00 time=1259877154 zpb=DE0000000000000000000000000 000002 SML(1B1B1B1B0101010176070012003D 458C6200620072630101760101070012 00116 [...] 0000001B1B1B1B1A034D1F)

que empieza por 56 y finaliza con 01 el valor entre estas dos etiquetas es lo que lee el medidor, que ahora voy a convertir de hexadecimal a decimal. Se repite la lectura una hora despus, proporcionndome el consumo elctrico en watios-hora con la diferencia entre las dos lecturas. La mayora de los medidores tambin proporcionan otros valores. Esto es muy til para los planes que tienen diferentes valores para el da o para la noche, o como es mi caso cuando necesita saber la cantidad de energa que proporcionan los mdulos solares. Para visualizar los datos recomiendo de nuevo RRDtool [3]. El grfico que he creado se muestra en la Figura 1. Para alimentar a una base de datos round-robin 24/7, obviamente tambin necesita ejecutar su servidor Linux 24/7. Su compaa de servicios le amar por ello. I

RECURSOS
[1] Proyecto Power monitor: http:// sourceforge.net/apps/wordpress/ irmetermon/ [2] Descripcin del protocolo de datos SML: http://www.vde.com/en/fnn/ extras/sym2/infomaterial/ documents/sml_080711_102_eng. pdf [3] RRDtool: http://oss.oetiker.ch/ rrdtool/

WWW.LINUX-MAGAZINE.ES

Nmero 82

47

ADMINISTRACIN Inseguridades: Cdigo Modificado

Detectando ataques de modificacin de cdigo fuente

Mods
Aprende a protegerte de los ataques de modificacin de cdigo fuente. POR KURT SEIFRIED
or norma general, cuando se habla de deteccin de intrusiones nos vienen a la mente soluciones para la deteccin de intrusiones por red o basadas en hosts. O sea, los tpicos Snort, OSSEC, Prelude, registro y anlisis de eventos [1], etc. Pero solemos pasar por alto las modificaciones de cdigo. En los ltimos meses se han dado varios casos de modificaciones de cdigo de alto nivel. Por suerte, dos de los mayores fueron detectados y solucionados rpidamente, pero slo gracias a la existencia previa de sistemas y procesos que pudieron detectar las modificaciones.

Revisiones de Cdigo
El kernel Linux y los proyectos de software libre en general son excelentes en cuanto a revisin de cdigo. Si un atacante consigue insertar cdigo malicioso en un proyecto popular que la gente se instala, probablemente habr conseguido hacerse con el control de cada uno de los sistemas en los que se ha instalado el cdigo del proyecto contaminado. Algo as ocurri hace varios meses con tres plugins de WordPress [2]: Ad This, con ms de 495,000 descargas, W3 Total Cache, con ms de 600,000 y WPtouch , con ms de 2,200,000 descargas. Aunque slo un pequeo porcentaje de los usuarios que los descargaron hubiesen instalado los plugins, el atacante consigui acceso a miles, si no a decenas de miles, de mquinas. Por suerte, el equipo de WordPress se percat de las modificaciones hechas al cdigo: los tres backdoors pasaban valores proporcionados por el usuario a la declaracin assert() de PHP, la cual se encarga de evaluar las cadenas que se le pasan. Bsicamente, se trata de una forma enrevesada de ejecutar como cdigo las variables con texto.

Qu conclusin se obtiene con ese ejemplo? Que las revisiones de cdigo son extremadamente tiles. La forma ms efectiva de fomentarlas es simplemente exigirlas. El kernel Linux es un perfecto ejemplo de ello: cada commit realizado tiene que ir firmado por otros desarrolladores, aadiendo la informacin de la firma al propio commit. Evidentemente, este proceso slo funciona si los desarrolladores que revisan el cdigo lo hacen en profundidad. Si no tienen un buen motivo para hacerlo, estamos en las mismas. El sistema de control de versiones Git incluye una opcin que resulta obvia a posteriori: el comando blame . Esta opcin simplemente lista quin es responsable de cada lnea de cdigo de un archivo, permitiendo hacer un seguimiento sobre quin envi el codigo que nos interesa. Otros sistemas de control de versiones, como Subversion o Mercurial, incluyen comandos para ver quin ha enviado cambios a un archivo, pero el proceso para saber quin es el responsable de una lnea de cdigo determinada suele implicar dos pasos. Otro aspecto de las revisiones de cdigo es hacer los commits pblicos. Como estamos hablando de cdigo abierto, los commits son pblicos, verdad? Bueno, s y no. A menos que alguien haga un mirror del cdigo y analice los logs de los commits, no tendr idea de qu va la cosa. Por otro lado, si se envan los commits por correo a una lista de distribucin (como OpenBSD, que enva todos los commits CVS a source-changes@ ), es mucho ms fcil para un desarrollador o para un tercero (por

ejemplo, alguien que quiera empaquetar el cdigo fuente) mantenerse al tanto de los cambios. La otra ventaja de este mtodo es que la mayora de las listas de distribucin se archivan, disponiendo as de un mayor nmero de fuentes a la hora de comprobar si alguien ha manipulado el sistema de control de versiones. De nuevo, cuantos ms ojos haya, ms difcil es que pase desapercibido un commit malintencionado. Si se cuenta con un historial de commits, los commits extraos llaman ms la atencin. Por ejemplo, los backdoors de los plugins de WordPress usaban todos la funcin assert() de PHP, que rara vez se usa (es principalmente una funcin de depurado). Adems, el cdigo hostil probablemente no siga todas nuestras polticas de programacin, pudiendo incluso estar ofuscado.

48

Nmero 82

WWW.LINUX- MAGAZINE.ES

Inseguridades: Cdigo Modificado ADMINISTRACIN

Firma de Cdigo Fuente y Distribucin


De nada sirve tener cdigo fuente limpio y saneado si no se distribuye con seguridad. La mayora de los proyectos de software libre usan tar para empaquetar los fuentes en un nico archivo, y gzip o bzip2 para comprimirlos. Muchos incluyen adems archivos de texto con las sumas SHA256 o MD5 de los archivos, permitiendo as verificar que las descargas no han sido manipuladas, aunque no evita que un atacante sustituya tambin los archivos. Por todo ello, la mejor solucin es utilizar un buen software criptogrfico, como GnuPG, para firmar los archivos. Por suerte, son muchos los proyectos de software libre que firman sus tarballs con PGP o GnuPG. Un ejemplo perfecto es vsftpd, atacado recientemente, cuyo cdigo fuente fue sustituido por un atacante [3], el cual, sin embargo, no pudo firmar el cdigo, por lo que se dispararon todas las alarmas (Listado 1). Pero, qu pasa si no disponemos de la clave pblica necesaria para verificar la firma? Lo malo es que hay muchos proyectos cuya clave pblica no es fcil de encontrar. Al comprobar una firma, aunque no se disponga de una copia de la clave pblica necesaria para su verificacin, se puede obtener el ID de la clave utilizada para firmar los datos. Con suerte, en la pgina web del proyecto estarn los detalles de la clave, como su huella. Por otra parte, su ID es un nmero hexadecimal de 8 caracteres, as que tericamente es posible generar una clave propia con el mismo ID, ya que son slo 32 bits (unos 4 billones de posibilidades). En cambio, la huella tiene una longitud de 32 caracteres, o lo que es lo mismo 128 bits, por lo que las opciones de crear una clave con la misma huella (e ID) son infinitesimales.

Listado 1: Salida de GnuPG del tarball de vsftpd


01 $ gpg ./vsftpd-2.3.4.tar.gz.asc 02 gpg: Signature made Tue 15 Feb 2011 02:38:11 PM PST using DSA key ID 3C0E751C 03 gpg: BAD signature from Chris Evans <chris@scary.beasts.org>

Una vez en posesin del ID de la clave, se puede buscar en los servidores de claves pblicos. De todos modos, encontrada la clave PGP, hay que verificar que es legtima. Una vez ms, con suerte, la clave estar firmada. La que se usa para firmar las publicaciones del Kernel Linux cuenta con ms de 100 firmas; aunque muchas de las claves utilizadas para firmar cdigo, si no todas, slo estn firmadas por s mismas (nadie ms las ha firmado). Si es ese el caso, lo mejor es usar Google. Idealmente, habr muchas referencias a la clave y tendrn una antigedad de meses o de aos, dando a entender que la clave es efectivamente legtima. El siguiente paso es cuando un proveedor, como Red Hat o Debian, coge el cdigo fuente y crea un paquete. Para saber ms sobre cmo comprobar firmas GPG o de RPM/ APT, consultar el artculo Verificable del nmero 69 de Linux Magazine [4].

hacindolas lo ms pblicas posible. Si un tercero firma una clave nuestra, lo ms seguro es que el usuario tenga alguna clave en la que ya confa y que se pueda usar para verificar la nuestra. Para publicar nuestras claves, podemos subirlas a varios servidores de claves pblicos, adems de publicar los IDs y las huellas en nuestros sitios web. Es algo que funciona especialmente bien cuando el proyecto de software libre cuenta con un nombre de dominio y un certificado SSL propios.

Conclusin
Para proteger nuestras redes y sistemas, lo primero que tenemos que hacer es asegurarnos de que slo ejecutamos software que no ha sido comprometido por ningn atacante. Por suerte, en Linux es bastante fcil. Se empieza con un cdigo fuente seguro, que a su vez es empaquetado y distribuido de forma segura por los distribuidores. Para que todo esto sea verdaderamente efectivo, el usuario deber comprobar las firmas. I

Gestin de Claves
El cdigo y los paquetes firmados slo son seguros cuando las claves PGP privadas usadas para firmarlos estn protegidas adecuadamente. Como mnimo, las claves deben tener una buena frase de paso y estar almacenadas en un sistema seguro. Si un atacante consiguiese comprometer el sistema e instalar un keylogger, por ejemplo, la frase de paso no servira de mucho. Por este motivo, lo ideal es mantener las claves almacenadas en algn sitio inaccesible. Una forma sencilla de hacerlo es mantenindolas en un CD o un USB; sin embargo, lo mejor es tenerlas en algn sistema dedicado sin conexin a Internet. Una alternativa ms barata es usar un CD o USB arrancable para ejecutar un sistema que slo se use para firmar cdigo [5]. El segundo aspecto de la gestin de las claves es hacer que los usuarios puedan verificarlas fcilmente. Las dos formas principales de hacerlo es mediante la firma de las claves o

RECURSOS
1] Inseguridades: Una de Syslog por Kurt Seifried, Linux Magazine nmero 79, pg. 60. [2] Add This, W3 Total Cache, WPtouch backdoors, por Adam Harley, http://adamharley.co.uk/2011/06/ wordpress-plugin-backdoors/ [3] Alert: vsftpd download backdoored, por Chris Evans/Scarybeasts, http://scarybeastsecurity.blogspot. com/2011/07/ alert-vsftpd-download-backdoored. html [4] Inseguridades: Verificable por Kurt Seifried, Linux Magazine nmero 69, pg. 10: https://www.linux-magazine. es/issue/69/ 010-011_InseguridadesLM69.pdf [5] Inseguridades: Auto-Proteccin por Kurt Seifried, Linux Magazine nmero 71, pg. 10: https://www. linux-magazine.es/issue/71/ 010-011_InseguridadesLM71.pdf

WWW.LINUX- MAGAZINE.ES

Nmero 82

49

ADMINISTRACIN Anti-Spam Postscreen

Postscreen combate el spam y consume pocos recursos

LA BATALLA
Los desarrolladores de Postfix queran tener un mecanismo para descartar los correos indeseados en el momento de recibirlos, de modo que han aadido Postscreen a la versin 2.8 de su servidor. Este mdulo filtra y clasifica los correos sin mirar los contenidos. POR CHRISTOPH WICKERT

rencia a un nico mensaje que hayan enviado. Ocasionalmente, los atacantes no quieren enviar tanto spam como para provocar un ataque por denegacin de servicio. La configuracin por defecto de Postfix permite un mximo de 100 instancias del servidor SMTP, smtpd. Como cada instancia puede procesar precisamente un mensaje, el nmero de conexiones concurrentes se encuentra tambin, por este hecho, limitado a 100. El servidor descarta cualquier peticin adicional. Segn el RFC 5321 [4], el cliente debe esperar entonces cinco minutos antes de volver a dialogar de nuevo con el servidor. Si el administrador establece el nmero mximo de instancias smptd a un valor mayor, los atacantes podran bloquear permanentemente el servidor. Si disponemos de Postscreen junto con el servidor SMTP, este ltimo slo escuchar el puerto 587, mientras que Postscreen escuchar el puerto 25, aceptar los mensajes entrantes y luego se los pasar al servidor SMTP por medio de LMTP. Aunque teniendo Postscreen no podr evitarse un ataque por denegacin de servicio, podemos defender el sistema contra l con menos recursos, ya que una nica instancia de Postscreen puede procesar muchas conexiones SMTP al mismo tiempo. Por ello, se tendrn ms procesos SMTP trabajando en sus tareas reales.

En Lnea!
El objetivo de Postscreen es librase del spam tan pronto como sea posible. El programa realiza primero unos anlisis rpidos y simples, antes de pasar a otros ms complejos computacionalmente ms costosos. De esta forma, en cada paso se reduce el volumen de spam. En el primer paso, Postscreen consulta listas conocidas de clientes buenos y malos, tambin conocidas como listas blancas y listas negras. En el segundo paso, comprueba posibles infracciones de las reglas del protocolo SMTP, tpicas de zombies y spambots. En el tercer paso, los administradores pueden habilitar anlisis en ms profundidad del protocolo. Sin embargo, Postscreen no es un filtro de correo en el sentido estricto del trmino, ya que ignora completamente el contenido de los mensajes.

a mayora del gran volumen de spam enviado tiene su origen en mquinas Windows contaminadas con algn malware. Sin conocimiento de los usuarios y sin ninguna accin por su parte, los spambots (o zombies) propagan un flujo de mensajes indeseados. Los expertos de Symantec descubrieron que el 95% del volumen global de spam viene originado por botnets las cifras continan incrementndose [1].

Un Bouncer para Postfix


Los desarrolladores de Postfix dirigidos por Wietse Venema estn muy al tanto de los problemas actuales. La batalla contra el spam se est convirtiendo cada vez ms en una batalla contra zombies (Figura 1) [2]. La ltima versin de Postfix, 2.8 [3], viene con un bouncer inteligente denominado Postscreen que simplemente y de forma fia-

ble identifica y descarta los mensajes de los spambots. Los filtros antispam clsicos como el popular SpamAssassin no entran en la lucha hasta mucho ms adelante, cuando los mensajes han sido procesados. En este punto, los correos indeseados ya han consumido recursos valiosos del sistema debido al anlisis completo del texto, la solucin tomada por SpamAssassin, es desde el punto de vista computacional, muy costosa. De forma global, un servidor de correo gasta ms tiempo no distribuyendo el correo basura que distribuyendo el correo legtimo en los buzones correspondientes. Tambin, muchos filtros no logran su mximo potencial sin pasar un perodo de entrenamiento con un volumen lo suficientemente grande de spam. Postscreen, por otro lado, intenta identificar los spambots y zombies en refe-

Listas Negras y Listas Blancas


La primera lista que Postscreen consulta es esttica; viene definida por el parmetro

50

Nmero 82

WWW.LINUX- MAGAZINE.ES

Anti-Spam Postscreen ADMINISTRACIN

postscreen_access_list en la configuracin de Postfix. El valor por defecto es permit_mynetworks es decir, todas las direcciones de mynetworks, que el administrador tambin puede obtener tecleando:
postconf -d mynetworks

Este paso muestra una lista blanca con todas las direcciones buenas. Para evitar el problema de tener que realizar ms anlisis y descartar mensajes directamente, hace falta una lista negra. La mejor idea es crear una lista negra en formato CIDR [5] de direcciones que hayamos descubierto que utilizan los emisores de spam. Aqu, el administrador tiene que respetar el orden de las reglas. Si /rtc/postfix/postscreen_access.cidr contiene
192.168.100.101 192.168.100.0/16 permit reject

el servidor bloquear todas las direcciones IP de la red 192.168.100.0, con la excepcin de 192.168.100.101. La entrada
postscreen_access_list = U permit_mynetworks, U cidr:/etc/postfix/U postscreen_access.cidr

dores especializados en servidores de correo informan de las direcciones IP que han identificado como comprometidas. Los servicios bien conocidos incluyen Spamhaus.org y SpamCop.net. Los administradores pueden activar la lista deseada usando el parmetro postscreen_dnsbl_sites. Las listas separadas Figura 1: Una presentacin del desarrollador de Postfix Wietse Vepor espacios en nema de IBM de cmo un ataque zombie impide que un servidor de blanco tienen pesos correo haga bien su trabajo. diferentes. En las listas negras se van puntuando, y la lgica Spambots normalmente van con ms completa para el spam deduce los puntos a prisa que los clientes de correo normal; en partir de las listas blancas. La puntuacin de muchos casos, terminan en una lista negra todas las listas tiene que llegar al valor en menos de una hora y media. Debido a umbral postscreen_dnsbl_threshold antes de esto, intentan enviar rpidamente tantos que Postscreen declare una direccin IP mensajes como les sea posible. Esto explica como spammer: porqu los bots no esperan a que el servidor les salude con helo, sino que intentan manpostscreen_dnsbl_threshold = 3 dar sus mensajes tan rpido como les sea postscreen_dnsbl_sites = U posible.
zen.spamhaus.org*2, U bl.spamcop.net*1,

Tcticas de Retraso
Postscreen trata de provocar precisamente esta reaccin. Usando el parmetro postscreen_greet_wait, los administradores pueden definir cunto tiempo quieren que Postscreen espere antes de enviar un cdigo de estado 200. Aunque los bots se precipitan, el

en /etc/postfix/main.cf activar la lista.

Listas Negras Dinmicas


Adems de las listas estticas, Postscreen crea automticamente listas negras y blancas dinmicas. Juntas, forman una cach inteligente: Un ordenador identificado como un bot acabar en la lista negra. Sin embargo, si el cliente pasa satisfactoriamente todos los anlisis, el servidor aadir su direccin en la lista blanca dinmica e inmediatamente pasar el mensaje a smtpd de aqu en adelante. El tercer tipo de listas es la dinmica, lista mantenida por Internet [6] y conocida como DNSBL (Lista Negra basada en DNS), la cual acta como una memoria colectiva. Opera-

El cdigo muestra dos proveedores DNSBL con diferentes pesos en el fichero de configuracin de Postfix /etc/postfix/ main .cf. Ambos tienen que coincidir en que la direccin es de un spammer para poder llegar al valor umbral y ponerlo en la lista negra.

Listado 1: Dilogo SMTP


01 220 mail.example.net ESMTP Postfix 02 HELO client.example.net 03 250 mail.example.net 04 client MAIL FROM: john@example.net 05 250 OK 06 RCPT TO: sue@example.net 07 250 OK 08 DATA 09 354 End data with <CR><LF>.<CR><LF> 10 From: John Doe <john@example.net> 11 To: Sue Doe <sue@example.net> 12 Subject: HDL 13 14 Hi Sue, 15 See you later. 16 . 17 250 OK: queued as E82C21839B9 18 QUIT 19 221 Bye

Como un Telfono
El protocolo SMTP recuerda a una llamada de telfono: el emisor llama a un servidor, que le dice su nombre. El Listado 1 muestra un dilogo SMTP tpico. Los mensajes del servidor siempre comienzan con un cdigo numrico de estado que le indica al cliente que el servidor ha procesado con xito la entrada.

Tabla 1: Filtros y Acciones


Filtro postscreen_blacklist_action Accin Lista esttica de acceso Lista negra DNS Presaludo Anlisis Bare Newline Anlisis Command Pipelining Anlisis Non-SMTP Command Por Defecto ignore

postscreen_dnsbl_action postscreen_greet_action postscreen_bare_newline_action postscreen_pipelining_action postscreen_non_smtp_command_action

ignore ignore ignore enforce drop

WWW.LINUX- MAGAZINE.ES

Nmero 82

51

ADMINISTRACIN Anti-Spam Postscreen

Listado 2: main.cf
01 # Global Postfix configuration file. This 02 # file lists only a subset of all parameters. 03 # For the syntax, and for a complete 04 # parameter list, see the postconf(5) manual 05 # page (command: man 5 postconf). 06 # 07 # LOCAL PATHNAME INFORMATION 08 queue_directory = /var/spool/postfix 09 command_directory = /usr/sbin 10 daemon_directory = /usr/libexec/postfix 11 data_directory = /var/lib/postfix 12 13 # QUEUE AND PROCESS OWNERSHIP 14 mail_owner = postfix 15 16 # INTERNET HOST AND DOMAIN NAMES 17 myhostname = mail.example.net 18 mydomain = example.net 19 20 # RECEIVING MAIL 21 inet_interfaces = all 22 inet_protocols = all 23 mynetworks = 127.0.0.0/8 192.168.13.0/28 24 mydestination = $myhostname, mail-external.example.net, localhost.$mydomain, localhost 25 26 # REJECTING MAIL FOR UNKNOWN LOCAL USERS 27 unknown_local_recipient_reject_ code = 550 28 29 # ALIAS DATABASE 30 alias_maps = hash:/etc/aliases 31 alias_database = hash:/etc/aliases 32 33 # JUNK MAIL CONTROLS 34 header_checks = regexp:/etc/postfix/header_chec ks 35 36 # SHOW SOFTWARE VERSION OR NOT 37 smtpd_banner = $myhostname ESMTP $mail_name 38 39 # DEBUGGING CONTROL 40 debug_peer_level = 2 41 debugger_command = 42 PATH=/bin:/usr/bin:/usr/local/b in:/usr/X11R6/bin 43 ddd $daemon_directory/$process_name $process_id & sleep 5 44 45 # INSTALL-TIME CONFIGURATION INFORMATION 46 sendmail_path = /usr/sbin/sendmail.postfix 47 newaliases_path = /usr/bin/newaliases.postfix 48 mailq_path = /usr/bin/mailq.postfix 49 setgid_group = postdrop 50 html_directory = no 51 manpage_directory = /usr/share/man 52 sample_directory = /usr/share/doc/postfix-2.8.3/sa mples 53 readme_directory = /usr/share/doc/postfix-2.8.3/RE ADME_FILES 54 55 #### POSTSCREEN 56 # Statische Listen 57 postscreen_access_list = permit_mynetworks, 58 cidr:/etc/postfix/postscreen_access.cidr 59 postscreen_blacklist_action = drop 60 61 # DNS Blackhole Lists 62 postscreen_dnsbl_threshold = 3 63 postscreen_dnsbl_sites = zen.spamhaus.org*2, 64 bl.spamcop.net*1, 65 postscreen_dnsbl_action = enforce 66 67 # Pregreeting 68 postscreen_greet_banner = $smtpd_banner 69 postscreen_greet_action = enforce 70 71 # Weitere Postscreen-Tests 72 postscreen_bare_newline_enable = no 73 postscreen_non_smtp_command_ena ble = yes 74 postscreen_non_smtp_command_act ion = drop 75 postscreen_pipelining_enable = no

valor no debera ser demasiado alto como para que inadvertidamente se bloqueen los mensajes legtimos. Afortunadamente, la lista blanca esttica mencionada anteriormente en la seccin Listas Negras y Listas Blancas puede ayudar tambin a tomar la decisin. El parmetro postscreen_greet_banner permite definir el texto enviado antes del cdigo de estado 220. El servidor SMTP tpicamente devuelve un cdigo de estado 220 y su nombre de host (por ejemplo, 220 mail.example.net), y los clientes que tienen bien implementado SMTP, esperarn pacientemente su HELO. Por el contrario, los spambots a menudo se confunden con textos adicionales y pueden responder prematuramente al HELO. Cuando un servidor finalmente enva, por ejemplo, 220-mail.example.net (que no es un cdigo de estado ya que no tiene espacios en blanco), la mayora de los spambots continan.

Durante el desarrollo de Postscreen, el programador Ralf Hildebrant [7] instal el programa en mail.charite.de, y cerca del 60 por ciento de todos los bots dijeron HELO antes de tiempo; slo el 8 por ciento no fue a parar a las listas negras DNS. Una medida realizada posteriormente por mail.python. org fue incluso ms clara: 7 de cada 10 bots picaron con el presaludo y slo el 1 por ciento de ellos no termin en la lista negra. Esto muestra el gran potencial que poseen estas pruebas. Incluso si no se activa ninguna lista negra DNS y slo se mira si se cumple el protocolo SMTP, podremos librarnos de una porcin considerable de correo basura.

Pruebas y Acciones para el Correo Entrante


Por supuesto, el servidor puede realizar otras pruebas tras el saludo:

Bare Newline slo transmite finales de lnea incompletos. Command Pipelining descubre los spambots que no esperan la respuesta del servidor. Non-SMTP Command identifica los bots que atraviesan el servidor proxy abierto. Estas pruebas se encuentran normalmente desactivadas; sin embargo, los parmetros postscreen_bare_newline_enable, postscreen_pipelining_enable o postscreen_non_ smtp_enable las activarn. La mayora de los zombies no pasan la prueba Bare Newline, e incluso si el cliente la pasa, tendr que reconectarse al servidor SMTP. Ms importantes que estas pruebas son las acciones que Postscreen puede realizar tras las mismas (Tabla 1). A menos que se configure expresamente para hacer algo ms, Postscreen slo registrar los resultados. Esto permite a los admi-

52

Nmero 82

WWW.LINUX- MAGAZINE.ES

Figura 2: El puerto para usuarios internos y la direccin para Postscreen se administran desde el fichero /etc/postfix/master.cf.

nistradores probar configuraciones sin interferir con el sistema en produccin antes de realizar las activaciones. Dispone de las siguientes acciones: ignore Ignora los resultados de las pruebas y realiza ms pruebas. drop Termina inmediatamente la conexin con un cdigo de estado 521 (correo no aceptado). enforce Espera a los resultados del resto de las pruebas y responde con un cdigo de estado 550 (Buzn no disponible) mientras tanto. Mientras las pruebas no conduzcan a un resultado ambiguo es decir, mientras que el cliente no se ponga en una lista negra o en una lista blanca Postscreen volver a ejecutarlas la prxima vez que se conecte.

Instalando Postscreen
Si se quiere usar Postscreen para recibir los correos en vez de smtpd, habr que modificar el fichero /etc/postfix/master.cf (Figura 2). En vez de la entrada por defecto,
smtp inet n - n - - U smtp -o parameters

hay que utilizar:


smtpd pass -- -- n -- -- U smtp -- parameters smtp inet n -- n -- 1 postscreen

Tras ejecutar postfix reload, Postscreen se encargar de recibir los correos. Como Postscreen normalmente escucha en el puerto 25 de smtpd, los usuarios ya no podrn basarse en sus MUA (Agentes de correo del usuario) para enviar mensajes por este puerto, ya que Postscreen no usa ninguna clase de autenticacin. El puerto 25 slo recibe correo de otros servidores SMTP. Sin embargo, los usuarios pueden saltarse Postscreen con sus clientes de correo y entregar el correo directamente en el puerto 587 o usar una conexin cifrada con SSL en el puerto 465 para entregarlo a smtpd.

ADMINISTRACIN Anti-Spam Postscreen

En muchos casos los administradores an querrn que sus usuarios utilicen el puerto 25. Como este puerto est ocupado, la nica opcin ser una segunda direccin IP. Dicho de otro modo, mail.example.net an ejecutar smtpd, mientras que Postscreen escuchar en una segunda direccin IP (por ejemplo, mail-

external.example.net). Lo importante aqu es indicarles a Postscreen y a Smtpd de forma explcita las direcciones IP en el fichero master.cf; si no, ambos intentarn conectarse a cualquier interfaz que encuentren. El siguiente paso consiste en cambiar el registro del recurso MX del dominio a

Listado 3: master.cf
01 # 02 # Postfix master process configuration file. For details on the format 03 # of the file, see the master(5) manual page (command: man 5 master). 04 # 05 # Do not forget to execute postfix reload after editing this file. 06 # 07 # ==================================================================== 08 # service type private unpriv chroot wakeup maxproc command + args 09 # (yes) (yes) (yes) (never) (100) 10 # ==================================================================== 11 192.168.13.20:smtp inet n n smtpd -o myhostname=mail.example.net 12 178.146.13.20:smtp inet n n 1 postscreen -o myhostname=mail-external.example.net 13 smtpd pass - n smtpd 14 dnsblog unix - n 0 dnsblog 15 tlsproxy unix - n 0 tlsproxy 16 submission inet n n smtpd 17 -o smtpd_tls_security_level=encrypt 18 -o smtpd_sasl_auth_enable=yes 19 -o smtpd_client_restrictions=permit_sasl_authenticated,reject 20 -o milter_macro_daemon_name=ORIGINATING 21 smtps inet n n smtpd 22 -o smtpd_tls_wrappermode=yes 23 -o smtpd_sasl_auth_enable=yes 24 -o smtpd_client_restrictions=permit_sasl_authenticated,reject 25 -o milter_macro_daemon_name=ORIGINATING 26 #628 inet n n qmqpd 27 pickup fifo n n 60 1 pickup 28 cleanup unix n n 0 cleanup 29 qmgr fifo n n 300 1 qmgr 30 #qmgr fifo n n 300 1 oqmgr 31 tlsmgr unix n 1000? 1 tlsmgr 32 rewrite unix n trivial-rewrite 33 bounce unix n 0 bounce 34 defer unix n 0 bounce 35 trace unix n 0 bounce 36 verify unix n 1 verify 37 flush unix n n 1000? 0 flush 38 proxymap unix n proxymap 39 proxywrite unix n 1 proxymap 40 smtp unix n smtp 41 # When relaying mail as backup MX, disable fallback_relay to avoid MX loops 42 relay unix n smtp 43 -o smtp_fallback_relay= 44 # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 45 showq unix n n showq 46 error unix n error 47 retry unix n error 48 discard unix n discard 49 local unix n n local 50 virtual unix n n virtual 51 lmtp unix n lmtp 52 anvil unix n 1 anvil 53 scache unix n 1 scache

mail-external y esperar a que el resto de los servidores SMTP cambien a Postscreen. Este cambio se completar de forma transparente a los usuarios; sus configuraciones seguirn funcionando, pero recibirn menos spam. El Listado 2 muestra la configuracin completa basada en los ejemplos del fichero main.cf; el Listado 3 muestra la seccin relevante de master.cf para este escenario.

Conclusiones
Aunque Postscreen no puede reemplazar completamente los filtros tradicionales, los complementa perfectamente quitndoles bastante trabajo. El software identifica eficientemente el spam gracias a las caractersticas tpicas de los spambots, en vez de tener que analizar el remitente o el contenido. Para ms informacin sobre este asunto, puede consultarse las pginas del manual [7] [8] o leer el HOW-TO de Postscreen [9]. En el pasado, la batalla contra el spam ha sido una escalada digital. Tan pronto como las nuevas protecciones se desarrollaban, los spammers cambiaban sus tcticas. Por ello, queda ver si Postscreeen, a largo plazo, continuar siendo efectivo de forma tan sorprendente a la hora de controlar el spam como lo es hoy en da. Aunque los administradores tienen la certeza de que los spammers cambiarn sus tcticas tan pronto como Postscreen se haga ms popular, el equipo de desarrolladores liderado por Wietse Venema ya est trabajando en un nuevo mecanismo de defensa.I

RECURSOS
[1] Estadsticas de spam de Symantec: http://www.symantec.com/about/ news/release/article. jsp?prid=20100824_01 [2] Wietse Venema, Zombies suck the life out of the mail server: http://www.postfix.org/postscreen2010.pdf [3] Postfix: http://www.postfix.org [4] RFC 5321 (SMTP): http://www.faqs. org/rfcs/rfc5321.html [5] Formato CIDR: http://www.postfix. org/cidr_table.5.html [6] DNSBL: http://en.wikipedia.org/wiki/DNSBL [7] Postscreen(8) manpage: http://www. postfix.org/postscreen.8.html [8] Postconf(5) manpage: http://www. postfix.org/postconf.5.html [9] How-to de Postfix Postscreen: http://www.postfix.org/ POSTSCREEN_README.html

54

Nmero 82

WWW.LINUX- MAGAZINE.ES

Tor LINUX USER

Para evitar que nuestra informacin deje rastro y pueda ser vendida o algo peor, es buena idea ocultar nuestros datos personales tanto como sea posible. La red Tor es una importante herramienta para esto mismo, y se compone de una red de ordenadores que se extiende a lo largo y ancho del mundo y que transporta el trfico de datos cifrados.

Cmo Funciona
Tor [1] son las siglas de The Onion Router un proyecto iniciado e implementado por la Armada americana [2] para proteger las comunicaciones dentro del gobierno. Bajo sus numerosas capas, Tor funciona bsicamente como sigue: Cuando se inicia, el cliente recupera una lista de nodos de Tor que registra desde el servidor de directorios. Cuando accede a una pgina, utiliza SOCKS para conectarse a Tor. Luego, SSL cifra la peticin antes de pasarla al guarda de entrada. ste pasa entonces la peticin a un nodo de transmisin, el cual lo adelanta a continuacin hasta un nodo de salida. Por razones de eficiencia, los desarrolladores de la herramienta decidieron usar solamente tres nodos para la conexin (Figura 1). Lo que hace que las comunicaciones va Tor sean tan seguras es que cada servidor slo posee parte de los datos de conexin. Por ejemplo, el servidor al que se conecta con el cliente el guarda de entrada no sabe qu host est intentando alcanzar el cliente. Esto slo lo sabe el nodo de salida, aunque no conoce la identidad del cliente. Para rastrear la conexin, el atacante necesita comprometer tanto el nodo de salida como el guarda de entrada. Pero, como la herramienta cambia automticamente y al azar las rutas despus de diez minutos, el atacante slo puede husmear parte de la comunicacin. Este mtodo es el que caracteriza a Tor y el que lo separa de otros proxies que prometen el anonimato. Otras herramientas normalmente no utilizan las cascadas de servidores, y a menudo pertenecen a una empresa que dependiendo de la localizacin del servidor est obligada a registrar las conexiones. Esta prctica hace que

Teora y prctica de la red Tor

Bajo el Rdar
Gracias a su elegante diseo, Tor ofrece mxima seguridad a los usuarios que quieren ocultar su identidad. POR THOMAS

LEICHTENSTERN

i navegamos la web sin proteccin alguna, dejaremos trazas de nuestra actividad, entre ellas nuestra direccin IP nica, la cual puede servir para identificarnos sin demasiada dificultad. Dichas trazas no solamente son usadas por los que hacen cumplir la ley para perseguir a los criminales, sino tambin por varios proyectos web y rastreadores que registran el comportamiento de los usuarios que navegan y venden los datos. Todas las ramas de la industria de hecho viven de esta prctica. Asimismo, el rastreo de las actividades de los ciudadanos en la web por gobiernos tirnicos constituye un verdadero peligro para los que buscan o pretenden difundir informacin libremente.

WWW.LINUX- MAGAZINE.ES

Nmero 82

55

LINUX USER Tor

Figura 1: Comunicaciones a travs de la red Tor.

lamos la herramienta en nuestro ordenador (lneas 3 y 4). Tras instalarla, el servicio se inicia automticamente, cargando sus directivas de un fichero llamado /etc/ tor/ torrc ; habitualmente no se necesita configuracin. Para usar la red Tor, primero necesitaremos configurar nuestro navegador web para ello. En Firefox, por ejemplo, introducimos la direccin 127.0.0.1 y el puerto 9050 para SOCKS Host en nuestra configuracin de red . Luego, marcamos la casilla al lado de SOCKS v5 . Como modificar manualmente la configuracin de nuestro navegador cada vez que queremos usar Tor es bastante complicado, el proyecto ofrece el add-on Torbutton [5], que podemos integrar en Firefox (vase el cuadro Torbutton). nica manera de garantizar que estaremos usando la ltima versin, lo cual es bastante importante, porque algunos nodos Tor bloquean intentos de contacto de versiones ms antiguas. Para incluir el repositorio Tor en nuestro sistema, seguimos los siguientes pasos en Ubuntu 11.04. Comenzamos abriendo el fichero /etc/ apt/ sources en un editor y aadimos la siguiente lnea:
deb http://deb.torproject.org/ U torproject.org natty main

sea sumamente fcil para las autoridades rastrear las comunicaciones de vuelta a sus orgenes. Un caso bastante destacado ocurri recientemente, cuando el servicio anonymazer HydeMyAss [3] revel los datos de conexin de un activista LulzSec a la polica britnica [4]. Las comunicaciones entre los nodos de Tor en el cliente estn completamente cifradas. Solamente la conexin desde el nodo de salida al objetivo se encuentra sin cifrar si el servidor contactado por el nodo de salida no cifra el contenido en s (por ejemplo, usando SSL). Adems de navegacin web, Tor tambin soporta servicios tales como IRC, Mensajera Instantnea, email y SSH. Para usar esto, el cliente debe soportar conexiones SOCKS.

Estrategia de Salida
A pesar de que las operaciones normales con Tor no requieren habitualmente cambios en la configuracin, no es el caso si deseamos explotar completamente las capacidades del proxy. Tor es un proyecto que prospera gracias a las contribuciones de la comunidad. De hecho, su vida depende del mayor nmero de usuarios como sea posible ofreciendo el servicio a otros usuarios Tor. Esto no es crtico para el operador del nodo Tor a menos que su operador acte como un nodo de salida. Como se ha mencionado previamente, este nodo es el ltimo enlace de la cadena que pasa peticiones al servidor destino, el cual tender a almacenar la direccin IP del ltimo nodo en sus registros. En otras palabras, si el servidor destina est siendo

Uso de Tor
Ubuntu incluye Tor en sus repositorios, sin embargo, el proyecto aconseja instalarlo desde los fuentes propios del proyecto. Hacindolo as es la

Los usuarios con otras versiones de Ubuntu o Debian necesitarn sustituir natty por el nombre de su distribucin. Luego, abrimos una ventana de terminal e importamos las claves GPG del proyecto (ver lneas 1 y 2 del Listado 1). Seguidamente, actualizaTorbutton mos nuestro La extensin para Firefox Torbutton se utiliza principalmente administrador de para cambiar de manera sencilla entre operaciones de red segupaquetes e insta-

Listado 1: Importando la Clave GPG


01 donumber 02 $ gpg --keyserver keys.gnupg.net --recv 886DDD89 03 $ gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add 04 $ sudo apt-get update 05 $ sudo apt-get install tor tor-geoipdb

ras y normales. Tambin ofrece funciones de seguridad adicionales. Podemos configurar la extensin pulsando con el botn derecho del ratn el icono de la cebolla situado junto a la barra de direcciones y seleccionando Settings en el men contextual que aparece.

En Security settings podemos deshabilitar los plugins y generar automticamente sugerencias de bsqueda durante Sesiones de Tor. Bajo la pestaa Cookies podemos configurar cmo manejar el navegador las cookies. En resumen, Torbutton mejora sustancialmente nuestra seguridad y evita muchas vulnerabilidades con respecto a otras extensiones, tales como NoScript, que simplemente las ignora.

56

Nmero 82

WWW.LINUX- MAGAZINE.ES

Tor LINUX USER

vigilado, la sospecha recaer en primer lugar sobre el operador del nodo de salida. Aunque no existan casos conocidos en los que los nodos de operacin y salida hayan llevado a sanciones legales, s que podran verse sometidos a algunas tensiones de consideracin. Sin embargo, este factor no debera evitar a los usuarios participar en el proyecto. Tor ofrece la opcin de configurar un servidor de manera que no slo acta como un nodo de salida. Algunas lneas en el fichero de configuracin de Tor, /etc/ tor/ torrc , hacen que nuestro demonio forme parte de una red Tor sin que asuma el rol de nodo de salida. Si usamos las configuraciones del Listado 2, el servicio escucha en el puerto 9001, ofrece un mximo y un ancho de banda medio de 100KBps y rechaza cualquier peticin que no se origine de otros servidores Tor. Si ejecutamos nuestro servidor tras un router, necesitaremos enlazar el puerto en el que escucha Tor para conexiones entrantes al host (9001 en este ejemplo). Ntese que la restriccin del nodo de salida mencionada aqu slo es aplicable a la Internet pblica. Los servidores de relevo normales soportan acceso a servicios ocultos.

proporcione los datos que deseamos publicar va HTTP. Si el contenido es esttico, un servidor ligero como Thttpd [6] ser suficiente. Podemos iniciarlo en la lnea de comandos con el siguiente comando:
# thttp -r /WWWDIRECTORIO/ U -p 4711 -h 127.0.0.1

ros en WWW-DIRECTORIO : uno de ellos es hostname , que contiene el nombre de servidor que pueden utilizar otros usuarios para acceder al servicio oculto. Este nombre se genera al azar y va seguido de TLD .onion , como en zejzzf7bnbf5h7zc.onion . El segundo fichero se llama private_key y contiene la clave que el servicio utiliza para autenticarse contra Tor.

La configuracin bsica de Tor slo ocupa un par de lneas en /etc/ tor/ torrc:
HiddenServiceDir WWW-DIRECTORIO HiddenServicePort 80 U 127.0.0.1:4711

Bien Informado
Si deseamos conocer ms acerca de lo que est haciendo el proxy Tor, podemos usar la herramienta Arm [7]. Entre otras cosas, nos dice el ancho de banda que proporciona en ese momento la red Tor. Como Arm es una herramienta basada en la lnea de comandos, tambin es til para utilizarla en servidores sin una GUI. Antes de usarla necesitamos modificar un par de parmetros en el /etc/ tor/ torrc de configuracin de Tor. Comenzamos eliminando la almohadilla ( # ) a la izquierda de la entrada ControlPort 9051 . Para evitar acceso no autorizado al puerto de control, es probable que deseemos protegerlo con contrasea. Tambin podemos crear el hash de la contrasea requerida con el siguiente comando:

La primera directiva contiene la ruta al directorio con el sitio web, mientras que la segunda describe la direccin de red. En este ejemplo, Tor escuchar en el puerto 80, y el servidor web aceptar peticiones entrantes del puerto 4711 en el servidor local. Tor controla el mapeado de puertos desde el 80 hasta el 4711. El envo de puertos en el router no es necesario, porque todas las peticiones pasan a travs del tnel de Tor. Despus de guardar la configuracin, reiniciando Tor se habilitarn los cambios. Tor crea dos fiche-

Servicios Ocultos
Debido a que la red Tor maneja resolucin de nombres, tambin puede resolver nombres de dominio que no existen en el Internet normal. Tor utiliza una TLD interna, *.onio , para acceder a los servicios ocultos, a los cuales slo podemos tener acceso mediante la red Tor. Habitualmente son sitios web normales, con la diferencia de que tanto el operador del sitio web como el servidor web permanecen tan annimos como si navegaran con Tor. Para ofrecer un servicio oculto, necesitaremos un servidor web que

Listado 2: Valores de Configuracin


01 ORPort 9001 02 Nickname <i>MiProxyTor<i> 03 RelayBandwidthRate 100 KB 04 RelayBandwidthBurst 200 KB 05 ExitPolicy reject *:* Figura 2: La herramienta de la lnea de comandos Arm proporciona detalles del rendimiento de la red y del uso de recursos de Tor.

WWW.LINUX- MAGAZINE.ES

Nmero 82

57

LINUX USER Tor

muestra el consumo de ciclos de la CPU as como de memoria que est haciendo el servicio. Debajo veremos el ndice de datos actual en un diagrama de barras. Pulsando S cambia a un grfico de las conexiones actuales. Aparecen aviFigura 3: La herramienta Vidalia facilita el sos y mensajes en que podamos configurar, habilitar y deshabiel tercio inferior litar Tor. del terminal. Podemos ampliar Figura 4: La vista de red de Vidalia muestra los servidores a los que # tor --hash-password U este rea de est conectado el cliente y las rutas que toman las conexiones de CONTRASEA salida pulsando datos. N , y reducirla A continuacin, copiamos la salida del saltos de Tor que utiliza la conexin pulsando M. Para obtener una lista de comando a la posicin a la derecha de actual. La columna de la parte atajos de teclado pulsamos H. HashedControl-Password en el fichero izquierda lista todos los servidores Vidalia de configuracin. Podremos reiniciar conocidos; la tabla Connections lista Tor escribiendo como root Vidalia es un frontend grfico para los nodos a los que est conectado el /etc/init.de/tor restart , despus de lo configurar Tor (Figura 3). Para instacliente Tor. Pulsando una de las entracual el servicio nos preguntar por la larlo podemos utilizar el administradas se muestran los detalles del host. contrasea para acceder al puerto de dor de paquetes de Ubuntu. Durante la Pulsando con el botn derecho del control. instalacin, el software pregunta si ratn una entrada abre el dilogo Close Para iniciar la consola de control deseamos dar control temporal o perchannel, desde el cual podemos cortar (Figura 2) introducimos arm seguido manente sobre el estado de Tor. Ntese la conexin. de la contrasea definida anteriorque Vidalia [8] tiene su propio fichero La configuracin podemos enconmente. La parte superior de la salida de configuracin de Tor, ~/ .vidalia/ trarla en Settings , mientras que en torrc . Cualquier Help existe una extensa descripcin de modificacin al la mayora de las configuraciones. Tor Tor Browser Bundle fichero de conBrowser Bundle es otra solucin inteEl proyecto Tor ofrece el Tor Browser Bundle [10] como descarga trol original, gral para uso ocasional (vase el cuaadems de los otros componentes del sistema. El paquete inte/etc/ tor/ torrc , es dro Tor Browser Bundle). gra la versin actual de Firefox, la cual incluye extensiones tales completamente como HTTPS Everywhere, NoScript y Torbutton, junto con VidaFiesta Privada ignorado. lia, el frontend grfico de Tor. Como el paquete se encuentra comPara iniciar Tor es slo responsable de la transfepilado estticamente, no necesita libreras del sistema, y se ejeTor, necesitamos rencia de datos, no de la seguridad del cuta igual de bien en cualquier distribucin. El paquete tambin es apropiado como versin porttil de Tor para cuando nos despulsar el botn contenido. As, an es posible revelar plazamos, ya que puede instalarse en un pendrive USB. Start Tor en el la identidad verdadera del cliente a panel de control travs de Flash, cookies o JavaScript. Para usar TBB, desempaquetamos el archivo y arrancamos el script start-tor-browser. Este paso inicia Tor, Vidalia y el navegadel programa. Aunque usar el botn Tor puede mitidor al mismo tiempo y abre inmediatamente una conexin de Bandwidth gar algunas de estas amenazas, no se seguridad a la red Tor. Tras cerrar el navegador, el programa Graph abre una pueden descartar del todo. En otras borra automticamente los datos creados durante la sesin, tales pequea venpalabras, necesitamos tomar ciertas como el historial y las cookies. tana que nos precauciones ms all de Tor. Esta combinacin es til no solamente debido a su fcil uso, sino muestra los Si vamos a usar Tor con ms de un tambin porque ofrece seguridad adicional comparado con un datos actuales. navegador, o si queremos usarlo como navegador normal. Muchos sitios web preguntan el ID del naveEl dilogo Tor una entidad centralizada en nuestra gador y el sistema de configuracin cuando los visitamos. Sitios Network Map red, deberemos considerar configurar como Facebook tambin registran visitas a sitios web que usan (Figura 4) nos un filtro proxy que desinfecte el contesus plugins si estamos registrados en Facebook [11]. Podemos da ms datos: nido antes de servirlo. evitar esos riesgos usando este paquete en lugar de nuestro Muestra una Un candidato fcil de usar y rico en navegador habitual. grfica con los funcionalidades aqu es BFilter [9],

58

Nmero 82

WWW.LINUX- MAGAZINE.ES

Tor LINUX USER

que podemos descargar como un paquete automtico de distribucin independiente. Tras descargarlo, podemos arrancar la instalacin introduciendo en el terminal bash bfilter-gui.package. El instalador carga todos los paquetes requeridos de la web y configura el proxy, que podemos iniciar entonces a travs de la entrada del men Gnome Internet | BFilter Web Proxy, apareciendo entonces el icono del programa en la bandeja del sistema. Para configurar el proxy, pulsamos con el botn derecho del ratn en el icono, y en el men contextual seleccionamos Configuration . Para aadir Tor a la cadena del proceso, seleccionamos Forwarding , el cual nos abrir una nueva ventana. Pulsamos con el botn derecho del ratn la tabla situada a la izquierda para crear una nueva entrada y le asignamos un nombre intuitivo que usaremos para identificar la configuracin posterior en el men BFilter. Tambin podemos cambiar entre varias configuraciones. A continuacin, pulsamos el icono de conexin (una flecha verde). Esto abre un prompt, pudiendo seleccionar SOCKS Proxy en el men desplegable. En los campos por debajo de esto, introducimos los datos de conexin para Tor 127.0.0.1:9050 por defecto. Tras pulsar OK para confirmar los cambios, el grfico debera contener

un ordenador adicional con los datos del proxy de Tor (Figura 5). Seleccionando la entrada Filters (Figura 6) en el men desplegable de BFilter, se abre una ventana con las reglas de filtrado. Podemos habilitar aqu JavaScript cifrado o generado dinmicamente y eliminar contenido HTML peligroso de los paquetes. Como efecto secundario, el proxy tambin acta como un bloqueador de anuncios efectivo, y podemos configurar esta funcionalidad en Configuration | Advanced . Esta vista tambin nos muestra las configuraciones bsicas del proxy por ejemplo, el puerto y la direccin en los que escucha. El puerto predeterminado es 127.0.0.1:8080 . Para usar el filtro necesitamos introducirlo en nuestro navegador. Comprobamos el icono en la bandeja del sistema para ver si est funcionando el proxy del filtro. Cuando est procesando datos, los unos y ceros bajo la lupa comienzan a moverse.

Figura 5: El proxy de filtros BFilter permite a los usuarios definir configuraciones arbitrarias que pueden cambiarse convenientemente en la bandeja del sistema.

Conclusiones
Tor no puede asegurar completamente una navegacin segura, pero levanta una barrera contra husmeadores y atacantes. Como el sistema es distribuido, es bastante ms resistente frente a ataques que otros servicios annimos. El diseo del enrutamiento por capas de cebolla es en la actualidad el mtodo ms seguro para mantener el anonimato en la red. Intentar

penetrar este tipo de proteccin conlleva un esfuerzo enorme, sin ninguna garanta de xito. A pesar de que Tor se consideraba inutilizable debido a su baja tasa de transferencia hace slo un par de aos, hoy en da las cosas han cambiado mucho. Durante las pruebas, la tasa de transferencia de datos medio fue de unos 60Kbps, que est bien para navegar aunque descargas ms grandes pondran poner a prueba nuestra paciencia. Pero, evidentemente, la red Tor no est diseada para este tipo de usos. I

RECURSOS
[1] Proyecto Tor: https://www.torproject.org [2] Laboratorios de Investigacin de la Armada US: http://www.nrl.navy.mil [3] HideMyAss: http://hidemyass.com [4] HMA ayuda a las autoridades: http:// technology.gather.com/viewArticle. action?articleId=281474980385037 [5] Torbutton: https://www.torproject.org/torbutton/ [6] Thttpd: http://acme.com/software/thttpd/ [7] Arm: https://www.torproject.org/ projects/arm.html.en [8] Vidalia: https://www.torproject.org/ projects/vidalia.html.en [9] BFilter: http://bfilter.sourceforge.net [10] Tor Browser Bundle: https://www.torproject.org/projects/ torbrowser.html.en [11] Problemas con Facebook: http://nikcub.appspot.com/ logging-out-of-facebook-is-not-enou gh

Figura 6: Las reglas de filtro claramente estructuradas de BFilter permiten a los usuarios filtrar potencialmente elementos peligrosos que antes llegaban al navegador.

WWW.LINUX- MAGAZINE.ES

Nmero 82

59

LINUX USER Workspace: Arduino

Introduccin a Arduino

Contacto Fsico
La tarjeta Arduino es ideal para experimentar con ordenadores fsicos. Mostramos como ejemplo cmo crear un simple temporizador. POR DMITRI POPOV
l sitio web del proyecto describe a Arduino como una plataforma electrnica abierta para la creacin de prototipos basada en software y hardware flexibles y fciles de usar, lo cual no suena muy excitante. A pesar de ello, esta diminuta y barata plataforma nos permite construir todo tipo de proyectos increbles y sin la necesidad de saber soldar. Arduino [1] es bsicamente una tarjeta que puede ser programada para controlar diferentes actuadores (motores, luces, etc.) segn la entrada que recibe de sensores conectados a ella. Prcticamente cualquier sensor puede conectarse a la tarjeta/placa Arduino una fotoresistencia, un sensor de movimiento, un sensor de temperatura o un sensor de presin y se puede programar el microcontrolar de a bordo para llevar a cabo distintas acciones con los actuadores conectados a los pines digitales de salida de la tarjeta.

La parte de programacin se lleva a cabo en el entorno de desarrollo integrado (IDE) de Arduino, el cual usa un lenguaje de programacin basado en Processing [2] relativamente fcil de aprender. De modo que, an sin tener ninguna experiencia en programacin, podemos aprender rpidamente lo bsico. La seccin Referencia del sitio web de Arduino contiene una detallada referencia del lenguaje para poder comenzar, pudindose usar la versin PDF libre del Arduino Programming Notebook [3] como otra referencia rpida y prctica. Los programas de Arduino reciben el nombre de bocetos, y podemos escribir, depurar y cargarlos a la tarjeta usando el entorno de desarrollo grfico. Arduino se desarroll como una solucin para introducir a la gente en el mundo de la computacin fsica (creacin de sistemas fsicos interactivos que pueden detectar y responder al mundo analgico), pero es ms que simplemente una herramienta educativa. Podemos usar la tarjeta para crear todo tipo de soluciones inteligentes, desde una alarma activada por movimiento, hasta un disparador de fotos activado por rayos (de los de rayos y truenos) para nuestra cmara DSLR. Existe la posibilidad de comprar diferentes modelos de Arduino, siendo el ms pequeo tambin el ms barato, y con un coste de unos 30 dlares, de modo que no nos va a costar un ojo de la cara iniciarnos en el excitante mundo de la computacin fsica. Es probable que tambin deseemos aadir a nuestra lista de la compra una placa protoboard, un conjunto de cables puente, un par de LEDs y resistencias. Usando una protoboard, podemos crear proyectos basados en Arduino sin la soldadura de componentes una solucin perfecta para experimentar.

Preparativos
Lo primero es instalar el entorno de desarrollo en nuestro sistema para escribir bocetos y subirlos a Arduino. Si estamos ejecutando Ubuntu o alguna de sus derivadas, instalar el software requerido es tan fcil como ejecutar:
sudo apt-get install arduino

Dmitri Popov es licenciado en Lengua Rusa y en lenguajes de computacin. Ha estado escribiendo sobre Linux y software de cdigo abierto durante aos, y sus artculos han aparecido en revistas y sitios web daneses, britnicos, norteamericanos, alemanes y rusos.

EL AUTOR

Este comando instala el IDE estndar de Arduino escrito en Java (Figura 1). Este

60

Nmero 82

WWW.LINUX- MAGAZINE.ES

Workspace: Arduino LINUX USER

Figura 1: El IDE de Arduino no es una maravilla, pero es utilizable.

IDE sirve, pero no se integra muy bien con el escritorio Linux. Afortunadamente, el proyecto Gnoduino [4] proporciona una alternativa muy eficiente y de peso ligero diseada especficamente para el entorno de escritorio Gnome (Figura 2). Gnoduino ofrece soporte para dilogos nativos y una renderizacin de fuente mejorada, junto con una prctica funcionalidad de numeracin de lneas. Gnoduino est escrito en Python, y los usuarios de Ubuntu pueden instalarlo mediante su PPA dedicada [5] usando los siguientes comandos:
sudo add-apt-repository U ppa:pmjdebruijn/gnoduino-release sudo apt-get update sudo apt-get install goduino

dibujar un esquema Figura 2: Gnoduino proporciona una alternativa muy lograda al IDE para usarlo como estndar de Arduino. referencia. Aunque podemos usar papel y lpiz, existe una no requiere instalacin. Para hacernos herramienta mejor llamada Fritzing [7]. con la ltima versin, vamos al sitio web Este software ofrece un entorno grfico del proyecto, desempaquetamos el completo para proyectos Arduino, y archivo descargado, y ejecutamos el podemos usarlo para disear trazados de script Bash Fritzing.sh en el directorio placa, esquemas y tarjetas de circuito resultante para iniciar la aplicacin. impresas (PCBs). La vista placa en Fritzing nos permite Usar Fritzing para este simple proyecto crear diseos de placa situando compopuede parecer exagerado, pero cuando nentes en ella y cablendolos (Figura 3). nuestros diseos Arduino sean ms La coleccin central de componentes en avanzados, apreciaremos las capacidala paleta Parts incluye los numerosos des y herramientas de Fritzing. Fritzing componentes esenciales: desde resisten-

A continuacin conectamos la tarjeta Arduino a nuestra mquina, y ya estamos listos para comenzar a trabajar en nuestro primer proyecto. Podemos crear todo tipo de artilugios con Arduino, pero para entender cmo funciona todo, lo ms sensato es empezar por algo simple. De modo que describir cmo crear un temporizador sin lujos para practicar la tcnica Pomodoro [6] de gestin del tiempo. Para este proyecto necesitaremos tres componentes: un LED, una resistencia (cualquiera entre los 200 y 680 ohms) y dos cables conectores. La resistencia es opcional y se utiliza para limitar y prevenir daos al LED.

Esquemas con Fritzing


Antes de colocar los componentes en el protoboard y conectarlos, es buena idea
Figura 3: Fritzing ofrece un entorno grfico para la creacin de diseos para Arduino.

WWW.LINUX- MAGAZINE.ES

Nmero 82

61

LINUX USER Workspace: Arduino

cias e interruptores, hasta LEDs y varios sensores. Fritzing tambin nos permite importar colecciones de componentes de terceros al cubo de componentes. Para hacerlo, elegimos File | Parts Bin | Open y seleccionamos la coleccin que deseemos. Incluso podemos disear nuestros

propios componentes en Fritzing la pgina Creating Custom Parts [8] del sitio web ofrece varios recursos para ayudarnos con esto. Una vez que hayamos situado un componente en la placa, podemos modificar sus propiedades en la paleta Inspector.

Figura 4: Fritzing tambin genera un esquema de cableado basado en el diseo de la placa.

Figura 5: Usando Fritzing podemos disear trazados para PCB.

Por ejemplo, podemos especificar la tolerancia, resistencia y espaciado de pines para resistencias, y color y tamao para LEDs. Para conectar los componentes usando cables conectores, pulsamos con el botn derecho del ratn sobre el socket de la placa deseada, luego arrastramos el ratn al socket de destino mientras mantenemos pulsado el botn derecho del ratn. Despus, podemos cambiar el color del cable aadido en la paleta Inspector para hacer que el diseo de la placa sea ms claro. Por defecto, Fritzing aade cables rectos, lo cual puede ser bastante frustrante cuando se trabaja con diseos complejos. Podemos doblar los cables pulsando la tecla [Ctrl] y cogiendo y arrastrando con el ratn hasta conseguirlo. Mientras trabajamos en el diseo de la placa, Fritzing genera en el fondo un esquema de cableado de nuestro proyecto, que podemos ver cambiando a la vista Schematic (Figura 4). Todas las conexiones entre componentes se consideran provisionales y se muestran como finas lneas, siendo necesario usar el ratn para cablear los componentes. Hacer esto manualmente puede ser un poco (o muy) arduo, especialmente cuando trabajamos en un diseo complejo. Afortunadamente, Fritzing proporciona una buena solucin: La funcionalidad Autoroute puede cablear componentes automticamente para nosotros. Los resultados pueden no ser correctos a veces, pero en la mayora de las ocasiones, la funcionalidad lo hace bien. Adems, podemos ajustar y optimizar el cableado generado automticamente de forma manual si fuera necesario. Fritzing tambin nos permite exportar el esquema de cableado a distintos formatos. Podemos guardarlo como un fichero de imagen con File | Export | As image, que soporta PNG, SVG, PDF y otros formatos. Tambin podemos usar File | Export | List of parts (Bill of Materials) para generar una lista de la compra bien formateada de todos los componentes usados en el proyecto. Por si esto no fuera suficiente, podemos usar Fritzing para disear un PCB para nuestro proyecto. De esta manera, podemos convertir nuestro prototipo en un producto de verdad o en una placa Arduino (Figura 5). Mejor an: el servicio Fritzing Fab [9] puede fabricar PCBs

62

Nmero 82

WWW.LINUX- MAGAZINE.ES

Workspace: Arduino LINUX USER

listos para usar basados en nuestro diseo. Por ahora, sin embargo, nos limitaremos a usar Fritzing para crear un diseo de placa para el temporizador similar al que aparece en la Figura 3. Luego, podemos usarlo como una gua para cablear los componentes en un placa real y conectarlos a Arduino para completar el proyecto de hardware.

Escribir un Boceto
El paso siguiente es escribir un esquema para el temporizador. Necesitamos programar Arduino para poner en marcha un LED cada 25 minutos para que nos indique que es hora de descansar. Para hacer que las cosas sean un poco ms interesantes, podemos hacer que el LED parpadee cinco veces antes de que se ponga en marcha para atraer nuestra atencin. Para comenzar, ponemos en marcha el IDE Arduino o Gnoduino e introducimos el boceto del Listado 1. Cmo funciona este esquema? Como cualquier programa o script, el primer asunto es definir variables para usarlas en el programa. En este caso, la declaracin int var = 0 define la variable var (la cual actuar como un contador) y pone su valor a cero. Adicionalmente, cualquier boceto Arduino ha de contener dos bloques. La funcin setup() contiene el cdigo que se ha de ejecutar una vez al principio del programa, mientras que la funcin loop() contiene el programa en s, el cual se ejecuta una y otra vez. A diferencia de un ordenador regular, Arduino no puede ejecutar mltiples programas, y los programas no pueden cerrarse. Cuando encendemos Arduino, ste ejecuta el cdigo, detenindose solamente cuando desenchufamos la tarjeta. En este caso, la funcin setup() inicializa

el pin digital nmero 13 como salida usando la declaracin pinMode(13, OUTPUT). Esto permite al boceto controlar el LED conectado al pin 13. La funcin loop() contiene el programa en s, el cual se puede dividir en ms o menos dos partes. La primera parte es el bucle while, que enciende el LED (la instruccin digitalWrite(13, HIGH), espera un segundo (instruccin delay (1000)), apaga el LED (instruccin digitalWrite(13, LOW)), espera otro segundo y luego incrementa el contador en 1 (instruccin var++). El bucle se ejecuta hasta que el valor de var es 5 (lo que significa que el LED parpadea cinco veces). Una vez que el valor de var alcanza 5, entra en accin la segunda parte del programa, enciende el LED, espera 15 segundos, apaga el LED y espera durante 25 minutos. Para comprobar si el boceto contiene errores, pulsamos el botn Verify en el IDE de Arduino. Si todo ha ido sin problemas, deberemos ver Binary scheme size: 1086 bytes (of a 32256 mazimum) (el tamao del boceto puede variar) en el panel de la consola. En caso contrario, veremos un mensaje de aviso indicando los errores en el boceto. Finalmente, podemos pulsar Upload para cargar el boceto en Arduino. La tarjeta comenzar a ejecutar el cdigo inmediatamente. Felicidades, nuestro primer proyecto Arduino est funcionando.

Listado 1: Boceto de Temporizador


01 int var = 0; 02 03 void setup() { 04 pinMode(13, OUTPUT); 05 } 06 07 void loop() { 08 while(var < 5){ 09 digitalWrite(13, HIGH); 10 delay(1000); 11 digitalWrite(13, LOW); 12 delay(1000); 13 var++; 14 } 15 digitalWrite(13, HIGH); 16 delay(15000); 17 var = 0; 18 digitalWrite(13, LOW); 19 delay(1500000); 20 }

segundo LED, podemos conectar un altavoz y programar Arduino para que reproduzca un tono o una simple meloda. En resumen, tenemos muchas opciones para ajustar y mejorar este simple temporizador. Y, una vez que hayamos dominado lo bsico, podemos trabajar en proyectos basados en Arduino ms complejos y excitantes. I

Ms All
Aunque el temporizador basado en Arduino mostrado aqu es bastante simple, podemos mejorarlo. Por ejemplo, aadiendo un segundo LED al pin digital 9 y volviendo a escribir el esquema de modo que haga que el primer LED parpadee antes de encender el segundo LED (vase el Listado 2). En vez de usar un

RECURSOS
[1] Sitio web oficial de Arduino en espaol: http://www.arduino.cc/es/ [2] Lenguaje de programacin de proceso: http://processing.org [3] Notebook de programacin de Arduino: http://www.lulu.com/ product/file-download/ arduino-programming-notebook/ 3524028 [4] Gnoduino: http://gnome.eu.org/evo/ index.php/Gnoduino [5] PPA Gnoduino: http://launchpad.net/ ~pmjdebruijn/+archive/ gnoduino-release [6] Tcnica Pomodoro: http://www. pomodorotechnique.com [7] Fritzing: http://fritzing.org [8] Partes a medida de Fritzing: http://fritzing.org/learning/tutorials/ creating-custom-parts [9] Fritzing Fab: http://fab.fritzing.org/fritzing-fab

Listado 2 :Boceto de Temporizador Mejorado


01 int var = 0; 02 03 void setup() { 04 pinMode(9, OUTPUT); 05 pinMode(13, OUTPUT); 06 } 07 08 void loop() { 09 while(var < 5){ 10 digitalWrite(13, HIGH); 11 delay(1000); 12 digitalWrite(13, LOW); 13 delay(1000); 14 var++; 15 } 16 digitalWrite(9, HIGH); 17 delay(15000); 18 var = 0; 19 digitalWrite(9, LOW); 20 delay(1500000); 21 }

WWW.LINUX- MAGAZINE.ES

Nmero 82

63

LINUX USER Administrador de Energa

TLP se encuentra actualmente disponible en forma de paquetes precompilados para Ubuntu y Debian [2] y OpenSUSE [3]. El PPA de Debian y de Ubuntu tambin contiene un archivo con el cdigo fuente, el cual necesitaremos si usamos una distribucin sin soporte para paquetes binarios. Tras desempaquetar el archivo, podemos compilar el software en la lnea de comandos con make install. Gracias a la dedicacin de los miembros del ThinkPad Forum, es muy probable que aparezcan paquetes para la mayora de las otras distribuciones en el futuro prximo. Podemos encontrar una gua para instalar los binarios en la web [4] y un FAQ [5] que responde a muchas preguntas relacionadas con el programa.

Ahorros Potenciales
TLP adopta un mtodo holstico, en vez de utilizar opciones de ahorro de energa tradicionales que ya incluan la mayora de las distribuciones. Por ejemplo, el software nos permite administrar el consumo de energa del hardware WLAN de Intel, del almacenamiento y del sistema de almacenamiento reemplazable Ultrabay que utilizan muchos notebooks Lenovo. TLP ofrece modos de ahorro de energa para todos los notebooks IBM y Lenovo, adems de opciones de ahorro de energa para tarjetas de sonido. Dependiendo del hardware que tengamos, podemos adems usar TLP para gestionar Bluetooth, PCI Express y dispositivos SATA. El poder bajar el voltaje al sistema es otro mtodo: Algunas CPUs pueden funcionar a un voltaje inferior al normal sin ningn impacto apreciable en el rendimiento, suponiendo que tengamos un kernel que soporta esta funcionalidad. TLP se aprovecha de esta opcin y alcanza un notable efecto combinando los distintos mtodos de ahorro.

Porttiles eficientes

Trabajo frugal
En lugar de consumir energa, TLP nos permite desconectar los componentes del porttil que no necesitamos, ampliando la duracin de la carga y la vida de la batera. POR ERIK BRWALDT
medida que los componentes de un porttil incrementan su potencia, el consumo de energa de la mquina sube en la misma medida. Los ciclos de carga frecuentes pueden estresar a la batera, pero gracias a la herramienta TLP, los usuarios de Linux ms viajeros pueden acabar con tantas pausas involuntarias cuando se conectan. El punto ms dbil de cualquier ordenador mvil es su suministro de energa cuando nos trasladamos de un sitio a otro. Cuanto ms potente, ms energa acaparan pantallas, CPUs y chips y ms pronto tenemos que reconectar el porttil a un enchufe elctrico. Los discos duros tradicionales tambin afectan a la autonoma de la batera. El proyecto TLP, que tuvo su origen en el foro alemn del ThinkPad [1], ha declarado la guerra a los malgastadores de energa.

Requerimientos
Para aprovechar todas las funcionalidades de TLP, necesitamos cumplir con unas cuantas condiciones. Por ejemplo, independientemente de la versin de Debian o Ubuntu que usemos, necesitamos en el sistema los paquetes smartmontools, tp-smapi-dkms y eth-tool para recuperar datos del disco duro y de los estados operativos de la batera.

64

Nmero 82

WWW.LINUX- MAGAZINE.ES

Administrador de Energa LINUX USER

Estos paquetes tienen nombres diferentes dependiendo de nuestra distribucin. Por ejemplo, lo que Debian y Ubuntu llaman tp-smapi-dkms, es conocido como tp_smapi-kmp-default en OpenSUSE. Sin embargo, smartmontools utiliza el mismo nombre de archivo en los tres sistemas, al igual que el paquete ethtool, que se necesita para deshabilitar el servicio Wake-on-LAN. Independientemente de TLP, es buena idea instalar el paquete powertop. Esta es otra aplicacin de la lnea de comandos que lista informacin crtica del consumo de energa actual y nos da una visin del ahorro de energa que obtiene TLP. PowerTOP est disponible en los repositorios de todas las distribuciones ms importantes, y podemos instalarlo cmodamente pulsando un botn. PowerTOP, que fue desarrollado por Intel, soporta algunas modificaciones a sus componentes suponiendo que nuestro hardware sea de ese fabricante. Sin embargo, encontraremos algunas opciones que entran en conflicto con TLP. En ese caso, debemos ignorar las sugerencias hechas por PowerTOP y modificar TLP en su lugar.

de ahorro de energa configuradas para el disco duro. Otro aspecto importante es el estado operativo de los componentes de comunicaciones construidos en el porttil: Si no usamos WWAN (GSM/UMTS) o WLAN, el hardware no necesita estar en modo de espera. La entrada /sys/ module/pcie_aspm/parameters/policy nos permite explorar si dichos componentes se encuentran disponibles en nuestro sistema y si, por tanto, estn consumiendo energa. Al final de la lista veremos detalles para las bateras en el ordenador, el estado del puerto USB y componentes especiales tales como webcams o sensores biomtricos. Muy a menudo, los datos de la batera nos dan algunas pistas iniciales de los problemas de suministro de energa. Como la salida se da en miliwatios-hora (mWh), podemos ver de un vistazo si merece la pena calibrar la batera o incluso sustituirla.

Mquina de Pruebas
Para probar las opciones de TLP, utilizamos un tablet PC Lenovo ThinkPad X200t con OpenSUSE 11.3 como sistema operativo. Gracias a la arquitectura de hardware vanguardista (Intel Core 2 Duo Penryn a 1.4GHz, chipset Intel GM45), el dispositivo soporta ms o menos todas las tecnologas de gestin de energa estndar.

Configuracin
TLP almacena sus parmetros de configuracin en el fichero /etc/default/ tlp que el programa crea cuando se instala. Las configuraciones por defecto son tiles como punto de partida bsico para la mayora de los sistemas ThinkPad. Sin embargo, el software con esta configuracin no aprovecha todos su potencial para el ahorro energtico.

Primer Contacto
Habitualmente, TLP comienza automticamente con las configuraciones por defecto en el momento del arranque. Como es independiente del entorno de escritorio y no dispone de una interfaz grfica, necesitaremos gestionar TLP desde una ventana de terminal. Para una vista inicial de las funciones del programa, deberemos hacernos root e iniciar tlp-stat. Obtendremos una larga lista de componentes hardware en nuestro sistema y sus detalles (Figura 1). TLP no nos proporciona una lista del hardware existente y de su estado, sino que ahonda ms profundamente en el sistema. Por ejemplo, si miramos la seccin /proc/acpi/ibm/thermal = temperatures:, veremos una larga lnea de detalles de temperatura que se relacionan con los sensores de temperatura integrados en cualquier porttil reciente. El valor -128, que se da con bastante frecuencia, nos dice que el sensor no existe. En la seccin de almacenamiento que sigue encontraremos detalles del disco duro instalado en el ordenador y los valores SMART esenciales, los cuales relacionan las opciones

Por tanto, es buena idea estudiar este fichero y modificarlo para adaptarlo a nuestro hardware. Para encontrar los grupos de opciones individuales, abrimos el fichero de configuracin como root con nuestro editor favorito. Si deseamos habilitar algunas opciones comentadas, eliminamos la almohadilla (#) que las precede. TLP separa las configuraciones para operaciones que afectan a la batera y las que afectan el consumo cuando se est enchufado a la corriente. Los parmetros relacionados con la batera son identificables mediante el sufijo _ON_BAT, mientras que las opciones de la conexin a la red elctrica utilizan _ON_AC (Figura 2). Muchas de las opciones usan valores predeterminados significativos, tales como los intervalos de escritura al bfer del sistema de ficheros del kernel u opciones para deshabilitar ncleos individuales en CPUs multincleo. Sin

Figura 1: Accedemos a toneladas de informacin del estado del sistema desde tlp-stat.

WWW.LINUX- MAGAZINE.ES

Nmero 82

65

LINUX USER Administrador de Energa

que siempre est operativo. Un valor de 254 probablemente ser la mejor eleccin en este caso.

Relojes Grficos
Los chips grficos necesitan una cantidad importante de energa y generan una cantidad importante de calor. Para reducir tanto el consumo de energa como la temperatura, muchos procesadores grficos modernos soportan velocidades de reloj ms bajas. TLP utiliza las opciones de los populares procesadores grficos Radeon ATI para proporcionar cinco perfiles entre los que elegir. Ntese que esto slo funciona con el driver Radeon libre y un kernel de la versin 2.6.35 o superior. Buscamos la seccin RADEON_ POWER-PROFILE en el fichero de configuracin y seleccionamos una de las opciones low, mid, high, auto o default para la batera y la conexin a la red elctrica. La opcin default utiliza los valores especificados por el hardware, mientras que la configuracin auto ajusta la velocidad del reloj a la mitad cuando estamos trabajando con energa suministrada por la batera. En modo conexin a la red, vuelve el procesador grfico a su velocidad del reloj normal. Como algunos parmetros pueden ser menos tiles para algunas aplicaciones, merece la pena experimentar con ellas.

Figura 2: Podemos modificar los parmetros para TLP editando el fichero de configuracin.

embargo, conviene mirar en las secciones para operaciones de disco duro, componentes de comunicaciones y el Ultrabay, ya que normalmente se pueden mejorar en la mayora de los casos. Si ejecutamos un segundo disco duro o un disco ptico en el Ultrabay, TLP nos permite desconectar dichos dispositivos independientemente del almacenamiento primario, si no los estamos utilizando durante largos periodos de tiempo. Las configuraciones WLAN, Bluetooth y USB tambin pueden editarse aqu.

Problemas con el Disco Duro


Aparte de pantallas, CPUs y procesadores grficos, los discos duros tradicionales son los ms importantes consumidores de energa, por eso los fabricantes intentan balancear su actividad. Para que esto ocurra, los discos aparcan sus cabezales y apagan el motor del disco si la lectura/escritura est inactiva. Sin embargo, necesitamos encontrar un justo trmino medio entre el ahorro de energa y el rendimiento: Los cabezales que se aparcan despus de un par de segundos de inactividad necesitan mucha energa para recuperar la velocidad, algo que puede causar un rendimiento lento, un desgaste de los compo-

nentes, e incluso la prdida de datos en el peor de los casos. TLP nos permite modificar su estado cambiando el nivel APM del disco. Para hacerlo, miramos en primer lugar la seccin DISK_DEVICES en el fichero de configuracin y luego comprobamos si el software identifica los discos duros correctamente. En caso afirmativo, cambiamos a la seccin DISK_APM_LEVEL. Para cada disco veremos un entero de tres dgitos entre comillas. El valor normalmente es 245 durante operaciones mientras lo conectamos, en cambio, el valor de las operaciones de la batera en la lnea de abajo es de 128. Es probable que deseemos modificar dicho valor. El rango vlido es cualquier entero comprendido entre 1 y 254. Mientras que valores por debajo de 128 suelen causar habitualmente aparcamientos frecuentes de las cabezas del disco y desconexiones del motor, los valores por encima de 128 tienden a reducir el nmero de ciclos de parada. Dependiendo del modelo de nuestro ordenador, un valor de 254 deshabilita habitualmente el mecanismo de aparcamiento completamente, de modo que las cabezales no se aparcan. Si tenemos un disco que necesita una cantidad sustancial de energa para coger velocidad, los ahorros son mnimos si se compara con

WLAN El Glotn
Si no necesitamos acceso de red basado en WLAN, debemos deshabilitar completamente este componente. TLP slo soporta un nmero limitado de chipsets WLAN y funciona con muchos chips Intel, aunque no con Chipsets Atheros. Si nuestro ordenador tiene una tarjeta WLAN Intel, podemos modificar el estado de operacin en la seccin WIFI_PWR del fichero de configuracin. Un valor de 1 habilita la gestin de energa de la tarjeta, mientras que 5 lo deshabilita. Esta funcin requiere una versin del kernel de Linux 2.6.32 o superior. Si notamos que la conexin WLAN llega a hacerse inestable en modo ahorro de energa, necesitaremos deshabilitar la gestin de energa. El bajo consumo de energa reduce la transmisin del adaptador y el rendimiento de la recepcin, y la conexin al router podra interrumpirse en condiciones desfavorables.

66

Nmero 82

WWW.LINUX- MAGAZINE.ES

Administrador de Energa LINUX USER

Deshabilitando Ultrabay
El sistema de bahas para ThinkPads, conocido como Ultrabay, soporta cambios de componentes de una manera cmoda sin la necesidad de herramientas. Gracias a TLP, podemos enviar a dormir el disco duro instalado en nuestro Ultrabay de manera sencilla, si no lo estamos usando durante un periodo de tiempo largo, con las configuraciones en la seccin DISK_APM_LEVEL. Si tenemos un disco ptico enganchado en nuestro Ultrabay, podemos hacer que se deshabilite completamente cuando estemos en modo batera. Para hacerlo, buscamos la seccin BAY_ POWEROFF en el fichero de configuracin, cambiamos el valor de 0 a 1, y luego aadimos el nombre del dispositivo para el disco (el valor por defecto, sr0, normalmente es correcto). Si usamos un modelo de ThinkPad con dos bahas, podemos gestionarlos independientemente a travs del nombre del dispositivo.

Figura 3: Lista de IDs de dispositivo USB por cortesa de lsusb.

El Silencio es Oro
Al igual que todos los porttiles actuales, los dispositivos IBM/Lenovo poseen un determinado nmero de dispositivos para comunicarse con otros componentes. Como no necesitaremos muchos de ellos cuando estemos de viaje, podemos tambin ahorrar en esa rea. Para deshabilitar los dispositivos que usan USB, buscamos la entrada USB_AUTOSUSPEND en el fichero /etc/default/tlp. Debe contener el valor 1. Como la funcin autosuspend causa interrupciones indeseadas en dispositivos USB, tales como modems USB HSPA, podemos definir excepciones para dichos dispositivos dado su nmero ID. Para hacerlo, aadimos el ID nico del dispositivo a USB_BLACKLIST. Podemos descubrir el ID como root escribiendo lsusb en una ventana terminal (Figura 3). En la seccin que sigue, DEVICES_TO_ DISABLE, podemos definir qu otras interfaces del sistema deshabilita el sistema en el momento del arranque y durante el apagado. El ltimo est diseado para mandar a dormir interfaces que podran evitar un apagado. Los valores predeterminados son las interfaces WLAN, Bluetooth y WWAN.

los umbrales de carga de la batera en ThinkPads. Las configuraciones de TLP START_CHARGE_THRESH y STOP_ CHARGE_THRESH nos permiten configurar umbrales de carga que cuiden de las bateras de litio-in instaladas en los modelos ms populares del ThinkPad. Esto significa que el sistema no cargar completamente las bateras, detenindose en un umbral del 80 por ciento, lo cual reduce el desgaste en las celdas. Si notamos que la capacidad de nuestra batera es cada vez ms escasa, TLP nos puede ayudar a recalibrarla descargndola completamente y luego recargndola al 100%. Para hacerlo, nos convertimos en root e introducimos tlp discharge en una ventana terminal. Tras descargarla completamente, podemos recargarla introduciendo tlp fullcharge. Para mantener la coherencia entre la electrnica de la carga con el estado real de las celdas de la batera, es buena idea repetir esta operacin cada dos o tres meses.

Conclusiones
Bajo condiciones de produccin, TLP impresiona en general. El consumo de energa del sistema que utilizamos en el laboratorio de pruebas, un ThinkPad X200t, baj a un 20%, incluso sin que llegramos a utilizar algunas funciones, tales como la funcionalidad para cambiar la velocidad del reloj de la GPU, por carecer de un adaptador grfico Radeon. Descubrimos que el mayor devorador de energa era la tarjeta WLAN de Intel, la cual consumi unos 2.5 Watios. Gracias a TLP, me las arregl para reducir este consumo por debajo de los 8 Watios, amplindose la autonoma de la batera en unos 20 minutos. TLP es una herramienta bien diseada y altamente funcional que debera usar cualquier usuario de ThinkPad u otro dispositivo. Gracias a su excelente documentacin y FAQ, los principiantes sin un conocimiento profundo de hardware I no tendrn problemas en utilizarla.

Opciones de la Lnea de Comandos


Si iniciamos TLP manualmente, el software nos ofrecer cierto nmero de parmetros de la lnea de comandos adems de las opciones configuradas para modificaciones a corto plazo. Para ver las opciones posibles, escribimos tlp sin parmetros y como usuario root. Los comandos bluetooth, wifi y wwan, cada uno de ellos seguido por el parmetro off u on, deshabilitan o habilitan los servicios directamente. El comando tlp discharge o tlp fullcharge nos permite calibrar la batera mientras la mquina est conectada a la corriente. Para eliminar el riesgo de confusin de mltiples discos en nuestro porttil, usamos un ID de disco en lugar del nombre del dispositivo en el fichero de configuracin de TLP. Para descubrir el ID del disco duro, TLP cuenta con el comando tlp diskid.

RECURSOS
[1] Sitio web del proyecto: http://thinkpad-forum.de/threads/ 82441-Projektvorstellung-TLP-%E2%8 0%93-Stromspareinstellungen-f%C3 %BCr-Ubuntu-neu-Version-0.3. 0-Natty-Debian [2] Archivos para Ubuntu y Debian: https://launchpad.net/~linrunner/ +archive/tlp/+packages [3] Repositorio para OpenSuse: https://build.opensuse.org/package/ binaries?package=tlp&project=home %3Acdersch&repository=OpenSuse_11.3 [4] Howto: http://thinkpad-wiki.org/ TLP_-_Stromspareinstellungen_fuer_ Ubuntu [5] FAQ: http://thinkpad-wiki.org/ TLP_FAQ#Kann_ich_TLP_mit_andere n_Linux-Distributionen_verwenden. 3F

Mantenimiento de la Batera
A pesar de que TLP se ejecuta en todos los porttiles, slo podemos establecer

WWW.LINUX- MAGAZINE.ES

Nmero 82

67

LINUX USER Lnea de Comandos: Ortografa

plano, y no con formatos como el Open Document Format utilizado por LibreOffice. Sin embargo, an son tiles para la mayora de los lenguajes de marcado como HTML o XML, as como TeX o groff. Y pueden ser especialmente tiles cuando necesitamos corregir ortogrficamente diversos ficheros, o un comando autnomo o en un script shell. Y, cuando los usamos, tambin conseguiremos comprender mejor lo que sucede a bajo nivel cuando realizamos correcciones ortogrficas usando herramientas de escritorio.

Ispell
Siendo uno de los correctores ortogrficos ms antiguos, la ascendencia de Ispell llega hasta un programa escrito en ensamblador que data de 1971. Desde entonces, se ha portado a C y a otros muchos lenguajes, convirtindose en el modelo a imitar por otros correctores ortogrficos y, a menudo, tambin todo lo contrario. Originalmente Ispell era un corrector exclusivamente ortogrfico de lengua Inglesa. Sin embargo, aunque an se instala por defecto en diccionarios Americanos e Ingleses, soporta docenas de lenguajes [4]. No obstante, sus diccionarios son casi por completo para lenguajes occidentales, y no soporta directamente la codificacin de carcter comn UTF-8 [5]. An as, contina siendo una herramienta rpida fcil de usar, especialmente si slo tratamos con variantes de idiomas europeos. La estructura del comando bsico para Ispell es ispell FICHERO. Esta estructura abre una interfaz de texto que muestra resaltada la palabra incorrecta en la lnea en la que aparece para dar su contexto y las alternativas sugeridas (Figura 1). NOTA: Para que esto funcione en castellano, debe establecerse la variable de entorno LANG como es_ES con la codificacin de caracters UTF-8
export LANG=es_ES.UTF-8

Correccin ortogrfica desde la lnea de comandos

Corregido
Vamos a describir tres tiles correctores ortogrficos disponibles desde la lnea de comandos que nos ayudan a verificar todo tipo de ficheros de texto. POR BRUCE BYFIELD
a mayora de usuarios asocia la correccin ortogrfica con las suites ofimticas el arquetipo de las aplicaciones de escritorio. Sin embargo, la lnea de comandos ha ofrecido correccin ortogrfica durante dcadas. De hecho, aplicaciones como Ispell [1], GNU Aspell [2] y Hunspell [3] estn tan bien desarrolladas que proporcionan correccin ortogrfica para herramientas avanzadas como Emacs, Bluefish y Gedit. El principal inconveniente al usar estos tres correctores ortogrficos directamente desde la lnea de comandos es que solamente funcionan con texto

En la parte inferior de la pantalla existe una lista de los posibles comandos, algunos de los cuales no son obvios a primera vista. Para usar una de las sugerencias de la lista podemos introducir su nmero. Y, para dejar todos los ejemplos de una consulta sin modificar, podemos introducir a (para aceptar). Tambin podemos introducir I (insertar) para aa-

68

Nmero 82

WWW.LINUX- MAGAZINE.ES

Lnea de Comandos: Ortografa LINUX USER

dir la palabra con maysculas en el fichero de nuestro diccionario Ispell privado, o u (de uncap o minusculizar) para aadir la palabra con minsculas a nuestro diccionario privado. Adems, aunque el comando no se encuentra listado, pulsando la barra espaciadora acepta la palabra slo para el ejemplo actual. Tambin podemos salir del fichero actual con x y cambiar al siguiente o abandonar Ispell con q. Existen distintas opciones que nos permiten afinar esta estructura bsica. De entrada, podemos especificar el formato de fichero: para TeX o LaTeX usamos -t, para ficheros ngroff o groff, -n; para HTML, SGML o XML, -h. De este modo, las etiquetas de marcado se ignoran. Para preservar una copia del texto original, podemos usar -b para hacer una copia de seguridad o -f FICHERO para escribir el fichero corregido ortogrficamente a otro fichero, en vez de sobreescribir el original. Existen otras opciones que especifican cmo ha de funcionar Ispell. Por ejemplo, con -B haremos que trate palabras seguidas sin espacios como errores ortogrficos, o introduciendo -C le diremos que los ignore si todos sus componentes estn en el diccionario. De manera similar, con -m podemos establecer que Ispell tambin genere siempre sugerencias que constan de una raz y un afijo (por ejemplo, arboleda, adems de rbol) o solamente cuando no existen sugerencias disponibles (-P). Entre otras opciones tiles se encuentra -w, que podemos usar para hacer que Ispell tenga en consideracin caracteres no alfabticos como # o &, y -W NMERO, que establece la longitud de las palabras que ignora. Adems de estas opciones, tambin trae una coleccin de scripts como buildash y munchlist para crear y administrar diccionarios. Sin embargo, estos scripts estn fuera del alcance de este artculo.

Figura 1: Ispell ofrece una interfaz de texto simple mientras realizamos la correccin ortogrfica.

embargo, Aspell tambin soporta otras mejoras de las que carece Ispell. La estructura de su lnea de comandos es ms compleja que la de Ispell, siendo aspell comando fichero. Sin embargo, para el usuario tpico, la mayora de los comandos posibles son irrelevantes. Utilizando aspell config podremos ver la configuracin actual de Aspell, pero en general usaremos aspell check fichero. Este comando abre una interfaz basada en texto ms parecida a la de Ispell. La diferencia ms importante es que Aspell ofrece un contexto ms amplio, lo cual hace que sea ms fcil la toma de decisiones. Tambin incorpora las posibles respuestas en un nico men, con sugerencias en la parte superior y con opciones con nombres ms claros que en Ispell (al menos, una vez que entendamos que Agregar se refiere

a aadir la palabra a nuestro diccionario personal y Agregar minsculas a aadir la palabra sin capitalizar a nuestro diccionario). Estas mejoras son slo el comienzo. Con la opcin --extra-dicts=FICHEROS, podemos hacer correcciones ortogrficas con tantos ficheros como elijamos. Tambin podemos especificar la localizacin del diccionario principal con --master FICHERO, o de un diccionario personal con --personal FICHERO. Adems, Aspell hace gala de un amplio conjunto de opciones que ataen al comportamiento del corrector ortogrfico. Con --ignore=NMERO podemos establecer el tamao de las palabras que Aspell ignora. Tambin podemos utilizar la opcin --ignore-case o --dontignore-case, y configurar la velocidad a la cual opera con -sug-mode=MODO,

GNU Aspell
Aspell, el corrector ortogrfico oficial para aplicaciones perteneciente al Proyecto GNU, es un sustituto actualizado de Ispell. Sus principales ventajas sobre Ispell son el soporte de UTF-8, la capacidad para usar ms de un diccionario a la vez, y un mayor nmero de sugerencias para correcciones (Figura 2). Sin

Figura 2: La interfaz de Aspell es una versin mejorada de la de Ispell, con ms contexto y en general opciones de men ms claras.

WWW.LINUX- MAGAZINE.ES

Nmero 82

69

LINUX USER Lnea de Comandos: Ortografa

siendo MODO, ultra, fast, normal o bad-spellers. Otras opciones, tales como --add-htmlskip=LISTA nos permiten especificar las etiquetas HTML que debe ignorar Aspell. Existen opciones similares para SGML (--add-sgml-skip=LISTA) y TeX (--add-tex-command=LISTA). Si deseamos incluso afinar ms, podemos modificar cmo se tratan las palabras que estn juntas sin espacios. Es posible tener configurados conjuntos de palabras como vlidos con --run-together, o podemos hacer que siempre se consulten con --dont-run-together. Usando --run-together-limit=NMERO, incluso podemos especificar el nmero de palabras juntas. Y, claro, tambin podemos establecer la longitud mnima de palabras juntas con - -run-togethermin=NMERO. Si nos vemos usando las mismas opciones una y otra vez, podemos colocarlas en un fichero de configuracin: bien en /etc/aspell.conf para opciones globales, o en .aspell.conf en nuestro directorio personal (existen instrucciones detalladas en lnea en [6]). La enorme variedad de opciones de Aspell explica por qu es el sustituto actual de Ispell.

Figura 3: La interfaz de Hunspell est basada muy estrechamente en la de Ispell.

Hunspell
Hunspell, originalmente diseado para el hngaro, es una derivada de MySpell [7], que fue el corrector ortogrfico en OpenOffice.org hasta la versin 2.02. Incluso ms que Aspell, est modelado muy estrechamente sobre Ispell, por lo que comparte muchos de sus switches (Figura 3). De hecho, podemos usar la opcin -vv para ver en qu versin de Ispell se basa. Hunspell tiene dos puntos a su favor. Primero, es ms sofisticado en la creacin de componentes morfolgicos desde las races bsicas que cualquiera de sus alternativos. En segundo lugar, como OpenOffice.org y LibreOffice siempre han soportado mltiples idiomas, Hunspell tiene una importante coleccin de diccionarios tanto para lenguajes no occidentales como para variantes regionales de lenguajes populares. A pesar de que Hunspell carece de las opciones ampliadas de Aspell, lo anterior explica por qu es utilizado hoy en aplicaciones tales como LibreOffcie, Chrome y Firefox.

La estructura de la lnea de comandos de Hunspell es simple: hunspell FICHERO. Esto abre una interfaz diferente de la de Ispell nicamente en la disposicin de sus elementos. De hecho, muchos de sus elementos de men son idnticos a los de Ispell. Comparado con Aspell, Hunspell posee pocas opciones. Aunque Hunspell no suele ser consciente de HTML, puede comrpobar URLs con --check-url. Adems, cualquiera de los diccionarios listados en /user/share/ myspell/dicts puede especificarse usando -d seguido por el conjunto de cdigos locales de cuatro caracteres, tales como en_US para Ingls Americano y de_DE para Alemn estndar o es_ES para castellano de Espaa. Tambin podemos especificar un diccionario personal con -p FICHERO.

Cmo Elegir un Corrector Ortogrfico


Tras comparar estos correctores ortogrficos, podemos hacer algunas afirmaciones acerca de ellos. Ispell, por ejemplo, es un poco anticuado, y Aspell est repleto de opciones, mientras que los diccionarios Hunspell parecen ms flexibles en mi limitada experiencia. Sin embargo, el hecho de que podamos encontrar distintos vnculos para todos ellos en la mayora de los lenguajes de programacin sugiere que ninguno de ellos tiene una ventaja aplastante sobre los otros dos. Todo lo que podemos decir es que Ispell es menos usado actualmente que los otros, pero que sigue teniendo defensores. Por lo dems, el corrector ortogrfico que elijas depender de tus necesidades. Para algunos, las opciones de Aspell pueden ser las funcionalidades principales.

Para otros, esas mismas opciones pueden ser excesivas. De la misma manera, aunque Hunspell proporcione el mayor conjunto de sugerencias de correcciones, carece de la flexibilidad de Aspell. Lo ideal es probar los tres y ver qu resultados se ajustan ms a nuestras exigencias. Afortunadamente, como comparten orgenes comunes, una vez que hemos aprendido uno de ellos, los dems tambin los aprenderemos sin dificultad. A menos que necesitemos mejor soporte para lenguajes no occidentales, es probable que cualquiera de estos tres correctores valga. Los correctores ortogrficos de la lnea de comandos puede que no sean muy conocidos entre los usuarios del escritorio, pero son la prueba de que existe un conjunto de aplicaciones maduras sobre las que se ha estado trabajando durante muchos aos de manera casi oculta para suministrar eficientes funcionalidades a todo tipo de programas, grficos o no. I

RECURSOS
[1] Ispell: http://en.wikipedia.org/wiki/Ispell [2] GNU Aspell: http://en.wikipedia.org/ wiki/GNU_Aspell [3] Hunspell: http://es.wikipedia.org/wiki/Hunspell [4] Diccionarios Ispell: http://lasr.cs.ucla. edu/geoff/ispell-dictionaries.html [5] Codificacin de carcter UTF-8: http:// es.wikipedia.org/wiki/UTF-8 [6] Personalizando HTML: http://aspell.net/050-doc/man-html/ 4_Customizing.html [7] MySpell: http://es.wikipedia.org/wiki/MySpell

70

Nmero 82

WWW.LINUX- MAGAZINE.ES

Konsultorio COMUNIDAD

EL CONSULTORIO DE KLAUS
Klaus Knopper es el creador de Knoppix y co-fundador de la LinuxTag Expo. En la actualidad trabaja como profesor, programador y consultor. Si tiene algn problema de
equipo diferente si no tenemos una unidad de DVD). Bajo Configuracin, encontraremos dos scripts que instalan Knoppix en una memoria flash en modo live, o descomprimido en el disco duro, segn queramos (Figura 1). Ambos scripts de instalacin nos dicen qu hacer paso a paso, pero, por favor, hay que leer completamente la ayuda para instalacin en el disco duro. Para la versin en CD de Knoppix, necesitamos: Al menos 2GB de espacio libre en la memoria flash Al menos 4GB de espacio libre en el disco duro Para la versin en DVD de Knoppix, necesitamos: Al menos 8GB de espacio libre en la memoria flash Al menos 14GB de espacio libre en el disco duro Para instalar Knoppix, la memoria flash debe estar particionada con una particin nica FAT32, lo cual es lo predeterminado para la mayora de las memorias flash actuales y las tarjetas SD. Para la instalacin en el disco duro necesitaremos espacio libre en el disco (sin particionar) para crear las particiones especficas de Linux automticamente, o una particin ReiserFS preformateada, vaca, del tamao necesario, ms una participacin swap de 1GB. Para responder a esto he tenido que buscar un equipo con Windows 7 e instalar Windows QEMU versin 0.13. Las Figuras 2 y 3 muestran Knoppix arrancando Windows QEMU. Tengo que decir que va muy lento, pero funciona y he conseguido tener acceso a la red. El ratn no funcion inmediatamente. Normalmente QEMU simula un ratn tipo PS/2, independientemente de lo que ofrezca el sistema anfitrin. Pero el ratn estaba conectado a travs de USB al sistema anfitrin Windows, lo cual podra haber causado algn problema en la versin Windows de QEMU. La causa exacta nunca la sabr, pero despus de aadir la opcin -usb -usbdevice mouse a la lnea de rdenes de QEMU, el ratn funcion dentro de la ventana de QEMU y pude pulsar en el elemento del men Informacin de la conexin del gestor de red (Figura 4). QEMU tiene un servidor DHCP incorporado, el cual distribuye direcciones IP al cliente DHCP del sistema husped. El husped ve el anfitrin como 10.0.2.2, lo cual se convierte en la direccin de la pasarela de Internet. Si vemos el smbolo LAN conectada en el rea de la barra de tareas inferior derecha, el sistema husped est conectado correctamente a la red del anfitrin. No obstante, si el anfitrin Windows no tiene conexin a Internet o tiene establecidas opciones muy restrictivas en la configuracin de la seguridad de Windows, QEMU no ser capaz de usar la conexin de Internet del equipo anfitrin, ni navegar por la web, ni usar cualquiera de los clientes de red en Knoppix. Llegados a este punto, lo nico que debemos hacer es comprobar la configuracin de red en Windows y quizs cambiarla para compartir el acceso a Internet con el sistema husped.

configuracin, o simplemente quiere conocer mejor cmo funciona Linux, no dude en escribir sus preguntas a:

preguntas@linux-magazine.es

Ayuda sobre el Disco Duro


Hola Klaus: Ante todo, soy novato en esto de Linux. Recientemente he conseguido una copia de Knoppix 6.7. He intentado, con mis limitados conocimientos, instalarlo en una memoria USB, pero no lo he conseguido. Te estara muy agradecido si me pudieras ayudar. Es posible instalar Knoppix 6.7 en un disco duro? Te agradecera cualquier ayuda que me pudieras proporcionar. Gracias Frank Para empezar, necesitamos arrancar desde el DVD (podemos usar un

Claridad de QEMU
Hola Klaus: En el consultorio del nmero 74, haba una pregunta sobre cmo ejecutar Linux en Windows dentro de un entorno virtual. Sugeras usar QEMU. Funciona, pero sin red. Me puedes explicar cmo resolver esto? Estoy ejecutando QEMU en un entorno de anfitrin de Linux. Gracias, John

WWW.LINUX-MAGAZINE.ES

Nmero 82

71

COMUNIDAD Konsultorio

Figura 1: El men de Preferencias en Knoppix 6.7.

En teora, podemos pasar a travs de tarjetas de red/WiFi a QEMU usando la opcin -usbdevice usb-id y dejar que Linux maneje la conexin de red a su manera. Pero dado que necesitamos apagar el dispositivo bajo Windows para evitar conflictos, usar el servidor DHCP proporcionado por QEMU y la tarjeta de red simulada para compartir una conexin existente a Internet, es definitivamente lo ms sencillo.

Errores en Grficos?
Uso Ubuntu en casa sin problemas. Quise instalarlo en los equipos de mi escuela, pero desafortunadamente, despus de unos minutos (a veces antes), la pantalla se quedaba en blanco (o gris). No pude hacer nada (Ctrl+Alt+F1, etc., tampoco funcionaron). Tambin me pasa con openSUSE. La tarjeta de grficos es una ATI Radeon Xpress 200M integrada. Hasta donde yo s, Ubuntu 10.10 nuevo, en una GPU ATI antigua, usa un controlador abierto. Deseara que me pudieras ayudar.

Saludos desde Polonia, Andy Figura 2: Arranque de QEMU en Windows, pantalla de inicio de KnopSuena como pix. si el Xorg Server se colgara despus de algn tiempo, podemos intentar desactivar parte o toda dejando el teclado y el ratn inutilizados la aceleracin para Radeon. en la consola local, y el chipset tambin El mtodo mas contundente es desactivar dejara de funcionar. Si pudieras iniciar el la configuracin del modo del kernel (KMS) servidor SSH antes, podras acceder a la con la opcin del arranque del kernel: mquina en la red para comprobar los registros y ver qu ha pasado: linux radeon.modeset=0
cat /var/log/Xorg.0.log

y
dmesg

son buenos sitios donde mirar. Puede haber varias razones para que ocurra esto. Lo que he encontrado acerca de este chipset especfico de Radeon, es que posiblemente el controlador del chipset server-xorg-video-radeon versin 6.14, que se usa en varias distros actualmente, tiene un error que hace que el chip de grficos est siempre en modo acelerado. Esto nos permite intentar algunas cosas. Podemos buscar una actualizacin de xserverxorg-video-radeon, que har que otros paquetes tambin se actualicen, tales como xserver-xorgFigura 3: Arranque de QEMU en Windows, deteccin del hardware de core y el paquete principal de Xorg. O Knoppix.

Para Knoppix, reemplazamos linux con knoppix o la versin del nombre del kernel de nuestra distribucin en la lnea anterior. Lo siguiente son pasos especficos para Knoppix: knoppix nodrm desactiva la aceleracin DRM/DRI. knoppix nocomposite desactiva la funcionalidad 3D pero deja intacta la aceleracin 2D. knoppix xmodule=vesa especifica el controlador Vesa en lugar de Radeon. fb1280x1024 usa una resolucin de framebuffer fija en vez de la nativa. No hay ms recomendaciones especficas en los foros acerca de las opciones de configuracin de /etc/X11/xorg.conf para que el problema desaparezca, pero pienso que puede ser ms sencillo volver a una versin anterior de Xorg Server que no requiera la configuracin del modo del kernel para la aceleracin y desactivar KMS en el arranque (linux nomodeset) hasta que est disponible una nueva versin de KMS del controlador Xorg.

Algo Se Ha Roto
Hola: espero que me puedas ayudar. Compr Linux Magazine con el

72

Nmero 82

WWW.LINUX-MAGAZINE.ES

Konsultorio COMUNIDAD

DVD de Knoppix 6.7. Intenta arrancar, falla y me dice que algo se ha roto. Mi equipo es un porttil Dell Inspiron 1525. Saludos cordiales, Colin Algo se ha roto es muy poca informacin para poder dar una respuesta fiable. Cuando se arranca un sistema operativo complejo, hay un montn de sitios donde pequeos o grandes errores pueden acabar en una parada completa. En tu caso, tomar el informe al pie de la letra: un mensaje de error visible en la pantalla dice que algo se ha roto. Hay dos sitios donde he escrito este tipo de mensajes en el sistema de arranque de Knoppix 6.7: 1. check_knoppix() en el script de arranque inicial /init. Esto intenta leer los datos del final de un archivo comprimido muy grande KNOPPIX/KNOPPIX en el DVD e informa de que El archivo KNOPPIX/ KNOPPIX (tamao 4000kB) est roto si falla la lectura. Esto puede deberse a una descarga incompleta del archivo ISO antes de la copia. Como el ndice del directorio est ubicado muy al principio de la imagen ISO, puede que no veas nada incorrecto al explorar el DVD en el gestor de archivos, pero los datos que faltan del archivo pueden causar posteriormente inestabilidad en el sistema, y muy probablemente ste se romper tarde o temprano. De ah la rpida verificacin de si el archivo est completo. 2. mountknoppix() en el mismo script de arranque. Si no es posible montar realmente el archivo KNOPPIX/KNOPPIX a travs del descompresor cloop, entonces aparecer en la pantalla La imagen KNOPPIX comprimida est rota.. Esto significa que el archivo est, pero algn dato dentro del sistema de archivos est daado. Ello puede ocurrir si la unidad de DVD encuentra errores de lectura cuando accede a los datos del archivo. Si se encuentran alguno de estos dos errores, significa que la unidad de DVD no puede leer de forma fidedigna el DVD: la unidad, el DVD o ambos tienen defectos. Si hemos conseguido el DVD en una revista y est defectuoso (lo suyo es probar en un equipo distinto), normalmente podemos pedir que lo cambien.

Compatibilidad JavaScript/ Navegador


Hola, Klaus: He instalado Knoppix 6.7-CDLiveEN en una memoria USB de 2GB. He

intentado una conexin segura a la pgina www. openbank.es, y en el panel derecho de Acceso Clientes, me permite escribir en el campo Nmero de documento, pero cuando escribo en el campo Clave de acceso y pulso Enter, no funciona. Me ocurre con el cortafuegos de Knoppix activado o desactivado y tam- Figura 4: El gestor de red mostrando informacin de la conexin bin con el teclado actual a Internet. virtual (espaol). Esto no me ocurre con unidades USB de NoScript para esto. Tenemos que actiotras distribuciones de Linux, por ejemplo, var JavaScript para el sitio web, con el Puppy Linux Wary y Parted Magic 6.6 (a pequeo botn situado en la barra de pesar de tener el cortafuegos de Linux actiestado que parece una especie de S. Hay vado). que volver a cargar la pgina para que el Muchas gracias. servidor sea consciente de la Marcos desde Espaa configuracin del navegador. Los campos Estimado Marcos, que rechazan enviar contraseas o inicios Knoppix 6.7.0 usa Chromium como de sesin son el resultado de JavaScript navegador predeterminado, pero he cammal programado que no viene con su biado a Firefox en 6.7.1, en parte porque correspondiente no JavaScript alternaChromium tiene verdaderos problemas tivo. con algunos sitios web de bancos en lnea Si el banco en lnea no funciona con (o los sitios web de los bancos con ChroKnoppix 6.7.0 live CD, que solamente mium). Los formularios oficiales de viene con Chromium, sugiero intentarlo impuestos alemanes tampoco funcionan con la versin 6.7.1 de Firefox, asegurnactualmente con Chromium y Java. donos de tener activado JavaScript en Por otra parte, puede que tu banco neceNoScript para el sitio web del banco. site JavaScript y complementos activados y Las Figuras 5 y 6 muestran la ubicacin esto NO est habilitado de manera predede los botones relevantes de JavaScript en terminada por razones de seguridad, ni en Chromium y Firefox. I Firefox, ni en Chromium en Knoppix. Tenemos que buscar un pequeo documento tachado en la barra de URL de Figura 5: Activador de JavaScript en la barra de URL de Chromium. chromium en caso de que el applet de JavaScript est bloqueado, y activarlo pulsando en l. En Firefox/ Iceweasel, uso el complemento Figura 6: Men NoScript en la parte inferior de Firefox/Iceweasel.

WWW.LINUX-MAGAZINE.ES

Nmero 82

73

COMUNIDAD Linux Legal

Jose Mara Lancho, abogado, contesta a las dudas legales de los lectores.

LINUX LEGAL
I E l otro da escuch la siguiente: El software libre es una mentira: si hay una licencia, no se puede considerar libre. Es slido este argumento? I Aunque parezca un lugar comn, pocos mbitos de las nuevas tecnologas estn ms regulados que el software. En una sociedad que se autodenomina de la informacin, la creacin intelectual ha sido el mbito de la mayor y ms intensa presin jurdica, y en el menor tiempo, de nuestra historia. Expandir sus posibilidades de control y proteccin legal ha hecho de lo inmaterial una realidad cosificada en forma de derechos de muchas formas. Ese es el caso del software, y las distintas vas jurdicas disponibles van desde la propiedad intelectual, las patentes y el secreto industrial, hasta el derecho de la competencia, que cada vez interviene ms ante el desequilibrio de la informacin y las restricciones en el desarrollo del conocimiento. Todo este proceso ha creado uno de los pilares fundamentales de la economa contempornea. Es conveniente tener claro que cuando nos enfrentamos a una lnea de cdigo, se trata de una obra en la que varias leyes intervienen y la configuran como una realidad jurdica con o sin licencia. De hecho, por defecto la ley prev consecuencias cuando distribuimos un programa de ordenador sin licencia. Esas condiciones no son ms permisivas que la mayora de las licencias libres, incluida la GPL. Es cierto que tanta regulacin ha producido todo tipo de abusos, especialmente en el mbito del software. El cdigo informtico, sin duda alguna constituye una obra intelectual incluible en el derecho de autor (Ttulo VII de la Ley de Propiedad Intelectual) pero que tiene la peculiaridad de tener un efecto tcnico. Esto ha hecho que muchos abusaran de su porcin de cdigo y pretendiesen que el acceso a la tecnologa se hiciese a travs de finos puentes por los que tendramos que pagar lo que su propietario quisiera, para transitar por ellos y, esto es lo peor, por los que hay que asumir condiciones tan extremas como las de impedirte proponer alternativas tecnolgicas o como condicionar, a su favor, cualquier servicio basado en la escalabilidad de ese software. Esta situacin amenazaba con fosilizar un falso mercado donde eran inaccesibles las mejores alternativas tecnolgicas aun al precio que fuera. El empleo abusivo de los derechos de autor, las patentes y el secreto industrial amenazaban no slo con adulterar el mercado, sino con la posibilidad de una congelacin del avance tecnolgico, a favor de mantener artificialmente unas tasas de retorno desproporcionadas e independientes de nuevos avances tecnolgicos, esto es: de la ausencia de competitividad. Ante un paradigma de distorsin legal tan alarmante, hubo distintas reacciones, tambin legales, siendo la ms afortunada en trminos cuantitativos y, desde luego, cualitativos, el desarrollo del software libre. Es una revolucin que no nace del consumidor, ni nace de las bases de usuarios bsicos de software, ni de las empresas que demandaban software. Paradjicamente, el software libre nace de una lite cientfica dispersa, pero muy concienciada de las consecuencias en el caso de su inaccin, y que comprometi su esfuerzo e incluso sus propias posiciones en universidades y grandes empresas en pos de aprovechar el derecho de una forma muy original y, de hecho, inesperada para los lobbies que haban hecho tanto esfuerzo en convertir el derecho de la propiedad intelectual en una maquinaria compleja y difcil de atacar. Aquellos ingenieros pensaron en incorporar clusulas a sus contratos de licencias que garantizaran la conservacin de una serie de libertades a las obras derivadas del cdigo que liberaban bajo esas licencias. El respaldo tcnico de esas personas y la aportacin masiva de cdigo crtico hizo que mucha gente creyera en ellas empresas, gobiernos... Todo ello hizo que adquiriese mayor seguridad jurdica y que sectores enteros, desde la telefona, hasta la informatizacin de miles de productos industriales, la adoptasen y fuesen objeto de una verdadera revolucin tecnolgica. Sin embargo, acompaando a este proceso, se han sucedido coros de memes llenos de ideologa ajena al software, algunos viejos de verdad, que insinan que el software libre o es algo al margen del derecho o no es libre, o cuando menos que son obras que deben pertenecer al dominio pblico. Desde mi punto de vista, la opcin del depsito en el dominio pblico habra hecho imposible el xito que ha alcanzado el software libre y hubiera acabado siendo derecho sin reglas, porque no escapa a lo jurdico. El dominio pblico est legalmente previsto y excluye las reglas con que queremos que el cdigo permanezca, se transmita, se documente. Nada ms lejos del objetivo de la Comunidad del Software Libre. La programacin en red, con bases contractuales basadas en copyleft, en interrelacin con la empresa y la universidad corresponde en buena manera a lo que hoy es el Software Libre. Fuera de la asociacin legal con los implementadores bsicos de la tecnologa en una sociedad, es decir, las empresas y profesionales y las Administraciones Pblicas, existe poco espacio efectivo en el software. Por eso, aunque hay propuestas para acabar con los derechos de autor (Smiers en Europa, por ejemplo), el software libre se vertebra en el autor y en la colaboracin, y eso slo es posible desde el derecho. Y la GPL es derecho, un contrato, y la herramienta competitivamente ms eficaz, aunque no la I nica, del software libre.

74

Nmero 82

WWW.LINUX-MAGAZINE.ES

Anonymous COMUNIDAD

MarkSpowart, 123RFf.com

Los hacktivistas que acaparan los titulares

Sin Nombre
El grupo hacktivista Anonymous ha acaparado muchos titulares en los ltimos aos. Analizamos quines son, qu les mueve, a quines atacan y cmo se comunican. POR SEBASTIN GOASGUEN, JOHN HOYT Y RYAN COOKE
ientras escribimos este artculo, operacin Megaupload est en pleno apogeo (ver Figura 1). El grupo hacktivista Anonymous reivindica el ataque coordinado sobre los sitios web del departamento de Justicia de los Estados Unidos, la Motion Pictures Association of America, el Recording Industry of America y Universal Music. Para ello, utilizan su arma preferida, el Low-Orbit Ion Cannon (LOIC) [1], con la cual generan ataques de denegacin de servicio distribuidos (DDoS) [2] sobre los citados sitios (ver el cuadro LOIC). Segn las conversaciones en el IRC y Twitter, estos ataques se llevan a cabo como represalia por el cierre del popular sitio Megaupload por parte de la autoridades estadounidenses y neozelandesas, cierre propiciado por infraccin de copyright y blanqueo de dinero (Figura 2). Uno de los mximos responsables de MegaUpload, Kim Dotcom, fue arrestado y se le ha denegado la libertad bajo fianza. Tambin se llev a cabo un apagn de Internet y unos 75.000 sitios, incluyendo

Wikipedia [3], echaron el cierre para protestar contra las legislaciones antipiratera SOPA y PIPA que se presentaban en el congreso de EE.UU. En vista de esta protesta, el congreso ha pospuesto la votacin sobre estas leyes y se han retirado para que sean redeliberadas. El momento no podra ser mejor o peor, segn se mire: Las acciones de Anonymous podran obstaculizar ms que ayudar la causa en pro de la neutralidad en la red.

Quines Son?
Probablemente ya hayas odo hablar de Anonymous [4] en las noticias, habrs visto las mscaras de Guy Fawkes y los vdeos en YoutTube donde se ven a supuestos miembros de Anonymous reivindicando algn ataque o avisando de uno inminente. Puede que tambin hayas ledo su algo siniestro mantra: Somos Anonymous. Somos legin. No perdonamos. No olvidamos. Esprennos. Sus acciones le han hecho merecedores de ms de un titular en los ltimos

aos, desde protestar contra mltiples objetivos, incluyendo la Iglesia de la Cienciologa y los cartels de narcotrfico mexicanos, hasta, ms recientemente, por introducirse en los servidores de Stratfor Intelligence [5], desde lo cuales accedieron a 2.7 millones de cuentas de correo y algunos nmeros de tarjetas de crdito, que se utilizaron para realizar donaciones a organizaciones caritativas. Aunque los medios estn convirtiendo el nombre de Anonymous en el sinnimo de un grupo de hackers delincuentes, la realidad es bastante ms compleja. Anonymous, en su sentido ms amplio, es un grupo de activismo social cuyo poder deriva de redes sociales tales como Twitter y Facebook. Representan un nuevo tipo de activismo, sin lderes, sin organizacin, arraigados en Internet, con la capacidad de movilizar a un gran nmero de individuos rpidamente en torno a algn tema. Las cuatro cuentas de Twitter ms populares relacionadas con Anonymous, @anonops, @AnonymousIRC, @Anonymous, y @Lulzsec [N.

WWW.LINUX-MAGAZINE.ES

Nmero 82

75

COMUNIDAD Anonymous

Figura 1: Tweet anunciando Operacin Megaupload.

La mscara de Guy Fawkes (Figura 3) es la representacin estilizada del ms famoso miembro del Complot de la Plvora, cuyo objetivo era volar el parlamento britnico el 5 de noviembre de 1605. Esta mscara se hizo famosa gracias al comic y pelcula V de Vendetta. Y aunque su significado ha evolucionado, ha sido adoptada por Anonymous como smbolo de protesta.

Figura 2: Megaupload.com confiscado por el gobierno de los Estados Unidos.

Breve Historia de Anonymous

del T.: sta ltima est inactiva desde que Lulzsec declar su disolucin a mediados del 2011 ver el cuadro Un Enorme Fiasco] tienen ms de 800.000 seguidores, lo que les confiere una influencia significativa. Los vdeos de YouTube de Anonymous son vistos por millones de usuarios. Durante el ataque DDoS al Departamento de Justicia, el LOIC registr un nmero enorme de descargas, llegando a producirse hasta 50.000 en una semana. Anonymous revel que 5.630 miembros participaron en el ataque.

Mientras que la mayora de los grupos de activismo social tienen una clara estructura y canales de comunicacin bien definidos, no es el caso de Anonymous, tal vez el primer grupo verdadero de activismo social virtual. En un principio, los miembros puede que utilizaran sitios como 4chan, que permite envos annimos, pero ahora utilizan varios canales de IRC, principalmente los del servidor irc.anonops.com. La mayor parte de las charlas giran en torno a temas varios, temas que van desde los video-juegos hasta la programacin. A veces se tocan

LOIC
El Low-Orbit Ion Cannon es una herramienta escrita en C# por un desarrollador conocido como praetox. Originalmente fue diseado con un fin honesto: el de probar la resistencia de servidores. Esto lo hace remitiendo repetidas peticiones TCP, UDP o HTTP. Claro que si los suficientes clientes dirigen sus peticiones contra un nico objetivo, se puede desencadenar un ataque de denegacin de servicio. Ahora existe una versin ms moderna de la herramienta llamada IRC-LOIC que contiene una funcionalidad denominada de mente-de-colmena, que permite que el caon se controle externamente a travs de IRC: las obreras (miembros de la comunidad Anonymous) se presentan voluntarias para unirse a un botnet que puede ser controlado por IRC para iniciar un ataque contra un objetivo establecido. Existe una versin an ms moderna, denominada JS-LOIC, que se ejecuta desde un sitio web y usa JavaScript. sta es la versin empleada en #OpMegaupload y que utiliza un nuevo tipo de ataque: Ataque DDoS de pasada. En este tipo de ataque, los participantes ni siquiera tienen que saber que participan: al seguir un enlace posteado en Twitter, los miembros inintencionadamente ejecutaban el JavaScript que disparaba sobre el Departamento de Justicia de EE.UU.

asuntos polmicos de actualidad. ste siempre ha sido el caso de Anonymous, y compone el ncleo principal del grupo. Anonoymous se convirti en algo que superaba a un grupo de personas que charlaban annimamente online cuando se dieron cuenta que podan hacer cosas fuera de los canales de IRC. Sus primeras acciones fueron relativamente infantiles y realizadas para su entretenimiento para los lulz [6]. Por ejemplo, cuando Dumbledore mora en uno de los libros de Harry Potter, alguien que tuvo acceso temprano al libro, difundi el hecho en el IRC de Anonymous. Luego, en un acto concertado de sabotaje cultural, los miembros de Anonymous difundieron la informacin por toda la red, estropeando la sorpresa para millones de lectores. Sin embargo, poco a poco, las operaciones fueron tornndose en ms activistas. A medida que surgen las ideas, la mayora son ignoradas, pero las ms interesantes ganan adeptos. Nadie vota sobre lo que se debe o no hacer, pero si a alguien le gusta una idea, puede que la twittee, escriba sobre ella en Facebook, haga un vdeo en YouTube o lo mencione en un blog, ayudando a convertirlo en realidad. A su vez, ms gente se entera de la idea e intentan contribuir a alcanzar su objetivo en la medida de sus posibilidades. Desde su formacin en un canal de IRC hasta su ejecucin real, el crecimiento es puramente orgnico y genera un consenso eventual sobre la operacin en general, aunque no determina los detalles de la operacin. De alguna manera, la decisin que determina qu hacer se toma hacindolo. Habitualmente, cada operacin tiene un objetivo, dejndose las acciones tomadas para alcanzarlo a voluntad de cada individuo, lo que permite una

Figura 3: Mscara de Guy Fawkes.

76

Nmero 82

WWW.LINUX-MAGAZINE.ES

Anonymous COMUNIDAD

amplia interpretacin de cmo se ha de desarrollar una operacin. A veces la mayora decide que se ejecuten acciones coordinadas, como protestas, y un grupo alcanza un acuerdo sobre el lugar y la fecha y hora. Los movimientos occupy de diferentes pases, por ejemplo, recibieron el apoyo de Anonymous y se vieron las mscaras de Guy Fawkes entre los manifestantes. Puede que individuos con ms conocimientos de informtica decidan hackear sitios web para mostrar su apoyo a una operacin, algo que podra considerarse una actividad delictiva. Por tanto, aunque se alcance un consenso sobre una operacin, no todos los miembros han de estar de acuerdo en las acciones individuales. A pesar de ello, muchos medios se han limitado a retratar a Anonymous como un grupo que lo nico que hace es hackear corporaciones y para robar informacin, algo que podra desembocar en la destruccin del verdadero activismo social que se asocia con el grupo.

everywhere. Tambin aborda servicios para el anonimato ms complejos, tales como Tor [10] e I2P2 [11]. As que, los miembros de Anonymous aprecian su privacidad, pero cmo tratan los datos de las organizaciones que merecen su atencin? Eso es harina de otro costal

Operation Payback, #OpSony y Avenge Assange


El da 17 de septiembre del 2010 se lanzaron ataques DDoS con LOIC contra la industria de entretenimiento, en represalia por ataques DDoS lanzados por la Motion Picture Association of America (MPAA) contra sitios que no respondan a citaciones legales para retirar sus pginas. El objetivo inicial fue Aiplez Software, la empresa india contratada por la MPAA, pero el sitio ya estaba cado, tumbado por otro grupo. Anonymous cambi sus objetivos y dirigi sus ataques contra MPAA y la Recording Industry Association of America (RIAA) y las firmas legales involucradas en perseguir las infracciones de copyright. La segunda oleada de este ataque se denomin #OpSony y tena como objetivo Sony Entertainment. Despus de que George Hotz, alias geohot, jailbreakeara la PlayStation 3, Sony lo demand. Un magistrado federal, en su infinita sabidura, tambin concedi a Sony el derecho de adquirir cualquier direccin IP de cualquiera que hubiera visitado el sitio de geohot entre enero del 2009 y marzo del 2011. En respuesta a esta clara violacin del derecho a la privacidad, Anonymous inici un ataque DDoS contra numerosos sitios de Sony.

Project Chanology
El ataque Project Chanology se inici el 15 de enero del 2008 de uno de los foros de 4chan. Empez como un ataque DDoS sobre www.scientology.org utilizando el sitio gigaloader.com. Gigaloader [12] era un sitio que permita a los usuarios pegar enlaces a imgenes de un sitio determinado. Gigaloader proceda a recargar las imgenes una y otra vez, consumiendo el ancho de banda del sitio. Con poco ms de cien usuarios enviando las misma consulta, tena el potencial de ralentizar un sitio web hasta dejarlo inutilizable. El sitio de Gigaloader ya no est disponible. Lo que es interesante de Project Chanology es que comprenda mltiples acciones, tales como protestas fsicas, llamadas de broma y un vdeo en YouTube que declaraba que Anonymous quera expulsar a la iglesia de Internet. Muestra una combinacin de activismo social y hacktivismo fusionadas en una misma operacin.

Anonymous como Grupo Hacktivista


Los grupos de hackers como Lulz Security [7] consiguieron llamar la atencin sobre Anonymous. La privacidad y la libertad en Internet son valores fundamentales para Anonymous y otros grupos hacktivistas, por lo que estos grupos de hackers a veces se aprovechan de la estructura sin lderes y abierta de Anonymous y contribuyen sus acciones como parte de sus operaciones. El alto perfil de Anonymous y su nutrido nmero de miembros significa que las acciones de los hacktivistas recibirn ms atencin si se asocian con Anonymous que si se llevan a cabo en solitario. Algunos ataques que merecieron titulares en los medios eran relativamente sencillos, basndose en su mayor parte en LOIC. Sin embargo, otros ms sofisticados, como la desfiguracin de sitios webs y, ms recientemente, acceso a servidores, demuestran que algunos de los miembros de Anonymous son habilidosos hackers. Durante #OpNewBlod [8], se public el supuesto Anonymous Super Security Handbook [9], el cual explica en detalle cmo proteger el anonimato en la red. De hecho, es un manual bastante bueno, abordando el uso de IRC, proxies, mltiples extensiones de Firefox para deshabilitar el trazado de uso y HTTPS

Un Enorme Fiasco
Como suele ser el caso, entre que se escribi este artculo y su publicacin, han ocurrido tantas cosas como para que los acontecimientos que en l se describen parezcan anticuados. Por un lado, Kim Dotcom est en libertad, el cierre del sitio se realiz con una orden irregular (por lo que probablemente fuese ilegal) y, curiosamente, el vdeo del asalto contra la mansin de Dotcom, ejecutada por fuerzas de lite anti-terroristas, se ha perdido, cosa que podra ocultar an ms irregularidades. Mientras tanto, el otro bando, el de los hacktivistas, tambin ha tenido su racin de fiascos, como por ejemplo, el intento de orquestar un Marzo Negro, un boicot total a la industria de medios durante un mes, que ha acabado en agua de borrajas con casi nulo impacto. Pero ms daino puede que fuera la traicin de Sabu. Sabu, nombre en clave de Hector Xavier Monsegur, se considera uno de los fundadores de LulzSec, un grupo hacker bastante ms agresivo e impredicible que Anonymous. Cuando LulzSec anunci su disolucin a mediados del 2011, sus miembros pasaron a formar parte de Anonymous, grupo del cual se cree que ya formaba parte antes de la creacin de LulzSec. Durante meses, Sabu orquest algunas de las operaciones ms tcnicas de Anonymous, pero el 6 el marzo del 2012, con el arresto de cinco de sus compaeros de armas, se descubri que Sabu haba estado trabajando como confidente del FBI desde su arresto secreto el 7 de agosto del 2011. La detencin de cinco de los miembros que la justicia americana consideraba estar en lo ms alto de la jerarqua del grupo, junto con detenciones en Espaa, Chile e Italia (la mayora ahora en libertad a la espera de juicios), demuestran lo serio que se ha tornado la batalla del ciberactivismo en la red.

WWW.LINUX-MAGAZINE.ES

Nmero 82

77

COMUNIDAD Anonymous

En diciembre del 2010, Anonymous volvi a cambiar su objetivo para apoyar a WikiLeaks. Los DDoS se dirigieron entonces contra Amazon, PayPal, Visa, MasterCard y el banco suizo Post Finance, debido a que estas entidades financieras haban cancelado los servicios de financiacin de WikiLeaks y sus miembros. La operacin, denominada Avenge Assange, desconect los sitios de Visa y Mastercard el 8 de diciembre. Cuando el fundador de WikiLeaks fue arrestado, se le deneg la fianza y se le amenaz con ser extraditado a Suecia acusado de delitos sexuales; Anonymous lanz un ataque que inutiliz el sitio web de la fiscala sueca.

#Ophbgary
Uno de los ataques ms publicitados y mejor documentados ejecutados por Anonymous fue el de #Ophbgary. En los primeros das del 2011, Aaron Barr, CEO de HBGary Federal, en declaraciones realizadas al Financial Times, dijo que, con el uso de marcas horarias del IRC e informacin extrada de sitios de redes sociales, haba logrado penetrar en Anonymous y que estaba dispuesto a revelar sus hallazgos en la conferencie B-Sides de San Francisco. Anonymous comprometi rpidamente el sitio de la compaa de Barr, consigui acceso a su investigacin con sus resultados y public

60.000 de los mensajes de correo electrnico de HBGary. El grupo de hackers tambin descubri una vulnerabilidad de inyeccin SQL en el CMS a medida de hbgaryfederal.com. Consiguieron volcar los nombres de usuarios, direcciones de correo y contraseas cifradas de todos los usuarios del sistema. Aunque las contraseas estaban cifradas, dos de ellas eran muy dbiles, de seis caracteres con letras en minsculas y dos nmeros. Las dos cuentas comprometidas resultaron ser del mismo Barr y del Jefe de Operaciones de la empresa, Ted Vera. Desafortunadamente para ellos, tambin haban hecho caso omiso a las buenas prcticas que aconsejan utilizar contraseas nicas para cada aplicacin y sistema: las contraseas le dieron a Anonymous acceso a sus cuentas de correo, Twitter y LinkedIn. Con la cuenta de Vera, los atacantes tambin lograron introducirse en uno de los servidores de soporte de HBGary por SSH. A pesar de que esta cuenta tena privilegios limitados, Anonymous identific y explot una vulnerabilidad de escalada de privilegios en el linker de la biblioteca dinmica de GNU C, una vulnerabilidad que llevaba descubierta y parcheada desde octubre 2010, pero que la empresa de seguridad haba ignorado. Ya introducidos en el servidor con plenos privilegios, los atacantes descubrie-

ron gigabytes de datos de investigacin en copias de seguridad. Los borraron. La cuenta y contrasea de Barr les dio acceso administrativo al correo de la empresa a travs de Google Apps. Esto lo utilizaron para acceder al correo electrnico de Greg Hoglund, uno de los fundadores de la empresa y que tambin haba fundado rootkit.com. Utilizando la informacin hallada en la cuenta de Hoglund y un poco de ingeniera social, Anonymous logr obtener acceso de superusuario al servicio de alojamiento de rootkit.com. Una vez el ataque hubo terminado, Anonymous haba volcado los 60.000 mensajes de correo a la red BitTorrent, desfigurado los sitios web de HBGary Federal y rootkit.com, tomado posesin de la cuenta Twitter de Barr, twitteado la direccin de su domicilio, telfono y nmero de la seguridad social y publicado la informacin resultante de la investigacin que Barr planeaba presentar en la conferencia de seguridad y mostrar al FBI.

Stratfor
Antes de #OpMegaupload, Anonymous reivindic el ataque llevado a cabo durante las Navidades contra Strategic Forecasting Inc. (Stratfor), un think tank geopoltico. En este caso no se utiliz LOIC, sino que el ataque emul la de HBGary, y Anonymous consigui acce-

Listado 1: Hacklog del Ataque contra Stratfor


01 www3 # unset HISTFILE 02 www3 # id uid=0(root) gid=0(root) groups=81(apache) 03 www3 # uname -a Linux www3 2.6.24-gentoo-r4 #1 SMP Mon Apr 14 16:06:51 CDT 2008 x86_64 04 Intel(R) Xeon(R) CPU E5345 @ 2.33GHz GenuineIntel GNU/Linux 05 www3 # cat /etc/shadow root 06 $6$mG.Zpm0m$Wb6EqI.JE7wOPxc5XF/CwV/M7uQ0I6fxr4K9vh8DeFThXRGw.M0MbBGapP1vS 07 5mR/UydFBV52H14LGLreTGc0:15315:0::::: halt:*:9797:0::::: autobot: 08 $6$CpUx69ju$yiq1B.LSe9R3Jxn3CEiPid5ZnBov.GSzgaiZU82iiVN1KEkipHtDQKsMZXjURPSRZp 09 KpAx1GRXbO7gL4bSV61:14691:0:99999:7::: 10 & 11 www3 # w; ps -aux 12 www3 # cat sites/default/settings.php 13 <?php // $Id: default.settings.php,v 1.8.2.4 2009/09/14 12:59:18 goba Exp $ $base_domain = 14 `<a href=http://www.stratfor.com/>www.stratfor.com</a>; 15 ... 16 www3 # mysql -u www -pVMRLNbWA6dL8JKqX -hdb2.stratfor.com 17 mysql> select * from stratfor_billing_credit_card limit 70000, 100; 18 +--------+-------------+------------------+------------------+-----------------+------+ 19 | uid | name | number | expiration_month | expiration_year | cvv | 20 +--------+-------------+------------------+------------------+-----------------+------+ 21 | 873623 | Phil Spivey | 4122990037482053 | 12 | 2014 | 475 | 22 | 873637 | | 4621610000532710 | 2 | 2016 | 485 | 23 | 873661 | | 5148880001805602 | 2 | 2013 | 249 | 24 | 873670 | | 4430440089435390 | 8 |

78

Nmero 82

WWW.LINUX-MAGAZINE.ES

Anonymous COMUNIDAD

der al servidor de la empresa y divulgar informacin privada al pblico. Segn el portavoz no oficial de Anoymous, Barrett Browm, se escogi a Stratfor como objetivo por los 2,7 millones de mensajes de correo, que incluan correspondencia con corporaciones con lazos en los sectores de la contratacin militar e inteligencia, agencias gubernamentales y otras instituciones por las que Anonymous se interesa desde febrero del 2011. Segn el Antisec Zine [13] que se cit en la cuenta @YourAnonNews, el vector de ataque inicial parece ser que fue el sitio web de Stratfor que era increblemente vulnerable. No se sabe cmo consiguieron los atacantes tener acceso de superusuario, pero una vez con acceso, encontraron las credenciales de la base de datos almacenadas en el fichero de configuracin de Drupal settings.php. Una vez introducidos en la base de datos, encontraron la tabla con los nombres y nmeros de tarjetas de crdito, fechas de caducidad y cdigos CVV de los subscriptores de Strafor, todo en texto en claro. Usando una cuenta llamada autobot, que tena las claves SSH almacenadas localmente, saltaron a otros servidores de la organizacin. En uno de los servidores, se hicieron con la cola de correos que Stratfor mantena en un servidor de correo Zimbra. Una vez acabaron con el pillaje, desfiguraron la pgina principal del servidor web primario (Figura 4) y borraron el disco duro. En total, Anonymous declara haberse hecho con millones de documentos internos, 860.000 nombres de usuario y sus contraseas cifradas con MD5, datos de 75.000 tarjetas de crdito y ms de 2,5 millones de correos. Anonymous Zine tambin inclua un hacklog para el ataque a Strafor. sta es una excelente fuente de informacin para cualquier estudioso de ataques, ya que aporta todos los datos forenses y da pistas de cmo proteger un sistema. Desafortunadamente, el hacklog no explica cmo se obtuvieron los privilegios de superusuario, sino que empieza ya en la lnea de comandos de root en el servidor web primario (www3) (Listado 1). Los miembros de Anonymous primero ocultaron sus pasos con unset HISTFILE, para luego proceder a recoger datos bsicos con id, uname -a, ps -aux y cat /etc/shadow. Con esta informacin, empezaron a examinar los ficheros

Figura 4: Sitio de Stratfor despus de una visita de Anonymous.

.bash_history, mysql_history y .ssh de los usuarios. Una de los elementos que descubrieron fue un par de claves publica/ privada para la cuenta de autobot. Con esta informacin, consiguieron saltar al servidor central. Para ocultar an ms sus pasos, realizaron el salto con ssh autobot@sh.stratfor,com -T. El parmetro -T deshabilita la alocacin seudo-tty. Esto impide que el acceso al sistema sea registrado. Tambin impide que los comandos se escriban en el historial, ya que se considera un shell no-interactivo, aunque la conexin seguira registrndose si el sistema estuviera configurado para hacerlo.

Sin embargo, sigue siendo injusto medir a todos los miembros de un grupo tan diverso con un rasero de unos pocos que se dedican a atacar a organizaciones. La pregunta es podr el activismo social virtual sobrevivir a los hacktivistas? I

RECURSOS
[1] LOIC: http://en.wikipedia.org/wiki/ LOIC [2] DDoS: http://en.wikipedia.org/wiki/ DDoS#Distributed_attack [3] Cierre de Wikipedia: http://en. wikipedia.org/wiki/ English_Wikipedia_blackout#Wikime dia_community [4] Anonymous: http://www.youtube. com/ watch?v=Kgo0w8z7wdE&feature=rel ated [5] Stratfor Global Intelligence: http:// www.stratfor.com/ [6] lulz: http://en.wiktionary.org/wiki/lulz [7] Lulz Security: http://en.wikipedia.org/ wiki/LulzSec [8] #OpNewBlood: http://anonnews.org/ ?a=item&i=661&p=press [9] Anonymous Super Security Handbook: http://serpentsembrace. wordpress.com/2011/04/23/ the-opnewblood-super-secret-securit y-handbook/ [10] Tor: http://www.torproject.org/ [11] I2P2: http://www.i2p2.de/ [12] Gigaloader: http:// encyclopediadramatica.ch/ Gigaloader [13] Antisec Zine: http://bolt.thexfil.es/ 84e9h!t

Conclusin
Con la anatoma del ataque a Stratfor en la mano, es obvio el largo camino recorrido por Anonymous desde su broma pesada sobre Harry Potter, y tambin queda a mucha distancia el uso de LOIC por parte de un puado de script-kiddies. Anonymous ha demostrado que tiene la capacidad de movilizar un gran nmero de adeptos para llevar a cabo operaciones tanto dentro como fuera de Internet. A pesar de que algunas de las operaciones del grupo pueden tener legitimidad en el contexto del ejercicio de los derechos democrticos, muchos de los recientes ataques cruzan la lnea de la legalidad hacia la delincuencia. Anonymous puede desbaratar el trfico con un ataques bsicos DDoS, pero tambin puede acceder y robar informacin. Visto as, Anonymous podra considerarse como un grupo para-militar usado en ataques que violan la seguridad.

WWW.LINUX-MAGAZINE.ES

Nmero 82

79

COMUNIDAD La Perrera: Autorizacin

EST EN CAMINO
Maddog se pelea con una mentalidad firmemente anclada en el modelo del software privativo. POR JON MADDOG HALL
formarse estas alianzas se tiene acceso al cdigo que se necesita para crear un producto o servicio, mientras que la mquina del marketing se pone en marcha para anunciar la alianza de dos lderes de mercado. La parte interesante es que este procedimiento haba pasado ahora al Software Libre, o por lo menos mis amigos en Israel as lo crean. En realidad, nada podra estar ms lejos de la verdad. Desde un punto de vista legal, el Software Libre y el Cdigo Abierto slo requieren que se respete la licencia que les acompaa. A menos que no entiendas el texto de la licencia, no es necesario que intervengan los abogados. A menos que el uso y distribucin comercial est prohibido, los gerentes de producto no necesitan involucrarse en negociaciones sobre el precio del software de base. Esto no es cierto con el software privativo de cdigo cerrado. Todava recuerdo lo ocurrido, en la poca en la que trabajaba para Digital Equipment Corporation, cuando estbamos a punto de llevar a cabo nuestra segunda oferta comercial de Unix llamada Ultrix-32, una versin de Unix para sistemas con procesadores VAX. Nuestras negociaciones con AT&T sobre las licencias llevaron tanto tiempo, que finalmente creamos la ya clebre placa de matrcula de pega Unix Live Free or Die para apaciguar a nuestros clientes que queran obtener su licencia del Unix de DEC. Lo primero que hicimos, antes de acometer el proyecto, fue iniciar las negociaciones sobre licencias con AT&T, y la ltima cosa, antes de enviar el producto, fue negociar las licencias con AT&T. Aunque este proceso genera empleo para muchos jefes de producto y abogados de ambas partes, es caro y no es necesario para el software libre. Las negociaciones con AT&T no terminaron ni con el primer envo. Generalmente, una vez al ao tenamos que volver a negociar licencias para asuntos como el aumento de potencia de los procesadores, las diferencias entre las licencias de servidor y de estaciones de trabajo, sistemas de varios procesadores y (mi favorito) las estaciones de trabajo multiusuario, en las que un ordenador no slo era utilizado por la persona registrada en la consola principal, sino que poda tener otros usuarios conectados a travs de Internet usando el mismo sistema, como en un sistema de tiempo compartido. Evidentemente, las cuestiones de licencia no slo incumben a los proveedores, ya que el usuario final paga un precio adicional por los derechos. Llevar la cuenta de las licencias y su cumplimiento a menudo ocupa buena parte del tiempo del administrador de sistemas, as como la gestin de las licencias realizada por los mandos intermedios. Se ha creado ms de un sistema de gestin de licencia de software para realizar el seguimiento y la administracin de las licencias de software. El Software Libre trae consigo sus propios problemas con las licencias. Las licencias del software libre tienen restricciones que requieren un cuidadoso trabajo y estudio, especialmente cuando un software mezcla diferentes tipos de licencias en un solo producto de software, pero en mi opinin, estas cuestiones estn muy lejos de ser tan complejas y tediosas como las negociaciones que conllevan el software privativo. Dej Israel y continu hacia oriente, hacia Nueva Delhi, en la India. All asist a una feria y me reun con ms empresas potenciales usuarias de GNU/Linux. Una vez ms, me qued asombrado por la falta de empresas de software libre en un pas tan grande, as que pregunt por qu no haba tantas como yo esperaba. Dijeron: Estamos esperando la carta de autorizacin Carpe Diem! I

ace unos aos hice un largo viaje por Israel y la India. Cuando llegu a Israel, fui a una conferencia de informtica y habl sobre GNU/Linux y el Software Libre. Israel es un pas muy dinmico, con un montn de gente emprendedora, y me asombr encontrar slo una o dos empresas que trabajaban con software libre. Pregunt a algunas de las personas en la conferencia por qu daba la sensacin de que faltaban empresas que trabajasen con GNU/Linux y software libre en general. Estamos esperando la carta de autorizacin, fue la respuesta. El qu?, pregunt Ya sabes, me dijeron, si furamos partners de una empresa, nos mandaran una carta diciendo que somos los partners autorizados y que los clientes pueden trabajar con nosotros. Pero necesitamos una carta de autorizacin. Les expliqu que no slo no haba ninguna persona o entidad que pudiera darles una carta de autorizacin para GNU/Linux, sino que adems no la necesitaban. Sin embargo, yo saba por qu estaban esperando la carta. Habiendo trabajado en diversas empresas de informtica durante aos y despus de haber formado parte de varias sociedades, saba lo que era una carta de autorizacin, el documento que sigue a varios meses de negociaciones del contrato y semanas de comunicaciones entre abogados, gerentes de producto y contactos tcnicos para crear alianzas. Por lo general, despus de

80

Nmero 82

WWW.LINUX-MAGAZINE.ES

PRXIMO NMERO

Seguridad
Tu infraestructura informtica es slo tan segura como su parte ms dbil, es decir, el humano que lo controla. El mes que viene patrullamos nuestras redes, protegemos nuestros datos con cifrado duro y eliminamos ficheros confidenciales de manera definitiva. Mantn tus sistemas seguros con Linux Magazine nmero 83.

Sguenos en nuestras redes sociales: Facebook: facebook.com/linuxmagazine.es Twitter: twitter.com/linux_spain Google+: plus.google.com/b/101673494113753130304/ Identi.ca: identi.ca/linuxspain/

RF 1, 123 ald122 archib

A LA VENTA: JUNIO 2012


82
Nmero 82
WWW.LINUX- MAGAZINE.ES

You might also like