Linux Magazine 78

73
DVD L inux Mint lleva encabezando el “Top 100” (DistroWatch) desde hace ya algunos meses, siendo la primera distro comunitaria, no apoyada por ninguna empresa en particular, que consigue mantenerse consistentemente en este puesto en mucho tiempo. A pesar de basarse en Ubuntu, Linux Mint está siguiendo su propio camino en muchos aspectos. Por ejemplo, deci- diendo no implementar Unity, sino una versión muy modificada de Gnome3, con un aspecto muy similar a Gnome2. Esta decisión se basa en el hecho de que los desarrolladores consideran que se facilita la transición de un concepto de escritorio a otro. También trae de serie otro escritorio llamado MATE (en honor da la tradicional bebida uruguaya), que es un fork para seguir desarrollando Gnome2. Por la cara B traemos OpenSUSE 12.1, una de las distros tradicionalmente gran- des que incluye muy interesantes nove- dades. Por citar dos, y aparte de los nue- vos escritorios KDE 4.7 y Gnome 3.2, OpenSUSE es la primera en implementar gestión de color para estos escritorios, una tecnología habitual en plataformas Mac y que unifica el aspecto de color en todos los dispositivos. También viene con Snapper, una tecnología basada en el nuevo sistema de ficheros Btrfs que per- mite ver y volver a versiones de archivos anteriores sin tener que implementar aplicaciones específicas para esa tarea. LINUX MINT “LISA” Y OPENSUSE 12.1 Este DVD es de dos caras, aunque funciona igual que un DVD conven- cional, es decir, el lector siempre lee la cara que está hacia abajo. Para evi- tar confusiones, la etiqueta de cada distro está en la cara opuesta a la de sus datos. Por tanto, para empezar a usar LinuxMint 12, la etiqueta con la palabra “LinuxMint” tiene que estar hacia arriba, y viceversa para usar OpenSUSE. DVD de Dos Caras ¿DVD DEFECTUOSO? Si crees que tu DVD está en mal estado, escríbenos a [email protected] para diagnosticarlo o para que te enviemos uno nuevo. 3 Número 78 WWW.LINUX - MAGAZINE.ES [1] Sitio de LinuxMint: http://linuxmint. com/ [2] OpenSUSE en Castellano: http:// www.opensuse.org/es/ RECURSOS Este DVD contiene dos caras, con LinuxMint 12 por un lado y OpenSUSE 12.1 por el otro. LinuxMint viene en versión “Live” y de instalación, por lo que puede ser arran- cada y probada sin instalar nada en el disco duro. OpenSUSE sólo viene en versión de instalación. 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 arran- que 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. Pos- teriormente se guardan los cambios y se sale de la herramienta de configuración para que se reinicie el arranque. Como cada BIOS es dife- rente, recomendamos consultar la documentación del fabricante para realizar esta operación. Arranque

Transcript of Linux Magazine 78

Page 1: Linux Magazine 78

DVD

Linux Mint lleva encabezando el

“Top 100” (DistroWatch) desde

hace ya algunos meses, siendo la

primera distro comunitaria, no apoyada

por ninguna empresa en particular, que

consigue mantenerse consistentemente

en este puesto en mucho tiempo.

A pesar de basarse en Ubuntu, Linux

Mint está siguiendo su propio camino en

muchos aspectos. Por ejemplo, deci-

diendo no implementar Unity, sino una

versión muy modificada de Gnome3,

con un aspecto muy similar a Gnome2.

Esta decisión se basa en el hecho de que

los desarrolladores consideran que se

facilita la transición de un concepto de

escritorio a otro. También trae de serie

otro escritorio llamado MATE (en honor

da la tradicional bebida uruguaya), que

es un fork para seguir desarrollando

Gnome2.

Por la cara B traemos OpenSUSE 12.1,

una de las distros tradicionalmente gran-

des que incluye muy interesantes nove-

dades. Por citar dos, y aparte de los nue-

vos escritorios KDE 4.7 y Gnome 3.2,

OpenSUSE es la primera en implementar

gestión de color para estos escritorios,

una tecnología habitual en plataformas

Mac y que unifica el aspecto de color en

todos los dispositivos. También viene

con Snapper, una tecnología basada en el

nuevo sistema de ficheros Btrfs que per-

mite ver y volver a versiones de archivos

anteriores sin tener que implementar

aplicaciones específicas para esa tarea. �

LINUX MINT “LISA”

Y OPENSUSE 12.1Este DVD es de dos caras, aunque

funciona igual que un DVD conven-

cional, es decir, el lector siempre lee

la cara que está hacia abajo. Para evi-

tar confusiones, la etiqueta de cada

distro está en la cara opuesta a la de

sus datos. Por tanto, para empezar a

usar LinuxMint 12, la etiqueta con la

palabra “LinuxMint” tiene que estar

hacia arriba, y viceversa para usar

OpenSUSE.

DVD de Dos Caras

¿DVD DEFECTUOSO?

Si crees que tu DVD está en mal estado, escríbenos a

[email protected] para diagnosticarlo o para que

te enviemos uno nuevo.

3Número 78W W W . L I N U X - M A G A Z I N E . E S

[1] Sitio de LinuxMint: http:// linuxmint.

com/

[2] OpenSUSE en Castellano: http://

www. opensuse. org/ es/

RECURSOS

Este DVD contiene dos caras, con

LinuxMint 12 por un lado y OpenSUSE

12.1 por el otro.

LinuxMint viene en versión “Live” y de

instalación, por lo que puede ser arran-

cada y probada sin instalar nada en el

disco duro. OpenSUSE sólo viene en

versión de instalación.

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 arran-

que 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. Pos-

teriormente se guardan los cambios y

se sale de la herramienta de

configuración para que se reinicie el

arranque. Como cada BIOS es dife-

rente, recomendamos consultar la

documentación del fabricante para

realizar esta operación.

Arranque

Page 2: Linux Magazine 78

EDITORIAL

4 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Uno de las subtramas más intere-

santes de 1984 de George Orwell

sigue los esfuerzos del partido

en el poder para crear un diccionario

definitivo de la lengua inglesa que

corresponda con la ortodoxia del régi-

men. Cabe preguntarse por qué es tan

importante la elaboración de un diccio-

nario para un régimen íntegramente dic-

tatorial y por qué es tan importante para

Orwell, que llega a dedicarle un apén-

dice en el libro.

Orwell sostiene que el control del len-

guaje es crítico para el control de los

pensamientos. No en vano tenemos un

diálogo interior que se expresa con pala-

bras. De hecho, el esfuerzo de los acadé-

micos del régimen totalitario descrito en

el libro es eliminar palabras y reducir

acepciones para dejar un lenguaje de uti-

lidad puramente transaccional, que

impida que las voces dentro de nuestras

cabezas puedan expresar ninguna forma

de disensión.

Desafortunadamente, no es sólo en la

distopía Orwelliana donde se busca la

eliminación de vocablos, y es doble-

mente desafortunado que no sea sólo el

estado el que se encarga de ese sucio tra-

bajo. Ahora mismo, la palabra “libre”

está siendo objeto de un ataque concer-

tado y premeditado para su descrédito y

eliminación del contexto de la industria

del software. Se pretende cambiar por el

de “abierto”, mucho más manipulable,

algo que permite que, de manera similar

al término “neutralidad”, pueda ser

retorcido para que signifique todo o nada

y, a menudo, ambas cosas a la vez.

Nunca oirás ninguna de las grandes

corporaciones de software (o hardware)

hablar de nada que no sea “código

abierto”, ni siquiera a las consideradas

como las más amigables con la tecnolo-

gía. Ni Intel, ni IBM, ni Oracle, ni Google

se atreven a usar “Software Libre” en sus

notas de prensa o descripciones de pro-

ductos. Es una medida preventiva:

“libre” es un término demasiado poco

ambiguo.

Abierto, por otro lado, es otro cantar.

Hace unas semanas asistí a una confe-

rencia de un representante de Microsoft

que pretendía vender la moto de lo

“abierto” de la empresa sin que ninguna

de las políticas que mencionó contem-

plara el mostrar ni una línea de código

de sus productos. Unos días después un

profesor de universidad me confesaba

que no se atrevía a utilizar el término

“Software Libre” en una encuesta por-

que no era “políticamente correcto”.

Si éste es el caso, lo mojigata ñoñería

de lo PC debe ser descartada definitiva-

mente de una vez por todas. Asociar la

liberación de código con algo ofensivo es

totalmente injustificable y demostraría

que a los censores modernos les mueven

las mismas motivaciones que a los anti-

guos: el control y los intereses.

Curiosamente, la disputa sobre el uso

de la palabra “libre” no trasciende fuera

del ámbito TI. Es más, no trasciende

fuera del ámbito TI que tenga que ver

con el software libre. Es cierto que el tér-

mino “código abierto” fue acuñado en el

seno de la comunidad (por razones que

ahora parecen triviales si se compara con

el daño que puede ocasionar), pero tam-

bién es cierto que ha sido apropiado por

agentes que no tienen ningún interés en

que el modelo al que originariamente

describe (en principio y a efectos prácti-

cos, idéntico al del Software Libre) per-

dure. Tal y como demuestra la campaña

de Microsoft “Building Bridges” citada

arriba, considerándose completa la pri-

mera fase consistente en denigrar el tér-

mino “libre”, la segunda, consistente en

redefinir “abierto”, ya está en marcha.

Pero, insisto, es dentro de la comuni-

dad y, sobre todo en la industria del Soft-

ware Libre, donde el debate “libre” ver-

sus “abierto” más se disputa. A la mayo-

ría de las empresas a las cuales la tecno-

logía podría servir les da igual un tér-

mino u otro, en la mayoría de los casos

ni siquiera saben la diferencia entre free

software y freeware, y en ese contexto la

palabra libre es de todo menos “sucia”.

No puede ser de otra manera. El

empresario que alegue que “no le

importa la libertad”, está cayendo en

una falacia similar a la del empresario

que declara que “una empresa sólo está

para hacer dinero”. Si volvemos a

Orwell, uno de los fundamentos de la

tiranía es la ausencia de libertad, y según

Christopher Hitchens, una definición de

tiranía es que es aquel régimen en el que

las leyes o se basan en principios arbitra-

rios, son en sí arbitrarias, se aplican de

manera arbitraria, son imposibles de

cumplir, o una combinación de todo lo

anterior. Aplicado al tema que nos

ocupa, un principio arbitrario es, por

ejemplo, que diferentes ciudadanos, por

mor de su extracción social, sexo, raza o

credo, tengan diferente trato ante la ley.

Imagina por ejemplo que a los gitanos o

mujeres, por citar a dos colectivos que

han sido tradicionalmente discriminados

en España, no se les permitiera regentar

un negocio. Una aplicación arbitrara de

la ley es que uno, por ser familiar de un

alto funcionario por ejemplo, pueda

optar a un licencia de obra que se

deniega a los demás.

Por tanto, las tiranías, es decir los regí-

menes donde los ciudadanos no disfru-

tan de libertad, son intrínsecamente

corruptos, y una buena vara para medir

el grado de libertad de una sociedad es

medir su corrupción: a más corrupción,

más represión. La correlación entre

corrupción y tiranía es fácilmente com-

probable empíricamente: no tenemos

más que examinar los índices de percep-

ción de corrupción publicadas por Trans-

parency International. Su lista muestra

que, mientras que hay alguna democra-

cia que suspende en el ranking, no hay

ninguna dictadura que apruebe.

Hay cínicos que alegarán que las dicta-

duras, aunque “malas” para el indivi-

duo, son buenas para los negocios, y

probablemente estén pensando en

China. ¡Oh, sí, China! Puede que la falta

de libertades fundamentales funcione a

nivel de país (aunque no siempre:

véanse Corea del Norte o Ruwanda),

pero permite que dude que este régimen

autocrático en el que, siguiendo la defi-

nición de Hitchens, las reglas son arbi-

trarias y la vasta mayoría de la población

vive en un estado de semi-esclavitud, y

siendo uno de los países con mayor

NO LO DIGAS…

Continúa en página 89 ���

Page 3: Linux Magazine 78

corrupción del mundo, sea un modelo sos-

tenible para el desarrollo económico a largo

plazo. Desde luego, como siempre ocurre

en estos sitios, los negocios funcionan muy

bien para quienes participan en la corrup-

ción del sistema, pero no se puede construir

un mercado saludable a base de chanchu-

llos, soborno, estafas, negociaciones a

puerta cerrada, nepotismo, apadrinamiento

y falsificación de estadísticas.

En esa economía no rige la industria los

emprendedores más competentes, sino los

que más políticos tienen comprados. Y su

fuerza es la fuerza bruta, la de la explota-

ción sistemática y deshumanizante de sus

semejantes. Eso funcionará durante algún

tiempo, pero es un sistema inestable abo-

cado al fracaso.

Este es el quid de la cuestión: una econo-

mía, para ser consistentemente próspera ha

de ser estable. No es casualidad que las eco-

nomías con legislaciones más justas, más

cimentadas en los derechos fundamentales

y en el sentido común, es decir, más libres,

suelan ser economías más estables, con una

entorno de tu negocio (o doméstico, que lo

mismo da) de la manera que consideres

oportuna, son cosas intrínsecas al software

libre, pero no al software propietario.

Y son libertades, no “aperturas”.

Así que la próxima vez que creas que es

más apropiado hablar de “abierto” en vez

de “libre” porque temes ofender a un

empresario, piénsalo muy bien, que es muy

fácil quedar como un tonto en esta cues-

tión. Decir que no hace falta libertad para

un negocio, es como decir que no hace falta

oxígeno. Si los empleados pueden pasar sin

respirar, nada que objetar, pero permite que

lo dude.

Si no te convence, considera relocalizar tu

propia empresa a Corea del Norte y ya me

dirás cómo te va. ■

Paul C. Brown

Director

EDITORIAL

79Número 78W W W . L I N U X - M A G A Z I N E . E S

mayor igualdad social y una mayor prospe-

ridad en general.

Incluso si bajamos varios niveles de lo

macro a lo microeconómico de las empresas

individuales, es fácil ver cómo la libertad,

incluso la del software, es, por lo general,

inmediatamente beneficiosa para el nego-

cio. Stallman alega que renunciar a la liber-

tad en el código conlleva inevitablemente a

la renuncia de la libertad en otros ámbitos.

Es fácil ver que tiene razón: estamos habi-

tuados a oír cómo muchas de las “cajas

negras” del software propietario violan sis-

temáticamente la privacidad de sus usua-

rios remitiendo datos confidenciales sobre

sus actividades a terceros. El derecho a la

privacidad en las comunicaciones, el dere-

cho a mantener los datos de la empresa, ya

sean los detalles de los clientes, los planes

de marketing o las especificaciones de un

nuevo producto, constituyen un derecho

que no se puede garantizar con software

propietario, pero sí con software libre. Y hay

más: El derecho a elegir libremente a tu pro-

veedor, a poseer el software que compras, la

libertad de usar las aplicaciones en el

⊳⊳⊳ Viene de página 4

NO LO DIGAS…

Page 4: Linux Magazine 78

“Los abogados siguen nerviosos con

el tema de las patentes de “Carmack’s

Reverse’. Voy a escribir nuevo código

para el lanzamiento [de la versión GPL]

de Doom3.”

Un día después y como respuesta a un

seguidor que le preguntaba si no encon-

traba frustrante tener que reescribir el

código, twitteó:

“Esto demuestra la idiotez de la

patente – las solución ha consistido en

añadir cuatro líneas de código y modifi-

car otras dos.”

Finalmente, el 23 de noviembre, el

código fuente de Doom 3 se publicó bajo

licencia GPL v3. �

NOTICIAS

aquí viene el quid de la cuestión: aun-

que como su nombre indica, el algo-

ritmo fue creado y utilizado por Car-

mack para sus juegos, fue patentado por

Creative.

Cuando Creative amenazó a Id con lle-

varlos a juicio por infracción, apareció

un tercer actor, Sim Dietrich de Nvidia,

quien ya había pos-

tulado los principios

del sistema de som-

breado en una

charla de 1999.

Aún así, Id fue

obligado a pactar

con Creative y tuvo

que incorporar tec-

nologías Creative en

Doom 3 para evitar

una potencialmente costosa pelea legal.

Y así quedó la cosa… hasta que llega

la hora de liberar el código.

Después de varias demoras sin expli-

car, Carmack reveló el 16 de diciembre

en su Twitter:

Doom 3 y sus PatentesJohn Carmack creador de juegos legen-

darios como Wolfenstein, Doom y

Quake, nunca ha sentido simpatía por

las patentes de software. Después de las

tribulaciones que le han causado última-

mente, sospechamos que su desprecio

no ha hecho más que aumentar.

La historia va

como sigue: Todo

comenzó cuando

Carmack pretendió

liberar el motor

Doom 3, cosa que

había prometido

hacer, tal y como

viene haciendo

con todos los jue-

gos de su empresa,

Id. El motor contiene un algoritmo

denominado “Carmack’s Reverse” [1],

un sistema para el cálculo de sombras

en escenarios 3D y utilizado extensa-

mente en el juego (y en casi todos los

First Person Shooters posteriores). Pero

Derechos Humanos antesque Derechos de Autor

Según el Tribunal de Justicia de la

Unión Europea, la monitorización para

detectar infracciones contra los dere-

chos de autor es ilegal.

En una nota de prensa emitida por el

alto tribunal europeo se deja muy claro

que, a pesar de que los derechos deriva-

dos del copyright están muy asentados

en la jurisprudencia europea, no se dice

en ningún sitio que sean inviolables.

Sin embargo, la intimidad de los usua-

rios, incluso la de aquellos sospechosos

de utilizar redes P2P para la disemina-

ción de obras protegidas, sí lo es.

La nota viene a raíz de Scarlet

Extended SA, un proveedor de servi-

cios de Internet, contra SABAM, el

equivalente de la SGAE belga. El

segundo exigía al primero que insta-

lara una infraestructura de monitoriza-

ción para detectar violaciones cometi-

das por sus clientes.

Scarlet decidió recurrir a los tribuna-

les al entender que esto violaría un

derecho básico, el de la confidenciali-

dad de las comunicaciones de sus clien-

tes, y el Tribunal de Justicia de la Unión

Europea de Justicia le ha dado la razón.

Esta sentencia tiene profundas impli-

caciones para legislaciones que preten-

den cortar o acotar conexiones o tomar

medidas legales contra usuarios bajo

sospecha de compartir obras protegi-

das. Estas leyes, que las empresas de

medios están intentando que se imple-

menten a lo largo y ancho de Europa,

se vuelven ineficaces, ya que no se

podría contar en ningún caso con

mecanismos para ayudar a establecer si

de verdad se está produciendo la infrac-

ción. �

NOTICIAS

[1] Enlace a la nota de prensa: http://

curia. europa. eu/ jcms/ upload/ docs/

application/ pdf/ 2011-11/ cp110126en.

pdf

[2] Sentencia completa: http:// curia.

europa. eu/ jurisp/ cgi-bin/ form.

pl?lang=EN&Submit=rechercher&nu

maff=C-70/ 10

RECURSOS

[1] Carmack’s reverse: http:// en.

wikipedia. org/ wiki/ Shadow_volume

[2] John Carmack rescribe las partes

afectadas: https:// twitter. com/ #!/

ID_AA_Carmack/ status/

136614459887202305

RECURSOS

8 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Page 5: Linux Magazine 78

PORTADA • Montando un Cluster

10 Número 78 W W W . L I N U X - M A G A Z I N E . E S

pleto de servidores 1U (Figura 1). El

cluster puede ser tan pequeño como

cuatro nodos, o puede llenar un rack

completo con equipamiento. (Véase el

cuatro titulado “Especificaciones Hard-

ware” para más información sobre la

configuración hardware usada para este

artículo).

Antes de EmpezarAntes de que profundicemos sobre cuá-

les son los pasos de configuración,

comenzaremos viendo algunos puntos

sobre planificación y compra. Al ser un

programador de sistemas acostumbrado

a trabajar sólo con código, con frecuen-

cia me sorprendo por la cantidad de

problemas de logística que necesitan

considerarse en el mundo real.

Antes de que encarguemos nuestro

hardware, será mejor que pensemos

acerca de algunas cuestiones básicas.

¿Por qué necesitamos un cluster? ¿Qué

hacen nuestros usuarios? ¿Es un cluster

la solución adecuada? ¿Se han tomado

los requisitos del sistema y se ha deci-

dido una especificación base? Debere-

mos comenzar por un presupuesto ini-

cial de la marca que seleccionemos. A

partir de ahí nos moveremos hasta con-

seguir como mínimo otros dos presu-

puestos de marcas de la competencia

similares. Aún con estos presupuestos

que pueden compararse, deberemos

avanzar un poco más. Solicitaremos si

podemos ejecutar algún trabajo típico

que esperamos usar en nuestro cluster

sobre el hardware ofertado en algún

laboratorio del vendedor para poder

hacer mediciones de rendimiento. ¿Cuá-

les son los cuellos de botella de la apli-

cación? ¿podemos usar el presupuesto

inicial para maximizar el rendimiento

medido?

Antes de lanzar la orden de compra

deberemos considerar los problemas de

espacio y logísticos. ¿El hardware será

montado, cableado y verificado por el

Los clusters de computación de

alto rendimiento, High-Perfor-

mance Computing (HPC) en

inglés, se caracterizan por sus procesa-

dores de múltiples núcleos, por sus

grandes cantidades de memoria, la red

de alta velocidad y enormes almacenes

de datos – todos ellos compartidos entre

múltiples servidores montados en

racks. Los programas de usuario que se

ejecutan en un cluster son llamados tra-

bajos, y se gestionan normalmente

mediante un sistema de colas para un

uso óptimo de todos los recursos dispo-

nibles. Un cluster HPC está formado por

muchos servidores separados, llamados

nodos, que posiblemente llenan com-

pletamente un centro de datos con

docenas de racks que consumen mucha

potencia eléctrica. Los HPC se usan

habitualmente para simular modelos

numéricos o análisis de datos proceden-

tes de la instrumentación científica. En

el centro del HPC hay hardware fácil de

manejar y software de sistema gestio-

nado por los programadores de siste-

mas, los cuales permiten a los investiga-

dores concentrar sus energías en

desarrollar sus programas. Este artículo

describe un conjunto de software básico

que puede ser el punto de inicio de

nuestro propio cluster HPC

¿A qué se parece un cluster HPC? El

cluster típico para un grupo de investi-

gación puede contener un rack com-

vendedor? ¿Dentro o fuera de nuestro

local? ¿Hemos reservado espacio

suficiente en el rack para alo-

jar el equipo? Un cluster

genera mucho calor,

así que es

importante

la locali-

zación

de la

sala de

servi-

dores.

Este espa-

cio debe

tener una

capacidad de

enfriamiento adecuada.

¿Estamos intercalando los ser-

vidores que más calor disipan en la

sala de servidores? Una vez decidido el

lugar, deberemos pedir cita para un pre-

supuesto de un electricista, sin olvidar

gestionar todas las peticiones necesarias

para el alta de la red, el inventario y las

tarjetas/ llaves de acceso para los princi-

pales administradores del sistema. No

importa cuánto planifiquemos, al final

siempre surgirá algún imprevisto.

Deberemos asegurarnos de plantear

un esquema de copias de seguridad e

incluirlo en el presupuesto. Los backups

pueden duplicar el coste de almacena-

miento, y pueden fundir el resto del pre-

supuesto, si aún queda algo. Siempre

deberemos asegurarnos de que tenemos

la configuración rack adecuada, el vol-

taje correcto para los PDUs y los enchu-

fes apropiados, y sólo los sistemas nece-

sarios conectados al UPS. También

deberemos asegurarnos de antemano de

que hemos adquirido todas las licencias

del software y los medios de instala-

ción. Si es posible, solicitaremos al ven-

dedor que lo ensamble y lo integre fuera

de la sala. El vendedor debe proporcio-

nar un equipo entrenado, con un seguro

de servicio de entrega para entregas al

HPC del mundo real paso a paso

DE CERCAMontamos un cluster HPC real con Kickstart, SSH, Son of Grid Engine y otras herramientas libres.

POR GAVIN W. BURRIS

Gavin W. Burris es programador senior

de sistemas de la Escuela de Artes y

Ciencias de la Universidad de Pennsyl-

vania. En su puesto en el grupo de

Seguridad de Sistemas Unix trabaja

con clusters HPC, gestión de habita-

ciones de servidores, ordenadores de

escritorio de investigación, gestión de

contenidos web y sistemas de almace-

namiento masivo. Mantiene un blog

en: http:// idolinux. blogspot. com

EL AUTOR

Page 6: Linux Magazine 78

interior de la sala donde se ha reser-

vado la zona de instalación, mediante

un camión con grúa, y elimina-

ción de los residuos. Un rack ya equi-

pado puede pesar literalmente una

tonelada. Si se cae en el camión de

entrega, seguramente no querrás ser ni

el responsable ni el que está debajo. Y

otra cosa, ya sabemos que NO es posi-

ble realizar entregas no programadas

dentro de la sala de servidores.

La ConfiguraciónUna vez tengamos todo planificado,

hayamos seleccionado al vendedor y

realizado la entrega del sistema, es hora

de la instalación del software y su

configuración. Para algo tan complicado

como un cluster HPC, todas las configu-

raciones que vamos a mostrar pueden

cambiar, pero la configuración de ejem-

plo descrita en este artículo es sufi-

ciente para dar una idea del tipo de

decisiones a las que nos enfrentaremos

si lo intentamos por nuestra cuenta.

Para este artículo hemos supuesto

que se tienen ciertos conocimiento en la

gestión y configuración de entornos

Linux. La mayoría de los comandos

mencionados en él están documentados

en su página de manual, aunque tam-

bién podemos buscar información adi-

cional en la documentación de Red Hat

Enterprise Linux [1] o en la de CentOS

[2]. Concretamente, la Guía de Instala-

ción de Red Hat Enterprise Linux

[3] y la sección de instalaciones

con Kickstart (para instala-

ciones desatendidas) [4]

son lecturas

importantes.

Los pasos

esenciales para

levantar y hacer que

funcione nuestro cluster

HPC son:

1. Crear el nodo de admi-

nistra-

ción y

configu-

rarlo para

que actúe

como servidor

de instalación

para los nodos

de cómputo

del cluster.

Esto incluye

configurar el

sistema para

recibir cone-

xiones PXE de

cliente, así

como la

configuración

necesaria para

posibilitar las

instalaciones

automáticas

desatendidas

con Kickstart.

2. Arrancar los

nodos de

cómputo uno

a uno, conec-

tándolo al ser-

vidor de admi-

nistración y

lanzando la

instalación.

3. Cuando tenga-

mos todos los

nodos encen-

didos y en

funciona-

miento, insta-

lar un sistema de colas de trabajo

para hacerlos funcionar conjunta-

mente como un cluster de alto ren-

dimiento.

En este punto, asumiremos que tene-

mos el rack de equipos perfectamente

cableado (Figura 2) y enchufado a la

corriente, y alojado en las instalaciones

adecuadas. Llamaremos al sistema com-

pleto Fiji, un nombre corto y fácil de

escribir. Antes de ir a la sala de servido-

res, el primer paso es descargar y que-

mar un DVD de instalación de CentOS

para 64-bits [5], cuya versión actual es

la 5.6.

Una vez tengamos el disco, pasare-

mos a instalarlo en el nodo de adminis-

tración, que actuará como servidor de

instalación desatendida para automati-

zar la instalación de todos los nodos de

Montando un Cluster • PORTADA

11Número 78W W W . L I N U X - M A G A Z I N E . E S

• 42U rack

• 1U KVM

• 3000VA UPS 208 Volt

• Dell PowerConnect 6248 gigE switch

• 2x Dell PowerEdge R610 para los nodos de cabeza/ identifica-

ción y almacenamiento / administración

• 2x Dell PowerVault MD1000 para 12TB de almacenamiento

• 29x Dell PowerEdge R410 nodos de cómputo

• 29x quad data rate HBAs & 1x switch InfiniBand interconec-

tado de fábrica de QLogic

Especificaciones Hardware

Figura 1: Un cluster nuevo aún sobre el palé.

Page 7: Linux Magazine 78
Page 8: Linux Magazine 78
Page 9: Linux Magazine 78

PORTADA • Montando un Cluster

14 Número 78 W W W . L I N U X - M A G A Z I N E . E S

cluster de mayor

tamaño.

Los nodos de

administración/

almacenamiento y

el nodo “cabeza”/

identificación tie-

nen múltiples

interfaces Ether-

net. La primera

interfaz (eth0)

conecta a la red

privada interna

(192.168.1.0)

mediante un

switch de un giga-

bit, donde sucede

toda la comunica-

ción interna entre

los nodos y las

interfaces de ges-

tión. La segunda

interfaz Ethernet

(eth1) conecta la

red pública para

usuarios remotos y

entrada del admi-

nistrador. Es

importante tenerlo

en cuenta, ya que

en este caso, las placas base de gestión

de tarjetas controladoras (BMC/ RAC),

que se controlan con IPMI [7], están

configuradas para compartir el primer

puerto Ethernet. Esto significa que vere-

mos dos direcciones MAC diferentes y

dos IPs diferentes en el puerto eth0;

queremos que ambas estén en la red

interna.

Comenzaremos enganchando el con-

mutador teclado-vídeo-ratón (KVM) al

nodo de administración y lo encendere-

mos. Comprobaremos la configuración

de la BIO, estableceremos una contra-

seña y eligiremos un orden en las uni-

dades de arranque. Luego configurare-

mos el BMC, estableciendo un nombre

de usuario para el administrador y una

contraseña, y configuraremos la direc-

ción IP interna del dispositivo.

Todo debería ser redundante en los

nodos de administración/ almacena-

miento y “cabeza”/ identificación,

incluidas las unidades raíz, que almace-

narán el sistema operativo. Configurare-

mos un espejo RAID 1 para la unidad

raíz interna mediante la BIOS RAID.

En este punto necesitaremos configu-

rar los gabinetes de almacenamiento de

cómputo que forman el resto del cluster.

Aunque este artículo está orientado a la

instalación de un cluster con hardware

suficiente para cubrir las necesidades

de una empresa, no hay razones para

que uno no pueda seguir estos pasos

sobre ordenadores de escritorio conec-

tados mediante un modesto hub de

10Mb, al menos mientras los servidores

sean capaces de arrancar desde una red

con PXE [6]. PXE (siglas de Preboot

eXecution Environment) nos permite

instalar y configurar los nodos de cóm-

puto sin tener que parar y arrancar cada

nodo desde un CD.

Cuando desplegamos un cluster

multi-usuario, donde los usuarios se

identifican mediante SSH, VNC o NX, es

buena idea tener un nodo ‘cabeza’

separado para entradas al sistema inter-

activas. Para un cluster de tamaño

pequeño o mediano, no es mala idea

combinar lo que se conoce como nodo

de almacenamiento con el nodo de

administración. En este artículo asumi-

remos que el cluster consta de un solo

rack de equipos completo, pero pode-

mos extender la técnica descrita aquí

para replicar el proceso N veces para un

datos externos. Nuestro laboratorio

tiene unos 10TB, que hemos configu-

rado como RAID 6 mas uno de repuesto

de emergencia. Recomendamos que se

inicialice completamente el almacena-

miento antes de continuar. Después de

la completa inicialización del RAID,

apagaremos el nodo y desenchufaremos

el gabinete RAID externo antes de insta-

lar el sistema operativo, ya que el parti-

cionador del instalador del sistema

puede tener problemas con discos duros

muy grandes.

Montar el Nodo deAdministraciónEl primer paso es instalar el nodo de

administración que hará también de

servidor de almacenamiento y de insta-

lación desatendida del cluster con

Kickstart. Para comenzar con la instala-

ción del nodo de administración, inser-

taremos el DVD de instalación de Cent -

OS en el sistema que hará de nodo de

administración. Arrancaremos el insta-

lador y dejaremos casi todas las opcio-

nes por defecto. Los únicos pasos dife-

rentes son: establecer una contraseña

para el arranque, la configuración de los

dos interfaces de red y cambiar SELinux

a modo permisivo. Para este ejemplo

llamaremos al nodo de administración/

almacenamiento fijistor, con IP interna

192.168.1.2. Para la selección de paque-

tes, no tocaremos los seleccionados por

defecto. Nótese que los paquetes cluster

en el instalador anaconda de CentOS no

se refieren en este contexto a un cluster

HPC.

Una vez finalizada la instalación, apa-

garemos el sistema, engancharemos la

unidad de RAID externa, quitaremos la

opción de la BIOS de “arrancar desde

DVD” y lo encenderemos. Ya podemos

admirar la nueva ventana de login.

Observe que podemos completar la

mayoría de los siguientes pasos de

forma remota usando SSH. La única vez

que necesitaremos estar físicamente en

la sala de servidores es cuando estemos

tocando la BIOS y encendiendo los

nodos por primera vez (Figura 3).

Puesto que SSH en la principal

entrada al sistema, necesitaremos blo-

quear sshd. Instalaremos y probaremos

una clave SSH personal para el usuario

root, y luego limitaremos a que sólo

puedan identificarse en el nodo de

administración los usuarios del grupo

Figura 2: El cableado del cluster se puede ir de las manos rápida-

mente, así que sea cuidadoso.

Page 10: Linux Magazine 78

de administración y usando sólo firmas

digitales. Para eso sólo tenemos que

añadir unas cuantas líneas en el fichero

de configuración de sshd /etc/ssh/sshd_

config:

PermitRootLogin without-password

AllowGroups fijiadmin

Luego añadiremos el grupo de adminis-

tración y reiniciaremos sshd:

# groupadd fijiadmin

# usermod -G fijiadmin root

# service sshd restart

Generaremos la clave SSH para la

cuenta root de fijistor, que distribuire-

mos a los nodos de cómputo:

# ssh-keygen # pulsar enter, U

sin frase de paso

# cp /root/.ssh/id_rsa.pub U

/root/.ssh/U

authorized_keys.fijistor

# chmod -R go= /root/.ssh

Si no planeamos acceder al nodo de

administración por medio de la GUI,

podemos desactivar la identificación

Montando un Cluster • PORTADA

15Número 78W W W . L I N U X - M A G A Z I N E . E S

ción de los ficheros de log, cambiando

la configuración del fichero /etc/ logro-

tate.conf:

# mantiene 4 semanas los logs

# rotate 4

rotate 999

Activaremos el reenvío de paquetes de red

en el nodo de administración, para que así

todos los nodos de ejecución puedan acce-

der a servicios públicos cuando lo necesi-

gráfica comentando una línea en el

fichero /etc/inittab. Con esto liberare-

mos algo de memoria:

# Ejecutamos xdm en

# el runlevel 5

#x:5:respawn:/etc/X11/prefdm U

-nodaemon

Ahora realizaremos la primera actuali-

zación completa de paquetes del sis-

tema – instalaremos las herramientas de

desarrollo – y rei-

niciaremos para

cargar el nuevo

kernel:

# yum -y update

# yum -y U

install U

@development-U

tools

# reboot

Es importante

mantener los logs

del sistema, por lo

que no debemos

olvidar ampliar el

tiempo de reten-

01 *filter02 :INPUT ACCEPT [0:0]03 :FORWARD ACCEPT [0:0]04 :OUTPUT ACCEPT [0:0]05 :RH-Firewall-1-INPUT - [0:0]06 -A INPUT -j RH-Firewall-1-INPUT07 -A FORWARD -j RH-Firewall-1-INPUT08 -A RH-Firewall-1-INPUT -i lo -j ACCEPT09 -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j

ACCEPT10 -A RH-Firewall-1-INPUT -p 50 -j ACCEPT11 -A RH-Firewall-1-INPUT -p 51 -j ACCEPT12 -A RH-Firewall-1-INPUT -p udp --dport 5353 -d

224.0.0.251 -j ACCEPT13 #-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j

ACCEPT14 #-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j

ACCEPT15 -A RH-Firewall-1-INPUT -m state --state

ESTABLISHED,RELATED -j ACCEPT16 ### begin ssh17 #-A RH-Firewall-1-INPUT -m state --state NEW -m

tcp -p tcp --dport 22 -j ACCEPT18 -A RH-Firewall-1-INPUT -p tcp --dport 22 --syn -s

192.168.1.0/255.255.255.0 -j ACCEPT19 -A RH-Firewall-1-INPUT -p tcp --dport 22 --syn -m

limit --limit 6/m --limit-burst 5 -j ACCEPT20 ### end ssh21 ### begin cluster22 -A RH-Firewall-1-INPUT -i eth0 -s

192.168.1.0/255.255.255.0 -j ACCEPT23 -A RH-Firewall-1-INPUT -i eth0 -d 255.255.255.255 -j

ACCEPT24 -A RH-Firewall-1-INPUT -i eth0 -p udp --dport

67:68 -j ACCEPT25 -A RH-Firewall-1-INPUT -i eth0 -p tcp --dport

67:68 -j ACCEPT26 ### end cluster27 ### begin log28 -A RH-Firewall-1-INPUT -m limit --limit 10/second -j

LOG29 ### end log30 -A RH-Firewall-1-INPUT -j REJECT --reject-with

icmp-host-prohibited31 COMMIT32 ### begin nat33 *nat34 :PREROUTING ACCEPT [0:0]35 :POSTROUTING ACCEPT [0:0]36 :OUTPUT ACCEPT [0:0]37 -A POSTROUTING -o eth1 -j MASQUERADE38 #-A PREROUTING -i eth1 -p tcp --dport 2222 -j

DNAT --to 192.168.1.200:2239 COMMIT40 ### end nat

Listado 1: /etc/ sysconfig/ iptables

Figura 3: La buena programación minimiza el tiempo usado en el

KVM.

Page 11: Linux Magazine 78

gos. En este caso limitaremos la veloci-

dad a la que se pueden reintentar las

conexiones SSH, para así atajar los ata-

ques de fuerza bruta a SSH. Todo el trá-

fico desde la red interna del cluster está

permitido. Los paquetes descartados se

registrarán para una futura depuración –

una opción que siempre podremos

comentar y desactivar si la vamos a nece-

sitar más adelante.

Finalmente, a todo

tráfico de salida

procedente de la

red interna se le

realizará NAT.

Véase el Listado 1

para las configura-

ciones importantes

del fichero /etc/

sysconfig/iptables.

Ahora recargaremos los parámetros

sysctl del kernel y reiniciaremos el cor-

tafuegos:

# service iptables restart

El siguiente paso del proceso es forma-

tear la unidad de almacenamiento RAID

externa de 10TB que está en /dev/sdx –

naturalmente, sustituyendo la unidad

correcta por sdx. Si nuestra

configuración no incluye ninguna uni-

dad de almacenamiento externa adicio-

nal, podremos saltarnos este paso.

Observe que podemos sobrescribir la

información de particionamiento pre-

viamente existente en el dispositivo y

usar luego LVM directamente (Listado

2). Yo suelo establecer el tamaño de los

metadatos para ajustar un alineamiento

ten. Para activar el reenvío IP en el nodo

de administración debemos añadir lo que

sigue en el fichero /etc/sysctl.conf:

net.ipv4.ip_forward = 1

El siguiente paso es ajustar las configura-

ciones del cortafuegos con iptables, o

nada podrá pasar a través del cortafue-

PORTADA • Montando un Cluster

16 Número 78 W W W . L I N U X - M A G A Z I N E . E S

01 # cat /proc/partitions02 # dd if=/dev/urandom of=/dev/sdx bs=512 count=6403 # pvcreate --metadatasize 250k /dev/sdx04 # pvs -o pe_start05 # vgcreate RaidVolGroup00 /dev/sdx06 # lvcreate --extents 100%VG --name RaidLogVol00

RaidVolGroup0007 # mkfs -t ext3 -E stride=32 -m 0 -O

dir_index,filetype,has_journal,sparse_super/dev/RaidVolGroup00/RaidLogVol00

08 # echo “/dev/RaidVolGroup00/RaidLogVol00 /data0ext3 noatime 0 0” >>/etc/fstab

09 # mkdir /data0 ; mount /data0 ; df -h

Listado 2: Configuración de las Particiones

01 # mkdir -p /data0/repo/CentOS/5.6/iso/x86_6402 # ln -s /data0/repo /repo03 # cd /repo/CentOS04 # ln -s 5.6 505 # wget

http://mirrors.gigenet.com/centos/RPM-GPG-KEY-CentOS-5

06 # cd /repo/CentOS/5.6/iso/x86_6407 # cat /dev/dvd > CentOS-5.6-x86_64-bin-DVD-1of2.iso08 # wget

http://mirror.nic.uoregon.edu/centos/5.6/isos/x86_64/sha1sum.txt

09 # sha1sum -c sha1sum.txt10 # mount -o loop CentOS-5.6-x86_64-bin-DVD-1of2.iso

/mnt11 # mkdir -p /repo/CentOS/5.6/os/x86_6412 # rsync -avP /mnt/CentOS /mnt/repodata /repo/Cen-

tOS/5.6/os/13 # mkdir -p /repo/CentOS/5.6/updates/x86_6414 # rsync --exclude=’debug’ --exclude=’*debug

info*’ --exclude=’repoview’ \15

--exclude=’headers’ -irtCO --delete-excluded --delete \

16 rsync://rsync.gtlib.gatech.edu/centos/5.6/upda-tes/x86_64 /repo/CentOS/5.6/updates/

17 # mkdir -p /repo/epel/5/x86_6418 # cd /repo/epel19 # wget

http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL

20 # rsync --exclude=’debug’ --exclude=’*debu-ginfo*’ --exclude=’repoview’ --exclude=’headers’ \

21 -irtCO --delete-excluded --deletersync://archive.linux.duke.edu/fedora-epel/5/x86_64 /repo/epel/5/

22 # mv /etc/yum.repos.d/* /usr/src/23 # cat /dev/null >/etc/yum.repos.d/CentOS-Base.repo24 # cat /dev/null >/etc/yum.repos.d/ CentOS-Media.

repo

Listado 3: Configuración Sistema deInstalación

01 ### Base de CentOS desde los medios de instalación02 [base]03 name=CentOS-$releasever - Base04 #mirrorlist=http://mirrorlist.centos.org/?rele-

ase=$releasever&arch=$basearch&repo=os05 #baseurl=http://mirror.centos.org/centos/$relea-

sever/os/$basearch/06 baseurl=file:///repo/CentOS/$releasever/os/$base-

arch/07 gpgcheck=108

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

09 protect=110 ### Actualizaciones CentOS vía espejos rsync11 [update]12 name=CentOS-$releasever - Updates13 #mirrorlist=http://mirrorlist.centos.org/?rele-

ase=$releasever&arch=$basearch&repo=updates14 #baseurl=http://mirror.centos.org/centos/$relea-

sever/updates/$basearch/15 baseurl=file:///repo/CentOS/$releasever/upda-

tes/$basearch/16 gpgcheck=117

gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

18 protect=119 ### Paquetes Extra para Enterprise Linux (EPEL)20 [epel]21 name=Extra Packages for Enterprise Linux 5 - $base-

arch22

#baseurl=http://download.fedora.redhat.com/pub/epel/5/$basearch

23#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch

24 baseurl=file:///repo/epel/$releasever/$basearch25 enabled=126 protect=027 failovermethod=priority28 gpgcheck=129 gpgkey=http://download.fedora.redhat.com /pub/

epel/RPM-GPG-KEY-EPEL

Listado 4: /etc/ yum.repos.d/ fiji.repo

Page 12: Linux Magazine 78

Montando un Cluster • PORTADA

17Número 78W W W . L I N U X - M A G A Z I N E . E S

de 129KB. El comando pvs informa que

si solicitamos 250KB obtendremos una

configuración de 256KB.

Creación de un Fichero deRepositorioCon el almacenamiento listo, es hora de

construir un fichero de repositorio, el

cual alimentará a todas las actualizacio-

nes por Yum del sistema y a todas las

instalaciones de los nodos usando el

programa Kickstart. Primero crearemos

una estructura de directorio con los

paquetes de instalación de base del

DVD de instalación de CentOS, y luego

traeremos las últimas actualizaciones

desde un espejo de ficheros rsync cer-

cano (Listado 3). Recomendamos bus-

car nuestro propio servidor espejo cer-

cano [8] que ofrezca el servicio rsync.

Los comandos del Listado 3 también

traen el repositorio EPEL [9] para tener

algunos paquetes adicionales.

Ahora creamos una configuración de

repositorio para yum en el fichero

/etc/yum.repos.d/fijo.repo (Listado 4).

Luego creamos un script para actualizar

el repositorio de ficheros (Listado 5).

Ya tenemos un repositorio de ficheros

con todos lo paquetes RPMs, que pode-

mos compartir vía NFS junto con los

directorios /data0 y /usr/global/. En este

cluster, los directorios home de los usua-

rios estarán en /data0/home/. Usaremos

/usr/global/ como /usr/local/, excepto

que estará montado en todos los nodos

por NFS. El script global.sh (Listado 6)

estará como enlace simbólico en todos

los nodos en

/etc/profile.d/global

.sh y establecerá

las variables de

entorno del usua-

rio.

El fichero NFS /etc/exports describe

qué directorios van a ser exportados a

otros ordenadores (ver Listado 7).

Cuando la configuración esté lista, lan-

zaremos el servidor NFS:

# chkconfig nfs on

# service nfs start

Activamos los logs remotos en syslog

de los nodos añadiendo la siguiente

línea en el fichero /etc/ sysconfig/

syslog:

SYSLOGD_OPTIONS=”-m 0 -r U

-s fiji.baz.edu”

Y reiniciamos syslog:

# service syslog restart

Todos los nombres de los nodos del

cluster junto con sus IPs deben aparecer

listados en el fichero /etc/hosts (Listado

8). Tampoco hay que olvidar activar la

01 #!/bin/bash02

OPTS=’-vrtCO --delete --delete-excluded --exclude=i386* --exclude=debug \

03--exclude=*debuginfo* --exclude=repoview --exclude=headers’

04 rsync $OPTS rsync://rsync.gtlib.gatech.edu/cen-tos/5.6/updates/x86_64 /repo/CentOS/5.6/updates/

05 rsync $OPTSrsync://archive.linux.duke.edu/fedora-epel/5/x86_64 /repo/epel/5/

Listado 5: /root/ bin/ update_repo.sh

01 # Grid Engine02 export SGE_ROOT=/usr/global/sge03 . /usr/global/sge/default/common/settings.sh04 alias rsh=’ssh’05 alias qstat=’qstat -u “*”‘06 07 # Compiladores Intel08 . /usr/global/intel/Compiler/11.1/064/bin/icc-

vars.sh intel6409 . /usr/global/intel/Compiler/11.1/064/bin/ifort-

vars.sh intel6410 .

/usr/global/intel/Compiler/11.1/064/mkl/tools/environment/mklvars64.sh

11 exportINTEL_LICENSE_FILE=/usr/global/intel/licenses:$INTEL_LICENSE_FILE

Listado 6: /usr/ global/ etc/ profile.d/ global.sh

01 # yum install dhcp xinetd tftp tftp-server syslinux02 # mkdir -p /usr/global/tftpboot ; ln -s /usr/glo-

bal/tftpboot /tftpboot03 # mkdir -p /tftpboot/pxelinux.cfg /tftpboot/ima-

ges/centos/x86_64/5.604 # cd /tftpboot/images/centos/x86_64/ ; ln -s 5.6 505 # rsync -avP /mnt/isolinux/initrd.img /mnt/isoli-

nux/vmlinuz /tftpboot/images/centos/x86_64/5.6/06 # cd /usr/lib/syslinux07 # rsync -avP chain.c32 mboot.c32 memdisk menu.c32

pxelinux.0 /tftpboot/08 # mkdir -p /usr/global/kickstart ; ln -s /usr/glo-

bal/kickstart /kickstart ; cd /kickstart09 # mkdir -p /kickstart/fiji/etc ; cd

/kickstart/fiji/etc10 # mkdir -p rc.d/init.d profile.d ssh yum/plugin-

conf.d yum.repos.d11 # touch rescue.cfg ks-fiji.cfg ; ln -s ks-fiji.cfg

ks.cfg

Listado 9: Instalación de Kickstart

01 127.0.0.1 localhost.localdomain localhost02 ::1 localhost6.localdomain6 localhost603 192.168.1.1 fiji.baz.edu fiji04 192.168.1.2 fijiistor.baz.edu fijistor05 192.168.100.9 ib06 192.168.1.101 node0107 192.168.1.102 node0208 192.168.1.103 node0309 192.168.1.104 node0410 192.168.1.200 fiji-bmc11 192.168.1.201 node01-bmc12 192.168.1.202 node02-bmc13 192.168.1.203 node03-bmc14 192.168.1.204 node04-bmc

Listado 8: /etc/ hosts

01 /data0 fiji(rw,async,no_root_squash) 192.168.1.0<A7><A7>

02 /255.255.255.0(rw,async,no_root_squash)03 /usr/global

192.168.1.0/255.255.255.0(rw,async,no_root_squash)

04 /kickstart 192.168.1.0/255.255.255.0(ro)05 /repo 192.168.1.0/255.255.255.0(ro)

Listado 7: /etc/ exports

Page 13: Linux Magazine 78

# cp /etc/hosts U

/kickstart/fiji/etc/

# cp /root/.ssh/id_rsa.pub U

/kickstart/fiji/authorized_keys

# cp /etc/yum.repos.d/*.repo U

/kickstart/fiji/etc/yum.repos.d/

Ahora podemos pasar al siguiente paso

del proceso, que es editar el fichero

/kickstart/fiji/etc/ntp.conf y cambiar el

servidor al nodo de administración:

#server 0.centos.pool.ntp.org

#server 1.centos.pool.ntp.org

#server 2.centos.pool.ntp.org

server 192.168.1.2

Cuando arranquemos los nodos de cóm-

puto, podremos copiar cada una de las

direcciones MAC en el fichero

/etc/dhcpd.conf (Listado 11), y luego rei-

niciaremos el proceso dhcpd. El nodo

podrá entonces inicializar la red con la IP

ya configurada. Arrancar los nodos uno a

uno y pasar su

dirección al fichero

/etc/dhcpd..conf es

tedioso, pero puede

ser automatizado

con técnicas de ges-

tión más avanza-

das.

Estableceremos

la opción de desac-

tivado de /etc/

xinetd.d/tftp a no (tal y como se muestra

en el Listado 12). Ahora cargaremos los

servicios que acabamos de configurar:

# service xinetd restart

# chkconfig dhcpd on

# service dhcpd restart

Con una estructura de fichero PXE ya

colocada, podemos ir al paso principal

en la preparación de los ficheros de

configuración de Kickstart. Los ficheros

de configuración de Kickstart son fiche-

ros de texto plano que almacenan todas

las opciones que el instalador puede

aceptar, además de todos los scripts de

pre- y post- instalación que deseemos

añadir. El Listado 13 muestra un fichero

de configuración de Kickstart simple,

que lo único que hace es arrancar en el

modo de rescate del instalador. Este

fichero es bueno tenerlo a mano cuando

toque depurar los nodos que inevitable-

mente fallen.

sincronización de tiempo por red para

tener logs consistentes:

# ntpdate -u -b U

-s 1.centos.pool.ntp.org

# hwclock --utc --systohc

# chkconfig ntpd on ; U

service ntpd start

Lanzando KickstartEl siguiente paso es instalar los servi-

cios necesarios para tener un servidor

de instalación desatendida con Kick -

start (Listado 9) y construir una estruc-

tura de ficheros para poder arrancar

usando PXE, TFTP y NFS. Este paso nos

permitirá que un nuevo nodo de cóm-

puto pueda arrancar usando la red de

forma similar a como lo haría mediante

un CD o DVD.

Primero editaremos el menú PXE del

fichero /tftpboot/pxelinux.cfg/default

(Listado 10). Luego generaremos nues-

tra propia contraseña que reemplazare-

mos en el Listado 10. Las contraseñas

cifradas con SHA-1 comienzan con

$4$:

# sha1pass password

$4$gS+7mITP$y3s1L4Z+5Udp2vlZHChU

NXd8lhAg$

Copiamos todos los ficheros que desea-

mos tener sincronizados en todos los

nodos:

PORTADA • Montando un Cluster

18 Número 78 W W W . L I N U X - M A G A Z I N E . E S

01 DEFAULT menu.c3202 PROMPT 003 TIMEOUT 10004 ONTIMEOUT local05 NOESCAPE 106 ALLOWOPTIONS 007 MENU TITLE Fiji Cluster PXE Menu08 09 LABEL local10 MENU LABEL Boot local hard drive11 LOCALBOOT 012 13 LABEL centos14 MENU LABEL CentOS 5 Fiji Node Install15 KERNEL images/centos/x86_64/5/vmlinuz16 APPEND ks=nfs:192.168.1.2:/kickstart/ks.cfg

initrd=images/centos/x86_64/5/initrd.img ram-disk_size=100000 ksdevice=eth0 ip=dhcp

17 18 LABEL rescue19 MENU PASSWD $4$XXXXXX20 MENU LABEL CentOS 5 Rescue21 KERNEL images/centos/x86_64/5/vmlinuz22 APPEND initrd=images/centos/x86_64/5/initrd.img

ramdisk_size=10000 text rescueks=nfs:192.168.1.2:/kickstart/rescue.cfg

Listado 10: /tftpboot/ pxelinux.cfg/ default

01 ddns-update-style interim;02 ignore client-updates;03 option option-128 code 128 = string;04 option option-129 code 129 = text;05 06 subnet 192.168.1.0 netmask 255.255.255.0 {07 option routers 192.168.1.2;08 option subnet-mask 255.255.255.0;09 option nis-domain “fiji.baz.edu”;10 option domain-name “fiji.baz.edu”;11 option domain-name-servers 123.123.123.123;12 option time-offset -18000; # Eastern13 option ntp-servers 192.168.1.2;14 default-lease-time 21600;15 max-lease-time 43200;16 17 allow booting;18 allow bootp;19 next-server 192.168.1.2;20 filename “/pxelinux.0”;21 22 host node01 {23 hardware ethernet 00:11:22:33:44:a0;24 fixed-address 192.168.1.101;25 }26 27 host node01-bmc {28 hardware ethernet 00:11:22:33:44:8d;29 fixed-address 192.168.1.201;30 }31 32 host node02 {33 hardware ethernet 00:11:22:33:44:83;34 fixed-address 192.168.1.102;35 }36 37 host node02-bmc {38 hardware ethernet 00:11:22:33:44:61;39 fixed-address 192.168.1.202;40 }

Listado 11: /etc/ dhcpd.conf

Page 14: Linux Magazine 78
Page 15: Linux Magazine 78

todos los nodos de computación que eje-

cutarán los trabajos enviados al cluster.

Instalación de los Nodos deCómputoUna vez tengamos toda la infraestruc-

tura en su lugar, estaremos listos para

empezar a instalar los nodos de compu-

tación. Los pasos exactos pueden variar

dependiendo de la configuración que

tengamos, pero la clave está en ser

metódicos y en minimizar el tiempo

dedicado a cada nodo.

Nótese que el nodo “cabeza”/ identifi-

cación, que tiene como nombre host

fiji, puede instalarse de forma manual o

automática de la misma manera que los

nodos de cómputo, con el caso adicio-

nal de configurar eth1 como interfaz

hacia la red pública. Un ejemplo del

procedimiento de instalación de un

nodo de cómputo podría incluir los

siguiente pasos:

1. Enchufamos el KVM y pulsamos el

botón de encendido.

2. F12 para arranque por PXE.

3. Ctrl + S para conseguir la direc-

ción Ethernet

MAC del sis-

tema.

4. Ctrl + E para conseguir la dirección

Ethernet MAC del BMC.

5. Establecemos los parámetros LAN:

Fuente de Direcciones IP IPv4:

DHCP.

6. Establecemos la configuración de

usuario LAN: pulsamos enter y con-

firmamos la password.

7. Pulsamos Esc; almacenamos los

cambios y salimos.

8. Añadimos la dirección MAC al

fichero /etc/dhcpd.conf de fijistor, y

luego escribimos service dhcpd res-

tart.

9. Pulsar enter en el menú de instala-

ción PXE del nodo de cómputo para

el cluster Fiji.

10. Esperar la comprobación de depen-

dencias de paquetes.

11. Pasar al siguiente nodo.

Quizás deseemos usar una herramienta

de gestión como IPMI para controlar el

DRAC/ BMC, y poder encender y apagar

remotamente los nodos bloqueados:

# yum -y install OpenIPMI-tools

# ipmitool -H 192.168.1.2XX U

El fichero completo de Kickstart para

el arranque de un nodo de cómputo,

/kickstart/ks.cfg, puede ser descargado

desde la web de Linux Magazine[10].

Recomiendo editar este fichero de

configuración Kickstart para principian-

tes y comprobarlo continuamente insta-

lando el primer nodo de cómputo. Pode-

mos editarlo una y otra vez, haciendo

pequeños ajustes en cada paso, y luego

reinstalar completamente el primer nodo

hasta que quede una instalación per-

fecta. Una vez tengamos el primer nodo

correctamente, procederemos a encender

el resto de los nodos del cluster.

No hay que olvidar generar y reem-

plazar el lugar reservado para la contra-

seña con la nuestra propia. Las contra-

señas cifradas en formato MD5 comien-

zan por $1$:

$ grub-md5-crypt

Password:

Retype password:

$1$d6oPa/$iUemCR50qSyvGSVTX9NrX1

Con el nodo de administración instalado

y el fichero de configuración de Kickstart

establecido y listo para la acción, el

siguiente paso es instalar y configurar

PORTADA • Montando un Cluster

20 Número 78 W W W . L I N U X - M A G A Z I N E . E S

01 #!/bin/sh

02 for I in ̀ grep -v “\#” /etc/machines.list`; do

03 echo -n “$I “ ; ssh $I “$@”

04 done

Listado 14: /root/ bin/ ssh_loop.sh

01 rsync -a fiji:/etc/passwd /root/etc/02 rsync -a fiji:/etc/shadow /root/etc/03 rsync -a fiji:/etc/group /root/etc/04 rsync -a /root/etc/passwd /root/etc/shadow

/root/etc/group /etc/05 rsync -a /root/etc/passwd /root/etc/shadow

/root/etc/group /kickstart/fiji/etc/06 for NODE in ̀ cat /etc/machines.list | grep -v “^#”`;

do07 rsync -a /kickstart/fiji/etc $NODE:/08 done

Listado 15: /root/ bin/ update_etc.sh

01 # mkdir /usr/global/sge-6.2u5_PLUS_3-26-1102 # ln -s /usr/global/sge-6.2u5_PLUS_3-26-11

/usr/global/sge03 # export SGE_ROOT=/usr/global/sge04 # cd /usr/global/sge05 # adduser -u 186 sgeadmin06 # mkdir src ; cd src07 # wget http://bioteam.net/dag/gridengine-cour-

tesy-binaries/sge-6.2u5_PLUS_3-26-11-common.tar.gz

08 # wget http://bioteam.net/dag/gridengine-cour-tesy-binaries/sge-6.2u5_PLUS_3-26-11-bin-lx26-amd64.tar.gz

09 # cd /usr/global/sge10 # tar xzvf

src/sge-6.2u5_PLUS_3-26-11-common.tar.gz11 # tar xzvf

src/sge-6.2u5_PLUS_3-26-11-bin-lx26-amd64.tar.gz12 # chown -R sgeadmin.sgeadmin .

Listado 16: Instalación de Son of Grid Engine

01 lang en_US02 keyboard us03 mouse none04 nfs --server=192.168.1.2

--dir=/repo/CentOS/5/iso/x86_6405 network --bootproto=dhcp

Listado 13: /kickstart/ rescue.cfg

01 service tftp02 {03 socket_type = dgram04 protocol = udp05 wait = yes06 user = root07 server = /usr/sbin/in.tftpd08 server_args = -s -v /tftpboot09 disable = no10 per_source = 1111 cps = 100 212 flags = IPv413 }

Listado 12: /etc/ xinetd.d/ tftp

Page 16: Linux Magazine 78

-U root -P PASSWORD U

-I lanplus chassis status

# ipmitool -H 192.168.1.2XX U

-U root -P PASSWORD U

-I lanplus chassis power cycle

En un cluster de servidores Linux,

muchas veces es deseable ejecutar los

mismos comandos en todos los nodos de

cómputo. Podemos ejecutar estos

comando más comunes usando un senci-

llo bucle for en un script, o podemos usar

un shell específico para cluster como el

Shell de Dancer [11] o ClusterSSH [12].

Para ejecutar los comandos crearemos un

fichero llamado /etc/machines.list, que

constará de la lista de todos los nodos,

uno por línea, luego usaremos el script

/root/bin/ssh_ loop.sh (Listado 14).

Deberemos mantener sincronizada la

autenticación del usuario entre todos los

nodos. Aunque hay mejores maneras de

hacerlo, en pos de la brevedad, haremos

una simple sincronización de los ficheros

de autorización desde el nodo “cabeza”/

identificación al resto de los nodos

usando el script /root/bin/update_ etc.sh

(Listado 15).

Configuración del GridEl último paso es activar la cola de tra-

bajos para gestionar la carga de tra-

bajo. Usaremos los binarios, cortesía

de BioTeam, de Son of Grid Engine

[13]. Son of Grid Engine es un proyecto

basado en la comunidad que parte del

proyecto Sun Grid Engine. Cuando Ora-

cle compró Sun y eliminaron la versión

libre de su Grid Engine, los desarrolla-

dores de Son of Grid Engine decidieron

mantener una versión libre. Para más

información sobre cómo trabajar con

Son of Grid Engine, ir a los documen-

tos y manuales de la página del pro-

yecto [15].

Recuerde que los directorios de ini-

cio de los usuarios y /usr/global/ están

exportados a todo el cluster mediante

NFS. De esta forma los usuarios ten-

drán las claves SSH que permiten

hacer SSH y enviar comandos remotos

y sin contraseña desde el nodo de

cabeza a todos los nodos de computa-

ción.

Para empezar con Son of Grid Engine

seguiremos los pasos del Listado 16.

Podemos instalar de forma interactiva el

equipo maestro en el nodo de adminis-

tración usando la configuración por

defecto, excepto lo siguiente: instalar

como usuario sgeadmin, establecer los

puertos de red con el entorno, el puerto

6444 para sge_qmaster, puerto 6445

para sge_execd, nombre de célula por

defecto, nombre de cluster p6444, decir

que no a pkgadd y que sí a la verifica-

ción de permisos, decir que no al servi-

dor JMX Mbean, seleccionar el método

de encolado clásico, GID en el rango

20000-20100, introducir cada nombre de

los equipos y establecer no shadow host.

# cd /usr/global/sge/

# ./install_qmaster

Luego estableceremos las variables de

entorno del usuario:

. /usr/global/sge/default/U

common/settings.sh

Los logs de SGE se pueden encontrar

en: /usr/global/sge/default/spool/qmas-

ter/messages, /tmp/qmaster_messages

(durante el inicio de qmaster), /usr/glo-

Montando un Cluster • PORTADA

Page 17: Linux Magazine 78

# su - testuser

$ qsub /usr/global/sge/examplesU

/jobs/simple.sh

$ qstat

ConclusiónAhora ya disponemos de un cluster de

super computación funcional con ges-

tión de trabajos y de recursos. ¿Qué es lo

siguiente? ¿Deberíamos instalar Blender

[16] y empezar a renderizar películas

con todas las opciones activadas? ¿Insta-

lar MPI y explorar la computación en

paralelo [17]? ¿Quizás ejecutar las prue-

bas de rendimiento de Linpack y compe-

tir en el Top 500 [18]? Bueno, esto

depende de nuestra rama de trabajo,

pero supongo que el grupo de investiga-

dores tiene ya suficiente trabajo para

mantener al sistema ocupado. �

bal/sge/default/spool/HOSTNAME/mes-

sages y /tmp/execd_messages (durante

el inicio de execd).

Necesitaremos instalar SGE en todos

los nodos de cómputo. Este paso se

hace fácilmente con la configuración

automated install. El Listado 17 mues-

tra un ejemplo del fichero SGE

cluster.conf, pero sin comentarios.

Para iniciar la instalación automática:

# cd /usr/global/sge/

# cp util/install_modules/U

inst_template.conf cluster.conf

# vim cluster.conf

# ./inst_sge -x -auto U

/usr/global/sge/cluster.conf U

automated install log U

sge_root/spool/U

install_HOSTNAME_TIMESTAMP.log

Tras la ejecución con éxito del instala-

dor, verificaremos que Son of Grid

Engine está funcionando y comprobare-

mos la configuración con:

$ ps ax | grep sge

$ qconf -sconf

Un buen primer paso es enviar un tra-

bajo sencillo de pruebas al cluster como

un usuario normal:

# adduser testuser

# update_etc.sh

PORTADA • Montando un Cluster

22 Número 78 W W W . L I N U X - M A G A Z I N E . E S

[1] Documentación de Red Hat Enterprise Linux: http:// docs. redhat. com/ docs/ en-US/

Red_Hat_Enterprise_Linux/ index. html

[2] Documentación de CentOS-5: http:// www. centos. org/ docs/ 5/

[3] Guía de instalación de RHEL: http:// docs. redhat. com/ docs/ en-US/

Red_Hat_Enterprise_Linux/ 5/ html/ Installation_Guide/ index. html

[4] Instalaciones Kickstart: http:// docs. redhat. com/ docs/ en-US/

Red_Hat_Enterprise_Linux/ 5/ html/ Installation_Guide/ ch-kickstart2. html

[5] Espejos para la ISO de CentOS: http:// isoredirect. centos. org/ centos/ 5/ isos/ x86_64/

[6] PXE: http:// en. wikipedia. org/ wiki/ Preboot_Execution_Environment

[7] IPMI: http:// en. wikipedia. org/ wiki/ Intelligent_Platform_Management_Interface

[8] Espejos CentOS para la zona de Norteamérica: http:// www. centos. org/ modules/

tinycontent/ index. php?id=30

[9] Espejos públicos activos de Fedora EPEL: http:// mirrors. fedoraproject. org/ publiclist/

EPEL/

[10] Código para este artículo: http:// www. linux-magazine. es/ Magazine/ Downloads/ 78/

HPC

[11] Dancer’s Shell: http:// www. netfort. gr. jp/ ~dancer/ software/ dsh. html. en

[12] ClusterSSH: http:// clusterssh. sourceforge. net/

[13] Son of Grid Engine: https:// arc. liv. ac. uk/ trac/ SGE

[14] Binarios de BioTeam Grid Engine: http:// bioteam. net/ dag/

gridengine-courtesy-binaries/

[15] Grid Engine HowTo: http:// arc. liv. ac. uk/ SGE/ howto/ howto. html

[16] Blender: http:// www. blender. org/

[17] Introducción a la computación paralela: https:// computing. llnl. gov/ tutorials/

parallel_comp/

[18] Prueba de rendimiento Linpack: http:// www. top500. org/ project/ linpack

RECURSOS

01 SGE_ROOT=”/usr/global/sge”02 SGE_QMASTER_PORT=”6444”03 SGE_EXECD_PORT=”6445”04 SGE_ENABLE_SMF=”false”05 SGE_ENABLE_ST=”true”06 SGE_CLUSTER_NAME=”p6444”07 SGE_JMX_PORT=”6666”08 SGE_JMX_SSL=”false”09 SGE_JMX_SSL_CLIENT=”false”10 SGE_JMX_SSL_KEYSTORE=”/tmp”11 SGE_JMX_SSL_KEYSTORE_PW=”/tmp”12 SGE_JVM_LIB_PATH=”/tmp”13 SGE_ADDITIONAL_JVM_ARGS=”-Xmx256m”14 CELL_NAME=”default”15 ADMIN_USER=”sgeadmin”16 QMASTER_SPOOL_DIR=

”/usr/global/sge/default/spool/qmaster”17 EXECD_SPOOL_DIR=”/usr/global/sge/default/spool”18 GID_RANGE=”20000-20100”19 SPOOLING_METHOD=”classic”20 DB_SPOOLING_SERVER=”“21 DB_SPOOLING_DIR=”spooldb”22 PAR_EXECD_INST_COUNT=”20”23 ADMIN_HOST_LIST=”fijistor”24 SUBMIT_HOST_LIST=”fiji”25 EXEC_HOST_LIST=”node01 node02 node03 node04”

26 EXECD_SPOOL_DIR_LOCAL=”“27 HOSTNAME_RESOLVING=”true”28 SHELL_NAME=”ssh”29 COPY_COMMAND=”scp”30 DEFAULT_DOMAIN=”none”31 ADMIN_MAIL=”none”32 ADD_TO_RC=”true”33 SET_FILE_PERMS=”true”34 RESCHEDULE_JOBS=”wait”35 SCHEDD_CONF=”1”36 SHADOW_HOST=”“37 EXEC_HOST_LIST_RM=”“38 REMOVE_RC=”true”39 WINDOWS_SUPPORT=”false”40 WIN_ADMIN_NAME=”Administrator”41 WIN_DOMAIN_ACCESS=”false”42 CSP_RECREATE=”true”43 CSP_COPY_CERTS=”false”44 CSP_COUNTRY_CODE=”DE”45 CSP_STATE=”Germany”46 CSP_LOCATION=”Building”47 CSP_ORGA=”Organisation”48 CSP_ORGA_UNIT=”Organisation_unit”49 CSP_MAIL_ADDRESS=”[email protected]

Listado 17: Ejemplo de SGE cluster.conf

Page 18: Linux Magazine 78

Cygwin es una capa de compatibi-

lidad que proporciona un entorno

operativo tipo Unix en los siste-

mas Windows. El entorno Cygwin tiene

el aspecto de Linux, pero bajo su superfi-

cie, los comandos son ejecutados en

Windows. Al contrario que otras herra-

mientas alternativas que proporcionan

entornos virtuales para sistemas Linux

huéspedes completos, Cygwin no es real-

mente Linux, sino que es una API y una

DLL (Dynamic Link Library) que se eje-

cuta en Windows y ofrece el soporte

para la ejecución de aplicaciones Linux.

PRÁCTICO • Cygwin

24 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Podría decirse que Cygwin es lo con-

trario a Wine, la famosa API que permite

que las aplicaciones Windows se puedan

ejecutar en Linux. Cygwin permite a las

aplicaciones Linux ejecutarse en Win-

dows. Sin embargo, al contrario que

Wine, Cygwin no soporta la ejecución

directa de los ficheros binarios de Linux.

Cualquier aplicación que se vaya a ejecu-

tar en Cygwin debe compilarse para el

entorno Cygwin.

Cygwin permite la migración a un

entorno de aplicaciones Linux

incluso si, por alguna razón, se nece-

sita tener Windows para otros siste-

mas. Además de la DLL y los compo-

nentes de compatibilidad, Cygwin

también proporciona una colección

de utilidades Linux y un entorno de

comandos de la terminal.

Cygwin simplifica la tarea de portar

los programas al sistema operativo de

Microsoft, y los usuarios finales de

Windows pueden beneficiarse de los

numerosos programas del mundo

Linux, entre los que se incluyen

herramientas prácticas y programas de

aplicación.

Instalación de CygwinCygwin se instala fácilmente. Tras descar-

gar el fichero de instalación desde el sitio

web oficial [1] y hacer doble clic en

setup.exe, hay que responder afirmativa-

mente al aviso que se muestra. Tras este

paso aparece un asistente que guiará al

usuario por todo el proceso de instalación.

Ejecución de aplicaciones Linux en Windows con Cygwin

ENTRE DOS MUNDOSSi ha estado trabajando con Linux durante algún tiempo, seguro que se habrá acostumbrado a las opciones

que ofrece. Aunque los usuarios de Windows también pueden beneficiarse de diversas funciones de Linux

gracias a Cygwin. POR FLORIAN EFFENBERGER

Figura 1: Un cuadro de diálogo típico de Windows

avisa de los posibles peligros…

Florian Effenberger lleva muchos

años de evangelista del software

libre. Es fundador y miembro del

comité Document Foundation,

anteriormente estuvo trabajando

en el proyecto OpenOffice.org

durante siete años, donde su

último puesto fue de “Marketing

Project Lead”. También escribe de

forma regular para diversas publi-

caciones tanto en lengua alemana

como inglesa.

EL A

UT

OR

Page 19: Linux Magazine 78

25Número 78W W W . L I N U X - M A G A Z I N E . E S

Cygwin ofrece su software en forma de

paquetes en un estilo similar al de Linux,

por lo que deberemos descargarlos de

Internet antes de que comience el pro-

ceso de instalación. Para instalarlo en

una máquina con conexión a Internet

hay que seleccionar la opción Install

from Internet (Figura 1); en este paso se

almacenan temporalmente los paquetes

de forma local. Si sólo se desea descargar

los paquetes para instalarlos en otra

máquina, habrá que seleccionar Down-

load Without Installing. Luego, en el

ordenador en el que se deseen instalar

los paquetes sin conexión a Internet

deberá seleccionarse Install from Local

Directory.

En algunos casos, la identificación del

directorio raíz, como Windows se

refiere a él frecuentemente, puede ser

un problema. En mi sistema de pruebas,

ejecutando una versión de 64 bits de

Windows 7 Ultimate, ya tenía instalado

el cliente x2go, el cual proporciona su

propio entorno. El asistente de instala-

ción originariamente quería actualizar

esta copia; tuve que cambiar manual-

mente la ruta a C:\Program Files

(x86)\Cygwin.

El programa de instalación se quejó

posteriormente por los espacios en

blanco, que ignoré completamente; des-

pués de todo, esta es la configuración

por defecto. Si el sistema va a ser utili-

zado por más de una persona, es posible

elegir entre hacer que Cygwin se encuen-

tre disponible para todos los usuarios del

sistema All users (opción recomendada)

o sólo para el usuario actual.

El siguiente paso consiste en especifi-

car el directorio en el que temporalmente

se almacenarán los paquetes descarga-

dos, para el caso en el que se quiera ins-

talar en otra máquina. Luego se puede

especificar un servidor proxy; la mayoría

de los usuarios querrán seleccionar

Direct Connection aquí; pero si tiene

duda, puede probar la opción Use Inter-

net Explorer Proxy Settings. Antes de

seleccionar los paquetes que se van a

utilizar hay que seleccionar un servidor

mirror, que será el que proporcionará los

ficheros necesarios. La experiencia nos

dice que la selección de un mirror en

nuestro propio país acelerará el proceso

de descarga.

Tras finalizar estos pasos, que parecen

más complicados de lo que realmente

son, se pueden seleccionar los paquetes

(Figura 2). Los que están disponibles se

encuentran organizados en varios gru-

pos; Cygwin también elige la

configuración que proporcione al usua-

rio un sistema básico sólido.

Para instalar programas adicionales

hay que usar el cuadro desplegable que

se encuentra junto al nombre del

paquete dentro del grupo expandido. En

la lista desplegable existen varias opcio-

nes: Skip sirve para omitir el paquete –

es decir, el paquete no se instalará.

Para instalar un paquete sólo hay que

hacer clic en él; en este caso se podrá ver

el número de la versión en vez de Skip.

Si hay varias, por ejemplo las versiones

1.4 y 1.5 de Mutt, se puede hacer clic

para cambiar entre ellas hasta llegar de

nuevo a Skip. Para instalar el código

fuente además de la versión binaria del

paquete hay que pulsar Src.

Además de instalar paquetes indivi-

duales pueden instalarse grupos comple-

tos. Normalmente se podrá ver la eti-

queta Default junto al nombre del grupo.

Esto se refiere a la selección de paquetes

por defecto, es decir, los paquetes que se

instalarán por defecto en una instalación

básica. Si se hace clic en la etiqueta y se

cambia al modo Install, se instalarán

todos los paquetes del grupo. Si ya se

han seleccionado o instalado algunos

paquetes, podrán verse las opciones

Reinstall (reinstala todos los paquetes

existentes) y Uninstall (desinstala los

paquetes instalados).

Por ahora basta con mantener los valo-

res por defecto y hacer clic en Next para

comenzar la descarga; este proceso

puede llevar un rato dependiendo de la

conexión a Internet disponible, aunque

sólo tardó tres minutos en nuestra

máquina de pruebas. Finalmente hay

que seleccionar

dónde se quieren

los enlaces a

Cygwin y listo. O

casi – en mi caso,

apareció un asis-

tente de Windows

preguntando si el

software se instaló

correctamente. Se

puede confirmar

haciendo clic en

The program insta-

lled correctly. Pero

no hay que borrar

todavía setup.exe;

hará falta para instalar posteriormente

algunos paquetes.

ComenzamosCygwin se instala dentro del sistema de

forma modesta. Sólo una entrada en el

menú Inicio y un pequeño icono en el

escritorio revelan su presencia. Haciendo

clic en el icono aparecerá la consola

(Figura 3), e inmediatamente podrá

verse el intérprete de comandos Bash,

que contiene por defecto diversos

comandos típicos de Linux. Siempre que

sea posible, Cygwin emulará los coman-

dos y las funciones del mundo Linux en

Windows: El comando uname devuelve

la información del sistema Windows; el

directorio home se encuentra físicamente

en C:\Program Files

(x86)\Cygwin\home\username (desafor-

tunadamente, no se encuentra dentro del

directorio de usuario de Windows). Aun-

que el directorio /proc se encuentra dis-

ponible, tecleando cat /proc/loadavg sólo

mostrará una carga de 0.00 todo el

tiempo. También pueden encontrarse

otros directorios típicos del mundo

Linux; por ejemplo, var, lib, etc y dev.

El kernel no podrá encontrarse en

boot, lo que es comprensible; después de

todo, Cygwin no es una herramienta de

virtualización. Dicho de otro modo, no

se va a trabajar con un kernel de Linux,

sino con programas compilados de

forma nativa para Windows. Cygwin uti-

liza una capa de compatibilidad para

emular interfaces como el directorio

/proc. Esta solución es probablemente

más similar al proyecto MacPorts, que

hace que diversas aplicaciones Linux se

encuentren disponible para OS X.

El comando mount indica las unidades

montadas: /usr/bin y /usr/lib vienen de

Cygwin • PRÁCTICO

Figura 2: Una gran selección de software disponible.

Page 20: Linux Magazine 78

seguro que el lector ya estará familiari-

zado gracias a los gestores de paquetes

de Linux – la resolución automática de

dependencias (Figura 4). Para instalar

SSH hacen falta otras herramientas y

librerías, que Cygwin instalará automáti-

camente.

Desafortunadamente, el servidor SSH

viene sin la configuración, al contrario

que en la mayoría de las distribuciones

de Linux. En la web [2] se encuentran

disponibles varios how-to para facilitar

la instalación. Hay que ejecutar Cygwin

con una cuenta de administración de

Windows – de lo contrario no podrá ins-

talarse el servicio – y

teclear ssh-host-con-

fig -y. El script muestra

un número de líneas y

mensajes y luego pide

al usuario que defina la

contraseña del usuario

Windows llamado

cyg_server, que habrá

que crear. Debe elegirse

una contraseña segura

y asegurarse de que no

se olvide – en el caso

de que ocurriera, hará falta modificar la

instalación de SSH. Finalmente hay que

modificar los permisos de varios ficheros

tecleando ssh-user-config -n.

Téngase en cuenta que nunca debería

ejecutar Windows como un servidor SSH

sin un cortafuegos adicional. Un router

estándar o un sistema de filtrado de

paquetes basado en iptables en la puerta

de enlace Linux será suficiente.

El servidor SSH estará disponible tras

reiniciar el sistema. Por otro lado, se

puede teclear en la línea de comandos

net start sshd, pero no en Cygwin, sino

en la línea de comandos de Windows.

los subdirectorios correspondientes en el

directorio raíz de Cygwin, que se

encuentra montado. El disco C: lo está

en /cygdrive/c y tiene permisos de escri-

tura. Hay que tener en cuenta que cual-

quier unidad que se conecte, como las

unidades USB, se montarán de forma

automática por Cygwin en tiempo real,

lo que es una característica interesante.

Los recursos compartidos de red por

medio de Samba/ CIFS también están

soportados y pueden encontrarse en

//servername/share. Un simple mount

//fileserver/pool /home/max/share, por

ejemplo, montará los ficheros en el servi-

dor de ficheros en el directorio home.

SSH en WindowsProporcionar un intérprete de coman-

dos Bash no es, obviamente, la princi-

pal tarea de Cygwin, aunque trabajar

con él es muy útil – Cygwin posee

muchas más funciones. Además de pro-

porcionar a los desarrolladores una

forma fácil y rápida de portar sus apli-

caciones, los usuarios pueden disponer

de multitud de aplicaciones Linux para

poder utilizarlas en Windows (por

ejemplo, SSH). Aunque Windows posee

su propia solución para la administra-

ción remota por medio de los servicios

de terminal, se necesita un cliente RDP

para ello. Además, sólo puede conec-

tarse a la GUI, por lo tanto, hace falta el

ancho de banda correspondiente. Por

otro lado, Cygwin proporciona a los

usuarios el uso de SSH.

Para esto es necesario salir de Cygwin

tecleando exit en el intérprete de coman-

dos y luego ejecutar el programa de ins-

talación anterior. En la selección de

paquetes, hay que buscar ssh y luego

instalar el paquete SSH. Esto presentará

otra función de Cygwin con la que,

PRÁCTICO • Cygwin

26 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Figura 3: A pesar de los avisos, todo se ha instalado correctamente.

Figura 4: El aspecto de bash en Windows – cortesía de

Cygwin.

Figura 5: Los paquetes normalmente vienen en grupos.

Figura 6: Moving entre los mundos: de un Mac a Windows, y luego a bash.

Page 21: Linux Magazine 78

Luego hay que modificar el cortafuegos

de Windows para permitir las conexio-

nes al puerto 22. La configuración se

encuentra disponible en Inicio | Panel de

Control | Cortafuegos de Windows |

Configuración Avanzada | Reglas de

Entrada | Nuevas Reglas…

Es imprescindible permitir las conexio-

nes en el puerto 22 por medio de TCP en

todos los perfiles e introducir el nombre

Cygwin SSHD Server. Por supuesto, esta

solución es un parche, pero la recom-

pensa consiste en ¡una conexión SSH

directa al ordenador Windows (Figura

5)!

Uso de Programas deAplicaciónCygwin no está diseñado para ejecutar

servicios; los usuarios con programas

típicos de Linux pueden también benefi-

ciarse. Por ejemplo, Cygwin incluye el

programa de correo Mutt, el editor vi y el

administrador de archivos mc (Midnight

Commander) (Figura 6). Hay que reco-

nocer que existen versiones Windows de

muchas de estas herramientas, pero su

ejecución en un entorno completo tiene

sus beneficios.

Los scripts de copias de seguridad son

aplicaciones útiles. Muchos usuarios han

escrito sus propios programas Bash que

se basan en rsync para copiar los fiche-

ros que se desean respaldar en un sis-

tema remoto. Aunque rsync se encuentra

disponible para Windows, las sofistica-

das funciones de Bash son difíciles de

programar en Windows, por ello, es con-

veniente tener un entorno similar a

Linux.

La X Marca la DiferenciaPero esto no es todo. Cygwin también

incluye Cygwin/ X [3], una implementa-

ción del sistema X11 que permite ejecu-

tar aplicaciones gráficas directamente en

Windows (Figura 7).

Hay que admitir que la ejecución de

programas X clásicos de los primeros

días de la informática ya no es excitante.

Lo que hace interesante el servidor X, sin

embargo, es su protocolo diseñado para

redirigir la salida de un dispositivo a

otro. Gracias a las tecnologías actuales,

este es un proceso rápido que es ligero

de recursos, incluso con conexiones con

poco ancho de banda. Un ejemplo de

ello es x2go [4], que permite acceder a

un PC Linux de casa desde cualquier

sitio. Además, x2go es una solución ideal

para un servidor de un centro de datos

(Figura 8).

Aunque las mayorías de las soluciones

de virtualización proporcionan un senci-

llo soporte basado en la línea de coman-

dos, si se tiene un problema con la VM

(por ejemplo, un puente de red que no

funcione), no estará mal echarle un vis-

tazo a su monitor. Con x2go se puede

hacer en un par de segundos – y lo que

hace que x2go se pueda ejecutar en Win-

dows viene de la mano de Cygwin.

ConclusionesLa potencia de Cygwin salta a la vista

una vez que se mira con detalle. La capa

de compatibilidad con Linux permite el

uso en Windows de programas de aplica-

ción, comandos y herramientas del

mundo Linux. Como desarrollador, se

pueden portar rápida y fácilmente apli-

caciones. El entorno X11 ofrece diversas

opciones excitantes, con x2go se puede

ver la punta del iceberg de lo que repre-

sentan las sesiones remotas. Hay que

recordar que Cygwin no ha sido dise-

ñado para emular un sistema gráfico

Linux completo; posee restricciones – el

original es aún mejor. �

Cygwin • PRÁCTICO

27Número 78W W W . L I N U X - M A G A Z I N E . E S

[1] Cygwin: http:// www. cygwin. com

[2] HOW-TO de Cygwin SSHD: http://

www. noah. org/ ssh/ cygwin-sshd.

html

[3] Cygwin/ X: http:// x. cygwin. com

[4] x2go: http:// www. x2go. org

RECURSOS

Figura 7: El aspecto de Midnight Commander en Windows.

Figura 8: Simples programas gráficos ejecutándose en Windows gracias a Cygwin/ X.

Page 22: Linux Magazine 78

Los catálogos de biblioteca se basa-

ron originalmente en un sistema de

tarjetas que era tedioso y lento para

actualizar manualmente. Afortunada-

mente, esto se hace hoy día a través de

modernos sistemas electrónicos que per-

miten una administración central de los

catálogos en las bibliotecas de manera

fácil. Recientemente he tenido el placer de

instalar un sistema de este tipo, Koha.

Koha [1] es un sistema para bibliotecas en

software libre que fue desarrollado inicial-

mente por Katipo Communications Ltd.

en Nueva Zelanda.

El sistema Koha incluye módulos para

gestionar la circulación, catalogación,

adquisición, publicación seriada, reservas,

gestión de clientes (usuarios) y mucho

más. Koha utiliza la bien conocida base de

datos MySQL y es fácilmente accesible

tanto para los clientes como para el perso-

nal a través de una intuitiva interfaz web.

La configuración es un sistema piloto

para las escuelas secundarias de Chipre.

En este esfuerzo se encuentran partici-

pando tres liceos, mientras que la Biblio-

PRÁCTICO • Koha

28 Número 78 W W W . L I N U X - M A G A Z I N E . E S

teca de la Universidad de Chipre está ayu-

dando en la creación, puesta a punto y

alojamiento del proyecto.

Para el banco de pruebas inicial,

importé el catálogo de la biblioteca de otro

sistema a Koha. El siguiente paso sería

importar el Catálogo de la Unión de Chi-

pre a Koha (previsto para un futuro pró-

ximo. El catálogo colectivo incluye los

datos bibliográficos de 38 bibliotecas dife-

rentes de toda la isla, con más de medio

millón de registros, lo que dará un gran

impulso al proyecto. Por ejemplo, una

biblioteca de una escuela ya no tendrá que

catalogar sus libros, porque la mayoría de

ellos ya estarán allí a través del catálogo

colectivo.

Además, la solución beneficiará a todos

los que participan en este catálogo colec-

tivo de las escuelas. Una instalación sirve

una cantidad arbitraria de las bibliotecas a

través de acceso basado en web sin nece-

sidad de tener ningún cliente instalado

localmente. Este sistema requiere menos

horas de soporte y será más fácil de man-

tener y actualizar. En este artículo descri-

bimos Koha y, más específicamente, la

configuración de Koha 3.02 en un servidor

openSUSE de 64 bits [2].

Configuración InicialInstalar Koha en un servidor es muy fácil.

Lo primero que deberíamos hacer es insta-

lar los paquetes básicos necesarios: el ser-

vidor web Apache [3], algunos módulos

de Perl y la base de datos MySQL [4].

Comenzamos por abrir una consola y

teclear:

yast -i apache2U

apache2-mod-perl

mysql-community-server make gcc

Después de instalar estos paquetes, es

necesario ajustar la configuración regional

David

Maska, 1

23R

F

Administración fácil de bibliotecas con KohaEl Guard��nde los LibrosLa Tecnología de la Información juega un papel clave en entornos de la

biblioteca moderna. Este mes echamos un vistazo a Koha, un sistema

integrado de software libre que puede ayudar a administrar sus opera-

ciones diarias en una biblioteca. POR EVELTHON PRODROMOU

01 locale02 LANG=en_US.UTF-803 LC_CTYPE=”en_US.UTF-8”04 LC_NUMERIC=”en_US.UTF-8”05 LC_TIME=”en_US.UTF-8”06 LC_COLLATE=”en_US.UTF-8”07 LC_MONETARY=”en_US.UTF-8”08 LC_MESSAGES=”en_US.UTF-8”09 LC_PAPER=”en_US.UTF-8”10 LC_NAME=”en_US.UTF-8”11 LC_ADDRESS=”en_US.UTF-8”12 LC_TELEPHONE=”en_US.UTF-8”13 LC_MEASUREMENT=”en_US.UTF-8”14 LC_IDENTIFICATION=”en_US.UTF-8”15 LC_ALL=

Listado 1: Locale delSistema

Page 23: Linux Magazine 78

29Número 78W W W . L I N U X - M A G A Z I N E . E S

del sistema, de Apache y de MySQL. El

locale de su sistema debe estar en UTF-8.

Para ver si es el caso, vamos a una consola

de comandos y tecleamos locale. Debería-

mos obtener una respuesta como la que se

muestra en el Listado 1.

Si nuestro resultado es diferente, pode-

mos seguir el procedimiento del cuadro

“Configuración regional en UTF-8”.

Descargamos Koha con el comando:

wget http://download.U

koha-community.org/U

koha-version.tar.gz

y lo extraemos con tar:

tar xvfz koha-version.tar.gz

que va al directorio koha-version.

Configuración de ApacheEl siguiente paso es configurar la codifica-

ción de Apache. Para establecer la codifi-

cación por defecto a UTF-8 creamos un

archivo de configuración local y añadimos

la directiva AddDefaultCharset: .

vi /etc/apache2/httpd.conf.local

Añadimos lo siguiente al archivo:

AddDefaultCharset UTF-8

y guardamos. A continuación, tecleamos:

a2enmod perl5

chkconfig apache2 on

rcapache2 restart

Los comandos anteriores habilitan el Perl

scripting, reiniciamos Apache y nos asegu-

ramos de que se inicie en el arranque.

Configuración de Apache através de YaSTEn nuestro caso se configuró el sistema en

openSUSE, que utiliza la herramienta de

configuración YaST. Los pasos básicos

para otras distribuciones son similares,

pero los detalles pueden diferir. En los sis-

temas de openSUSE, puede utilizar YaST e

instalar el paquete yast2-http, que ofrece

una herramienta con interfaz gráfica de

usuario para gestionar fácilmente el servi-

dor HTTP. Tras instalar este paquete, vol-

vemos a cargar Yast y nos dirigimos a Ser-

vicios de Red | servidor http. Debemos ase-

gurarnos de que el servidor HTTP está

habilitado en el fire-

wall. Desde esta

herramienta tam-

bién podemos acti-

var o desactivar los

módulos de Apache

y otros parámetros

del servidor web.

Configuraciónde MySQLSi llegamos a este

punto, MySQL ya

está instalado. Por tanto, es necesario ase-

gurarse de que se inicia en el arranque, se

activa y cuida de los aspectos de seguri-

dad:

chkconfig mysql on

rcmysql start

/usr/bin/U

mysql_secure_installation

El último comando refuerza la seguridad y

nos permite eliminar las bases de datos de

prueba y las cuentas de usuario anónimas

creadas por defecto. Este paso es muy

recomendable en servidores de produc-

ción. Además de establecer una contra-

seña de root, el resto de las preguntas es

mejor dejarlas en sus valores predetermi-

nados, presionando Enter sin más.

Ahora sería un buen momento para ase-

gurarnos de que la codificación de MySQL

se establece a UTF-8. Para cambiarla,

vamos a un símbolo del sistema MySQL

simplemente tecleando mysql -p, contesta-

mos la petición con la contraseña de root,

y luego, con show, comprobamos que la

configuración de la codificación sea como

la del Listado 2. En este caso, todas las

configuraciones están en UTF-8, por lo

que no es necesario hacer cambios.

El último paso con MySQL es la conce-

sión de permisos al usuario koha para la

base de datos de Koha. Podemos hacer

esto a través de la interfaz de comandos

de MySQL. Para generar una base de datos

con éxito, primero tendremos que crear

un usuario MySQL, y concederle los per-

misos necesarios para la base de datos de

Koha. En el caso descrito en este artículo,

el usuario de MySQL se llama kohaadmin

(véase el Listado 3).

Configuración delAnalizador SAXKoha está basado principalmente en Perl,

por lo que debemos asegurarnos de que

los paquetes perl-XML-SAX y perl-XML-

libxml están instalados. En caso contrario,

podemos instalarlos desde un intérprete

de comandos:

yast -i perl-XML-SAXU

perl-XML-LibXML

Seguidamente debemos comprobar qué

analizador XML está usando el sistema.

Afortunadamente, Koha incluye una utili-

dad de shell que podemos utilizar para esto:

koha_root_folder/U

misc/sax_parser_print.pl

En mi caso, al ejecutar el verificador del

analizador SAX de Koha, se generó el con-

tenido del Listado 4.

Como indica la línea 5, tiene mala pinta,

pero no se preocupe, arreglar este error es

muy fácil: sólo tenemos que localizar un

archivo llamado ParserDetails.ini, del

siguiente modo: :

find / -iname ParserDetails.ini

Obtendremos una respuesta similar a esta:

/usr/lib/perl5/vendor_perl/U

5.12.1/XML/U

SAX/ParserDetails.ini

El siguiente paso es editar

ParserDetails.ini y cambiar la línea que

Koha • PRÁCTICO

1. Iniciar Yast.

2. Ir a Sistema | Idiomas.

3. Pulsar en Detalles. Aparecerá una

nueva ventana. Nos aseguramos de

que Configuración regional para el

usuario root está configurado a Sí y la

casilla Usar codificación UTF-8 está

marcada.

4. Aceptamos los cambios.

Configuración Regionalen UTF-8

01 mysql> show variables like ‘char%’;02 +--------------------------+----------------------------+03 | Variable_name | Value |04 +--------------------------+----------------------------+05 | character_set_client | utf8 |06 | character_set_connection | utf8 |07 | character_set_database | utf8 |08 | character_set_filesystem | binary |09 | character_set_results | utf8 |10 | character_set_server | utf8 |11 | character_set_system | utf8 |12 | character_sets_dir | /usr/share/mysql/charsets/ |13 +--------------------------+----------------------------+14 8 rows in set (0.00 sec)

Listado 2: Variables MySQL y sus Valores

Page 24: Linux Magazine 78

La lista de módulos Perl necesarios se

muestra después de ejecutar el instalador,

el cual proporciona una lista de requisitos

previos no satisfechos tras responder a

una serie de preguntas. Para ahorrarle la

molestia de ir y venir de un lado a otro, he

creado una lista (véase la Tabla 1).

Todos estos módulos deben instalarse al

configurar Koha con todas las opciones

habilitadas. La columna de la izquierda

muestra el módulo de Perl requerido. La

columna de la derecha lista el módulo de

Perl tal y como se denomina en el reposito-

rio Perl de openSUSE. No todos los módu-

los necesarios existen en el repositorio de

Perl. Los que no tienen un equivalente

deben instalarse a través de CPAN [7].

Además, se tendrán que instalar dos

paquetes más en el sistema: perl-Cache-

Memchached y memcached.

Para instalarlos a través de CPAN, ejecu-

tamos el comando cpan mediante una

consola de comandos. Si es la primera vez

que ejecutamos este comando, tendremos

que configurarlo, para lo cual podemos

utilizar un proceso de configuración auto-

mática. Una vez realizado, deberíamos ver

un símbolo de sistema CPAN:

Enter ‘h’ for help.

cpan[1]>

A partir de aquí podemos instalar módu-

los con install module_name, por ejemplo

install Authen::CAS::Client.

Instalación de KohaLo primero que tenemos que hacer es

crear un usuario y un grupo para Koha.

Debemos asegurarnos de configurar la

contraseña de Koha. Los comandos que

necesitamos son useradd nombreusuario,

passwd nombreusuario, groupadd nom-

bregrupo. Para mayor comodidad, pode-

mos configurar el mismo nombre para el

usuario y el nombre del grupo.

Para iniciar la instalación ejecutamos

Makefile.PL. El script de instalación

genera una gran cantidad de líneas. Cada

parámetro se explica en el script de insta-

lación, por lo que este procedimiento debe

llevar sólo unos minutos.

Después de configurar las opciones de

parámetros, el script de instalación genera

una lista de los parámetros configurados,

así como las instrucciones sobre cómo se

pueden modificar. A continuación ejecuta-

mos make, make test y make install. Si

hemos introducido las opciones de

configuración correctas, debemos obser-

var un mensaje diciendo que se instalaron

los archivos de Koha.

dice [XML:: SAX::PurePerl] a [XML::

LibXML:: SAX:: Parser] y guardar. Para

verificar, volvemos a ejecutar sax_par-

ser_print.pl. Deberíamos obtener un men-

saje con “buen aspecto”, como el que se

muestra en el Listado 5.

Instalación de Módulos PerlUna vez hemos terminado con el analiza-

dor de XML, es necesario instalar unos

cuantos módulos Perl. Para descubrir qué

módulos son necesarios ejecutamos perl

Makefile.PL.

En este punto, esperaba recibir algún

tipo de mensaje de instalación, pero no

fue así. En su lugar apareció un aviso del

instalador diciendo Can’t locate

ZOOM.pm in @INC (@INC contains.

Una investigación posterior en Make-

file.PL mostró que me faltaba el paquete

perl-Net-Z3950-ZOOM. Este paquete no

se encuentra en los repositorios estándar

de openSUSE (los que se añaden cuando

el sistema se instala por primera vez). Lo

más fácil es buscar el paquete [5],

perl_net-Z3050. Ahora seguimos el pro-

cedimiento descrito en el cuadro “Insta-

lación de Servicio con 1-Click” para ins-

talarlo. Esto agrega el repositorio

devel:languages:perl [6] a la lista de

repositorios.

PRÁCTICO • Koha

30 Número 78 W W W . L I N U X - M A G A Z I N E . E S

01 mysql -u root -p02 Enter password:03 Welcome to the MySQL monitor. Commands end with ; or \g.04 Your MySQL connection id is 5305 Server version: 5.1.53-log SUSE MySQL RPM06 07 Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.08 This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are

welcome to modify and redistribute it under the GPL v2 license09 10 Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.11 12 mysql> create database ̀ koha` default character set utf8 collate utf8_unicode_ci;13 Query OK, 1 row affected (0.00 sec)14 15 mysql> grant all on koha.* to ‘kohaadmin’@’localhost’ identified by ‘kohapassword’;16 Query OK, 0 rows affected (0.00 sec)17 18 mysql> flush privileges;19 Query OK, 0 rows affected (0.00 sec)20 21 mysql> quit22 Bye

Listado 3: Creación y Configuración Usuario MySQL01 Koha wants something like:

02 XML::LibXML::SAX::Parser=HASH

(0x81fe220)

03 You have:

04 XML::SAX::PurePerl=HASH(0x9a2bd0)

05 Looks bad, check INSTALL.* documen-

tation.

Listado 4: ConfiguraciónErrónea Analizador SAX

01 misc/sax_parser_print.pl02 Koha wants something like:03 XML::LibXML::SAX::Parser=HASH

(0x81fe220)04 You have:05 XML::LibXML::SAX::Parser=HASH

(0x9a0240)06 Looks good.

Listado 5: VerificaciónCorrecta Analizador XML

01 ./tmpl_procd /usr/share/koha/misc/translator02 ./tmpl_process3.pl install -i /usr/share/koha/opac/htdocs/opac-tmpl/prog/en/ -o /usr/share/koha/opac/htdocs/opac-tmpl/ prog/

el-GR -s /home/koha/koha-3.02.00/misc/translator/po/el-GR-i-opac-t-prog-v-3002000.po -r03 ./tmpl_process3.pl install -i /usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/ -o /usr/share/koha/intranet/htdocs/intra-

net-tmpl/prog/el-GR -s /home/koha/koha-3.02.00/misc/translator/po/el-GR-i-staff-t-prog-v-3002000.po04 Charset in/out: UTF-8 at ./tmpl_process3.pl line 267.05 Copying /usr/share/koha/intranet/htdocs/intranet-tmpl/prog/en/columns.def...06 The install seems to be successful.

Listado 6: Instalar un Nuevo Idioma

Page 25: Linux Magazine 78

Para utilizar los procesos por lotes de la

línea de comandos de Koha, establecemos

las variables de entorno:

export KOHA_CONF=U

/etc/koha/koha-conf.xml

export PERL5LIB=U

/usr/share/koha/lib

Para otras tareas posteriores a la instalación,

por favor consulte el archivo README.

Tal y como se indica en las notas poste-

riores a la instalación, tendremos que esta-

blecer las variables de entorno. Para ello

sólo hay que crear /etc/bash.bashrc.local y

añadir:

export KOHA_CONF=U

/etc/koha/koha-conf.xml

export PERL5LIB=U

/usr/share/koha/lib

Ahora, para activar las variables, salimos

y volvemos a loguearnos en la shell.

Configurar ApacheDebido a que es una aplicación web, ten-

dremos que crear una máquina virtual. En

openSUSE, los archivos de la máquina vir-

tual se configuran en el directorio /etc/

apache2/ vhost.d. Cualquier archivo con la

extensión .conf es leído y se considera un

archivo de configuración del host virtual.

Además, el instalador de Koha ya ha cre-

ado un archivo de configuración con todas

las directrices necesarias en /etc/ koha/

koha-httpd.conf. Lo único que queda es

crear un enlace simbólico que apunte a

ese archivo en el directorio del host virtual

de Apache. Podemos hacerlo tecleando:

ln -s /etc/koha/koha-httpd.confU

/etc/apache2/vhosts.d/koha.conf

Además, tenemos que habilitar los módu-

los rewrite y env con el comando:

a2enmod rewrite

a2enmod env

Luego debemos editar /etc/ koha/ koha-

httpd.conf y añadir lo siguiente al final del

archivo para permitir la exploración de

koha:

<Directory /usr/share/koha>

Order allow,deny

Koha • PRÁCTICO

31Número 78W W W . L I N U X - M A G A Z I N E . E S

Tabla 1: Paquetes Perl y sus Nombres en openSUSEPaquete Perl Paquete openSUSE 11.3 Paquete Perl Paquete openSUSE 11.3

Algorithm::CheckDigits perl-Algorithm-CheckDigits MIME::Lite perl-MIME-Lite

Authen::CAS::Client Mail::Sendmail perl-Mail-Sendmail

Biblio::EndnoteStyle perl-Biblio-EndnoteStyle Memoize::Memcached

Business::ISBN perl-Business-ISBN Net::LDAP

CGI::Session perl-CGI-Session Net::Z3950::ZOOM perl-Net-Z3950

CGI::Session::Serialize::yaml perl-CGI-Session-Serialize-yaml Net::LDAP::Filter

Class::Accessor perl-Class-Accessor Net::Server perl-Net-Server

Class::Factory::Util perl-Class-Factory-Util Number::Format perl-Number-Format

DBD::SQLite2 perl-DBD-SQLite PDF::API2 perl-PDF-API2

DBD::mysql perl-DBD-mysql PDF::API2::Page

Data::ICal perl-Data-ICal PDF::API2::Simple

Date::Calc perl-Data-Calc inc::Module::Install perl-Module-Install

Date::ICal perl-Date-ICal PDF::API2::Util

Date::Manip perl-Date-Manip PDF::Reuse perl-PDF-Reuse

DateTime perl-DateTime PDF::Reuse::Barcode perl-PDF-Reuse-Barcode

Email::Date perl-Email-Date PDF::Table

GD perl-GD POE perl-POE

GD:Barcode:UPCE perl-GD-Barcode SMS::Send perl-SMS-Send

Graphics::Magick perl-GraphicsMagick Schedule::At perl-Schedule-At

HTML::Scrubber perl-HTML-Scrubber Text::CSV perl-Text-CSV

HTML::Template::Pro perl-HTML-Template-Pro Text::CSV::Encoded

HTTP::OAI Text::CSV_XS perl-Text-CSV_XS

JSON perl-JSON Text::Iconv perl-Text-Iconv

Lingua::Stem perl-Lingua-Stem UNIVERSAL::require perl-UNIVERSAL-require

Lingua::Stem::Snowball perl-Lingua-Stem-Snowball XML::Dumper perl-XML-Dumper

List::MoreUtils perl-List-MoreUtils XML::LibXSLT perl-XML-LibXSLT

Locale::Currency::Format XML::RSS perl-XML-RSS

Locale::PO perl-Locale-PO XML::SAX::Writer perl-XML-SAX-Writer

MARC::Charset perl-Marc-Charset YAML Perl-YAML

MARC::Crosswalk::DublinCore perl-MARC-Crosswalk-DublinCore YAML::Syck perl-YAML-Syck

MARC::File::XML perl-MARC-File-XML HTML::Template::Pro perl-HTML-Template-Pro

MARC::Record perl-MARC-Record DublinCore::Record perl-DublinCore-Record

Page 26: Linux Magazine 78

su contraseña, y se mos-

trarán algunas preguntas

más para terminar la

instalación. En caso de

no completarla, la inter-

faz web koha quedará

bloqueada en modo de

mantenimiento.

Cuando visité por pri-

mera vez mi interfaz del

instalador web, recibí

una advertencia

diciendo que el paquete

perl-Date-ICal no se

había instalado, a pesar

de que se instaló a tra-

vés de YaST. Para resol-

ver esto, lo eliminé

desde Yast y luego lo ins-

talé a través de CPAN.

Instalar IdiomasAdicionalesComo con cualquier

aplicación multilingüe,

nuestra configuración

puede necesitar soporte

para otros idiomas ade-

más del inglés. Para tra-

ducir la interfaz gráfica

de usuario a otro idioma debemos comple-

tar un proceso de dos pasos. El primero de

ellos es localizar los archivos .po del

idioma que queramos e instalarlos. El

segundo paso es activar el idioma recién

instalado desde la interfaz web de admi-

nistración de Koha. Vamos a mostrar

cómo añadir el idioma griego, aunque el

procedimiento es el

mismo para cualquier

otro idioma soportado.

Comenzamos cre-

ando la jerarquía para

Greek (el-GR), para lo

que tenemos que crear

dos directorios: /usr/

share/ koha/ opac/

htdocs/ opac-tmpl/ prog/

el-GR y /usr/share/

koha/intranet/htdocs/

intranet- tmpl/ prog/ el-

GR. El primer directorio

incluye la interfaz OPAC

(Online Public Access

Catalog), y el segundo

la interfaz de la intranet.

Suponiendo que hemos

extraído Koha en la car-

peta koha del directorio

de usuario, podemos ejecutar el comando

mostrado en el Listado 6 para instalar la

traducción griega.

Si aparece el mensaje “The install

seems to be successful”, podemos proce-

der al segundo paso, que es activar el

nuevo idioma. Si no es así, puede que no

hayamos creado un directorio necesario,

o puede que haya escrito incorrecta-

mente alguna de las rutas en los coman-

dos.

Para continuar, nos logueamos en la

interfaz de la intranet como administra-

dor. La primera interfaz que ve un admi-

nistrador es la que se muestra en la Figura

1.

A partir de ahí, nos vamos a Home |

Administration | System Preferences |

OPAC | I18N/ L10N. En esa página se nos

dará la opción de habilitar el idioma que

acabamos de instalar, como se ve en la

Figura 2.

Instalación y Configuraciónde ZebraSi estamos creando un servidor de produc-

ción, es probable que queramos instalar el

motor de indexación de texto y de recupe-

ración Zebra [8]. Sin él, buscar algo será

lento y frustrante. Sin embargo, si sólo

estamos haciendo una prueba, todo irá

bien sin él. Para instalar Zebra, simple-

mente escribimos:

yast -i idzebra idzebra-doc

Una vez instalado, podemos ejecutar el

comando rebuild:

/usr/share/koha/binU

/migration_tools/U

rebuild_zebra.pl -r -v -a -b

En mi caso, Zebra no funcionó a la pri-

mera. Tuve que hacer algunos ajustes. El

comando rebuild devolvió problemas de

propiedad, como se muestra en el Listado

7.

Para solucionar este problema, di una

propiedad adecuada al directorio zebradb

de la siguiente manera:

chown -R [koha_user]:U

[koha_group]U

/var/lock/koha/zebradb

Entonces, emití el comando rebuild de

nuevo, y funcionó sin ningún tipo de pro-

blemas. Sin embargo, parecía que no se

Allow from all

</Directory>

No debemos olvidar reiniciar Apache.

Al visitar http:// tuTLD:8080, se mos-

trará un formulario de acceso para iniciar

el instalador web. Necesitaremos el nom-

bre de usuario de administrador de koha y

PRÁCTICO • Koha

32 Número 78 W W W . L I N U X - M A G A Z I N E . E S

/usr/share/koha/bin/migration_tools/rebuild_zebra.pl -r -v -a -bZebra configuration information================================Zebra biblio directory = /var/lib/koha/zebradb/bibliosZebra authorities directory =/var/lib/koha/zebradb/authoritiesKoha directory = /usr/share/koha/intranet/cgi-binBIBLIONUMBER in : 001$@BIBLIOITEMNUMBER in : 090$a================================exporting authority====================

====================REINDEXING zebra====================15:24:24-21/12 zebraidx(5218) [log] zebra_start 2.0.43abd433d1a315576cf1f4a53f2c70365f9a76477f15:24:24-21/12 zebraidx(5218) [log] config/etc/koha/zebradb/zebra-biblios.cfg15:24:24-21/12 zebraidx(5218) [warn] zebra_lock_createfail fname=/var/lock/koha/zebradb/biblios/norm..LCK[Permission denied]

Listado 7: Salida del Comando rebuildde Zebra

Figura 1: La intranet vista por un administrador.

Figura 2: Activación de idiomas adicionales en Koha.

Page 27: Linux Magazine 78

habían cargado los módulos de filtro. El

problema se encontraba en la ruta de las

bibliotecas de 64 bits. Para localizar la ruta

correcta podemos hacer:

find / -iname mod-alvis.so

/usr/lib64/idzebra-2.0/U

modules/mod-alvis.so

Una vez corregida la ruta, edité el archivo

de configuración zebra biblios.cfg y reem-

placé:

modulePath: U

/usr/lib/idzebra-2.0/modules

con

modulePath: U

/usr/lib64/idzebra-2.0/modules

Finalmente, se pudo inicializar Zebra con:

/usr/bin/zebrasrvU

-f /etc/koha/koha-conf.xml &

Debemos asegurarnos de que este

comando se agrega a /etc/ init.d/ after.local

para que Zebra se inicialice cada vez que

arranca el servidor.

Por último, si vamos a llevar el sistema

a Internet, deberíamos activar el soporte

SSL en la instalación. No voy a entrar en

muchos detalles sobre eso, porque el

soporte SSL en Apache es bastante senci-

llo. Para Koha, tenemos que editar el

fichero de configuración y añadir SSL

como nueva directiva de host virtual en el

puerto 443. También podemos agregar el

cifrado SSL en el puerto 8080 para las

conexiones de intranet (no olvide activar

el módulo SSL de Apache).

Uso de KohaLo que ve un usuario al visitar su sitio

web es la interfaz del Catálogo de Acceso

Público en línea (OPAC) – similar a la que

se ve en la Figura 3. Los usuarios pueden

buscar materiales en el

catálogo de la biblioteca,

y es posible acceder para

adaptar la información a

nuestras propias necesi-

dades. Además, pueden

almacenar los resultados

de búsqueda como lis-

tas, añadir etiquetas,

enviar sugerencias de

compra y mucho más.

Existen manuales deta-

llados [9] para explicar

todo tipo de operacio-

nes.

AgregarClientesEn entornos de biblio-

teca, a los usuarios se

les llama clientes. Aña-

dir uno en Koha es sólo

cuestión de un par de

clics. Para hacerlo

vamos a Patrons | New.

Pulsando en New se abre un formulario en

el que podemos añadir los detalles de un

cliente. Tenga en cuenta los campos login

y password de OPAC hacia el final del for-

mulario. Cada usuario necesita una

cuenta de usuario de OPAC para loguearse

en Koha. Cuando hayamos terminado,

simplemente pulsamos Save.

Si no hacemos nada más, las credencia-

les que utilizamos para este usuario sólo

se utilizan para que se loguee como un

cliente habitual (usuario de biblioteca). Si

necesitamos crear algún otro usuario,

tenemos que editar los permisos de acceso

del usuario. Para ello, vamos a Home |

Patrons y elegimos la cuenta del cliente.

Podemos localizar al cliente buscando por

nombre parcial, o con un número de su

tarjeta. Alternativamente, podemos nave-

gar por los clientes por apellido.

Supongamos, por ejemplo, que tenemos

un cliente llamado Account Tester. Si lo

buscamos por test, se obtendrá una lista de

usuarios (en este caso,

un usuario demo), como

se ve en la Figura 4.

El nombre del cliente

será un enlace. Al pulsar

en ese enlace nos lleva a

la página del cliente. Ele-

gimos More | Set permis-

sions para ir a la página

de permisos. Las opcio-

nes de permiso se mues-

tran en la Figura 5. Deberíamos tener en

cuenta algunas consideraciones antes de

asignar los permisos a los usuarios.

ConclusiónKoha nos permite automatizar el ciclo de

producción de una biblioteca a través de

una interfaz de usuario intuitiva basada

en Web y es relativamente fácil de confi-

gurar. Aprender a gestionar Koha puede

llevar un tiempo, ya que es un sistema

muy completo. En este artículo nos hemos

centrado en instalar y configurar Koha

desde el punto de vista del administrador.

Después de eso, le toca a los bibliotecarios

agregar contenido, usuarios y utilizar el

software adecuadamente. �

Koha • PRÁCTICO

33Número 78W W W . L I N U X - M A G A Z I N E . E S

[1] Koha: http:// www. koha. org/

[2] openSUSE Linux:

http:// www. opensuse. org

[3] Servidor web Apache:

http:// www. apache. org

[4] MySQL AB: http:// www. mysql. com

[5] Descarga de openSUSE:

http:// software. opensuse. org

[6] Repositorio Perl en openSUSE:

http:// download. opensuse. org/

repositories/ devel:/ languages:/ perl/

openSUSE_11. 3

[7] CPAN: http:// www. cpan. org

[8] Zebra: http:// www. indexdata. com/

zebra

[9] Manuales de Koha: http:// koha. org/

documentation/ manual

RECURSOS

Figura 4: Búsqueda de clientes.

Figura 5: Configuración de permisos.

Figura 3: El catálogo de acceso público en línea (OPAC) visto por

un usuario anónimo.

Page 28: Linux Magazine 78

Aunque se pueda manejar la base de

datos MySQL desde la línea de

comandos, siempre es preferible uti-

lizar una herramienta gráfica. phpMyAdmin

[1] es la elección de muchos usuarios, pero

no es la única que existe. De hecho, si hace

falta configurar una base de datos ocasional

o ajustar algunos parámetros de la base de

datos de vez en cuando, la cantidad de fun-

ciones de phpMyAdmin podría ser exage-

rada para estas necesidades. Afortunada-

mente, tenemos disponible varias alternati-

vas sencillas para la administración de

MySQL, y en este artículo vamos a echarle

un vistazo a varias de ellas.

SQL BuddyAunque SQL Buddy [2] no se encuentra

actualmente en desarrollo, aún sigue siendo

PRÁCTICO • MySQL Buddy y Adminer

34 Número 78 W W W . L I N U X - M A G A Z I N E . E S

la mejor herramienta de administración

ligera para MySQL. Su facilidad de uso y la

lógica de su interfaz con Ajax hacen que la

tarea de crear y administrar bases de datos

MySQL sea pan comido, incluso para los

usuarios normales. Escrita enteramente en

PHP, SQL Buddy no requiere ninguna insta-

lación; tan sólo hay que obtener la última

versión del sitio web del

proyecto, descomprimir el

archivo, mover el directo-

rio resultante al directorio

raíz del servidor web y

listo.

SQL Buddy utiliza la

tabla users de MySQL para

la autenticación, de modo

que el usuario puede

conectarse usando cual-

quiera de los usuarios de

MySQL existentes, inclu-

yendo el usuario root. Una

vez conectados, se mos-

trará la página principal

(Figura 1). Aquí se puede

seleccionar un idioma

(SQL Buddy soporta 47

idiomas) y un tema (a

escoger entre Bittersweet

que viene por defecto y el

tema Classic). En la sec-

ción Create a New Database, se puede crear

rápidamente una base de datos nueva intro-

duciendo su nombre, seleccionando un

juego de caracteres y presionando el

botón Submit.

SQL Buddy soporta atajos de teclado, de

modo que pueden realizarse ciertas opera-

ciones sin tener que abandonar el teclado –

en la página principal podemos encon-

trar un listado con estos atajos.

La barra de navegación lateral de la

izquierda se encuentra dividida en dos gru-

pos. Los enlaces de navegación en la parte

superior de la barra lateral permiten acceder

de forma rápida a otras páginas de SQL

Buddy tales como Users, Query, Import y

Export. Debajo de estos enlaces se encuentra

una lista desplegable con todas las bases de

datos disponibles. Para utilizar una base de

datos hay que hacer clic sobre ella, o bien,

hacer clic en el triángulo que se encuentra

Serg

ey K

on

yakin

, 123R

F

Ante todo simplicidad: Herramientas ligeras para la administración de MySQL

HERRAMIENTAS MYSQLAlbergar sitios web tanto en nuestro servidor local como en servidores

remotos casi siempre implica el uso de una base de datos MySQL. Por

ello siempre debemos tener en nuestro arsenal alguna herramienta

decente para su administración. POR DMITRI POPOV

Figura 1: SQL Buddy posee una interfaz intuitiva y soporta ata-

jos de teclado.

Page 29: Linux Magazine 78

35Número 78W W W . L I N U X - M A G A Z I N E . E S

junto a la base de datos para ver todas sus

tablas.

Como probablemente haya adivinado ya,

la página Users proporciona las herramien-

tas esenciales para la gestión de los usuarios.

También aquí, la simplicidad es la clave.

Para crear un usuario nuevo se introduce el

host, el nombre del usuario y la contraseña

en los campos apropiados, luego con las

opciones disponibles se le autoriza el acceso

a las bases de datos y se le asignan los privi-

legios. Haciendo clic en el botón Submit se

añade el usuario al sistema (Figura 2). La

edición de las cuentas de los usuarios exis-

tentes es igual de fácil: se selecciona el usua-

rio que se desee editar y se presiona el botón

Edit, luego sólo hay que modificar los valo-

res apropiados.

La página Query proporciona un editor

SQL que permite la construcción y la ejecu-

ción de consultas SQL. De hecho, tan sólo es

un cuadro de texto sin ningún tipo de flori-

tura como el coloreado de código. Para tra-

bajar con esta función hay que saber SQL.

SQL Buddy facilita la realización de copias

de seguridad de las bases de datos MySQL y

de los datos almacenados en ellas por medio

de la página Export. Se pueden seleccionar

todas o algunas de las bases de datos de la

lista Databases y elegir si se quiere exportar

la base de datos, los datos o ambos. Para

guardar el fichero como .sql se debe selec-

cionar como opción de salida Text file, asig-

nar un nombre al fichero de la copia de

seguridad y presionar Submit (Figura 3).

Para restaurar las bases de datos y los datos

(o importar los datos

a partir de otras

bases de datos), en

la página Import se selecciona el fichero .sql

que contenga la copia de seguridad y se

pulsa el botón Submit.

La intuitiva interfaz de usuario de SQL

Buddy también facilita el trabajo con las

bases de datos. Haciendo clic en Databases,

que se encuentra en la barra de navegación,

se accede a la página de mantenimiento.

Aquí se pueden añadir tablas y campos a la

base de datos, además de manipular las

tablas existentes. La creación de tablas y

campos es bastante sencilla. En la sección

Create a New Table, se le da un nombre a la

tabla, se especifica el juego de caracteres, se

añaden tantos campos como se necesiten y

se presiona Submit.

También se pueden seleccionar las tablas

existentes y realizar diversas acciones sobre

ellas, como Empty (borra todos los registros

de las tablas seleccionadas), Drop (borra las

tablas seleccionadas) y Optimize (optimiza

las tablas seleccionadas) (Figura 4). Por

supuesto, es posible utilizar SQL Buddy para

moverse y ver los registros de las tablas de la

base de datos. Haciendo clic en el icono

MsSQL Buddy y Adminer • PRÁCTICO

Figura 2: Añadiendo un usuario nuevo.

Figura 3: SQL Buddy facilita la exportación de las bases de datos y de

los datos.

Figura 4: Trabajando con bases de datos en SQL Buddy.

Page 30: Linux Magazine 78

triangular se pueden explorar y recorrer los

registros. Para editar un registro, se selec-

ciona y se presiona el enlace Edit.

En resumen, SQL Buddy es una herra-

mienta para la administración de MySQL

bastante agradable. Su intuitiva interfaz de

usuario hace que el trabajo con las bases de

datos sea menos tedioso, incluso para los

usuarios sin experiencia. El único inconve-

niente es que su desarrollador original ya no

sigue manteniéndola, pero tengo la espe-

ranza de que la comunidad dé un paso ade-

lante y continúe el desarrollo de esta ágil

herramienta.

AdminerHay dos cosas que diferencian a Adminer

[3] del resto de las herramientas de adminis-

tración de MySQL. Primero, la herramienta

completa consiste en un único fichero PHP,

de modo que es ridículamente fácil la insta-

lación: descargamos la última versión de

Adminer del sitio web del proyecto y copia-

mos el fichero al directorio raíz del servidor

web. Y eso es todo. Segundo, Adminer es

impresionantemente rápida, lo que puede

ser un punto a favor cuando hace falta admi-

nistrar una base de datos MySQL remota por

medio de una conexión lenta. Además de

MySQL, Adminer también puede manejar

las bases de datos PostgreSQL, SQLite, MS

SQL y Oracle.

La interfaz de usuario de Adminer no

ganaría ningún concurso de diseño, y si la

comparamos con la de SQL Buddy, pode-

mos decir que es totalmente plana (Figura

5); sin embargo, es la carencia de elementos

visuales lo que hace que Adminer sea tan

rápida. Y aunque la interfaz no sea bonita,

es funcional y permite que se pueda realizar

el trabajo.

De forma similar a SQL Buddy, Adminer

utiliza la tabla users de MySQL para la

autenticación de los usuarios, de modo que

podemos conectarnos usando cualquier

cuenta de usuario existente en el servidor

MySQL. La página principal muestra un lis-

tado de las bases de datos existentes y pro-

porciona unos cuantos enlaces con los

comandos más utilizados, con los cuales se

puede crear una base de datos nueva; ver,

modificar y añadir usuarios; y echarle un ojo

a los procesos en ejecución.

La creación de una base de datos nueva es

un proceso bastante sencillo. Para comen-

zar, hay que hacer clic en el enlace Create

new database, luego se especifica el nombre,

la codificación y se pulsa el botón Save. El

añadido de usuarios nuevos tampoco es par-

ticularmente difícil. Para poder rellenar los

campos requeridos y espe-

cificar los privilegios hay

que hacer clic en el enlace

Privileges de la página prin-

cipal y luego en Create user

(Figura 6). Para finalizar se

pulsa Save. Si se desea

modificar un usuario exis-

tente, es suficiente con

hacer clic en el enlace edi-

tar que se encuentra junto

al usuario deseado.

Para ir a una base de

datos específica, o bien se

pulsa el enlace correspon-

diente de la lista de bases de

datos, o bien se selecciona

de la lista desplegable de la

barra de navegación de la parte izquierda. De

esta forma se abre la página Tables and

Views que contiene un resumen de todas las

tablas de la base de datos (Figura 7).

El campo Search puede ser útil para bus-

car registros en una tabla. Por ejemplo, si se

teclea “monkey” y se presiona el botón

Search, nos devolverá una lista de tablas que

contienen algún registro que coincide con la

búsqueda. Al pulsar sobre una de estas

tablas se podrán ver los registros obtenidos

como resultado de la búsqueda.

Los botones en la parte inferior de la lista

permiten realizar diversas acciones útiles. Es

posible optimizar, comprobar y reparar

tablas simplemente presionando el botón

apropiado. Para examinar la estructura de

una tabla específica sólo hay que pulsar

sobre ella en la vista resumen. Para poder

ver los registros de la tabla, se debe pulsar el

enlace Select data. Se pueden editar los

registros de forma individual con tan sólo

hacer clic en el enlace edit que aparece junto

a ellos, y si se quiere añadir un registro

nuevo, lo único que hay que hacer es pulsar

el enlace New item.

Como cualquier herramienta para la

administración de MySQL que valga la pena,

Adminer permite importar y exportar datos,

y para ello dispone de varias formas de

hacerlo. Cuando se está viendo una tabla, se

puede exportar su estructura y registros

haciendo clic en el enlace Export que se

encuentra al pie de la página y seleccio-

nando el tipo de salida que se desee (por

ejemplo, abrir el fichero de exportación en el

navegador, guardarlo, o comprimirlo y guar-

PRÁCTICO • MySQL Buddy y Adminer

36 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Figura 6: Modificación de un usuario existente.

Figura 5: La interfaz de Adminer es decididamente básica.

Page 31: Linux Magazine 78

darlo). Adminer también soporta tres forma-

tos populares de exportación: SQL, CSV

(valores separados por coma) y TSV (valores

separados por tabuladores); sólo hay que

seleccionar el deseado y pulsar el botón

Export. La importación de datos en la tabla

actual también es muy fácil: Hay que hacer

clic en el enlace Import, seleccionar el

fichero fuente y presionar Import. El

comando Dump en la barra de navegación

permite exportar la base de datos que actual-

mente se esté viendo entera o todas las

bases de datos juntas si se invoca desde la

página principal (Figura 8).

En resumen, no hay que dejarse engañar

por el aspecto de Adminer. Esta herramienta

para la administración de

MySQL es competente, fácil de

instalar y extremadamente

rápida. Gracias a sus flexibles

opciones de exportación y

soporte para operaciones avan-

zadas como son las funciones,

los triggers y los procedimientos

almacenados, es perfecta para

los usuarios casuales de MySQL

y para los avanzados.

ConclusiónAsí que, ¿cuál de estas dos herra-

mientas de administración de

MySQL debemos elegir? Si sólo

tenemos que crear bases de

datos ocasionales o realizar

algún ajuste de vez en cuando,

entonces SQL Buddy será una buena elec-

ción. No nos agobiará con funciones avan-

zadas y además, engloba todas sus funcio-

nes en una interfaz elegante. Si lo que nece-

sitamos es una herramienta rápida y

potente, y no nos dejamos asustar por inter-

faces que exponen funciones complejas, en

ese caso Adminer es lo que andamos bus-

cando. �

MsSQL Buddy y Adminer • PRÁCTICO

37Número 78W W W . L I N U X - M A G A Z I N E . E S

[1] phpMyAdmin: www. phpmyadmin.

net

[2] SQL Buddy: http:// www. sqlbuddy.

com/

[3] Adminer: www. adminer. org

RECURSOS

Figura 7: Trabajando con tablas en Adminer.

Figura 8: Adminer dispone de una utilidad de exportación

flexible.

Page 32: Linux Magazine 78

DESARROLLO • Python: Django y Mongo DB

38 Número 78 W W W . L I N U X - M A G A Z I N E . E S

El ORM de Django (la librería

que nos permite interactuar con

la base de datos) fue diseñado

de forma que su evolución futura no

quedase bloqueada por decisiones

tomadas en el pasado. Siempre se ha

comparado este ORM con uno de los

más populares en Python, SQLAlchemy

[1]. Pero el propio nombre de este

competidor deja claro su objetivo:

hacer magia con SQL.

Sin embargo, el ORM de Django se

concebió mirando desde la otra parte

del camino. En lugar de centrarse en

crear un sistema que permitiese inter-

actuar con bases de datos relacionales

(que generalmente usan SQL como len-

guaje) se diseñó para poder almacenar

y rescatar objetos desde un repositorio

abstracto. Quizá llamarlo ORM (Object

Relational Manager) no fue una deci-

sión muy acertada.

Después de la dura batalla entre los

distintos conten-

dientes por la

corona de las

nuevas bases de

datos NoSQL que

compiten por

ofrecer diferentes

alternativas a las

bases de datos

relacionales,

MongoDB [2]

comienza a perfilarse como vencedor.

Su acertada elección de características y

su comportamiento a medio camino

entre base de datos relacional y base de

datos llave-valor (diccionarios), le ha

hecho ganar muchos puntos en la

GIGANTESCO

Integración de Django y MongoDB

En una serie de dos artículos comprobaremos cómo podemos hacer uso de toda la potencia de MongoDB

desde Django de forma sencilla. POR JOSÉ MARÍA RUÍZ

01 from mongoengine import *

02

03 class Vuelo(Document):

04 localizador = StringField(required = True)

05 aerolinea = StringField(required=True)

06 origen = StringField(required = True)

07 destino = StringField(required = True)

08 fecha = DateTimeField(required=True)

Modelo mongodb para Vuelo.

No

el P

ow

ell, 1

23R

F.co

m

Page 33: Linux Magazine 78

comunidad de start-ups software. Otro

de los atributos que hace de MongoDB

un gran candidato, y que también le ha

hecho ganar la confianza de muchas

empresas establecidas, es su capacidad

para crear una infraestructura distri-

buida (múltiples servidores conectados)

de forma prácticamente automática.

En este artículo no nos centraremos

en los atributos de MongoDB, sino en

cómo podemos emplear MongoDB

desde Django de forma muy sencilla

gracias a la librería MongoEngine [3].

MongoDBComencemos creando una instancia de

MongoDB. Debemos instalar MongoDB

empleando el sistema de paquetes de

nuestra distribución (en cuyo caso

debemos instalar un paquete con un

nombre parecido a «mongodb-server»),

o bien podemos descargar el código

fuente desde la página web del pro-

yecto [2].

Es recomendable emplear la versión

2.x del proyecto, puesto que incorpora

gran cantidad de mejoras en cuanto a

la fiabilidad y protección de los datos.

En versiones anteriores de MongoDB,

el comportamiento del servidor podía

provocar pérdidas de datos no desea-

das.

Si hemos instalado correctamente el

servidor podemos arrancarlo, pero pri-

mero debemos decidir en qué directo-

rio albergaremos los datos. Por defecto,

MongoDB tratará de usar el directorio

/data/db/, pero podemos seleccionar

cualquier directorio que queramos

usando la opción --dbpath:

$ mkdir midirectorio

$ mongod --journal --dbpath U

midirectorio

La opción --journal le indicará a Mon-

goDB que emplee un fichero de log

para las operaciones, lo que nos prote-

gerá ante pérdidas de datos ocasiona-

das por fallos de alimentación («tirón

del enchufe») a cambio de perder algo

de rendimiento.

Si entramos en el directorio donde

hemos arrancado MongoDB, nos pode-

mos llevar un susto al ver que existen

varios ficheros con un tamaño de 1

gigabyte. Es algo normal – para

aumentar el rendimiento MongoDB

pre-aloja espacio en disco duro.

los modelos del ORM de Django, lo que

nos permitirá reutilizar todo nuestro

conocimiento de Django en su práctica

totalidad.

Podemos instalar MongoEngine

usando el sistema de gestión de paque-

tes Python pip en un virtualenv (si no

conoces estas dos tecnologías, ¡debe-

rías comenzar a usarlas ahora

mismo!):

$ pip install mongoengine

En este artículo, voy a suponer que dis-

ponemos de un proyecto Django opera-

tivo y funcionando. En tal caso deberí-

amos contar con un fichero llamado

settings.py donde se configura el com-

portamiento de Django. Debido a que

MongoEngine no forma parte de

Python, debemos añadir una serie de

lineas en este fichero:

from MongoEngine import connect

connect(“mi-base-de-datos”)

La función connect establecerá una

conexión con la instancia MongoDB

que está ejecutándose en otro terminal.

Por defecto la buscará en el puerto

Muy bien, todo está listo para conec-

tar nuestro proyecto Django con Mon-

goDB, pero antes echemos un vistazo a

los problemas que plantea MongoDB .

No Todo el Monte esOréganoMongoDB trae un poco de aire fresco al

algo añejo mundo de las bases de

datos. Organiza los datos de forma

muy sencilla, disponemos de bases de

datos, colecciones y subcolecciones.

Tenemos libertad absoluta para crear

cuantos elementos de cada tipo desee-

mos. Los documentos almacenados se

comportan como ficheros JSON [4], lo

que los hace muy sencillos de emplear

en Python – vienen a ser como diccio-

narios. Para que no ocupen tanto espa-

cio en disco, MongoDB los almacena

en un formato binario llamado BJSON,

definiendo tipos para números, boolea-

nos, cadenas, fechas…

Todo esto es genial, pero también

plantea varios problemas. Los docu-

mentos almacenados en una colección

pueden ser de cualquier tipo. Podemos

juntar peras y manzanas en una misma

colección, y MongoDB no se quejará.

Esta flexibilidad extrema puede vol-

verse en nuestra contra rápidamente a

medida que la complejidad de nuestro

sistema crezca.

Pero esta forma de trabajar también

es una ventaja, puesto que podremos

ampliar nuestros modelos de datos sin

la necesidad de sus tediosas y peligro-

sas migraciones. Simplemente pode-

mos añadir más campos a nuestros

modelos y no habrá ningún error. Las

nuevas instancias tendrán el nuevo

campo y las antiguas no lo tendrán.

Como MongoDB difiere de la forma

en que queremos usarlo en Django,

MongoEngine introduce algunas res-

tricciones para hacerlo más maneja-

ble.

MongoEngineSi bien podemos usar MongoDB direc-

tamente desde Django, empleando la

librería pymongo

[3], MongoEn-

gine nos hará la

vida más senci-

lla, ver Figura 1.

Define una serie

de clases que se

comportan como

Python: Django y Mongo DB • DESARROLLO

39Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 1: Esquema que muestra cómo se

estructura MongoEngine.

01 class Pasajero(Document):

02 nombre = StringField(required = True)

03 apellidos = StringField(required = True)

04 nie = StringField(required = True)

05 fecha_caduca_nie = DateTimeField(required = True)

Modelo mongodb para Pasajero.

Page 34: Linux Magazine 78

Django. Podemos

crear un modelo

vacío:

>>> v = Vuelo()

Pero si tratamos de guardarlo, se gene-

rará un error:

>>> v.save()

...

ValidationError: Field U

“localizador” is required

>>>

Aunque MongoDB nos permite almace-

nar cualquier tipo de documento, Mon-

goEngine realiza comprobaciones

antes de permitir guardar el modelo.

En este caso nos indica que el campo

localizador es obligatorio. Podemos

asignar valores a cada campo:

>>> v.localizador = “AAA1234”

>>> v.origen = “AGP”

>>> v.destino = “LGW”

>>> v.aerolinea = U

“Python airlines”

>>> from datetime import U

datetime

>>> v.fecha = U

datetime(2011,12,3)

>>> v.save()

Ahora sí hemos podido guardar el

modelo. Es posible editar cualquiera de

los campos de v y volver a guardar:

>>> v.localizador = “BBB4567”

>>> v.save()

Para comprobar que efectivamente se

ha almacenado el modelo, podemos

buscarlo como lo haríamos con el ORM

de Django:

>>> Vuelo.objects.filter(U

localizador = ‘BBB4567’)

[<Vuelo: Vuelo object>]

>>> Vuelo.objects.filter(U

localizador = ‘BBB4567’U

)[0].localizador

“BBB4567”

Una diferencia entre MongoDB y las

bases de datos relacionales es que cada

documento almacenado en MongoDB

dispone de un id que es único de forma

global. No puede haber dos objetos en

MongoDB con el mismo id, aunque

pertenezcan a diferentes bases de

datos.

>>> v.id

ObjectId(‘4ede0549a261U

7c1306000000’)

>>> v.pk

ObjectId(‘4ede0549a26U

17c1306000000’)

Este id se asigna al guardar el objeto,

tal como ocurre en Django. Por último,

podemos eliminar un objeto de la

forma habitual:

>>> Vuelo.objects.count()

1

>>> v.delete()

>>> Vuelo.objects.count()

0

Tipos de CamposPor el momento sólo hemos empleado

la clase StringField, que nos permite

almacenar una cadena de caracteres en

un campo de nuestro modelo, pero

MongoEngine nos ofrece un gran sur-

tido de tipos de campos para nuestros

modelos.

Modelos EmpotradosMongoDB no posee el concepto de

llave foránea, por lo que no es posible

conectar los modelos como se hace en

Django. Como ya hemos visto, aunque

MongoDB no fuerza determinadas res-

tricciones, MongoEngine suple esta

«deficiencia» (o decisión de diseño,

depende del punto de vista). Dispone-

mos de campos básicos como por

ejemplo:

• StringField

• URLField

• EmailField

• IntField

• FloatField

• DecimalField

• DateTimeField

• ComplexDateTimeField, como Date-

TimeField pero almacena los micro-

segundos de forma exacta

• ObjectIdField

• BooleanField

• GeoPointField

Pero MongoDB también nos ofrece

campos de los que no se dispone en

Django:

27017 en localhost (127.0.0.1), donde

MongoDB arranca si no lo especifica-

mos de otra manera. Si tuviésemos que

conectar con una instancia MongoDB

ejecutándose en otra IP o puerto debe-

ríamos usar:

connect(“mi-base-de-datos”, U

host=”192.168.1.30”,U

port=”1999”)

MongoDB también nos permite esta-

blecer control de acceso a las distintas

bases de datos usando un nombre de

usuario y una clave, datos que pode-

mos pasar también a connect()

mediante los parámetros username y

password.

Por increíble que parezca ¡ya hemos

realizado toda la configuración necesa-

ria!

Nuestros Primeros ModelosLa forma de trabajar de MongoEngine

es idéntica a la del ORM de Django.

Debemos definir una serie de modelos

mediante clases que contendrán cam-

pos. Suponiendo que nuestro proyecto

Django disponga de una aplicación lla-

mada main, deberíamos editar el

fichero main/models.py. La verdad es

que podemos poner nuestros modelos

mongo donde queramos, pero es reco-

mendable emplear el fichero donde se

almacenan los modelos en Django por

coherencia.

En Django debemos crear clases que

hereden de models.Model, pero con

MongoEngine nuestras clases deben

heredar de la clase Document. Mon-

goDB se define a menudo como una

base de datos orientada a documentos,

siendo los documentos ficheros JSON.

Nuestro fichero models.py deberá con-

tener el código del Listado 1. Para

poder usar el modelo podemos

emplear el shell de Django:

$ python manage.py shell

>>> from main.models import *

Los modelos mongodb se comportan

de forma idéntica a los modelos

DESARROLLO • Python: Django y Mongo DB

40 Número 78 W W W . L I N U X - M A G A Z I N E . E S

01 class Empleado (EmbeddedDocument):

02 nombre = StringField(required = True)

03 apellidos = StringField(required = True)

Modelo Empotrado de Empleado

Page 35: Linux Magazine 78

• ListField

• SortedListField

• DictField

• MapField

• ReferenceField

• GenericReferenceField

• EmbeddedDocumentField

• GenericEmbeddedDocumentField

• FileField

• BinaryField

• SequenceField

MongoDB permite almacenar en los

documentos listas y diccionarios de

forma nativa. Por ejemplo, en nuestra

clase Vuelo podemos disponer de un

listado de viajeros de aeropuertos por

los que pasará el vuelo. Todos los cam-

pos compuestos permiten almacenar

en su interior cualquier otro tipo de

campo. Podemos crear un ListField de

DateTimeField o StringField. Pero si

sólo pudiera hacer eso, MongoDB no

sería tan potente. Existen dos campos

especiales: EmbeddedDocumentField y

ObjectIdField.

Digamos que disponemos de un

modelo llamado Pasajero como el que

aparece en el Listado 2. En una base de

datos relacional tendríamos que poner

un campo en Pasajero que almacenase

el id de su Vuelo. En MongoDB tam-

bién podemos hacer esto, sólo habría

que añadir un campo de tipo Reference-

Field en Pasajero apuntando a Vuelo.

Pero existe otra opción: almacenar

directamente los pasajeros en el propio

vuelo. A esto se le

llama normalmente

«desnormalizar» el

modelo. Por ejemplo,

imaginemos que que-

remos almacenar la

información de un

vuelo y que no quere-

mos que se actualice.

El nombre de las per-

sonas, sus apellidos o

su fecha de caducidad

de su documento de

identificación pueden

variar con el tiempo.

En una base de datos

relacional deberíamos

disponer de una tabla

con el histórico de

cambios, pero en

MongoDB simple-

mente podemos alma-

cenar los datos dentro

del modelo, ver Figura 2. Para ello

debemos cambiar la definición de

Vuelo a la que aparece en el Listado 3.

El campo pasajeros es una lista de

objetos de tipo EmbeddedDocument-

Field, que a su vez sólo acepta como

parámetro una clase que herede de

EmbeddedDocument. MongoEngine

nos aporta estructura y validaciones

donde MongoDB no lo hace.

Muy bien ¿y cómo podemos añadir

un pasajero a un vuelo? Suponiendo

que la variable v es un objeto de tipo

Vuelo con todos sus campos asignados:

01 >>> v.pasajeros

02 []

03 >>> p = Pasajero()

04 >>> p.nombre = u”Pedro”

05 >>> p.apellidos = u”López”

06 >>> p.nie = “123123”

07 >>> p.fecha_caduca_nie

= datetime(2011,12,31)

08 >>>

09 >>> v.pasajeros.append(p)

10 >>> v.save()

pasajeros se comporta como una lista

de Python. Si quisiéramos borrar todos

los pasajeros:

>>> v.pasajeros = []

>>> v.save()

Pero no sólo de listas vivimos los pro-

gramadores, a veces también necesita-

mos almacenar diccionarios. Para ello

disponemos de la clase MapField, con

la que podemos almacenar un diccio-

nario que emplea cadenas como llaves

y campos como valores. De nuevo

podemos emplear EmbeddedDocument-

Field como campo a almacenar. En

nuestro ejemplo, podemos añadir el

modelo Empleado (ver Listado 3) y

añadir también un nuevo campo a

Vuelo llamado empleados:

...

empleados = MapField(U

EmbeddedDocumentU

Field(Empleado))

que nos permitirá añadir empleados

usando su puesto, por ejemplo, como

llave:

>>> v.empleados[‘capital’]U

= Empleado(nombre = ‘Gustavo’,U

apellidos = “Carmona”)

>>> v.save()

Gracias a estas dos clases (y a Sorted -

ListField y DictField) MongoDB nos

permite construir potentes jerarquías

de objetos que podremos almacenar y

recuperar a toda velocidad.

ConclusiónEn este primer artículo sólo hemos

podido ver las opciones más sencillas

de MongoDB. En el próximo veremos

cómo se comportan MongoEngine y

Django cuando hagamos uso de las

características más importantes de

MongoDB: el sharding/ replicación y

map/ reduce. Es entonces cuando

podremos apreciar la auténtica poten-

cia de esta innovadora base de datos. �

Python: Django y Mongo DB • DESARROLLO

41Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 2: Esquema relacional vs Esquema de documentos empo-

trados.

[1] SQLAlchemy:

http:// www. sqlalchemy. org

[2] MongoDB:

http:// www. mongodb. org/

[3] MongoEngine:

http:// mongoengine. org/

[4] JSON: http:// www. json. org/

RECURSOS

José María Ruiz Aguilera es un

emprendedor enamorado de Python, la

ciencia y la informática.

EL AUTOR

Page 36: Linux Magazine 78

Apesar de que posiblemente dis-

frute al escribir tarjetas de felici-

tación a mano y luego enviándo-

las por correo, debería considerar aho-

rrarse la molestia de escribir las direccio-

nes en los sobres, y usar etiquetas adhe-

sivas en su lugar. Las prácticas etiquetas

para impresoras láser en hojas tamaño

carta (véase la Figura 1) cuestan alrede-

dor de medio céntimo por unidad (15

céntimos por hoja). No sólo aceleran el

proceso de envío por correo, sino que

también son útiles para eti-

quetar cables de equi-

pos electrónicos.

El script Perl

que veremos en

este artículo

lee el texto

separado

por comas

y lo

imprime línea por línea en las etiquetas.

Por supuesto, no tenemos por qué res-

tringirnos a las direcciones. ¿Le atrae la

idea de etiquetar el lío de cables que

tiene debajo de su escritorio para ayudar

al saturado administrador de red a encon-

trar el cable de alimentación del router en

un par de segundos la próxima vez que

algo vaya mal?

Tamaños PreconfiguradosOpenOffice Writer ya soporta formatos de

etiquetas de una gran variedad de

provee dores, y en el menú Nuevo | Eti-

quetas (véase la Figura 2), podemos crear

documentos de tipo tabla para que coin-

cidan. En el cuadro de diálogo de la

Figura 3 sólo tenemos que introducir el

fabricante y el código de producto para

las etiquetas – las dimensiones están

garantizadas. Después de crear estos

documentos, sólo tenemos que añadir el

cuerpo de texto y pulsar el botón “Impri-

mir”, que es sin duda algo más fácil que

escribir nuestro propio programa de posi-

cionamiento de impresión. Debido a que

OpenOffice guarda sus documentos en

formato abierto ODF, podemos extraer

los datos de la tabla desde un archivo

CSV con un script Perl antes de inyectar-

los en el documento.

Dentro del Archivo .odtAntes de que nuestra lista de direcciones

se pueda agregar a la tabla de etiquetas

necesitamos crear una plantilla de Open -

Office y teclear un par de cadenas de

prueba (véase la Figura 4). Como revela

el comando unzip de la Figura 5, el docu-

mento resultante, guardado como tem-

DESARROLLO • Perl: Etiquetas OpenOffice

42 Número 78 W W W . L I N U X - M A G A Z I N E . E S

No lo escriba, ¡péguelo!

ETIQUETAINDEPENDIENTE

OpenOffice ofrece una selección de formatos preconfigurados para

usuarios que necesitan imprimir sus propias etiquetas autoadhesivas.

Perl suministra los datos de dirección al documento.

POR MIKE SCHILLI

Page 37: Linux Magazine 78

plate.odt, consta de un archivo ZIP con

los archivos XML, el más interesante de

los cuales, content.xml, es el contenido

del texto del documento con marcas

XML.

Al llamar al script del Listado 1 tecle-

ando oo-dumper template.odt, se revela

entonces el contenido del documento y

las estructuras de marcado para las cade-

nas introducidas previamente por el

usuario en los elementos de la tabla.

El script obtiene el módulo OpenOf-

fice::OODoc de CPAN y llama a su cons-

tructor ooDocument() con el nombre del

archivo a investigar. La línea 18 define

“content” como el member del docu-

mento. En otras palabras, estamos intere-

sados en el contenido del documento, no

en las cabeceras externas, pies de página,

definiciones de estilo reutilizables o

metadatos.

Explorando el XMLEl método selectElements lanza una con-

sulta XPath que revela todos los elemen-

tos XML dentro de la etiqueta

officce:body, es decir, el documento de

texto en sí. Los documentos contienen

un único cuerpo, sin embargo, OpenOf-

fice::OODoc insiste en que el lado

izquierdo de la asignación en la línea 21

sugiere un contexto de lista, lo que

explica el paréntesis alrededor de $ele-

ment. El valor de retorno es una referen-

cia a un elemento específico OpenOf-

fice::OODoc::Element, que entiende tam-

bién los métodos de ejecución del parser

XML, XML::Twig, por herencia. Este

estrafalario módulo XML, que ya fue

revisado en un artículo anterior de esta

sección de Perl [3], proporciona el

ces todas las etiquetas e inyecta los datos

de texto en ellas.

Para abrir la plantilla .odt, el script usa

el constructor ooDocument() del archivo

ready.odt que se creó anteriormente en la

línea 31 al copiar template.odt con la fun-

ción cp del módulo Sysadm::Install.

La versión disponible actualmente de

OpenOffice::OODoc contiene un error

que hace que se procesen los documen-

tos codificados en UTF8 incorrectamente

si contienen caracteres no ASCII. La

configuración

local_encoding => “”

de la línea 36 proporciona una solución

temporal, pero el valor debería ser “utf8”.

Añadir los Datos deDireccionesLos datos en bruto deben almacenarse en

un archivo address-book.csv (véase la

método _dump(),

lo que genera el

formato de texto

del sub-árbol XML

y lo devuelve como

una cadena.

En la Figura 6, la

etiqueta office:text

bajo office:body

contiene un par de

declaraciones

sequence seguidas

por texto tipo

text:p. Esta línea es

una fila de una

tabla con tres

columnas, para

cuyos elementos

draw:frame dibuja los marcos. Estos mar-

cos, a su vez, contienen elementos

draw:text-box con elementos text:p en

donde reside el texto de prueba (test1,

test2, etc.).

Una consulta XPath como

//office:body/office:text/text:p

recupera todas las líneas de la tabla (que

a su vez contienen los marcos de la

columna), mientras que los elementos de

la tabla (tres por fila) se almacenan de

forma relativa a éstos más abajo:

.../draw:frame/U

draw:text-box/text:p

El script del Listado 2 utiliza la primera

consulta XPath para añadir tantas líneas

a la tabla como sea necesario para los

datos de direcciones que se desean impri-

mir. La segunda consulta examina enton-

Perl: Etiquetas OpenOffice • DESARROLLO

43Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 2: La entrada Etiquetas en OpenOffice Writer nos lleva al

maravilloso mundo de los formatos para etiquetas.

Figura 1: Etiquetas para impresora laser: 30 por hoja, 4.200 por caja.

Figura 3: Además del fabricante de las etiquetas, también podemos

seleccionar un producto específico.

Page 38: Linux Magazine 78

separadas por comas del archivo CSV.

Para dejar espacio suficiente en el lado

izquierdo de la etiqueta, donde irá más

tarde la entrada de texto, el comando de

reemplazo dentro del bucle for a partir de

la línea 99 inserta un espacio en blanco

delante de cada línea de la etiqueta. La

línea 104 concatena las líneas de la direc-

ción para crear una cadena con saltos de

línea y la empuja hasta el final de la

matriz @addresses, que es pasada por la

función de nuevo al programa principal

tras completar su trabajo.

¡No Quiero DesperdiciarEtiquetas!Para evitar el desperdicio de etiquetas, el

script siempre llena por completo una

página tamaño carta – si es necesario,

mediante la repetición de las direcciones

en el archivo CSV. Si la base de datos de

direcciones tiene más de 30 entradas, el

Listado 2 ha de añadir páginas adiciona-

les al final del documento. En este caso

también se llenará cualquier espacio

sobrante en la página con datos repeti-

dos.

Figura 7), donde el script label-writer

puede recogerlos línea por línea con la

función getline() del módulo

Text::CSV_XS de CPAN.

La función addresses_scan abre el

archivo con el pragma :encoding(utf8)

para permitir que Perl analice los caracte-

res codificados en UTF-8 correctamente

en el archivo y fije la bandera UTF-8 para

ellos en sus estructuras de datos.

En cada iteración del bucle, la variable

$row apunta a una matriz cuyos elemen-

tos representan las entradas de líneas

DESARROLLO • Perl: Etiquetas OpenOffice

44 Número 78 W W W . L I N U X - M A G A Z I N E . E S

001 #!/usr/local/bin/perl -w

002 #############################

003 # label-writer - Use

004 # OpenOffice to write

005 # address labels

006 # Mike Schilli, 2011

007 # ([email protected])

008 #############################

009 use strict;

010 use OpenOffice::OODoc;

011 use Sysadm::Install

012 qw( :all );

013 use Text::CSV_XS;

014 use POSIX qw(ceil);

015

016 my $template =

017 “template.odt”;

018 my $file = “ready.odt”;

019 my $addr_book =

020 “address-book.csv”;

021 my $labels_per_page = 30;

022

023 my @addresses =

024 addresses_scan($addr_book);

025

026 my $addtl_pages = ceil(

027 scalar @addresses /

028 $labels_per_page) - 1;

029

030 # Put template in place

031 cp $template, $file;

032

033 my $doc = ooDocument(

034 file => $file,

035 type => “content”,

036 local_encoding => “”,

037 );

038

039 # Extend document as

040 # necessary

041 my @rows =

042 $doc->selectElements(

043 ‘//office:body/’ .

044 ‘office:text/text:p’

045 );

046

047 for (1 .. $addtl_pages) {

048 for my $row (@rows) {

049 $doc->replicateElement(

050 $row, “body”);

051 }

052 }

053

054 # All labels, including new ones

055 my @labels =

056 $doc->selectElements(

057 ‘//office:body/’ .

058 ‘office:text/text:p/’ .

059 ‘draw:frame/’ .

060 ‘draw:text-box/text:p’

061 );

062

063 my $addr_idx = 0;

064

065 for my $label (@labels) {

066 $doc->setStyle($label,

067 “P1”);

068 $doc->setText($label,

069 $addresses[$addr_idx]);

070 $addr_idx++;

071 $addr_idx = 0

072 if $addr_idx >

073 $#addresses;

074 }

075

076 $doc->save();

077

078 #############################

079 sub addresses_scan {

080 #############################

081 my ($addr_book) = @_;

082

083 my @addresses = ();

084

085 open(my $fh,

086 “<:encoding(utf8)”,

087 $addr_book)

088 or die “$addr_book: $!”;

089

090 my $csv = Text::CSV_XS->new(

091 { binary => 1 })

092 or die “Cannot use CSV: “

093 . Text::CSV->error_diag();

094

095 while (my $row =

096 $csv->getline($fh)) {

097 unshift @$row, “”;

098

099 for (@$row) {

100 s/^/ /;

101 }

102

103 push @addresses,

104 join(“\n”, @$row);

105 }

106 close $fh;

107

108 return @addresses;

109 }

Listado 2: label-writer

01 #!/usr/local/bin/perl -w

02 #############################

03 # oo-dumper - Dump an

04 # OpenOffice document

05 # Mike Schilli, 2011

06 # ([email protected])

07 #############################

08 use strict;

09 use OpenOffice::OODoc;

10

11 (my $file) = @ARGV;

12

13 die “usage: $0 file”

14 unless defined $file;

15

16 my $doc = ooDocument(

17 file => $file,

18 member => “content”,

19 );

20

21 (my $element) =

22 $doc->selectElements(

23 ‘//office:body’);

24

25 print $element->_dump();

Listado 1: oo-dumper

Page 39: Linux Magazine 78

La línea 21 refiere al número predefinido de etiquetas por

página, y la línea 26 calcula el número necesario de páginas

del documento de etiquetas mediante la factorización del

tamaño de la base de datos de direcciones. La función ceil()

del módulo POSIX redondea hasta el siguiente número

entero en caso de fracciones. El número $addtl_pages (pági-

nas adicionales) es entonces uno menos debido a que el

documento de plantilla creado por el usuario ya dispone de

la primera página.

Todas las filas de la tabla en la página de prueba se ali-

nean en la matriz @rows después de la primera consulta de

XPath en la línea 42, y por cada página adicional a crear, el

bucle for de las líneas 47 a 52 itera en estas entradas de fila

– duplicándolas con replicateElement() – y utiliza el pará-

metro “body” para indicar a la función que añada duplica-

dos al final del cuerpo del documento. Las líneas de nueva

creación son copias exactas de las líneas de la primera

página, es decir, todavía contienen los datos de prueba o

están vacíos.

La segunda consulta XPath en la línea 56 recupera todos

los elementos de la tabla (tres por línea, incluyendo todos

los elementos de las páginas de nueva creación) del docu-

mento y los almacena en la matriz @labels. El bucle for de

la línea 65 pasa entonces a través de ellos y les asigna el

estilo “P1”. El volcado de la Figura 6 muestra que esto

aplica el tipo de letra Bitstream Vera Sans al texto. La

Figura 4: El usuario escribe los textos de muestra en los campos

de texto del documento OpenOffice.

Figura 5: Una llamada a unzip revela los archivos XML conteni-

dos en el documento de OpenOffice.

Page 40: Linux Magazine 78

sólo se habían

hecho en la memo-

ria volátil hasta

ahora, en el disco.

Cuando el usuario

abre el archivo en

OpenOffice (hemos

probado esto con la

versión 3.2), el

documento se

parece al de la

Figura 8. Lo único

que necesitamos

hacer ahora es

insertar una página

con etiquetas adhe-

sivas en la impre-

sora y seleccionar

Imprimir en Open -

Office Writer. Para

evitar el desperdi-

cio de etiquetas,

tiene sentido impri-

mir una página de

prueba en una hoja

normal de papel y

contrastarla a la

luz con la hoja de

etiquetas para com-

probar la alineación. Para saber si la hoja

de etiquetas tiene que estar boca arriba o

boca abajo en la impresora a la hora de

imprimir las etiquetas, y al mismo tiempo

descubrir la dirección en la que la impre-

sora carga el papel, ponemos una marca

de lápiz en una esquina antes de impri-

mir el archivo. A continuación miramos

la posición de la marca en el resultado

final, y hacemos las complejas transfor-

maciones geométricas en la cabeza para

lograr el objetivo con éxito.

Para instalar los scripts necesitamos los

módulos OpenOffice::OODoc,

Sysadm::Install y Text::CSV_XS. Este

último es una versión opti-

mizada en velocidad del

veterano Text::CSV. Una

shell de CPAN se encar-

gará de la instalación de

estos módulos en caso de

no estar disponibles en su

distribución. Seguida-

mente abrimos la aplica-

ción OpenOffice Writer y

seleccionamos el formato

de etiqueta que necesita-

mos en el cuadro de diá-

logo Etiquetas. Es necesa-

rio modificar el valor esta-

blecido de 30 etiquetas por línea, en la

línea 21 del Listado 2, para que coincida

con su formato de etiqueta.

Si algo sale mal, es una buena idea

analizar el archivo ODF con oo-dumper y

ajustar cualquier desviación del formato

creando las consultas XPath correspon-

dientes.

Después de llenar un par de campos de

prueba, guardamos los resultados como

template.odt. El script label-writer debe-

ría analizar entonces el archivo de direc-

ciones address-book.csv codificado en

UTF-8 y crear la salida read.odt, que

entonces enviamos a la impresora.

Toda una variedad de otras aplicacio-

nes vienen a la mente con este script: eti-

quetar cables en los centros de datos o

codificar los equipos para la gestión de

activos. O, podríamos calarnos la visera

de contable, arremangarnos, y colocar

una etiqueta a todos los libros de nuestra

colección, de manera que sepamos a qué

estante pertenecen, una vez hayamos ter-

minado de leerlos [5]. �

siguiente llamada a setText() recoge el

siguiente registro del archivo de direccio-

nes y guarda la cadena de texto corres-

pondiente en el elemento de la tabla que

se está procesando.

El bucle incrementa de forma continua

la variable índice$addr_idx a la matriz de

direcciones, empezando desde cero, y se

pone a cero de nuevo cuando llega al

final de la base de datos de direcciones

para reiniciar con la primera dirección.

Inserción CorrectaEl método save() guarda a continuación

los cambios en el archivo ready.odt, que

DESARROLLO • Perl: Etiquetas OpenOffice

46 Número 78 W W W . L I N U X - M A G A Z I N E . E S

[1] Listados de este artículo: http://

www. linux-magazine. es/ Magazine/

Downloads/ 78

[2] “Una sencilla manera de hacer eti-

quetas en OpenOffice Writer” por

Solveig Haugland, http://

openoffice. blogs. com/ openoffice/

2007/ 06/ a-simple-way-to. html

[3] “Perl: XML Parsers” por Michael

Schilli, Linux Magazine Internacio-

nal, Septiembre 2005, http:// www.

linux-magazine. com/ Issues/ 2005/

58/ SPOILED-FOR-CHOICE

[4] “The Perl OpenDocument Connec-

tor”, por Jean-Marie Gouarn, The

Perl Review, http:// www.

theperlreview. com/ SamplePages/

ThePerlReview-v3i1. p18. pdf

[5] “Perl: OpenOffice Access” por

Michael Schilli, Linux Magazine

Internacional, Noviembre 2004,

pag. 72.

RECURSOS

Figura 6: El método _dump() muestra cómo se anida el documento

XML.

Figura 9: Las etiquetas ya impresas.

Figura 7: Datos de direcciones en formato CSV.

Figura 8: Después de ejecutar el script, el archivo ready.odt de

OpenOffice contiene todas las direcciones insertadas.

Page 41: Linux Magazine 78

47Número 78W W W . L I N U X - M A G A Z I N E . E S

La mayoría de los administradores se

habrán dado cuenta de que los días

de ifconfig están contados; después

de todo, el comando ip es mucho más

potente – y nos ahorra pulsaciones de

teclado. Soy consciente de ello también,

pero sigo usando la vieja herramienta. Lo

mismo me sucede cuando se trata de mi

antigua amiga nslookup. La heredera al

trono, dig, es una herramienta de diagnós-

tico para los problemas de los servidores de

nombre. A pesar de ello, la utilidad dig [1]

aún compite con su antecesora.

Sin embargo, debido a la fuerza de los

hechos, las cosas están comenzando a cam-

biar: la extensión más compleja de protocolo

de la historia del DNS (Domain Name

System) se encuentra actualmente en pleno

cambio. Me refiero a DNSSEC.

[1] Páginas man de dig: http:// linux. die.

net/ man/ 1/ dig

[2] DNSSEC: http:// www. dnssec. net/

[3] ldns: http:// www. nlnetlabs. nl/

projects/ ldns

RECURSOS

EL AUTOR

CavandoEl día a día del Administrador de Sistemas: dig

DNSKEY. Si deseamos obtener la clave

pública de la zona raíz y escribirla en el

fichero root.key, hay que teclear el siguiente

comando:

dig DNSKEY . +dnssec >U

./root.key

Armado con esta información, puedo trazar

la cadena completa de confianza hasta la

zona raíz usando la herramienta drill, del

paquete ldns-utils [3]. En el siguiente ejem-

plo se muestra el funcionamiento con una

web sueca:

drill -D -S -k ./root.keyU

www.dnssec.se

La Figura 1 presenta la cadena de confianza

en un gráfico realizado con caracteres ASCII.

Mi conclusión es que a veces hace falta que

nos presionen desde fuera para dejar los vie-

jos hábitos. nslookup, descansa en paz. �

Muchos administradores confían en herramientas Linux cuyo destino se encuentra ya

sellado, pero las fuerzas externas pueden ayudarlos a abandonar los viejos hábitos.

POR CHARLY KÜHNAST

Aleksandr Kurganov, 123RF

La Columna de Charly • ADMINISTRACIÓN

Estas extensiones de seguridad permiten

el firmado de la información de las zonas y

podrían ayudar a acabar con las suplantacio-

nes de DNS. DNSSEC [2] crea una cadena

de confianza que comienza en la zona raíz y

se extiende por los dominios genéricos

(.com, .net, etc) y de países (.fr, .de, etc), y

continúa hacia abajo por la estructura jerár-

quica del DNS.

La zona raíz, que viene representada por

un punto (.) en la nomenclatura DNS, aña-

dió las firmas necesarias a mediados de

2010. En el momento de escribir este arti-

culo, la zona .es aún no se ha unido y no

hay nigún indicativo de cuando la hará.CavandoDe modo que si quiero averiguar si un domi-

nio específico está firmado, nslookup no

podrá ayudarme, ya que no soporta

DNSSEC. Pero dig sí,

así que que podemos

introducir:

dig NS ns1.nic.fr

+dnssec

La salida devuelve la

dirección IP correspon-

diente, también mues-

tra los nuevos registros

RRSIG, que contienen

los datos de la firma,

gracias a +dnssec. Las

claves públicas para la

validación se encuen-

tran almacenadas

directamente en la

zona. Para ello hace

falta un registro

Figura 1: Charly usa Drill para ver si la cadena de confianza del DNS

sueco ha perdido algún eslabón.

Charly Kühnast es Gerente de Sistemas Unix en el centro de datos de Moers, Alemania,

cerca del conocido Rhin. Entre sus labores se incluye la seguridad del cortafuegos, la

disponibilidad y el cuidado de la DMZ (zona desmilitarizada). Divide su tiempo libre entre

el calor, la humedad y oriente, donde se divierte cocinando, visitando acuarios y aprendi-

endo japonés respectivamente.

Page 42: Linux Magazine 78

ADMINISTRACIÓN • Inseguridades: Hackeando JTAG

48 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Antes de nada me gustaría compar-

tir una apreciación personal: los

Linux embebidos, por norma

general, me preocupan bastante. La mayo-

ría de los sistemas Linux embebidos no se

preocupan demasiado por la seguridad.

Sus creadores suelen encargarse más de

que funcionen y no tanto de que sean

seguros. Para empeorar las cosas, muchos

fabricantes tienden a abandonar sus pro-

ductos, dejando al cliente sin actualizacio-

nes de seguridad, especialmente con los

dispositivos de clientes domésticos.

¿Por Qué es tanImportante?En el pasado, los dispositivos embebidos

no suponían un problema de seguridad,

porque rara vez se conectaban a una red.

La única manera de hacer algún chanchu-

llo con ellos era físicamente. Pero ahora

todo está en red: la impresora, el escáner,

el termostato y casi cualquier cosa que

lleve un procesador, o sea, casi todo. Si un

atacante consigue acceso a uno de estos

dispositivos, podría realizar ataques man-

in-the-middle contra cualesquiera otros

dispositivos conectados a la misma red.

Ejemplo de SeguridadEmbebidaHay un ejemplo que destaca sobre los

demás a la hora de demostrar por qué los

dispositivos embebidos suponen una gran

amenaza: las contraseñas predetermina-

das. La Default Password List [1] es una

lista de contraseñas predeterminadas,

actualizada por última vez a finales de

2010, que contiene casi 1300 contraseñas,

la mayoría de ellas para dispositivos de

hardware (Figura 1). Empresas como

3COM, HP, IBM o Cisco aparecen muchas

veces en la lista. Pero continuamente sur-

gen nuevos riesgos. Por ejemplo, hay una

serie de escáneres con capacidad de cone-

xión a la red que por lo visto tienen un

fallo que permite activarlos de manera

remota, dejando que un intruso remoto

vea lo que se está escaneando.

¿Qué hacemos entonces? No queremos

comprar un router inalámbrico o un móvil

y que el fabricante deje de mantenerlo, o

lo haga a los 6 ó 12 meses. ¿O qué pasa si

compramos una consola (por ejemplo una

PlayStation) y la queremos usar para otra

cosa que no sea jugar? Bueno, lo que se va

a explicar en este artículo es cómo cargar

firmware personalizado en estos aparatos.

Cargando FirmwarePersonalizadoMuchos aparatos permiten la carga de

actualizaciones, lo que viene a significar

que podemos instalar en ellos firmware

personalizado. Normalmente, si hay un

firmware alternativo para ellos de soft-

ware libre, éste suele estar mejor sopor-

tado, durante más tiempo e incluir más

funcionalidades. El ejemplo perfecto son

los routers inalámbricos domésticos, que

suelen venir capados pero que podemos

convertir en servidores de VPN, ser-

vidores web, o incluso servidores

SIP simplemente cargándoles

un firmware personalizado.

Ya hemos hablado sobre

este tema en un artículo

anterior [2]. En menos de

15 minutos, podemos

convertir un viejo rou-

ter inalámbrico en

algo que nos pueda

servir fielmente

durante unos pocos

años más.

Pero no todos los fabricantes nos lo van

a poner tan fácil. Quizá sean los teléfonos

móviles los peores en este aspecto. Los

fabricantes de teléfonos móviles no quie-

ren ni que nos acerquemos al firmware,

eso a pesar de que los suelen mantener

sólo durante unos meses o un año a lo

más. Hay marcas, como Sony, que están

convencidas de que el cliente no tiene nin-

gún derecho a hacer lo que quiera con el

hardware que ha comprado. La PlaySta-

tion soportaba Linux inicialmente cuando

salió al mercado en el 2000, y siguió

soportándolo durante casi una década. Sin

embargo, en 2010 Sony decidió dejar de

dar soporte para Linux en la PlayStation, e

incluso se esforzó bastante para que nadie

lo pudiese usar. Entonces, ¿qué pasa si

queremos convertir nuestros sistemas

PlayStation en máquinas de cálculo, como

hicieron las Fuerzas Aéreas de EEUU? [3]

JailbreakingLos fabricantes bloquean cada vez más

sus dispositivos –

en efecto,

metiendo al

usuario en

una jaula –

con

importan-

tes restric-

ciones

acerca de

lo que pue-

den hacer o

dejar de

hacer. El

¡Sé el dueño de tus cosas!

Jailbreaking¿De quién es este aparato? El hecho de que hayamos comprado una

cosa no nos legitima para mirar en su interior. Pero en Internet hay

muchísimos recursos para los jailbreakers. POR KURT SEIFRIED

Page 43: Linux Magazine 78

arte del “Jailbreaking” consiste en liberar

un dispositivo para eliminar dichas res-

tricciones impuestas por su software.

Nota importante: la legalidad del jail -

breaking varía considerablemente en fun-

ción del país en que se resida y del dispo-

sitivo de que se trate. Por ejemplo, en los

EEUU, la oficina de copyright americana,

la U.S. Copyright Office, dictaminó que el

jailbreaking no está prohibido sobre telé-

fonos móviles. Sin embargo, también en

los EEUU, según nuestras fuentes, sí que

sigue estando prohibido hacer jailbreaking

en una consola. Su argumento es que el

jailbreaking sobre las consolas promueve

la violación de los derechos de copyright

sobre el software.

Supongamos que el jailbreaking es legal

en nuestro país, y que tenemos suerte y

encontramos un método por software para

acceder al aparato. Lo bueno es que la

mayoría de los fabricantes son pésimos en

cuanto a seguridad. El jailbreaking por

software suele aprovechar problemas

como buffer overflows al cargar partidas

guardadas, cifrados débiles en la firmas de

actualizaciones o problemas de renderiza-

ción de PDFs. Algunos grupos de software

para jailbreaking generan software muy

profesional y fácil de usar que permite

tomar el control del dispositivo – especial-

mente de iPhones y, cada vez más, teléfo-

nos con Android.

Pero, ¿y si el fabricante ha bloqueado el

dispositivo de manera que no se pueda

hacer jailbreaking? ¿Qué opciones tene-

mos?

JTAG al RescateJTAG (Joint Test Action Group)

existe como consecuencia directa

de la proliferación de los disposi-

tivos embebidos. Básicamente,

lo que JTAG hace es definir un

método de prueba para placas

de circuito impresas (o sea,

todo lo que use electrici-

dad, desde una tostadora

a un router). Es posible

incidir sobre unas

instrucciones con-

cretas (para depu-

rar un fallo persis-

tente, por ejemplo),

introducir puntos

de ruptura o, con

suerte, cargar firmware

en el dispositivo. Hay varios

dispositivos que, a pesar de esforzarse por

impedir que se les

haga jailbreaking por

software, tienen

implementaciones

JTAG vulnerables

que permiten la

carga de firmware

personalizado.

El arte del JTAG

hacking, sin

embargo, no es apto

para neófitos. Se

necesitan ciertos

conocimientos sobre

hardware. Aunque

ya han pasado los

días en que la gente

se tenía que hacer su

propio hardware con lectura de JTAG,

actualmente se pueden adquirir dispositi-

vos hardware USB que permiten comuni-

carse con los sistemas que incorporen

puertos JTAG. Lo bueno de JTAG es que,

con suerte, aunque no consigamos cargar

firmware personalizado, aún podremos

lograr acceder al bus principal para modi-

ficar la memoria del sistema en ejecu-

ción. De este modo se puede controlar el

comportamiento del aparato e incluso

modificar los sistemas de seguridad que

impiden al usuario cargar firmware per-

sonalizado. Para saber más sobre JTAG

hacking pueden visitar el blog “HACK A

DAY” [4]. Para saber cuáles son los pins

JTAG de un dispositivo concreto, se

puede consultar el buscador del sitio

JTAG Finder [5].

ConclusiónCreo firmemente en el principio de pri-

mera venta, es decir, si compras algo, ya

es tuyo. Si quiero usar mi PlayStation 3

como tope para la puerta, convertirla en

una máquina Linux, o pintarla de rosa y

llamarla arte moderno, nadie tiene por

qué decirme lo contrario. Le pido al lector

que cuando vaya a comprar el siguiente

aparato se asegure de que está comprando

algo que verdaderamente poseerá y podrá

controlar. �

Inseguridades: Hackeando JTAG • ADMINISTRACIÓN

49Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 1: La lista de contraseñas predeterminadas contiene las con-

traseñas de más de 1300 dispositivos.

RECURSOS

[1] Default Password List: http:// www.

phenoelit-us. org/ dpl/ dpl. html

[2] Inseguridades: Punto de Acceso,

Linux Magazine – Edición en Caste-

llano, número 70, pág. 10.

[3] Air Force Playstation Supercompu-

ter: http:// www. informationweek.

com/ news/ government/

enterprise-architecture/ 221900487

[4] HACK A DAY: http:// hackaday. com/

tag/ jtag/

[5] JTAG Finder: http:// www. c3a. de/ wiki/

index. php/ JTAG_Finder

Todos estos problemas que surgen a lahora de intentar acceder a uno de estosaparatos reafirman la necesidad de laexistencia de la GPLv3. Cada vez sonmás los dispositivos embebidos que lle-van Linux en su interior, lo cual es estu-pendo, porque podemos coger sucódigo fuente y personalizarlo a nuestrogusto, ¿verdad? Pues no. Muchos fabri-cantes de hardware evitan la GPLusando como estratagema los DRM(Digital Rights Management), impi-diendo que los usuarios carguen soft-ware en sus propios dispositivos. Paraempeorar las cosas, la US DMCA (Digi-tal Millennium copyright act) prohíbesaltarse estas medidas DRM mediante

las imposición de multas y penas de cár-cel.

La licencia GPLv3 en su sección 3 solu-ciona este problema permitiendo crearsoftware DRM bajo licencia GPLv3 perocon la condición de que el desarrolladorrenuncie a todos los derechos que pro-híban circunvenir el DRM (dicho de otromodo, no se puede imponer la DMCA).En un primer momento puede parecermuy estricto, pero recordemos que vir-tualmente todo lo que está protegidopor DRM también lo está por copyrighto por patentes; el DRM no es más queun intento de aplicar una imposicióntecnológica en un problema social.

Sobre la Licencia GPLv3

Page 44: Linux Magazine 78

ADMINISTRACIÓN • Monitorización ARP

50 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Equipos de desarrollo de todo el

mundo trabajan duro para que el

software de nuestros sistemas

esté siempre lo más actualizado posible.

Además, los cortafuegos impiden que los

atacantes accedan a nuestros sistemas y

redes desde Internet. ¿Pero qué pasa si el

ataque se produce desde dentro de la red

local?

Uno de los requisitos de casi cualquier

red local es la asignación de direcciones

IP. Con el fin de comunicarse con la red

de una manera funcional (que no sea,

por ejemplo, recolectar datos desde una

conexión inalámbrica), los potenciales

intrusos deben asignarse primero una

dirección IP dentro de la red. Esto es

común tanto a redes cableadas como a

inalámbricas. Dicha IP podría ser una

dirección libre o incluso una que ya esté

siendo usada por otro dispositivo.

Si el atacante se asigna una IP en uso,

suele ser porque planea hacer algún tipo

de espionaje o una redirección de servi-

cios. Bajo ciertas circunstancias, podría

tratar de hacer creer al resto de equipos

que él es alguna máquina de la red.

Dicho de otro modo, el atacante clona la

dirección MAC que en teoría es única

para cada tarjeta de red y que siempre es

la misma. Aquellos ataques en los que el

intruso se asocia una dirección IP exis-

tente con el fin de filtrar y suplantar las

comunicaciones se denomina común-

mente MITM o Man-In-The-Middle, por-

que el atacante se sitúa entre las máqui-

nas que intervienen en la comunicación

a espiar. Redirigir un servicio puede ser

tan sencillo como alterar una entrada de

dirección MAC en una máquina para

hacerle creer que

su servidor de

nombres es otro;

cuando la máquina

engañada quiera

acceder al sitio web

de su entidad ban-

caria, resolverá su

dirección IP

usando un servidor

de nombres mali-

cioso y acabará,

por tanto, visitando un sitio falso y pro-

porcionando sus datos personales al ata-

cante.

Lo ideal sería que no sólo supiéramos

cuándo ha cambiado la dirección MAC

asociada a una dirección IP, sino además

saber cuándo se ha asignado una nueva

IP.

En este artículo presentamos varias

herramientas útiles con las que,

mediante el uso del protocolo ARP

(Address Resolution Protocol), podremos

conocer los cambios producidos sobre

las asignaciones de la red local.

ArpwatchArpwatch es una herramienta sencilla

que vigila las direcciones IP de la red y

analiza cambios sospechosos. ARP cons-

truye una tabla que contiene las corres-

pondencias entre los dispositivos de la

red y las direcciones IP que usan, pre-

An

dre

a D

an

ti, 123R

f.co

m

Utilizamos herramientas de monitorización de ARP para buscar intrusos ennuestra red local

Estrecha VigilanciaSeguramente tenga el lector un cortafuegos, pero ¿qué pasa si el

intruso actúa desde dentro? Estas herramientas de monitorización de

ARPs son capaces de detectar el más mínimo cambio y alertarnos de un

posible ataque local. POR CHRIS BINNIE

Figura 1: El log de Arpwatch proporciona detalles simples sobre cada

evento.

Page 45: Linux Magazine 78

guntando a cada dispositivo de la red “¿Quién usa tal direc-

ción IP?” hasta que alguno responda “Yo tengo esa direc-

ción IP”. Su simplicidad hace que sea fácil de depurar, pero

también propenso a abusos, como por ejemplo los ataques

MITM mencionados anteriormente.

Arpwatch monitoriza las respuestas ARP en busca de

cambios y envía un email al administrador en caso de que

ocurra algo sospechoso. Además de proporcionar una

forma sencilla de auditar el número de direcciones IP en

uso en una red, es un sistema de detección temprana que

se puede configurar para que escuche en varias interfaces a

la vez (tanto de cable como inalámbricas).

Cabe aclarar que en algunas redes se utiliza el falsea-

miento de ARP para redirigir legítimamente el tráfico con

algún propósito concreto. Imaginemos por ejemplo un

cibercafé en el que, hasta que el sitio nos da paso, se redi-

rige a todo el mundo a una página con la política de uso o

las condiciones del local.

Mediante el seguimiento de los dispositivos de la red con

un archivo de logs por interfaz, donde guarda la información

relativa a cuándo y qué dirección IP se asignó a cada direc-

ción MAC, Arpwatch hace fácilmente accesible una informa-

ción que de otro modo pasaría prácticamente desapercibida.

Los logs de Arpwatch guardan las direcciones MAC, las

direcciones IP asociadas, las marcas de tiempo de las últi-

mas actividades, los nombres de dispositivo (alias o nom-

bres DNS), y las interfaces desde las que se observó dicha

actividad. En la Figura 1 se muestran en detalle los logs

generados por Arpwatch.

Las notificaciones que Arpwatch envía por email pueden

alertar al usuario casi al instante. Los informes están bastante

limpios y se podrían, por tanto, formatear como mensajes

SMS (mensajes de texto) si fuese necesario. En la Figura 2 se

puede apreciar la brevedad de dichos emails de notificación.

El primer segmento de una dirección MAC se suele

corresponder (aunque no siempre) con la identificación del

fabricante o el distribuidor de la tarjeta de red, que se pue-

den consultar fácilmente mediante bases de datos en línea.

También existe una asignación formal de estos identifica-

dores en la IEEE [1], pero no es tan práctico. A través de

esta tabla se facilita la identificación de los dispositivos

desconocidos, minimizando el número de falsas alarmas.

Una vez sepa la dirección MAC del atacante y posible-

mente si se trata de un portátil o smartphone, se pueden

utilizar pistas de los datos del proveedor (siempre y cuando

no hayan sido alterados) para trazar la actividas del dispo-

sitivo en la LAN. Incluso si cambia de dirección MAC, al

menos se nos alertará de este hecho.

ArpingLa herramienta más típica a la hora de comprobar direccio-

nes ARP duplicadas en la red local es Arping. Al igual que

Ping, que envía peticiones y queda a la espera de que se

Figura 2: Los hechos: notificación de Arpwatch por correo elec-

trónico.

Page 46: Linux Magazine 78

preguntarse si

existe alguna otra

herramienta capaz

de ofrecer un

método más sofisti-

cado y automati-

zado para combatir

este tipo de ata-

ques localizados.

La herramienta se llama ArpON, que sig-

nifica Arp handler InspectiON.

Mientras que Arpwatch sólo informa

de los problemas detectados, relegando

al usuario las acciones a llevar a cabo,

ArpON ha sido diseñado para automati-

zar la resolución de los problemas

siguiendo una serie de políticas predefi-

nidas. En el sitio web de ArpON [2] se

pueden conocer todos los detalles del

paquete, incluidos varios diagramas,

muy útiles para los principiantes.

Además de sus capacidades de moni-

torización básica de ARP, ArpON cuenta

con más munición en su arsenal. Por

ejemplo, en las sesiones de ArpON tam-

bién se pueden detectar automática-

mente y resolver interceptaciones de

sesiones o el secuestro de conversacio-

nes web o de correo electrónico.

ArpON mantiene la pizarra siempre

bien limpia, creando una caché fresca de

entradas ARP desde el principio, elimi-

nando así la posibilidad de corromper la

caché de ARP con información falsa o

engañosa (a este tipo de ataque se le

conoce como envenenamiento de la

caché ARP). A diferencia de otras herra-

mientas de monitorización de ARP,

ArpON impide activamente que se actua-

licen nuevas entradas sin una entrada de

confianza en su caché, ignorando esen-

cialmente todo lo demás y evitando así el

ataque incluso antes de que comience.

Hay tres niveles de despliegue de

ArpON. El despliegue de un nodo de

monitorización en un dispositivo puede

proporcionar protección unidireccional,

mientras que un demonio instalado

puede tomar la caché de ARP y contras-

tar los cambios con efectividad. Para una

protección bidireccional hacen falta al

menos dos nodos de monitorización,

posibilitando la interceptación de tráfico

entre ambos nodos, de manera que se

pueda descifrar el tráfico del ataque y

reaccionar en consonancia. Para que

pueda funcionar en modo de protección

distribuida se debe instalar ArpON en

todos los dispositivos de la red. Cabe

aclarar que en este caso quedarán des-

protegidos todos los dispositivos que no

estén ejecutando ArpON, por lo que este

modo de funcionamiento probablemente

sólo sea adecuado para pequeñas redes

de dispositivos homogéneos, como por

ejemplo una pequeña red (o subred) de

un clúster o de servidores de correo.

ArpON cuenta con un diseño no-inva-

sivo, tratando de no alterar el protocolo

ARP, que fue creado teniendo en mente

unas redes de datos muy antiguas y que

se podría mejorar para lidiar con los ata-

ques de hoy en día. Independientemente

de los problemas inherentes a ARP, éste

cuenta con un rendimiento muy alto

debido a su simplicidad, rendimiento

que no se ve alterado tampoco por

ArpON. ArpON es útil también en redes

gestionadas por DHCP, donde los dispo-

sitivos obtienen una dirección IP cada

vez que acceden a la red.

También existe la posibilidad de des-

habilitar partes de ArpON para crear un

laboratorio de pruebas propio con el que

realizar ejercicios interesantes.

ConclusiónArpON está actualmente disponible para

Linux, Mac OS X, FreeBSD, NetBSD y

OpenBSD, pero aún no ha sido portado a

Windows. Existen herramientas pareci-

das para Windows y otros sistemas ope-

rativos. Para Windows, hay un producto

llamado WinARP Watch. Para Linux,

Unix y BSD – también está Arpalert.

Cada una de estas alternativas varía en

cuanto a funcionalidades. Aunque Arp-

watch es excelente, ninguna otra herra-

mienta llega al nivel de sofisticación de

ArpON.

Conjugadas con los conocimientos de

un administrador experimentado, las

herramientas de monitorización de ARP

suponen un medio potentísimo, incluso

con la función de bloqueo automático

de ataques deshabilitada. Estas herra-

mientas, con el nivel de detalle de sus

informes, ofrecen una capa adicional de

seguridad y protección tanto para redes

domésticas como para redes industria-

les. �

produzca una respuesta, Arping envía

sus peticiones a la red local (o dominio

de difusión). Algunas implementaciones

de Arping, además de simplemente pre-

guntar por la dirección MAC de una

dirección IP determinada, pregunta tam-

bién a la inversa, es decir, qué dirección

IP tiene una dirección MAC dada.

Esa funcionalidad extra que posee Arp

de comprobar a la inversa es de vital

importancia en ciertos escenarios de ata-

que. En el siguiente ejemplo se le pide a

Arping que busque duplicidades relati-

vas a una dirección IP:

arping -d 97.98.99.100 -I eth1

Combinada con las alertas emitidas por

Arpwatch, para informarnos de los cam-

bios ocurridos en la red, esta herra-

mienta nos dice si hay dispositivos que

comparten una misma dirección IP (que

pueden derivar en fallos de conexión o

en intentos de ataques MITM). El

comando anterior envía cuatro peticio-

nes a través de la interfaz de red eth1,

preguntando “¿Quién tiene esta direc-

ción IP?” y queda a la espera de respues-

tas. En la Figura 3 se muestran cuatro

respuestas idénticas que indican que

sólo hay una única dirección MAC aso-

ciada a esa dirección IP y que, por tanto,

no hay duplicidades en la red.

ArpONAhora que ya sabemos cómo detectar

ataques ARP y recibir informes, cabe

ADMINISTRACIÓN • Monitorización ARP

52 Número 78 W W W . L I N U X - M A G A Z I N E . E S

RECURSOS

[1] Relación entre direcciones MAC y

fabricantes: http:// standards. ieee.

org/ develop/ regauth/ oui/ oui. txt

[2] ArpON: http:// arpon. sourceforge. net

Rendimiento de ArpON

ArpON ha sido diseñado con el obje-

tivo de ser eficiente, de ahí que no sea

demasiado opulento en lo que a fun-

cionalidades se refiere. Existe una

herramienta alternativa, llamada S-Arp

(ARP Seguro), que añade una capa de

cifrado para proporcionar una mayor

seguridad, pero que ralentiza el proto-

colo ARP al incrementar las necesida-

des de procesamiento e inyectar datos

extra en el flujo de datos.

Figura 3: Si las respuestas son idénticas, no hay duplicidades en la

red.

Page 47: Linux Magazine 78

lar, la situación podría ser totalmente

diferente para finales de año, ya que

para esas fechas se estima que no

quede ninguna disponible. Este es el

caso actual de la región asiática

(APNIC), donde las direcciones IPv4

sólo la suministran los proveedores

por un coste elevado hasta que se ago-

ten completamente las reservas – algo

que ocurrirá pronto. En este caso, las

empresas no tendrán otra alternativa

que utilizar direcciones IPv6. Actual-

mente no es una solución muy buena,

ya que sólo un porcentaje muy bajo de

los usuarios que poseen acceso IPv6

pueden acceder a las ofertas de las

empresas.

2.- Una empresa trabaja con clientes y

socios en Asia. En muchos casos, la

empresa asiática dispondrá desde hace

tiempo de una solución dual-NAT.

Durante muchos años, algunos provee-

dores de la región asiática han asig-

nado sólo direcciones IP privadas a sus

clientes y han enmascarado estas

direcciones. Por otro lado, estos clien-

tes usan routers que convierten las

direcciones IP privadas usadas inter-

namente, lo que a menudo causa pro-

blemas. Las VPN y VoIP, en particular,

son las causantes de la mayoría de los

problemas de los administradores.

Con IPv6, los clientes poseen direccio-

nes globales para cada sistema, con lo

que se garantiza una conectividad sin

complicaciones. Pero para acceder a los

servicios de las empresas, los ordenado-

res deben poseer una pila dual. Los siste-

Pila Dual IPv4/IPv6 • ADMINISTRACIÓN

53Número 78W W W . L I N U X - M A G A Z I N E . E S

Muchos administrado-

res no tendrán que

enfrentarse al pro-

blema del cambio a IPv6

durante los próximos dos

años, ya que disponen de sufi-

cientes direcciones IPv4 como

para garantizar el acceso de

sus redes a Internet 4, gracias

a la traducción de direccio-

nes de red. El acceso a

Internet 6 no es obligatorio

para estos administradores,

pues de momento no proporciona

ningún servicio crítico imprescin-

dible para sus negocios.

Sin embargo, este no es el caso de la

mayoría de administradores y redes. En

algunos casos de uso sería conveniente

que los administradores se familiariza-

sen con IPv6, pero a pesar de esto, debe-

ría tenerse claro que una migración com-

pleta de IPv4 a IPv6 va a ser improbable

que se produzca en los próximos diez

años.

Dicho esto, puede suceder que algu-

nos servicios nuevos sólo se encuentren

disponibles en Internet 6 en un par de

años, y si los administradores quieren

usarlos, no tendrán más alternativa que

migrar sus redes a IPv6. ¿Por qué moti-

vos vamos a querer pasarnos a IPv6?

1.- Su empresa desea ofrecer más servi-

cios en Internet y necesita direcciones

IPv4 adicionales para ello. La solicitud

de nuevas direcciones no ha sido hasta

ahora ningún problema, pero para

RIPE (Redes IP Europeas) en particu-

WD

esig

ns, 1

23R

F.co

m

HILANDOFINO Durante más de 10 años, los expertos han estado pronosticando el cam-

bio inevitable a IPv6. NAT y CIDR han mantenido a flote a IPv4 desde

entonces, pero todo esto va a cambiar en muy breve. ¿Qué vamos a

hacer entonces? POR RALF SPENNEBERG

Pila dual IPv4/ IPv6: Teoría y práctica

Page 48: Linux Magazine 78

iface ipv6tunnel inet6 v4tunnel

endpoint <Dirección_IPv4_U

del_Intermediario>

local <Dirección_IPv4_local>

address <Dirección_IPv6_local>

netmask 64

mtu 1480

gateway <Dirección_IPv6_U

del_Intermediario>

ttl 255

Estas líneas permiten el acceso del sis-

tema a Internet por medio del túnel. Si el

intermediario del túnel enruta un prefijo

IPv6 por el túnel, el administrador podrá

utilizar un servicio de aviso de router o

DHCPv6 en sus redes.

Por otro lado, pueden asignarse direc-

ciones IPv6 estáticas. Como los equipos

tienen actualmente conectividad IPv4 y

IPv6, la solución se conoce como pila

dual.

¿DS-Lite o NAT64?A pesar de la escasez de direcciones IPv4,

los métodos DS-Lite (Dual Stack Lite, Pila

Dual Lite en español) y NAT64 necesitan

que el cliente pueda acceder a Internet 4.

En ambos casos, el proveedor asigna una

dirección IPv6 global para el router y un

prefijo para los sistemas que se encuen-

tren ocultos detrás de su cliente. Gracias a

esta dirección IPv6 global, tanto el router

como los otros sistemas pueden hacer uso

de IPv6 para comunicarse con los servido-

res. Los dos métodos difieren respecto a la

manera de configuración de los sistemas

del cliente. En el caso de DS-Lite (Figura

1), el proveedor además tiene que asig-

narle una dirección IPv4 privada al router

del cliente.

El propio router usa DHCP para distri-

buir direcciones IPv4 privadas en el sis-

tema interno. Ahora el sistema posee

una dirección IPv6 global y una direc-

ción IPv4 privada, cada una con puertas

de enlace por defecto que apuntan al

router. Cuando un usuario accede a un

sitio web, el sistema realiza primero la

resolución de nombres. Si la respuesta

contiene una dirección IPv6, el equipo

utilizará su dirección IPv6 global para

acceder al servidor. Si la respuesta DNS

contiene tanto una dirección IPv4 como

una dirección IPv6, los sistemas operati-

vos actuales prefieren IPv6, y de nuevo

utilizará este acceso para acceder al ser-

vidor. DS-Lite sólo entra en juego en el

caso de que el servidor sólo disponga de

una dirección IPv4. El cliente envía un

paquete IPv4 con su dirección privada de

origen, que inicialmente se encuentra

enmascarada por el router que usa su

propia dirección privada de origen.

Luego el router la encapsula en un

paquete IPv6 y utiliza IPv6 para enviarla

a un sistema especial en el proveedor

que extrae el paquete IPv4 y utiliza

NAT64 para convertirla en una dirección

IPv4 global. Para ello, el proveedor tiene

que suministrar componentes CGN

(Carrier Grade NAT).

Algunos se refieren a este sistema

como AFTR (Address Family Transition

mas que anteriormente sólo poseían

acceso por medio de IPv4 también deben

tener asignadas ahora direcciones IPv6.

SimplicidadPuede que los

administrado-

res se estén

preguntando así

mismos la forma

de conseguir

direcciones

IPv6. Nor-

malmente

habrá

que solici-

tarlas a los mis-

mos proveedores

de direcciones IPv4.

Sin embargo,

actual-

mente

sólo

hay

unos

cuantos

que ofre-

cen

acceso

IPv6 de

forma nativa. Por

ahora, se resuelve por

medio de túneles: usando IPv4

para crear un túnel a un intermediario de

túnel IPv6, que permite el acceso a Inter-

net 6 por medio del túnel. También ofre-

cen direcciones IPv6 (normalmente en la

forma de un prefijo /48) y las enruta por

medio del túnel. SixXs [1] y Hurricane

Electric [2] proporcionan este servicio a

los clientes profesionales.

De momento, tras el proceso de regis-

tro, ellos le proporcionarán un túnel y

algunas direcciones IPv6 de forma gra-

tuita. Luego, introducen estas direccio-

nes en sus servidores whois, permi-

tiendo que las direcciones asignadas

puedan ser fácilmente encontradas por

terceros. La soluciones utilizadas para

configurar los túneles pueden diferir

dependiendo de los extremos de las mis-

mas, ya que los clientes pueden tener

direcciones IPv4 estáticas globales, diná-

micas o privadas enmascaradas.

En el primero de estos casos, lo único

que hay que hacer en Debian es crear un

dispositivo de túnel adicional con la

siguiente entrada en el fichero /etc/net-

work/interfaces:

ADMINISTRACIÓN • Pila Dual IPv4/IPv6

54 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Figura 1: En DS-Lite, el proveedor ahorra las direcciones IPv4 por medio del uso de NAT, tra-

duciendo direcciones IPv4 privadas a direcciones IPv4 globales (NAT44).

Page 49: Linux Magazine 78

Router). Un administrador en el lado del

proveedor puede implementar AFTR

usando Linux y el paquete de software

AFTR del Internet Software Consortium

[3]. Como el router del lado del cliente

ya no posee una dirección IPv4 global,

no podrá utilizar servicios como

DynDNS o el plegado de puertos; ahora

funciona con IPv6, pero de una forma

muy superior.

En el caso de la segunda variante,

NAT64, el proveedor usa una solución

diferente para proporcionarle a sus clien-

tes el acceso a Internet 4. Al cliente sólo

se le asignan direcciones IPv6 globales

tanto para su router como para los siste-

mas que posea tras el router. Lo impor-

tante es que estos sistemas sólo utilicen

el servidor DNS de su proveedor para la

resolución de nombres de tres formas:

• La resolución de nombres sólo propor-

ciona una dirección IPv6: los clientes

usan su dirección IPv6 global para

acceder a los servidores.

• La resolución de nombres devuelve

tanto una dirección IPv4 como una

IPv6: el cliente preferirá la dirección

IPv6 y la usará para acceder al servi-

dor.

• La resolución de nombres sólo

devuelve una dirección IPv4: en este

caso interviene el servidor DNS del

proveedor, crea una dirección IPv6 adi-

cional y la añade a la respuesta.

Para ello, el servidor añade la representa-

ción hexadecimal de la dirección IPv4 a

un prefijo IPv6 definido. El administra-

dor del servidor DNS puede utilizar el

prefijo reservado 64:FF9B::/96 o un

rango libre de su propia reserva de direc-

ciones IPv6. El cliente recibirá tanto la

dirección IPv4 como la IPv6 en la res-

puesta del DNS, y preferirá la dirección

IPv6. El cliente enviará los paquetes

correspondientes a la puerta de enlace

por defecto del proveedor, donde el rou-

ter identificará la dirección IPv6 adicio-

nal creada anteriormente evaluando el

prefijo.

El sistema extraerá la dirección IPv4

incluida y realizará tanto NAT como la

traducción de IPv6 a IPv4. Los desarro-

lladores se refieren a este método como

NAT64 (Figura 2), y a la puerta de enlace

de la capa de aplicación DNS como

DNS64. Existen varias implementaciones

de esto en Linux. Por ejemplo, la última

versión de BIND ya soporta su uso como

servidor DNS64. El componente NAT64

puede ser manejado tanto por la aplica-

ción del espacio del usuario Tayga [4]

como por el componente Ecdysis [5] del

kernel.

Uno de los problemas del uso de

NAT64 es el incremento popular del uso

de DNSSEC, que detecta la modificación

y por ello la falsificación de las respues-

tas DNS e ignora dichas respuestas.

NAT-PTEl RFC 2766 definió NAT-PT (NAT/ proto-

col translator) en el 2000; al contrario

que NAT64, también soporta NAT64, que

hace posible no sólo para los sistemas

IPv6 el acceso arbitrario a servidores

IPv4, sino que permite a los sistemas

IPv4 acceder de forma arbitraria a los

servidores IPv6. Como IPv4 puede

incluirse fácilmente en direcciones IPv6

modificadas, NAT64 es mucho más sim-

ple de implementar, aunque el proceso

inverso es mucho más complicado.

El espacio de direcciones IPv4 no

posee la capacidad necesaria como para

incluir direcciones IPv6 dentro de direc-

ciones IPv4 modificadas, impidiendo que

DNS64 y NAT64 funcionen de forma

independiente el uno del otro, ya que

necesitan del intercambio de informa-

ción constante. Aunque existen algunas

implementaciones operativas, el RFC

2766 NAT-PT fue modificado en 2007 por

razones históricas debido a numerosos

problemas (RFC 4966).

Para un sis-

tema IPv4, no

hay ninguna

solución disponi-

ble para acceder a

los sistemas que

sólo posean IPv6. Un

proxy con pila dual puede

proporcionar una solución: Los clientes

usarían IPv4 para contactar con el

proxy y acceder a los sistemas IPv6. Sin

embargo, esta técnica sólo soporta los

protocolos que permiten el uso de puer-

tas de enlace de la capa de aplicación,

incluyendo DNS, SMTP, HTTP o

HTTPS.

El FuturoComo sólo un pequeño porcentaje de los

routers DSL actuales soportan IPv6, los

proveedores tendrán que reemplazar los

dispositivos terminales de los clientes

antes de hacer el paso a IPv6 – un pro-

ceso caro por el que los clientes no están

dispuestos a pagar. Por este motivo, los

proveedores retrasarán esta sustitución

tanto como les sea posible, lo que conlle-

vará a que muchos ISP querrán evitar la

sobrecarga de administración de la oferta

adicional de sus servicios por medio de

IPv6. A pesar del éxito del Día IPv6 en

junio, en el que numerosos proveedores

ofrecieron de forma adicional sus servi-

cios por medio de IPv6 por un día,

muchos de los participantes importantes

tales como Facebook, Google y YouTube

actualmente han cesado sus servicios

basados en la pila dual.

ConclusionesMientras que los principales proveedores

rehúsen promocionar el acceso por

medio de IPv6, IPv6 no será del interés

de los consumidores. Hasta este cambio,

los proveedores de DSL probablemente

comenzarán a suministrar a sus clientes

direcciones IPv4 privadas de forma simi-

lar a lo que ha estado sucediendo en

Asia. �

Pila Dual IPv4/IPv6 • ADMINISTRACIÓN

55Número 78W W W . L I N U X - M A G A Z I N E . E S

RECURSOS

[1] SixXS: http:// www. sixxs. net

[2] Hurricane Electric: http:// www. he. net

[3] AFTR: http:// www. isc. org/ software/

aftr

[4] Tayga: www. litech. org/ tayga/

[5] Ecdysis http:// ecdysis. viagenie. ca/Figura 2: En NAT64, el proveedor modifica una dirección IPv6 para enmascarar el acceso a

IPv4.

Page 50: Linux Magazine 78

ADMINISTRACIÓN • Arranque Seguro

56 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Una firma digital no es suficiente

para garantizar la integridad de

un sistema informático com-

pleto. Para tener un entorno realmente

seguro debemos poder confiar tanto en

el hardware como en los archivos de

configuración y el software, incluyendo

aplicaciones, drivers y el propio sistema

operativo. ¿Qué componentes intervie-

nen en semejante proceso de verifica-

ción, y cómo podemos conseguir una

cadena de confianza completa e infran-

queable que aúne todos los componen-

tes?

La necesidad de proveer un anclaje

seguro (o raíz) para esta cadena de con-

fianza hizo que varias empresas de infor-

mática, incluidas AMD, Intel, HP, IBM y

Microsoft fundasen la TCG (Trusted

Computing Group, [1]) en 2003, que

actualmente cuenta con más de 100

miembros. Aunque la TCG se ha diversi-

ficado a lo largo del tiempo dando lugar

a varias especificaciones de seguridad

adicionales, parte de su objetivo original

era definir lo que hoy se conoce como

TPM (Trusted Platform Module): un chip

independiente para el procesamiento

criptográfico ubicado en la máquina,

capaz de gestionar procesos de verifica-

ción de firmas y de anclar una cadena de

confianza que garantice la integridad y

no manipulación de la totalidad de los

elementos del sistema.

El TPM, que se estandarizó con la

especificación ISO/ IEC 11889, incluye

algoritmos criptográficos, un generador

de números aleatorios por hardware y

varios mecanismos para la manipulación

segura de claves y certificados digitales

(Ver el cuadro titulado “Confianza”).

Durante los últimos años, el TPM se ha

convertido en un elemento común en las

placas más completas. En teoría, los

componentes incluidos en el TPM pro-

porcionan las siguientes funciones:

• una identidad de plataforma única

• memoria de claves segura

• sellado de datos

• funciones criptográficas

• evaluación de la integridad del sistema

Microsoft era uno de los miembros origi-

nales del TCG, y los sistemas Windows

Vista y posteriores ofrecen soporte para

TPM en forma de autenticación previa al

arranque y cifrado de disco Bitlocker. El

proyecto Trusted Grub [2] proporciona

un parche para el cargador de arranque

Grub con el que dota a Linux de soporte

para TPM.

Cómo Funciona el ArranqueSeguroEl arranque seguro comienza cuando se

enciende el equipo y se ejecuta el código

de la BIOS. El primer paso consiste en

una inicialización básica del hardware y,

en particular, del chip TPM.

Con el fin de garantizar que la funcio-

nalidad del TPM se encuentra disponible

Cómo proteger el hardware con IMA y arranque seguro

CADENA DECONFIANZA

Las placas base más completas a veces incorporan chips de computación de confianza, aunque los usuarios y

sistemas operativos rara vez los emplean. El kernel Linux ha conseguido dominar esta tecnología, y ahora los

usuarios de Linux pueden disfrutar de una cadena de confianza completa con TrustedGRUB.

POR FALK NEDWAL

Confianza

Para garantizar la confiabilidad del

usuario de acuerdo con la especifica-

ción, TMP contiene varios certificados

que confirman la validez del proceso

de fabricación. Además, el chip con-

tiene pares de claves que identifican

unívocamente al módulo y son utiliza-

das para cifrar y firmar datos. El usua-

rio también genera algunas de estas

claves. El módulo adquiere su identi-

dad cuando el usuario genera la pri-

mera clave. A este proceso se le

conoce como adquisición de la propie-

dad.

©S

inis

a B

ota

s, 1

23R

F.co

m

Page 51: Linux Magazine 78

en el momento del arranque, el sistema

necesita una extensión de la BIOS con el

nombre de CRTM (Core Root of Trust for

Measurement). CRTM, especificada tam-

bién por la TCG, se encarga de medir los

estados del sistema antes del arranque

del sistema operativo. La medición se

lleva a cabo hasheando las áreas relevan-

tes y guardando los resultados en los

registros PCR del TPM (ver el cuadro titu-

lado “Platform Configuration Register”).

En la Figura 1 se ilustra el modo en

que el TPM inspecciona por primera vez

el código de la BIOS, seguido del código

destinado al hardware externo, y por

último los datos resultantes de la lectura

de la información del hardware. Este

proceso convierte la configuración de

hardware existente en parte integral de

la comprobación de la integridad. La

BIOS busca entonces un dispositivo

arrancable. Si detecta un disco duro,

entonces lee el primer sector, lo mide y

ejecuta el código MBR del mismo.

La responsabilidad de CRTM en mate-

ria de arranque seguro finaliza en este

punto, dando el relevo al cargador de

arranque que se encuentra en el MBR

para que continúe con la cadena de con-

fianza. Más tarde, el cargador del sis-

tema operativo iniciará el sistema opera-

tivo, quien a su vez dispondrá los meca-

nismos necesarios para inspeccionar el

código a ejecutar (incluidos los drivers).

Debido a que las llamadas al sistema

hechas desde el kernel también se encar-

gan de iniciar programas, se puede medir

cualquier aplicación que se inicie de este

modo.

Cuando se inicia el kernel, el cargador

de arranque le pasa la cadena de con-

fianza.

Las funciones para la integración del

soporte de TPM llevan en el kernel Linux

desde 2005. El correspondiente parche

del kernel para IMA (Integrity Measure-

ment Architecture) se originó con IBM

Research ([3], [4]). IMA continúa la

cadena de confianza, comprobando si

algún archivo ha sido alterado o manipu-

lado.

IntegrityMeasurementArchitectureIMA es parte oficial

del kernel Linux

desde la versión

2.6.30 de éste, aun-

que por norma gene-

ral no viene habilitado, por lo que puede

ser necesario recompilarlo con las

siguientes opciones:

• CONFIG_IMA=Y

• CONFIG_IMA_MEASURE_PCR_ INDEX

=10

• CONFIG_IMA_AUDIT=Y

• CONFIG_IMA_LSM_RULES=Y

También hace falta una opción de arran-

que opcional para el kernel, ima_tcb=1.

En el Listado 1 se muestra un extracto de

la configuración de Grub con IMA habili-

tado y una comprobación de archivo de

Grub.

IMA utiliza los hooks LSM (Linux

Security Module) del kernel, los mismos

en los que se basan SE Linux y las exten-

siones MAC (Mandatory Access Control).

Un programador puede registrar funcio-

nes internas del kernel mediante estos

hooks; se suelen utilizar para funciones

relacionadas con la seguridad o para lla-

madas al sistema. El kernel inicia las

funciones IMA para, por ejemplo, los

hooks que ejecuta el kernel antes de car-

gar archivos ejecutables. Esto se cumple

con llamadas al sistema como mmap(),

execve() o sys_init_module().

El código de IMA siempre se ejecuta

por tanto antes de que cargue el sistema

o se ejecute cualquier módulo del kernel,

librería, archivo binario o script. El

código calcula la suma checksum del

archivo en cuestión de la misma manera

que lo hace el proceso de arranque pre-

vio. Los resultados no siempre se alma-

cenan en el chip TPM, sino que sólo van

a parar allí en los casos de archivos pre-

vios y validados o cuyo checksum se ha

visto alterado.

Un mecanismo de caché garantiza que

todo este proceso no acabe derivando en

Arranque Seguro • ADMINISTRACIÓN

57Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 1: La cadena de confianza comienza al encender el PC e idealmente continúa hasta que

arranca el sistema operativo. En Linux se consigue con la ayuda de Trusted Grub.

Los PCRs (Platform Configuration Regis-ters) juegan un importante papel en lacomprobación de la integridad llevada acabo en un arranque seguro. Los PCRsson juegos de 16 registros con un anchode datos de 20 bytes, que es justamenteel tamaño de los resultados de los ha -shes criptográficos (SHA-1). Los PCRs seinicializan a 0 cuando la máquina se rei-nicia o resetea. De ese modo, es imposi-ble establecerlos con valores predeter-minados.La única posibilidad a la hora de modifi-car los registros es llamando a la fun-ción TPM_Extend. Esta función se definecomo TPM_Extend[n] := SHA-1(PCR[n] ||

D). Una porción de datos de longitudarbitraria D se enlaza al número n delvalor actual del registro PCR, para sercomputado usando la función criptográ-fica de hasheado SHA-1. El hash de 20bytes resultante se guarda en el registroPCR n. Debido a las características de lafunción de hasheado, es virtualmenteimposible usar este mecanismo paraguardar un valor específico en un PCRde manera intencionada. El arranqueseguro hace uso de ello para almacenarlos valores calculados D en un PCR en elmomento del arranque, impidiendo asísu manipulación.

Platform Configuration Register

Listado 1: Extracto de /boot/ grub/ menu.lst

01 title Ubuntu-IMA

02 root (hd0,6)

03 checkfile (hd0,6)/boot/grub/grub-check

04 kernel /boot/vmlinuz-2.6.35.4-ima root=/dev/sda7

vga=0x317 ima_tcb=1

05 initrd /boot/initrd.img-2.6.35.4-ima

Page 52: Linux Magazine 78

• la Fase 1 de Grub verifica el comienzo

de la Fase 2 de Grub

• la Fase 2 de Grub verifica el resto de la

Fase 2 de Grub

• la Fase 2 de Grub verifica además el

kernel del sistema operativo así como

los módulos del kernel a cargar

TrustedGRUB nos permite verificar ade-

más cualesquiera otros archivos. Pode-

mos definir dicha comprobación

mediante el uso de una nueva opción en

el archivo de configuración de Grub,

/boot/grub/menu.lst, del siguiente modo:

checkfile U

(hdX,X?)/ruta_al_archivo

Debemos especificar la partición al modo

tradicional de Grub; sin embargo, el

tamaño del

archivo está limi-

tado a 8KB. El

archivo conten-

drá la lista de

archivos a verifi-

car, así como sus

hashes correctos

(SHA-1; el Lis-

tado 4 muestra

un ejemplo).

Durante el

arranque, Grub

comprueba una

por una las entra-

das de la lista. Si

el hash o suma

calculada no

coincide con la

suma almace-

nada, el proceso

de arranque se

detiene y muestra

un mensaje al

usuario. El

prompt del Lis-

tado 5 da a elegir

al usuario entre

cancelar el arranque por completo o con-

tinuar con el arranque a pesar de los pro-

blemas detectados.

TPM_Extend envía a los correspon-

dientes registros PCR del TPM las sumas

de los archivos.

VerificaciónA pesar de lo elaborado que son los

pasos descritos en este artículo, aún no

se cumple el principio de arranque

seguro que garantiza la integridad del

proceso de arranque. Para que el arran-

que sea completamente seguro, el sis-

tema debería comparar continuamente

las sumas, así como saber cómo actuar

en caso de que se produzca cualquier

alteración. El arranque seguro no aborta

el proceso de arranque si encuentra

pérdidas de rendimiento apreciables en

condiciones de producción. Además,

IMA almacena en el kernel una tabla

con los nombres de todos los archivos

comprobados y sus correspondientes

sumas. Esta lista contiene en todo

momento el estado actual de los archi-

vos ejecutados hasta ese punto.

Mediante la comparación de estas

sumas con los valores determinados (las

sumas de las versiones integrales de los

archivos correspondientes) se logra

detectar cualquier vulneración de la

integridad de los archivos.

TPM_Extend también guarda las

sumas en el chip TPM. Si el checksum de

un archivo del sistema varía, se almace-

nan sumas diferentes en los valores del

registro PCR. Sin embargo, la tabla del

kernel sólo contiene la suma actual de

los archivos.

IMA ofrece además una interfaz en

espacio de usuario a través de la cual se

puede comprobar la tabla: el administra-

dor puede leer la notación ASCII de la

tabla a través del archivo

/sys/kernel/security/tpm0/ascii_Bios_me

asurements (en el Listado 2 se ilustra

parte de este archivo); en el Listado 3 se

muestra cómo la herramienta head de

Linux lee el registro PCR del TPM.

Arranque Seguro en LinuxPara implementar un sistema de arran-

que seguro en Linux, lo primero que hay

que hacer es habilitar el soporte para

TPM en la configuración de la BIOS. La

primera vez que se hace, se crean varias

claves internas. Para los pasos siguientes

se necesita:

• el gestor de arranque Trusted Grub

• un kernel con IMA habilitado

En el método descrito en este artículo se

utiliza un parche para la versión tradicio-

nal de Grub 0.9.7. Como mencionamos

anteriormente, este parche pertenece al

proyecto TrustedGRUB, un trabajo cola-

borativo entre Sirrix y la Universidad de

Bochum, Alemania, cuyo sitio web [2]

alberga el código fuente, una wiki e

información de instalación detallada. La

actual versión 1.1.5 data de agosto de

2010.

Instalando TrustedGRUB en el MBR del

disco duro logramos que continúe el pro-

ceso de arranque con soporte para TPM

del siguiente modo:

• la extensión CRTM de la BIOS verifica

la Fase 1 de Grub (código del MBR)

ADMINISTRACIÓN • Arranque Seguro

58 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Listado 5: Mensajes del Arranque de Trusted GRUB

01 ****Trusted GRUB now booting Ubuntu-IMA

02 ****Progress:****XX

03 tGRUB: Verifiying (hd0,6)/boot/initrd.img-2.6.35.4-ima -> Integrity Error!

04 tGRUB: Data integrity not Guaranteed, 1 problem(s) occurred

05 tGRUB: Press ESC to stop booting or any other key to continue ...

Listado 4: /boot/ grub/ grub-check

01 792f802081e5193a304606026365797e69334adc (hd0,6)/boot/ initrd.img- 2. 6.35.4-ima

02 b6787ae6767deacefc5758ef7a4c0cdcbd0665ca (hd0,6)/boot/vmlinuz-2.6. 35.4-ima

Listado 3: Registrador PCR Register Vistopor head

01 # head -10 /sys/kernel/security/tpm0/ascii_Bios_measure-

ments

02 6226702b792e3ddd4b33491ce19375c671a8f8a7 08 [S-CRTM Ver-

sion]

03 4bb5a4e9f0f392abfa4eab2202b3bd924621dc63 01 [POST CODE]

04 1ea0e02ec49aaf3fda0bc8186da2cf246d7cfecf 01 [POST CODE]

05 dd261ca7511a7daf9e16cb572318e8e5fbd22963 01 [POST CODE]

06 df22cabc0e09aabf938bcb8ff76853dbcaae670d 01 [POST CODE]

07 a0d023a7f94efcdbc8bb95ab415d839bdfd73e9e 01 [POST CODE]

08 05ce5aa3a72f4dccdaa251bbac738a03296be1f7 01 [POST CODE]

09 dd261ca7511a7daf9e16cb572318e8e5fbd22963 01 [POST CODE]

10 df22cabc0e09aabf938bcb8ff76853dbcaae670d 01 [POST CODE]

11 a0d023a7f94efcdbc8bb95ab415d839bdfd73e9e 01 [POST CODE]

Listado 2: Listado de Sumas en el SistemaActivo

01 # head -5 /sys/kernel/security/ima/ascii_runtime_measure-

ments

02 PCR template-hash filedata-hash filename-hint

03 10 0f7aa9805f51800bf1403c3de856c4bee66dfa21 ima

dd16d778c4dbfdea44536cdc10890757684fe1e0 boot_aggregate

04 10 1dfdf1da8cca8248c420f365bbb7cb00ad59597e ima

648090bfe9593bcc2702461433d5c9ef64399ee5 /init

05 10 afaefb735a3d93f5c6f66f7893b558f04438e8c0 ima

5fb8c8479f31574c435aa06d5bae6ae5a737ca81 /init

06 10 08005d2b0ba3ee8c10c40f87eef76f3c4cea41d5 ima

195b25cdab5501b58858bc0923e51a0eab2447a3 ld-linux.so.2

07 10 63d7494f6da7fb0fc3332ab4fce2a2e1d45fbaf2 ima

d3d48ff690110248aba853fdb0748bfe4dd64673 libc.so.6

Page 53: Linux Magazine 78

algún archivo modificado. En lugar de

eso, lo que hace es ofrecer al usuario la

posibilidad de identificar un sistema

cuya integridad ha sido comprometida.

La respuesta a tal situación no es respon-

sabilidad del arranque seguro, sino que

se deja a la instancia de verificación.

La comprobación de la integridad

supone el núcleo del arranque seguro.

Pero hay un fallo de facto: uno de los

principios básicos en seguridad es que

un PC en ejecución no debe ser quien

verifique su propia integridad. Por ese

motivo, IMA encomienda la verificación

a un tercero confiable. El proceso teórico

(del que aún no ha aparecido ninguna

implementación factible) se conoce

como testimonio remoto y usa un

método de desafío/ respuesta (ver Figura

2) que consta de los seis pasos siguien-

tes:

• la entidad comprobadora genera un

número aleatorio o nonce, (1).

• transfiere el nonce al sistema objetivo

(challenge), (2).

• el sistema objetivo crea una petición

TPM_Quote request, firma el nonce y el

valor del PCR, y devuelve los resulta-

dos junto con la lista de sumas, (3).

• la entidad comprobadora analiza la

firma y el nonce para garantizar que se

trata de un valor de PCR auténtico y

actualizado, (4).

• recalcula el valor

de PCM

(TPM_Extend)

referenciando la

lista de sumas

que ha recibido y,

si los resultados

son idénticos,

deduce que la

lista es auténtica,

(5).

• verifica entonces

todos los valores

de la lista contra

los valores de

una base de

Arranque Seguro • ADMINISTRACIÓN

59Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 2: El protocolo de testimonio remoto (Remote Attestation)

permite verificar la integridad gracias a un sistema remoto. Por des-

gracia, aún no existe ninguna implementación usable.

Figura 3: Una forma de implementar el arranque seguro es usando una smartcard como instancia de verificación junto con un cifrado completo

de los discos duros.

Las smartcards han sido diseñadas paraejecutar operaciones criptográficas,generar números aleatorios y almace-nar de forma segura datos y claves.Actúan como parte desafiante, asumenel papel de protocolo de testimonioremoto (Remote Attestation) y verificanlas sumas. En semejante escenario noes posible iniciar ninguna aplicaciónsegura en el PC hasta que no se haya lle-vado a cabo la comprobación de la inte-gridad del sistema. El truco está enalmacenar la aplicación en el PC en uncontenedor cifrado y la clave en lasmartcard. La smartcard no proporcio-nará la clave hasta que el PC haya verifi-cado satisfactoriamente la integridaddel sistema.

Si el cargador reside en el interior delcontenedor, necesitará hacer uso delprotocolo de testimonio remoto, acce-der a la smartcard y montar el contene-dor cifrado (Figura 4). El cargadorarranca en el Paso 1; inicializa la smart-card y controla el diálogo con el usuario.El usuario ha de autenticarse ante lasmartcard para poder habilitarla (2). Elcargador ejecuta entonces el protocolode testimonio remoto contra la smart-card (3). Tras verificar satisfactoriamentela integridad, proporciona la clave parael montaje del contenedor cifrado (4). Elcargador puede montar entonces elcontenedor (5) e iniciar la aplicación enél contenida (6).

Versión con Smartcard y Cifrado Completo

Page 54: Linux Magazine 78

Claro está que este método tampoco

está exento de problemas: la gestión

mediante Smartcard y stick USB no es

viable con grupos de usuarios de mayor

tamaño; de hecho, una arquitectura de

tal complejidad está más bien orientada

a sistemas dedicados con necesidades de

máxima seguridad y para los que está

justificado el esfuerzo de administración

que supone.

WindowsLas versiones más modernas de Windows

(a partir de Windows Vista) soportan el

chip TPM en forma de autenticación pre-

via al arranque y cifrado de disco duro

mediante Bitlocker [5]. El software veri-

fica la integridad del sistema en las fases

más tempranas del arranque, de manera

similar a como lo hace TrustedGRUB.

Sin embargo, en ese momento se

rompe la cadena de confianza; el kernel

no continúa con las medidas de integri-

dad del chip TPM. La filosofía para la

protección de la integridad varía en este

punto: Bitlocker hace uso de TPM para

garantizar la detección de vulneraciones

de la integridad sólo hasta el momento

en que el kernel arranca. Al mismo

tiempo, Bitlocker garantiza la confiden-

cialidad de los datos del disco mediante

el uso de cifrado completo. De ese modo,

los administradores de los sistemas de

Microsoft pueden prevenir potenciales

ataques consistentes en modificar archi-

vos específicos offline. Estas medidas

están complementadas por funciones

como la firma de drivers, protección ante

parches o control de cuentas de usuario.

Tras una valoración detallada de la

seguridad de Windows Vista se concluye

que, a pesar de que Microsoft ha mejo-

rado sustancialmente la seguridad de

Windows en comparación con sus pro-

ductos anteriores, aún no ofrece ningún

concepto dominante en el sentido de

TCG, o al menos no de un modo ya pre-

parado.

Microsoft ha podido identificar este

error y parece estar trabajando en ello.

En la Build Conference de Septiembre de

2011, los desarrolladores presentaron el

nuevo método de “Arranque Seguro” en

Windows 8 – basado en la UEFI (Unified

Extensible Firmware Interface, [6]) –

para soportar solamente cargadores de

arranque firmados para proteger así el

sistema operativo como el Chrome OS de

Google. Sin embargo, los chips UEFI no

están muy extendidos entre el hardware

de PC.

ConclusiónLa integridad de las aplicaciones se

puede garantizar en Linux mediante una

combinación de CRTM, TrustedGRUB e

IMA, consiguiendo un arranque seguro

perfecto. Esta solución permite al admi-

nistrador detectar cualquier modifica-

ción realizada sobre aplicaciones sensi-

bles, como por ejemplo las dedicadas a

la creación de firmas digitales.

La usabilidad del sistema en entornos

productivos depende de un proceso de

verificación confiable. Por desgracia, aún

no existe ninguna implementación usa-

ble del protocolo de testimonio remoto

(Remote Attestation). En comparación

con Windows, IMA definitivamente

implementa mucho mejor el concepto de

arranque seguro. �

datos; si los valores son idénticos, los

archivos del sistema objetivo están

intactos, (6).

Alternativamente, se puede usar una

smartcard como entidad de confianza

para implementar el protocolo de testi-

monio remoto. La arquitectura propuesta

en el cuadro “Versión con Smartcard y

Cifrado Completo” contempla una auten-

ticación de doble factor para el usuario y

cifrado completo para el disco duro, ade-

más del arranque seguro para garantizar

la integridad y confiabilidad del conjunto

de los datos.

Pero una vez más, hay una serie de obs-

táculos que dificultan la puesta en pro-

ducción de esta solución. Por ejemplo, la

smartcard no puede guardar todas las

sumas debido a la limitación de sus recur-

sos, y el protocolo tardará algún tiempo.

Debido a que el kernel Linux ya cuenta

con mecanismos similares para el cifrado

de discos, como Dm-crypt, Device map-

per y la Crypto API, se puede concebir

una arquitectura aún más compleja y

exhaustiva. La Figura 3 muestra un bos-

quejo de la extensión para el procedi-

miento descrito anteriormente.

En esta configuración, el disco duro no

contiene datos cifrados aparte de los

datos de gestión de las particiones. El sis-

tema usa CRTM y TrustedGRUB para

arrancar (pasos 1 a 4) desde un medio

USB. Aquellos administradores que bus-

quen un método elegante pueden usar un

stick USB con lector de smartcard inte-

grado y llevar consigo todas las credencia-

les de acceso en el stick. La ramdisk ini-

cial contiene el código necesario para

usar la smartcard, autenticar al usuario e

incluso lanzar una comprobación de la

identidad y, en caso de que ésta tenga

éxito, leer la clave desde la smartcard

para el cifrado transparente del disco duro

(pasos 5 a 8). La máquina podrá entonces

montar el sistema de archivos raíz y con-

tinuar con el proceso de arranque (pasos

9 a 11). Una vez hecho todo esto, tienen

lugar los pasos para iniciar la aplicación

de alta seguridad (pasos 12 a 16).

ADMINISTRACIÓN • Arranque Seguro

60 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: Secuencia del protocolo de testimonio usando una smartcard para proteger la aplicación.

RECURSOS

[1] Trusted Computing Group: http:// www. trustedcomputinggroup. org

[2] Trusted Grub: https:// projects. sirrix. com/ trac/ trustedgrub/

[3] IBM Research: http:// domino. research. ibm. com/ comm/ research_people. nsf/ pages/ sailer. ima. html

[4] Sailer, Zhang, Jaeger, van Doorn,“Design and Implementation of aTCG- based Integrity MeasurementArchitecture”: 13th USENIX SecuritySymposium, 2004

[5] Bitlocker: http:// windows. microsoft. com/ en-US/ windows7/ products/ features/ bitlocker

[6] Unified Extensible Firmware Inter-face:http:// en. wikipedia. org/ wiki/ Unified_Extensible_Firmware_Interface

Page 55: Linux Magazine 78

LINUX USER • Dia

62 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Cuando necesitamos editar una foto,

habitualmente elegimos un pro-

grama de edición de imágenes

como GIMP o Photoshop. Los programas

de dibujo vectoriales como Inkscape,

Adobe Illustrator o Corel Draw son más úti-

les para dibujos o ilustraciones, pero los

diagramas UML o de red son más difíciles

de dibujar usando un programa de edición

de imágenes, porque, aunque permiten

agrupar objetos, no permiten enlazarlos. El

programa bajo licencia GPL Dia [1] es

mucho mejor a la hora de automatizar el

proceso de actualización de objetos enlaza-

dos.

MultitalentoDia posee muchos objetos gráficos útiles

para crear organigramas y diagramas de

bases de datos o UML y para visualizar flu-

jos de trabajo o estructuras en procesos.

Además, cuenta con soporte limitado para

crear elementos a mano alzada. Para

comenzar, podemos arrastrar objetos desde

la caja de herramientas al espacio de tra-

bajo, y luego organizarlos y enlazarlos

cuando sea necesario. Si movemos un

objeto, automáticamente se actualizarán

las flechas que lo enlazan para indicarnos

la nueva posición, evitándonos así el tener

que ajustar todos los objetos manualmente

cada vez que cambie uno.

InstalaciónDia se encuentra disponible para Linux,

Mac OS X y Windows. Es probable que la

versión Linux esté en el repositorio de nues-

tra distribución favorita. Los usuarios de

Ubuntu y Debian necesitan estar atentos a

las versiones diferentes. Para más informa-

ción véase el cuadro “¿Una Versión para

Gnome?”. La versión portátil para los usua-

rios de Windows se puede arrancar sin ins-

talación (por ejemplo, desde un stick USB).

A pesar de que técnicamente la versión

de Linux es idéntica a la de otros sistemas

operativos, como en GIMP, el cuadro de

herramientas y el espacio de trabajo se

encuentran situados en paneles diferentes

(Figura 1). Sin embargo, podemos arrancar

Dia con la opción --integrated para cambiar

esta configuración y editar múltiples docu-

mentos Dia al mismo tiempo. En este

modo, el programa abre los espacios de tra-

bajo adicionales como pestañas.

ControlesPara crear gráficos podemos arrastrar las

formas requeridas desde la biblioteca de la

izquierda al escritorio. Una vez colocadas,

podemos moverlas, reflejarlas o escalarlas

de acuerdo con nuestras necesidades. Los

elementos se enlazan fácilmente con las

distintas líneas disponibles en el Diagram

Editor.

Visualización de procesos con Dia

EsquemáticoDibujar diagramas y organigra-

mas resulta difícil con programas

de edición gráfica tradicionales

tales como GIMP o Inkscape. Dia

simplifica esta tarea.

POR CHRISTOPH LANGNER Y

THOMAS LEICHTENSTERN

Debian y Ubuntu tienen dos versiones

diferentes de Dia. Los administradores

de paquetes con estas distribuciones

incluyen los meta-paquetes dia y dia-

gnome. Si no utiliza el escritorio

Gnome, no instale dia-gnome. Si usa

KDE o Xfce, este paquete instala un con-

junto de dependencias que no necesita.

En su lugar, debería instalar el paquete

dia, que nos da el mismo programa,

pero sin las dependencias.

¿Una Versión para Gnome?

Page 56: Linux Magazine 78

Para definir la apariencia de los extremos

de los conectores utilizamos los iconos de

la parte inferior del editor. Cuando arrastra-

mos una flecha al centro del rectángulo,

éste se mostrará resaltado en rojo. Cuando

pulsamos el botón del ratón, la punta de la

flecha quedará unida al centro del rectán-

gulo. Cuando movemos el objeto, éste per-

manece enlazado. Este proceso no sólo fun-

ciona con el centro de un objeto, sino tam-

bién con las esquinas y el punto medio de

cualquier lado.

Al igual que otros programas gráficos,

Dia utiliza capas. Para crear nuevas capas

seleccionamos Layers |

Add layer. Para navegar

entre ellas utilizamos la

ventana Layers (Figura 2),

a la cual podemos acceder

a través de Layers |

Layers… en el doble panel

o accediendo a View |

Show Layers en la ventana

integrada.

ExportarCon Dia podemos exportar

nuestros gráficos a varios

formatos, tales como PNG,

SVG o PDF, y luego conti-

nuar trabajando sobre ellos

en otros programas. Versio-

nes más recientes de Dia

también pueden leer y pro-

ducir ficheros en el formato

XML que utiliza MS Visio

[2], que Microsoft publicó

con la versión 2003. Con

esta funcionalidad se

soporta la interoperabilidad

directa con Visio, aunque

pueden darse algunas lige-

ras diferencias entre fiche-

ros.

Mis pruebas mostraron que Visio no pre-

senta el texto en documentos exportados

desde Dia. La elección de otra fuente podría

resolver este problema. Cuando abrí los

ficheros de Visio en Dia, tuve problemas al

cargar los gráficos más complejos. Por

ejemplo, el programa no muestra gradien-

tes de color o elementos más complicados

correctamente. El intercambio de datos

entre Dia y Visio es, en el mejor de los

casos, una solución provisional en este

momento.

Formas AdicionalesSi la selección de formas de las que nos

provee Dia no es suficiente para nuestras

necesidades, podemos ampliar el programa

descargando otras en el formato de paque-

tes DEB y RPM a través del programa Dia -

shapes [3]. Estas formas incluyen elemen-

tos de estructura y de informática, compo-

nentes electrónicos y formas para elemen-

tos ópticos. También hay versiones de

bibliotecas de formas para Windows y Mac

OS X que se pueden descargar desde la

página de inicio de Dia.

Después de instalar Diashapes, aparecerá

en el menú Applications | Graphics del

escritorio Gnome. Cuando lo iniciamos,

muestra una lista de todos los objetos dis-

ponibles, que podemos seleccionar una vez

verificados. Pulsando en Install carga las

formas requeridas y las desempaqueta

automáticamente en ~/ .dia/ shapes, por lo

que ya podremos acceder a ellas desde

Other sheets de la lista desplegable en el

Diagram Editor (Figura 3).

ConclusionesDia no puede competir con el alcance fun-

cional de las alternativas propietarias tales

como OmniGraffle [4] o MS Visio, pero, si

lo único que necesitamos son diagramas

simples sin complejidades, Dia es una estu-

penda opción.

Esta aplicación libre crea diagramas UML

y de red con facilidad, y podemos exportar-

los también fácilmente a formatos popula-

res para su edición posterior. Sin embargo,

es posible que puedan darse algunos pro-

blemas con fuentes integradas si exporta-

mos a MS Visio. �

Dia • LINUX USER

63Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 1: La opción --integrated inicia Dia en una única ven-

tana en Linux (parte superior).

Figura 2: En Dia, el diálogo Layers nos per-

mite cambiar entre diferentes capas.

Figura 3: Diashapes instalado.

[1] Dia: http:// projects. gnome. org/ dia/

[2] MS Visio: http:// office. microsoft. com/

en-us/ visio/

[3] Diashapes: http:// dia-installer. de/

diashapes/ index. html. en

[4] OmniGraffle: http:// www. omnigroup.

com/ products/ omnigraffle/

RECURSOS

Page 57: Linux Magazine 78

LINUX USER • Administración de Contraseñas

64 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Las contraseñas y su administra-

ción no son precisamente

temas excitantes para la mayo-

ría de los usuarios. De hecho, muchos

de ellos piensan que son un mal nece-

sario, mostrando poco interés en crear

contraseñas fuertes. Pero esto es un

error: los recientes ataques a distintos

servicios han comprometido las bases

de datos de empresas, permitiendo a

terceros hacerse con nombres de

usuario y contraseñas de miles,

incluso millones de usuarios. En la

mayoría de los casos, la información

estaba cifrada, pero con un corpus tan

grande con el que trabajar, los atacan-

tes no tendrían ninguna dificultad en

descubrir las contraseñas débiles.

Junto con los nombres de usuario, un

atacante puede tratar de acceder a

otros servicios e intentar apoderarse

de cuentas de otros sitios si estamos

usando el mismo nombre de usuario y

contraseña para esos otros sitios.

Así que, ¿cuál es la respuesta? Con-

traseñas fuertes y separadas para cada

cuenta de cada servicio. Esto proba-

blemente suena como un auténtico

incordio… más que nada porque lo es,

especialmente si hemos intentado ela-

borar y memorizar cada una de ellas.

No es simplemente una molestia –

para muchos usuarios es una fórmula

para el fracaso.

Naturalmente, no deseo que nadie

fracase a la hora de reforzar su seguri-

dad, y no quiero que los malos pue-

dan devorar nuestras contraseñas

fácilmente. Afortunadamente, Linux

está lleno de herramientas para ayu-

darnos a crearlas y a administrarlas.

Comenzaré explicando qué hace que

una contraseña sea buena, luego mos-

traré cómo crearla y después cómo

almacenarla (de modo seguro).

Contraseñas Fuertes¿Qué hace que una contraseña sea

fuerte? Probablemente encontraremos

distintas opiniones, pero como

mínimo deberá tener una combina-

ción de letras mayúsculas y minúscu-

las, números y caracteres especiales –

si es posible. Digo “si es posible”, por-

que algunos sitios puede que no per-

mitan caracteres especiales o podría

limitarnos a utilizar un PIN en vez de

una contraseña de verdad. En tales

casos, es importante hacerlo lo mejor

que podamos.

También es importante evitar con-

traseñas de diccionario en la medida

de lo posible. Por razones obvias, no

es buena idea que nuestra contraseña

sea “contraseña”, “password” ni nin-

guna variante. Igualmente tampoco

debe ser nuestro nombre, apellidos,

nombre de nuestra madre, un insulto,

palabra malsonante u obscenidad (los

atacantes también pueden ser inma-

duros) o el nombre de nuestro grupo

Abordamos la generación y administración de con-traseñas

¡PÁSALO!Las contraseñas fuertes y originales son actualmente una necesidad.

Mostramos distintas maneras de generarlas y que sean fáciles de recor-

dar. POR JOE “ZONKER” BROCKMEIER

Joe “Zonker” Brockmeier es peri-

odista tecnológico freelance, edi-

tor, creador de comunidades y

defensor del software libre. Fue

Community Manager de Open-

SUSE desde el 2008 hasta el 2010.

Ahora escribe para Linux Maga-

zine y otras publicaciones tec-

nológicas. Puedes encontrarlo en

http:// www. dissociatedpress. net y

en Twitter e Identi.ca como jzb.

EL A

UT

OR

Page 58: Linux Magazine 78

musical favorito – a menos que se

llame “Foof2ouv”, grupo que no

conoce ni Dios.

Pero que se nos ocurra una contra-

seña fuerte no es sencillo si no pode-

mos utilizar una palabra que podamos

recordar con facilidad ¿verdad? Cierto,

pero podemos facilitarnos la tarea si

utilizamos un generador de contrase-

ñas aleatorio. Linux tiene bastantes de

donde elegir.

Contraseñas Fáciles conpwgenMi generador de contraseñas favorito

de la línea de comandos es una

pequeña utilidad denominada pwgen,

escrita por un tipo del que probable-

mente haya oído hablar: Ted Ts’o, el

cual, cuando no estaba hackeando sis-

temas de ficheros, pasaba su tiempo

reescribiendo una utilidad que gene-

raba contraseñas aleatorias. Aunque

no sólo eso, ya que pwgen genera con-

traseñas que pretenden ser fáciles de

recordar. ¿Cómo es esto? ¿Contraseñas

seguras y fáciles de recordar? Sí, efec-

tivamente. El modo predeterminado

de pwgen es crear contraseñas que

son pronunciables pero que no son

una palabra. También pueden incluir

al menos una letra en mayúsculas y

un número. La manera más fácil de

verlo es a través de la salida de

pwgen. Aquí hay un ejemplo de con-

traseñas generadas por esta tulidad:

to8Tee0j Ook4kep7 caCh4che

ma1Saik1 Roo6oen9 miexieX3

Piyairo6 Oyol9Iel Ohpho3po

cheiT8ai Gooquae9 AeV8eech

ach9SaiG xiezah1K gooPo8qu

aiGie0Ae xooqu1Fi Dahh4Oox

oosh8Mia ion8beiC tho1Thie

Beel9aa8 Baiph6uu Jei9Mahk

Ninguna de ellas son fácilmente adivi-

nables y tampoco fáciles de crackear,

pero podemos elegir algunas que

podríamos memorizar fácilmente. He

usado pwgen desde hace algunos años

para generar unas cuantas contrase-

ñas que he memorizado y utilizado

para una cuenta… sólo una cuenta.

Así que el comportamiento por

defecto de pwgen es crear un conjunto

de contraseñas y permitirle al usuario

elegir entre ellas. Como podemos ver

aquí, la longitud de la contraseña es

de 8 caracteres con varias columnas y

filas de contraseñas. La idea es gene-

rar un conjunto de ellas para tener

varias entre las que elegir. Sin

embargo, todo esto se puede modifi-

car. Si queremos contraseñas más lar-

gas (o más cortas – algo que no reco-

miendo), usaremos pwgen N, donde N

es la longitud de la contraseña.

También podemos establecer el

número de contraseñas a generar pro-

porcionando un segundo número. De

este modo, si sólo deseamos 10, ejecu-

tamos pwgen 9 10, que generará 10

contraseñas con una longitud de 9

caracteres. En el caso de que sólo de -

seemos especificar el número de con-

traseñas, entonces sería

pwgen -N 10.

¿Y si queremos aña-

dir un símbolo a nues-

tra contraseña? Enton-

ces usaremos la

opción -y:

pwgen -y -N 10.

Esto las generará con

corchetes, comillas,

acentos circunflejos,

etc.

Nótese que algunas

de las salidas pueden

ser un poco ambiguas.

Puede resultar compli-

cado distinguir entre

un “0” y una “O” o

entre un “1” y una “l”

dependiendo de la

fuente de terminal que

estemos utilizando. Yo

no tengo este pro-

blema, porque la fuente

de mi terminal distin-

gue bastante bien estos

caracteres – y uso

reglas mnemotécnicas

para memorizar las

contraseñas. Así,

recuerdo la diferencia

entre “cero” y “Oh” en

mi cabeza. Pero si nos

resulta confuso o irri-

tante, podemos usar la

opción -B para decirle a

pwgen que no utilice

caracteres ambiguos.

Si necesitamos gene-

rar contraseñas para

otra gente o incorporar la generación

de contraseñas en un script, por ejem-

plo, podemos invocar a pwgen desde

los scripts. Cuando se le llama desde

un script, y no interactivamente,

pwgen genera una sola contraseña en

vez de una pantalla completa de con-

traseñas.

La única desventaja de pwgen es

que puede que no se encuentre empa-

quetada en todas las distribuciones.

Está disponible para Debian, Linux

Mint, Ubuntu y para el resto de las

familias Debian/ Ubuntu y sus deriva-

das. Sin embargo, este artículo está

escrito en Scientific Linux 6.1 alpha, y

pwgen no parece encontrarse en los

Administración de Contraseñas • LINUX USER

65Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 1: La ventana por defecto de Revelation.

Figura 2: Añadiendo una cuenta shell.

Figura 3: Añadiendo una cuenta de tarjeta de crédito.

Page 59: Linux Magazine 78

Revelación en laAdministración deContraseñasDurante muchos años he usado una

solución de baja tecnología para

administrar pares de nombre de usua-

rio/ contraseña. Mantenía un fichero

de texto Vim cifrado oculto con

muchos nombres de usuario y contra-

señas de sitios. Esto era, por decirlo

suavemente, ni completamente escala-

ble ni seguro. Concedo que casi

requería acceso físico a mi máquina

para crackearlo, pero el

cifrado de Vim no es

terriblemente fuerte.

Además, no es una

solución integral.

Cuando comencé a bus-

car una GUI para admi-

nistrar contraseñas,

encontré unas cuantas

buenas para Linux,

específicamente dos, a

las que haré referencia

aquí: Revelation [2] y

Seahorse [3].

Si somos usuario de

Gnome, es probable

que ya estemos familia-

rizados con Seahorse,

aunque puede que no

conozcamos todo lo

que Seahorse puede

hacer. También me

gusta Revelation – con

una salvedad: su

desarrollo se detuvo en

2007. Aún se encuentra

empaquetado para

algunas distros, pero le

haría falta un nuevo

mantenedor. Si es de -

sarrollador y lee esto,

puede que sea un buen

proyecto del cual

hacerse cargo.

Cuando ejecutemos

Revelation, veremos

una ventana como la

que aparece en la

Figura 1. Para empezar

a añadir entradas, pul-

samos el botón Add

Entry situado en la

barra de tareas. Luego

veremos un diálogo

como el de las Figuras

2 ó 3. Como podemos

ver, es posible administrar varios

tipos de cuentas/ credenciales en

Revelation, incluyedo tarjetas de cré-

dito, cuentas shell, sitios web, blo-

queos de puertas e incluso claves

cifradas con el certificado y los fiche-

ros de claves.

¿Hasta qué punto es seguro mante-

ner todo esto en una GUI de fácil uso?

Pues el fichero con nuestra informa-

ción está cifrado con otra contraseña.

Después de que hayamos introducido

unas cuantas credenciales, vamos a

File y le damos al fichero de datos de

Revelation un nombre. Se nos pedirá

una contraseña y, si no es lo suficien-

temente fuerte, Revelation se quejará

antes de permitirnos usarla. También

podemos “bloquear” Revelation mien-

tras está abierto, de modo que si

alguien intenta fisgonear en nuestro

escritorio, no tenemos que preocupar-

nos de que puedan navegar nuestras

contraseñas. Nótese que no necesita-

mos usarlo con pwgen, ya que Revela-

tion generará contraseñas aleatorias

para nosotros.

Como he mencionado, Revelation

no está activamente mantenido, por lo

que posiblemente deseemos probar

Seahorse como alternativa. ¿Por qué

no comenzar con Seahorse? En primer

lugar, porque no es tan flexible como

Revelation. Está diseñado para admi-

nistrar claves GPG, cuentas shell y

otras credenciales estándar, pero no

tarjetas de crédito o contraseñas de

sitios web donde deseamos guardar

algo más que pares de nombre de

usuario/ contraseña.

Pero si usa Gnome, puede que ya

tenga instalado Seahorse y, si sólo

necesita administrar un puñado de

contraseñas, esta es una buena

manera de hacerlo.

Firefox SyncPor último, no podemos olvidar men-

cionar Firefox Sync [4]. Firefox ha

tenido la funcionalidad de administrar

contraseñas durante mucho tiempo,

aunque Sync es un sustancial paso

adelante, el cual como su nombre

indica, sincroniza información entre

diferentes versiones de Firefox. Según

la versión de Firefox que estemos

usando, Sync se encuentra disponible

como una extensión o como una fun-

cionalidad nativa del navegador. En

repositorios de Scientific Linux o en

los de Red Hat Enterprise Linux

(RHEL).

Una opción de la familia RHEL es

compilarlo nosotros mismos, siendo

posible encontrar el código fuente en

SourceForge [1]. Como es un pro-

grama sencillo, no necesita actuali-

zarse muy a menudo – su última

actualización es de hace algo menos

que un año (Febrero de 2011) – y las

fuentes se compilan con mucha facili-

dad.

LINUX USER • Administración de Contraseñas

66 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Figura 5: Introduciendo información de la cuenta.

Figura 4: Creando una nueva cuenta Firefox Sync.

Figura 6: Administrando preferencias de Firefox Sync.

Page 60: Linux Magazine 78

Firefox 3.6 necesitaremos instalarlo como extensión,

pero a partir de la 4.0 y posteriores, se encuentra

incluido por defecto. A menos que tengamos una buena

razón para usar 3.6, deberíamos actualizarnos a la 4.0 o

posteriores. Mucha gente piensa en Firefox Sync como

una manera de sincronizar las marcas entre navegado-

res en diferentes máquinas, pero también guardará y

sincronizará nuestras contraseñas. También podemos

hacerlo en Google Chrome o utilizando algo como

Xmarks; sin embargo, tiendo a tener más confianza en

Mozilla que en cualquier otra entidad comercial para

manipular mi privacidad.

Si no ha usado Firefox Sync antes, deberá comenzar

configurando una cuenta (Figura 4). Tenga en cuenta

que tendrá dos credenciales privadas – nuestra contra-

seña y una clave Sync. Cuando nos registramos en Fire-

fox Sync, necesitaremos introducir nuestro nombre de

usuario o dirección email, así como la clave Sync

(Figura 5). Una vez que todo está configurado, pode-

mos administrar lo que Sync vaya a sincronizar. Si nos

encontramos seguros con la política de privacidad y

seguridad de Mozilla, entonces seguimos adelante y le

permitimos sincronizar las contraseñas. También admi-

nistrará nuestros favoritos, preferencias, historial y las

pestañas dentro de los navegadores (Figura 6). Firefox

Sync es de gran ayuda si estamos utilizando Firefox en

varios aparatos y, si no lo tenemos instalado, es un

auténtico incordio intentar administrar contraseñas

para sitios web en un dispositivo móvil.

ResumenLa administración de contraseñas no es algo atractivo

ni excitante, pero merece la pena investigar un poco

para poner orden en nuestra privacidad para quedarnos

tranquilos. Como Linux tiene un porcentaje bastante

alto de usuarios preocupados por una buena adminis-

tración y seguridad de contraseñas, se encuentra

repleto de herramientas que satisfacen estas necesida-

des. ¿Tenemos que ser unos super-paranoicos acerca de

nuestras contraseñas? Probablemente no. A nivel perso-

nal, mi objetivo es que mis credenciales proporcionen

protección frente a ataques comunes y aíslen cada

cuenta de manera que, si los atacantes comprometen

un sitio, no puedan abrir una puerta al resto de mi vida

online. Este método es diferente si se planea pararle los

pies a un atacante que nos tenga como objetivo perso-

nalmente, aunque los mismos pasos deberían ayudar

también a funcionar. Mi recomendación es que genere

contraseñas fuertes.

Y si no está seguro de sus credenciales bancarias,

envíeme un email con ellas, y las revisaré por usted </

sarcasmo>. �

[1] SourceForge: http:// sourceforge. net/ projects/ pwgen/

[2] Revelation: http:// oss. codepoet. no/ revelation/ wiki/ Home

[3] Seahorse: http:// projects. gnome. org/ seahorse/

[4] Firefox Sync: https:// wiki. mozilla. org/ Firefox_Sync

RECURSOS

Page 61: Linux Magazine 78

LINUX USER • Workspace: BilboPlanet

68 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Aprimera vista, BilboPlanet [1] tiene

toda la pinta de otro lector RSS

basado en web. Pero si profundiza-

mos un poco, encontraremos que no es un

agregador RSS habitual. BilboPlanet es lo

que se llama un “portal a planeta”, una

aplicación que toma contenidos de múlti-

ples fuentes RSS y los presenta de manera

que sean fáciles de usar. Esta aplicación

está diseñada específicamente para comu-

nidades y grupos de trabajo para permitir-

les a sus miembros seguirse entre ellos y

compartir información útil. ¿Cómo fun-

ciona en la práctica? Digamos que tenemos

una comunidad en la que todos sus miem-

bros tienen blogs. Si queremos seguirlos,

tenemos que subscribirnos a todos los

feeds RSS individuales. Lo mismo ocurre

para todos los miembros de la comunidad:

han de subscribirse a cada uno de los res-

tantes feeds RSS de los demás miembros

para mantenerse al día. Las cosas incluso

se complican más cuando cada miembro se

subscribe a otros feeds que puede que sean

importantes para el resto de la comunidad.

BilboPlanet ofrece una elegante solución

a este problema agregando y publicando

los feeds RSS de los miembros de la comu-

nidad. Y a pesar de estar desarrollada pen-

sando en comunidades y grupos de trabajo,

esta aplicación también tiene otros usos.

Por ejemplo, podemos utilizarla como una

herramienta para publicar contenido de

nuestros feeds RSS favoritos.

Comenzamos

Como BilboPlanet se ejecuta en la pila Apa-

che/ MySQL/ PHP, necesitamos un servidor

o un alojamiento web que tenga los com-

ponentes requeridos. La aplicación trae un

instalador automático, de modo que

implantar BilboPlanet sólo conlleva unos

cuantos pasos simples. Para empezar, coge-

mos la última versión de la aplicación del

sitio web del proyecto y desempaquetamos

el archivo descargado. Movemos la carpeta

BilboPlanet resultante al documento raíz de

nuestro servidor, luego damos permisos de

escritura al directorio BilboPlanet/ admin/

cache/ y al fichero Bilboplanet/ inc/

config.php. A continuación apuntamos

nuestro navegador a http:// 127. 0. 0. 1/

Bilboplanet (sustituyendo 127.0.0.1 por la

dirección IP o el nombre de dominio de

nuestro servidor) para instalar el asistente

(Figura 1). Cumplimentamos los campos

requeridos y pulsamos Save. En el paso

siguiente, proporcionamos información

sobre nuestra instancia de BilboPlanet,

especificamos las credenciales del adminis-

trador y pulsamos Save de nuevo. El insta-

lador se encargará del resto. Una vez que

BilboPlanet ha sido instalado, podemos eli-

minar el directorio Bilboplanet/ admin/ ins-

tall, y luego pulsar el botón Go to the admi-

nistration interface para configurarlo.

Cuando nos introducimos en la interfaz

administrativa de BilboPlanet, aterrizamos

automáticamente en la sección Dashboard,

la cual ofrece una vista rápida de nuestra

instalación (Figura 2). Esta perspectiva

incluye una lista de los últimos artículos,

estadísticas e información del sistema. Si

necesitamos modificar la configuración de

Administración de feeds RSS con BilboPlanet

AGREGAR YPUBLICAREn la web, un planeta es una herramienta para reunir y mostrar posts de

blogs de los miembros de una comunidad de Internet. Vemos cómo

crear uno usando BilboPlanet. POR DMITRI POPOV

Dmitri Popov es licenciado en

Lengua Rusa y en lenguajes de

computación. Ha estado escribi-

endo sobre Linux y software de

código abierto durante años, y sus

artículos han aparecido en revistas

y sitios web daneses, británicos,

norteamericanos, alemanes y

rusos.

EL A

UT

OR

Page 62: Linux Magazine 78

nuestra cuenta, podemos hacerlo en Com-

mon | Manage your account. Aquí pode-

mos actualizar nuestra dirección de correo

y cambiar la contraseña.

Antes de poder poner a BilboPlanet a

funcionar, tenemos que rellenarlo con

usuarios. Para ello vamos a Administration

| Manage users y pulsamos el botón Add a

user para proporcionar el nombre del usua-

rio, ID, dirección de correo, contraseña y

sitio web. Luego pulsamos Add. De este

modo podremos añadir tantos usuarios

como necesitemos. Nótese que aunque el

campo Website esté marcado como opcio-

nal en el formulario Add a user, es, de

hecho, obligatorio. Debemos especificar al

menos un sitio web para cada usuario

(habitualmente el blog del usuario o su

sitio web personal), porque BilboPlanet no

puede asignar feeds RSS a usuarios sin

sitios web.

Si no añadimos un sitio web cuando cre-

amos un usuario, podemos hacerlo más

tarde pulsando el enlace Add a new website

que se encuentra situado junto al usuario

en la lista de todas las cuentas existentes.

En teoría, deberíamos añadir un sitio web

por cada feed RSS que planeamos asignar

al usuario. En la práctica, sin embargo,

podemos unir múltiples feeds a un único

sitio web. Este proceso puede sonar ligera-

mente confuso, pero es bastante fácil de

captar cuando comenzamos a añadir feeds

RSS.

Una vez que hayamos rellenado Bilbo-

Planet con usuarios, podemos añadir feeds

RSS. Vamos a Administration | Manage

feeds y pulsamos el botón Add a feed

(Figura 3). Aquí necesitaremos asignar el

feed a un miembro específico usando la

lista desplegable User id. También necesita-

remos unir el feed RSS a un sitio web (lo

cogemos de la lista desplegable Website id).

Como se ha mencionado antes, lo ideal

es unir cada feed RSS al sitio web con el

que está relacionado. Por ejemplo, el feed

RSS de Linux Magazine deberá enlazarse a

http:// www. linux-magazine. com y el feed

Slasdot estará conectado a http:// slashdot.

org/. Pero en realidad, no parece existir nin-

guna diferencia con los feeds RSS con los

que están asociados los sitios web, de

modo que podemos enlazar todos los feeds

RSS a un único sitio web asignado al usua-

rio.

El siguiente paso es buscar los artículos

más recientes de los feeds RSS añadidos

para asegurarnos de que todo funciona

adecuadamente. Para hacer esto manual-

mente apuntamos nuestro navegador a

http:// wxy. 0. 0. z/ Bilboplanet/ inc/

update_manual. php (donde wxy.0.0.z es la

dirección IP de nuestro servidor). Luego,

una vez que el script ha hecho su trabajo,

podemos comprobar la salida para ver los

errores. Si todo transcurrió sin problemas,

veremos nuevos artículos en la página prin-

cipal de BilboPlanet.

Por defecto, BilboPlanet publica automá-

ticamente todos los artículos buscados, aun-

que podemos administrarlos

manualmente a través de

Administration | Manage

posts. Aquí podemos cam-

biar el estado de cada artí-

culo de active a inactive o

pending, o borrar el artículo

totalmente. Las capacidades

de filtrado de BilboPlanet

nos permiten mostrar artícu-

los solamente para un deter-

minado usuario o limitar la

lista solamente a artículos

con un estado específico. Bil-

boPlanet ofrece aún otro modo de moderar

artículos usando la sección Moderation |

Moderation (Figura 4).

Para deshabilitar un artículo específico

pulsaremos el icono Refuse. Luego tenemos

la opción de componer y enviar un email al

usuario que presentó el artículo explicando

por qué ha sido deshabilitado. Habilitar

artículos es igual de fácil: pulsamos el

icono Accept que hay junto al artículo que

deseamos y ya está.

Workspace: BilboPlanet • LINUX USER

69Número 78W W W . L I N U X - M A G A Z I N E . E S

Figura 2: Panel Dashboard de BilboPlanet.

Figura 1: BilboPlanet cuenta con un asistente de instalación

muy amigable.

Figura 3: Añadiendo un feed.

Page 63: Linux Magazine 78

cripción para permitir a los visi-

tantes añadir sus propios feeds

a nuestro planeta. Si habilita-

mos la funcionalidad de subs-

cripción, también debemos edi-

tar el contenido predetermi-

nado de la página de subscrip-

ción, la cual explica las reglas y

requerimientos de nuestro pla-

neta.

Las opciones de la sección

Import/ Export nos permiten

exportar datos para su archi-

vado. La exportación de datos es tan fácil

como seleccionar las tablas de la base de

datos deseada y pulsar el botón Export.

Obtener los datos exportados a BilboPlanet

tampoco es particularmente difícil: selec-

cionamos el fichero de copia de seguridad

.json.gz y pulsamos el botón Import.

BiboPlanet también soporta varias

maneras de actualizar los feeds RSS, los

cuales podemos habilitar y configurar en

Feed fetching (Figura 5) . Probablemente la

opción más fácil sea permitir al sistema

actualizarlos cuando un visitante accede a

la página principal. Para activar esta fun-

ción marcamos el cuadro de comprobación

Enable update on loading of index page. La

principal desventaja de este método es que

podría ralentizar nuestro sitio. Afortunada-

mente, BilboPlanet nos permite configurar

un trabajo cron para buscar feeds RSS

automáticamente a intervalos regulares.

Finalmente, la sección System | Permis-

sions nos permite especificar roles y privi-

legios para cada usuario de BilboPlanet. La

funcionalidad de acceso de BilboPlanet es

bastante simplista, pero podemos elegir

distintos roles y habilitar ciertos privile-

gios, tales como la capacidad de moderar

artículos y administrar la instalación de

BilboPlanet.

Tal y como podría esperarse, usar Bilbo-

Planet no es particularmente difícil. La

página principal muestra todos los artículos

buscados con sus resúmenes cortos (Figura

6). Los visitantes pueden votar los artículos

y también subscribirse a un feed RSS de

BilboPlanet. La página principal ofrece ade-

más algunas opciones de filtrado, de modo

que los visitantes pueden ver los artículos

posteados en el día, semana o mes actual.

La página Top 10 muestra los artículos con

más votos, y la sección Archives lista todos

los artículos agrupados por mes.

En términos generales, BilboPlanet no

sustituirá una aplicación lectora de RSS,

pero puede resultar bastante útil cuando

necesitamos agregar y publicar contenido

de múltiples fuentes RSS. �

Además de actuar como un planeta para

los miembros de la comunidad, BilboPla-

net también se puede usar como solución

de lista de correos interna. En Administra-

tion | Newsletter, podemos componer un

mensaje y enviarlo a todos los usuarios

seleccionados registrados en BilboPlanet.

La sección Configuration nos permite

ajustar algunas configuraciones clave. En

Planet Author podemos editar nuestra

información, incluyendo dirección de

correo, sitio web, cuenta de mensajería ins-

tantánea y resumen de nuestra biografía.

La sección Planet configuration nos per-

mite configurar las configuraciones de

nuestra instalación BilboPlanet. Aquí pode-

mos editar el nombre y descripción del pla-

neta, elegir un tema diferente y especificar

un mensaje de información para que se

muestre en la página principal. También

podemos habilitar o deshabilitar la página

de contacto y la funcionalidad de votación

y moderación.

Si deseamos hacer un seguimiento de las

estadísticas del planeta, podemos habilitar

la opción Planet Analytics Engine y especi-

ficar el motor de estadísticas que queremos

usar. BilboPlanet soporta Google Analytics

y su popular alternativa de código abierto,

Piwik. Si elegimos el primero, tendremos

que proporcionar nuestro identificador

Google Analytics para unir nuestro planeta

a nuestra cuenta de Google Analytics. Tam-

bién podemos habilitar la opción de subs-

LINUX USER • Workspace: BilboPlanet

70 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Figura 4: BilboPlanet nos permite moderar artículos.

Figura 5: Configuración de las opciones de

búsqueda del feed.

Figura 6: BiboPlanet en todo su esplendor, con accesos fáciles para los posts más recientes,

los 10 posts Top y los posts filtrados.

[1] BilboPlanet: http:// www. BilboPlanet.

com

RECURSOS

Page 64: Linux Magazine 78

Línea de Comandos: GPG (II) • LINUX USER

71Número 78W W W . L I N U X - M A G A Z I N E . E S

mentación libre de Pretty Good Privacy.

Utiliza dos claves para cifrar y descifrar

mensajes: nuestra clave pública, que distri-

buimos a la gente con la que queremos

intercambiar mensajes, y una clave pri-

vada o secreta, que usamos para descifrar

mensajes que recibimos. Las claves

pública y privada se denominan par de cla-

ves y se guardan en un llavero, junto con

las claves públicas que hemos recogido de

nuestros corresponsales. Usando las claves

podemos cifrar y descifrar ficheros de

texto. También podemos exportarlas a un

fichero de texto para compartirlas.

Y ahora, profundicemos un poco más.

Herramientas para laAdministración de ClavesTres herramientas nos ayudan a adminis-

trar claves: El comando gpg, ideado princi-

palmente para claves que se han exportado

El mes pasado destaqué las nocio-

nes elementales del envío de men-

sajes cifrados usando GNU Privacy

Guard (GPG) [1]. Este mes daré más deta-

lles acerca de cómo usar GPG – en particu-

lar, cómo administrarlo y personalizarlo,

cómo usar servidores de claves y el papel

de firmar claves y crear una red de con-

fianza.

Sin embargo, en primer lugar, ahí va un

rápido resumen: GPG [2] es una imple-

Continuamos nuestro mini-tuto -

rial sobre el uso de GNU Privacy

Guard para el cifrado y descifrado

de mensajes.

POR BRUCE BYFIELD

Cifrado de mensajes con GNU Privacy Guard – Parte II

Más GPGa ficheros y para la administración de alto

nivel de claves de nuestro llavero; la línea

de comandos de GPG para las claves de

nuestro llavero; y el fichero ~/ .gnupg/

gpg.conf, que establece el comportamiento

por defecto de GPG en su conjunto. Como

cabría esperar, estas herramientas se sola-

pan parcialmente en lo que se refiere a su

funcionalidad, aunque las diferencias entre

unas y otras nos permiten llevar a cabo

varias tareas.

El formato para el comando es gpg

OPCIONES FICHERO o CLAVE. Como des-

cribí en mi artículo del mes pasado, su pro-

pósito general es generar claves, exportar-

las e importarlas y cifrar y descifrar fiche-

ros de texto.

Además, el comando gpg incluye algu-

nas opciones para ver los contenidos de un

llavero. Aparte de las opciones básicas

--list-keys y --fingerprint, también podemos

especificar --list-public-keys y --list-secret-

keys. Este comando es además útil para

borrar claves – usando el formato --delete-

key-nombre o --delete-secret-key nombre.

Sin embargo, si tanto la clave pública

como la privada se encuentran en el lla-

vero, debemos eliminar la clave secreta pri-

mero o bien usar --delete-secret-

Page 65: Linux Magazine 78

and-public-key nombre. También podemos

deshabilitar una clave con --gen-revoke

NOMBRE.

Para modificar una clave pública especí-

fica podemos hacerlo con el comando

gpg --edit-key NOMBRE (Listado 1).

Cuando lo introducimos se nos mostrará

un resumen de la clave asociada con este

nombre – incluyendo quién la ha firmado

y qué grado de confianza tiene. Luego se

muestra el prompt de GPG.

Desde este prompt podemos introducir

varias docenas de sub-comandos, ninguno

de los cuales va precedido de dos guiones.

LINUX USER • Línea de Comandos: GPG (II)

72 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Tampoco tienen efecto hasta que los intro-

ducimos, guardamos y salimos del prompt.

Si deseamos salir sin hacer cambios per-

manentes, escribimos quit y pulsamos n

cuando se nos pregunta si queremos guar-

darlos.

Los subcomandos disponibles en el

prompt varían ampliamente. Por ejemplo,

si introducimos list, se repite la informa-

ción mostrada al principio, y con fpr se

muestra la huella digital de la clave. Lo que

es más importante, podemos editar los

contenidos de la clave. Con expire podre-

mos cambiar su fecha de caducidad, mien-

tras que con passwd cambia la frase de

paso para la clave (Listado 2). También

podemos habilitarla o deshabilitarla, o

cambiar la clave por defecto con primary.

Otra opción especialmente útil es crear

una subclave. Una subclave posee la

mayoría de las características de la clave

que hemos creado con el comando

gpg --gen-key, pero tiene un ID de usuario

diferente y – opcionalmente – una direc-

ción email distinta. Una subclave también

puede ser útil cuando queremos una única

clave para diferentes destinatarios, tales

como una clave para enviar mensajes a

nuestra familia y otra para nuestros amigos

(Listado 3). En lugar de tener que pasar

por el largo proceso que supone generar

una clave diferente completamente, pode-

mos introducir adduid y dar el nombre,

dirección email y frase de paso. Con deluid

NOMBRE la haremos innecesaria, pues la

borra.

Si queremos cambiar el comportamiento

general de GPG podemos editar el fichero

~/ .gnupg/ gpg.conf. Este fichero de

configuración está extensamente comen-

tado, con cada opción explicada detallada-

mente. Podemos usar gpg.conf para cam-

biar la locale para mostrar y cifrar mensa-

jes, para cambiar la localización de los

ficheros o para especificar un fichero con

opciones adicionales (véase la página

man).

Aunque GPG supone que el primer par

de claves que introducimos es la predeter-

minada – es decir, la nuestra – podemos

usar la pantalla default-key para anularla.

También podemos descomentar default-

recipient-self para asegurarnos de que obte-

nemos una copia de cada mensaje que

enviamos. Aunque probablemente no utili-

cemos gpg.conf muy a menudo, debería-

mos considerar editarlo al menos una vez.

Con las configuraciones adecuadas,

gpg.conf puede ayudarnos a conseguir que

01 $ gpg --edit-key Bruce Byfield

02 gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.

03 This is free software: you are free to change and redistribute it.

04 There is NO WARRANTY, to the extent permitted by law.

05

06 Clave secreta disponible.

07

08 pub 2048R/86C27624 creado: 2011-11-05 caduca: nunca uso: SC

09 confianza: absoluta validez: absoluta

10 sub 2048R/61503B0D creado: 2011-11-05 caduca: nunca uso: E

11 [ absoluta ] (1). Bruce Byfield (Esto es de prueba)

<[email protected]>

12

13 gpg>

Listado 1: Edición de Claves

01 gpg> passwd

02 La clave está protegida.

03

04 Necesita una frase contraseña para desbloquear la clave secreta

05 del usuario: “Bruce Byfield (Esto es de prueba) <[email protected]>”

06 clave RSA de 2048 bits, ID 86C27624, creada el 2011-11-05

07

08 Introduzca la nueva frase contraseña para esta clave secreta.

09

10 Repita frase contraseña:

Listado 2: Comando passwd

01 gpg> adduid

02 Nombre y apellidos: Paul Brown

03 Dirección de correo electrónico: [email protected]

04 Comentario: Amiguete

05 Ha seleccionado este ID de usuario:

06 “Paul Brown (Amiguete) <[email protected]>”

07

08 ¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? V

09

10 Necesita una frase contraseña para desbloquear la clave secreta

11 del usuario: “Bruce Byfield (Esto es de prueba) <[email protected]>”

12 clave RSA de 2048 bits, ID 86C27624, creada el 2011-11-05

13

14 pub 2048R/86C27624 creado: 2011-11-05 caduca: nunca uso: SC

15 confianza: absoluta validez: absoluta

16 sub 2048R/61503B0D creado: 2011-11-05 caduca: nunca uso: E

17 [ absoluta ] (1) Bruce Byfield (Esto es de prueba)

<[email protected]>

18 [desconocida] (2). Paul Brown (Amiguete) <[email protected]>

Listado 3: Subclaves

Page 66: Linux Magazine 78

GPG se comporte exactamente como de -

seemos.

Uso de KeyserversUn servidor de claves es exactamente lo

que su nombre indica: un sitio web

público donde se intercambian claves.

Podemos pensar en él como un paso más

en lo que a complejidad se refiere de un

intercambio informal de claves públicas

entre amigos y asociados.

El proyecto GPG mantiene sus propios

servidores, pero la mayoría de los servido-

res de claves son para grupos específicos,

de modo que existe uno para MIT [3] y

otro para Ubuntu [4], por ejemplo. A pesar

de esta especialización, las claves pueden

difundirse ampliamente entre servidores

de claves, de manera que debemos estar

muy seguros de querer difundir las claves

públicas que estamos pensando subir.

Muchos servidores de claves tienen sus

propias interfaces gráficas, aunque GPG en

sí tiene todas las opciones necesarias.

Habitualmente viene con keys.gnupg.net

como servidor de claves por defecto, si

bien podemos añadir el campo key-server a

gpg.conf para cambiar la URL del nuevo

servidor predeterminado quitando el

http:// www.

Para localizar una clave en un servidor

de claves lo hacemos con la opción --

search-keys NOMBRE. Una vez que hemos

localizado la clave pública que buscamos,

usamos --recv-keys NOMBRE para descar-

garla a nuestro llavero o --send-keys NOM-

BRE para subirla al servidor.

Firmas y Webs deConfianzaSi intercambiamos mensajes cifrados con

poca gente, entonces presumiblemente

podemos confiar en que son quienes dicen

ser. Pero ¿qué ocurre si de repente necesita-

mos una correspondencia cifrada con un

amigo de un amigo o un completo desco-

nocido? ¿Cómo sabemos que nuestro

nuevo corresponsal es de confianza?

Nuestra decisión sobre si confiar en

alguien probablemente esté basada en ele-

mentos que van más allá de los límites de

cualquier aplicación de software. Sin

embargo, GPG incluye funcionalidades que

nos facilitan resolver estos problemas. Una

de dichas funcionalidades es la capacidad

de firmar claves públicas de otra gente.

Basándonos en quién ha firmado una

clave, podemos decidir que la persona a la

que pertenece es quien dice ser (Listado 4).

De manera similar, si nosotros firmamos

la clave de otro, estaremos ayudando a ter-

ceros a decidir si pueden confiar en la

clave. Estas son dos de las razones por las

que la firma de claves sea una tradición en

muchos encuentros Debian. En persona,

podemos asegurar más fácilmente la iden-

tidad de alguien. Evidentemente, la firma

de claves también nos da una razón para

presentarnos a desconocidos.

Podemos firmarlas de distintas maneras.

Cuando se trate de una clave exportada, el

comando es gpg -s FICHERO o gpg --sign

FICHERO. Si la clave que estamos firmando

se exportó a un fichero binario, usare-

mos --detach sign o -b para colocar nuestra

firma en un fichero de firmas adjunto.

Desde el prompt gpg, introducimos sign

para dejar una firma para la clave pública

que estamos editando.

Si confiamos plenamente en el titular de

la clave, también podemos usar nrsign

para crear una firma no revocable. De

manera similar, si la firma sólo es para

nuestros propósitos y no queremos la res-

ponsabilidad de declarar la fidelidad del

propietario de la clave, podemos usar

lsign. También podemos combinar los pre-

fijos para introducir un comando como

nrlsign.

Cuando deseamos ver si una clave

exportada ha sido firmada, el comando es

gpg - verify FICHERO (Listado 5). Para ver

una lista de firmas usamos la

opción --check-sigs. Desde el prompt, el

comando es check.

Para ayudarnos más a tomar decisiones

sobre los titulares de las claves, GPG usa el

concepto de confianza en el prompt de

GPG para especificar el nivel de confianza

que tenemos (Listado 6). Introduciendo el

subcomando trust podemos clasificar la

confianza de 1 (no sé o no quiero compro-

meterme) a 5 (confío en última instancia).

Esta información se almacena en la base

de datos de confianza que está instalada en

~/ .gnugp cuando comenzamos a usarla.

La definición exacta de cada nivel puede

ser subjetivo (por ejemplo, ¿cuál es la dife-

rencia entre confiar plenamente y confiar

en última instancia?), pero, aunque sea

imprecisa esta clasificación, aún nos ayuda

a indicar cuánto confías en una clave o en

su propietario (una distinción que no siem-

pre es clara en GPG).

La firma de claves y la confianza se utili-

zan por GPG para crear una “red de con-

fianza” – una lista de conexiones que

sugieren fiabilidad general. Los detalles de

una red de confianza dependen de cómo

Línea de Comandos: GPG (II) • LINUX USER

73Número 78W W W . L I N U X - M A G A Z I N E . E S

01 gpg> sign Linux Magazine

02

03 pub 1024D/28C77251 creado: 2004-12-23 caduca: nunca uso: SC

04 confianza: desconocido validez: desconocido

05 Huella de clave primaria: B0EA 732B 6DF1 4767 9B5C 55FE FAC7 4165 28C7

7251

06

07 Linux Magazine (Linux New Media) <[email protected]>

08

09 ¿Está realmente seguro de querer firmar esta clave

10 con su clave: “Paul Brown (Amiguete) <[email protected]>”

(86C27624)?

11

12 ¿Firmar de verdad? (s/N) s

13

14 Necesita una frase contraseña para desbloquear la clave secreta

15 del usuario: “Paul Brown (Amiguete) <[email protected]>”

16 clave RSA de 2048 bits, ID 86C27624, creada el 2011-11-05

Listado 4: Firma de Claves

01 $ gpg --verify LM.gpg.gpg

02 gpg: Firmado el vie 02 dic 2011 23:57:05 CET usando clave RSA ID 86C27624

03 gpg: Firma correcta de “Paul Brown (Amiguete) <[email protected]>”

04 gpg: alias “Bruce Byfield (Esto es de prueba) <bbyfield@nan-

day.com>”

Listado 5: Verificación de claves

Page 67: Linux Magazine 78

entre éste y el del mes pasado ya tenemos

información suficiente para manejar situa-

ciones cotidianas. Si necesitamos más,

siempre podemos consultar la página man.

Nótese, sin embargo, que la documenta-

ción para el proyecto es generalmente más

completa, especialmente porque nos ofrece

más información de fondo que necesita-

mos para comprender GPG [5].

Incluso así, si nuestra meta es com-

prender GPG completamente, pasaremos

horas con sus herramientas. GPG es una

aplicación compleja incluso para lo que es

normal en la línea de comandos, y aún

tiene una clasificación baja en lo que a

usabilidad se refiere, incluso a pesar de

que sus limitaciones se empezaron a dis-

cutir por primera vez hace más de una

década [6].

Dada la complejidad de GPG y lo poco

amigable que es para el usuario, antes o

después probablemente nos preguntaremos

si aprender más merece la pena. Evidente-

mente, la respuesta depende de lo impor-

tante que sea para nosotros la capacidad

para enviar mensajes cifrados (y en algu-

nos casos, si GPG es legal en nuestro país).

Sólo nosotros tenemos la respuesta.

Pero, para algunos, merece la pena indicar

que GPG no es simplemente una utilidad,

sino parte de un contexto social geeky. El

intercambio de claves públicas, sin decir

nada de la firma de claves, puede ser un

momento importante de aceptación en una

comunidad.

De hecho, el uso de GPG se ha llegado a

formalizar en numerosos sitios a través del

software libre. En el proyecto Debian, por

ejemplo, la propuesta de una clave pública

y de quién la ha firmado son pasos impor-

tantes en la aplicación para llegar a ser

nuevo mantenedor: como parte del pro-

ceso de presentación de candidaturas, los

aspirantes a nuevos mantenedores deben

presentar una clave firmada por dos man-

tenedores ya existentes [7].

Este proceso constituye un medio de

identificación práctico. Pero en Debian, la

firma de claves se ha convertido en un

importante rito social. Tanto es así, que

GPG probablemente aún sería importante

incluso si no existiera la necesidad de

identificar a la gente formalmente. En pro-

yectos como Debian, GPG ha ido mucho

más lejos, siendo una útil aplicación y lle-

gando a formar parte de la cultura de sus

usuarios. Bajo este contexto, si no enten-

demos lo básico de GPG, el riesgo del

ostracismo se convierte en una posibilidad

muy real. �

esté compilado GPG, aunque general-

mente tiene una profundidad limitada. Es

decir, si GPG se configuró para permitir

una profundidad de tres, alguien separado

de nosotros por cuatro conexiones no

podría validar una clave.

Una confianza parcial cuenta menos que

una confianza total. Típicamente, se necesi-

tan dos o tres personas que marquen una

clave como parcial para igualar una persona

en la que se confía totalmente. Podemos ver

cómo se lleva la cuenta de la confianza intro-

duciendo gpg --check-trustdb. La respuesta

muestra qué índices de confianza parciales

igualan a un índice de confianza completa,

el alcance, el número de claves firmadas y

los niveles de confianza en uso (Listado 7).

El Contexto SocialDos artículos no son suficientes para expli-

car GPG completamente. Sin embargo,

LINUX USER • Línea de Comandos: GPG (II)

74 Número 78 W W W . L I N U X - M A G A Z I N E . E S

[1] “Línea de Comandos: GPG” por

Bruce Byfield, Linux Magazine – Edi-ción en Castellano número 77.

[2] GnuPG: http:// www. gnupg. org

[3] Servidor de claves MIT: http:// pgp. mit. edu/

[4] Servidor de claves de Ubuntu:

http:// keyserver. ubuntu. com:11371/

[5] Documentación GnuPG: http:// www. gnupg. org/ documentation/

[6] “Usability of Security: A Case Study”

por Alma Whitten and J. D. Tygar, Car-

negie Mellon University, Diciembre

1988: http:// reports-archive. adm. cs. cmu. edu/ anon/ 1998/ abstracts/ 98-155. html

[7] Rincón de Desarrolladores Debian:

http:// www. debian. org/ devel/ join/ nm-step2

RECURSOS

01 gpg> trust

02 pub 1024D/28C77251 creado: 2004-12-23 caduca: nunca uso: SC

03 confianza: desconocido validez: desconocido

04 sub 1024g/B55ACCE2 creado: 2004-12-23 caduca: nunca uso: E

05 [desconocida] (1). Linux Magazine (Linux New Media) <subs@linux-

magazine.com.es>

06

07 Por favor, decida su nivel de confianza en que este usuario

08 verifique correctamente las claves de otros usuarios (mirando

09 pasaportes, comprobando huellas dactilares en diferentes fuentes...)

10

11

12 1 = No lo sé o prefiero no decirlo

13 2 = NO tengo confianza

14 3 = Confío un poco

15 4 = Confío totalmente

16 5 = Confío absolutamente

17 m = Volver al menú principal

18

19 ¿Su decisión? 4

20

21 pub 1024D/28C77251 creado: 2004-12-23 caduca: nunca uso: SC

22 confianza: total validez: desconocido

23 sub 1024g/B55ACCE2 creado: 2004-12-23 caduca: nunca uso: E

24 [desconocida] (1). Linux Magazine (Linux New Media) <subs@linux-

magazine.com.es>

25 Por favor, advierta que la validez de clave mostrada no es necesariamente

26 correcta a menos de que reinicie el programa.

Listado 6: Niveles de Confianza

01 $ gpg --check-trustdb

02 gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias,

03 modelo de confianza PGP

04 gpg: nivel: 0 validez: 1 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 1u

Listado 7: Comprobación Base Datos de Confianza

Page 68: Linux Magazine 78

Konsultorio • COMUNIDAD

75Número 78W W W . L I N U X - M A G A Z I N E . E S

4. ¿Errores de lectura del disco de instala-ción? Aunque me dijo que ha probadovarias veces con distros diferentes, sudispositivo de CD-ROM podría estardañado, de manera que no puede leerlos datos correctamente después deestar funcionando durante un rato. Aveces incluso se puede oír cómo lacabeza lectora se mueve de un lado aotro para intentar localizar un sector. Enese caso, puede intentar repetir la insta-lación desde un lector de CD (o DVD)por USB. Si la máquina no permite elarranque desde USB, puede probar acopiar de nuevo el medio de instalación,poner ambas copias en cada medio ysacar la primera del dispositivo internoen cuanto se carguen el kernel y la ram-disk inicial. El pequeño sistema de laramdisk debería ser capaz de encontrarel dispositivo USB externo y continuar lainstalación desde él.

5. ¿No se puede montar el sistema dearchivos raíz? Si la instalación finalizacorrectamente pero el sistema fallainmediatamente después del primerarranque, lo más frecuente es que sedeba a un mensaje que dice “cannotmount root file system”. Suele ocurrircuando el instalador no es capaz de aña-dir todos los módulos para activar elcontrolador del disco duro. Es un fallodel instalador que tiene difícil solución.Quizá tenga que compilar su propio ker-nel para que contenga el módulo nece-sario y añadirlo al sistema instaladoarrancando en modo rescate desde elCD de instalación, para luego iniciar unaterminal chroot en el sistema previa-mente instalado.

6. ¿Error en un driver de hardware? Unavez más, si la instalación finalizó correc-tamente y el sistema falla incluso antesde intentar acceder al sistema de archi-

repentino o un simple número por panta-lla. ;-)

Pido disculpas si las típicas sospechassuenan algo primitivas, pero me aventu-raré …1. ¿Falta de memoria? Si el proceso de ins-

talación necesita más memoria física dela que la máquina dispone, especial-mente si no se ha creado aún ningunapartición swap, el kernel va matandoprogramas de manera más o menos ale-atoria (probablemente el instalador) ymuestra un mensaje del tipo “no moreprocesses in this runlevel”.

2. ¿RAM defectuosa? Suele provocar reini-cios repentinos de la máquina o corrom-per los datos que se leen o escriben encualquier medio. En el mejor de loscasos, el kernel muestra diferentes men-sajes de error indicando que la longitudde los datos en la memoria no es laesperada. Lo más probable es que NOreciba nunca un mensaje que diga “laRAM es defectuosa”, a menos que elchipset de la máquina incorpore algúnmecanismo de detección y correcciónde errores de memoria.

3. ¿Problemas con el disco o el controla-dor? Si falla la lectura de algún archivoen un punto crítico del proceso de insta-lación, como por ejemplo para la activa-ción de módulos del kernel modules(drivers) para algún hardware, o a lahora de desempaquetar la ramdisk delsistema base o alguna librería, lo másprobable es que el sistema se detenga yel kernel informe de que no se puedemontar el (nuevo) sistema de archivos oque falló init. Puede deberse a un discodefectuoso, a un controlador de discocon el DMA en mal estado, o simple-mente a un cable defectuoso o un con-tacto en el conector en el caso de unamáquina más antigua.

ELCONSULTORIODE KLAUS

Klaus Knopper es el creador de

Knoppix y co-fundador de la

LinuxTag Expo. En la actuali-

dad trabaja como profesor,

programador y consultor. Si

tiene algún problema de

configuración, o simplemente

quiere conocer mejor cómo

funciona Linux, no dude en

escribir sus preguntas a:

[email protected]

El Kernel de Fedora FallaMe gusta el aspecto de Fedora y heintentado instalar varias versiones,

desde la Fed 10 a la Fed 14, pero siempre,después de instalar, me muestra un men-saje de error del kernel unos segundosantes de iniciar el sistema operativo. Unavez, con una versión de Fedora, me mos-tró el mensaje durante la propia instala-ción, y el proceso se detuvo. Curioso perofrustrante a la vez, ¿sabe usted por qué mefalla tanto Fedora? John Bennetto

Hubiera estado bien disponer delmensaje de error que menciona. El

motivo es porque es más sencillo encon-trar el problema con él que con un reinicio

Page 69: Linux Magazine 78

COMUNIDAD · Konsultorio

76 Número 78 W W W . L I N U X - M A G A Z I N E . E S

vos raíz, o DESPUÉS de montar el sis-tema de archivos raíz (en ese caso apa-rece algo como “init verstion xxx star-ting …”), entonces el problema es queun driver de hardware que NO era nece-sario durante la instalación pero quearranca en el sistema instalado, comopor ejemplo un driver gráfico, podríahaber fallado. Dependiendo de la causadel fallo (aquí resulta de gran ayuda elmensaje de error concreto), se puedeintentar deshabilitar el driver defec-tuoso editando las opciones de arranquedesde el cargador de arranque (en elcaso de GRUB, se hace presionando latecla e de “edit” y añadiendo las opcio-nes a la línea de KERNEL). Las más típi-cas son

linux acpi=off noapic U

nolapic nomodeset nodma

pero una vez localizado el driver queprovoca el problema, se debe quitar elresto, porque de lo contrario se puedeacabar con un disco duro insufrible-mente lento (nodma) o con componen-tes de hardware que no funcionan (porcausa de acpi=off, que se puede reem-

plazar por la menos invasivaacpi=noirq).

7. De verdad que me hubiera gustadosaber lo que decía ese mensaje de errordel kernel … ;-)

Gráficos BorrososLos gráficos se ven borrososcuando trato de ejecutar el Live CD

que venía con la Especial Linux Shell 1

[Knoppix 6.7]. No estoy muy familiarizadocon Linux y pensé que me podrías ayudaro darme alguna indicación.

Gracias por tu tiempo. Jared.Lo cierto es que algunas tarjetasgráficas están mejor soportadas

que otras. Debido a la falta de un estándarcomún, los fabricantes suelen añadir “fun-ciones especiales” que mejoran las esta-dísticas de sus tarjetas, pero a cambio, lashacen incompatibles con versiones ante-riores de las mismas. El subsistema gráficode Linux está compuesto por una parte decomponentes del kernel para los driversde hardware y una parte en espacio deusuario para los drivers de software (Tabla1) que soporta la mayoría (pero pocasveces todas) las funciones de un chipsetdado.

Depende totalmente del modelo de tar-jeta gráfica y de cómo de bien funcionecon los drivers, con aceleración y sin ella(framebuffer, VESA). Una estimación apro-ximada es: si la tarjeta es mucho másnueva que el kernel y que los drivers deXorg en uso, probablemente no esté biensoportada aún y no funcionen bien algu-nas funcionalidades como el 3D, la resolu-ción de la pantalla no se maneje correcta-mente, o la pantalla parpadee al no esta-blecerse correctamente las frecuencias delmonitor.

Con el fin de no tener que tirar la toalla yesperar a una nueva versión de kernel o deXorg, se suelen utilizar algunos trucos quepermiten usar estas tarjetas, aunque seacon unos gráficos lentos o de baja calidad.

Una característica específica de Knoppixes que deshabilita la extensión “Compo-site”, la cual se encarga de manejar lastransparencias y que, aunque atractivavisualmente, consume muchos recursos ysólo es útil para efectos ajenos al trabajodiario productivo. Esta extensión se puededeshabilitar con los códigos

knoppix no3d

o

knoppix nocomposite

Si con ello no bastara, puede probar con elmodo VESA sin aceleración:

knoppix xmodule=vesa

Y si tampoco fuese suficiente, puede inten-tarlo con los modos VESA framebuffer deresolución fija,

fb800x600

o

fb1024x768

o

fb1280x1024

esta vez sin el knoppix delante.Cabe aclarar que en el modo VESA fra-

mebuffer, sólo están soportadas algunasresoluciones, entre las que no se encuentrael modo “widescreen”. Lo mejor de todo esque estos pequeños trucos funcionan concasi todas las tarjetas, incluso con aquellas

Tabla 1: Módulos del Kernel y Módulos de Xorg

01 (Reading database … 10%dpkg: unrecoverable fatal error, aborting:

failed in buffer_read(fd): files list for package `xinput’: Input/

output error

02

03 E: Sub-process /usr/ bin/ dpkg returned an error code (2)

04

05 dpkg: warning: files list file for package `xinput’ missing, assuming

package has no files currently installed

06

07 dpkg: warning: files list file for package `xbk-data’ missing,

assuming package has no files currently installed

08

09 […logs truncated, you can probably delete most of the above, too…]

Listado 1: Errores xinput y xkb-data

Tarjeta Módulo del kernel Módulo de Xorg

Intel i915 intel

ATI/ AMD radeon radeon or ati

NVidia nouveau (libre), nvidia (priva-

tivo)

Nouveau (libre) o nvidia

(priva tivo), nv (libre pero

actualmente sin desarrollo)

Drivers Accelerated acelera-

dos (varios)

cirrusfb, neofb, … fbdev (framebuffer sólo) o cir-

rus, neomagic, … (con acele -

ración)

Genérico Modo VESA

(interno en el kernel)

vesa

Page 70: Linux Magazine 78

Konsultorio • COMUNIDAD

77Número 78W W W . L I N U X - M A G A Z I N E . E S

que no están soportadas en absoluto porlos módulos que disponen de aceleracióngráfica.

Problemas Arrancandodesde Pendrive USB

Hola Klaus: tengo una UbuntuLucid 10.04 LTS en un pendrive

USB. El kernel que usa es un linux-image-2.6.32-26-generic. La lista completa de ker-nels es linux-generic, linux-image-2.6.32-24-generic, linux-image-2.6.32-25-generic,linux-image-2.6.32-26-generic y linux-image-2.6.32-30-generic. He estado arran-cando el sistema desde USB en unos portá-tiles Dell D420 y Lenovo X201s.

Lo que ahora quiero hacer es actualizarmi sistema para que use la última versiónde kernel con el fin de aligerar/ aliviar elsistema, pero, por algún motivo, el sistemano funciona correctamente. Mis atajos deteclado no funcionan en absoluto (el escri-torio o las ventanas no pueden rotar). Heprobado a hacer

apt-get update

apt-get upgrade

apt-get dist-upgrade

y me he encontrado con un problema condos paquetes, xinput y xkb-data. Al tratarde reinstalarlos, recibo algunos mensajesde error (Listado 1), y también cuandointento eliminarlos. Al intentar actualizarel sistema me dice:

Squashfs error: Unable to U

read page, block,U

Unable to read fragment U

cache entry

La información sobre el espacio de discoutilizado se puede ver en los listados ane-xos. También he adjuntado logs de lossiguientes archivos:

$ ls -l /var/log

/var/log/syslog

/var/log/messages

/var/log/daemon.log

kernel_boot.txt

Agradecería enormemente tu ayuda. Gib-son

La parte más significativa de esoslogs es el extracto que se muestra

en el Listado 2.Significa que la parte comprimida de

sólo lectura (SquashFS) del sistema de

archivos Live estáincompleta. Puede serporque no se copióbien la primera vez,porque se haya rees-crito después acciden-talmente, o porque eldispositivo USB tengaproblemas de lectura(en ese caso DEBE-RÍAN aparecer erroresen el log del kernel enforma de “block readerrors”, pero no se veninguno).

Los errores de lecturadesde el sistema dearchivos original pueden derivar en erro-res de todo tipo. Para la instalación de nue-vos paquetes hay que leer antes variosarchivos de la base de datos de informa-ción de paquetes de Debian/ Ubuntu, demanera que se conozcan los metadatospara su posterior almacenamiento. Estepaso siempre falla en sus intentos poractualizar ciertas partes del servidor deXorg; no tiene que ver con los paquetesque está intentando instalar, sino que ocu-rrirá cada vez que el sistema intente leerdesde el sistema de archivos SquashFSroto.

La única solución que se me ocurre esreemplazar el archivo SquashFS defec-tuoso con el sistema parado, por ejemplodesde un sistema distinto, y verificar lasuma checksum del archivo antes deintentar reiniciarlo.

Seguridad de mi Servidor¡Hola Klaus! Estoy tratando de ins-talar y configurar un servidor. La

idea es que haga de servidor de archivos ypuede que de cliente de BitTorrent. Estabapensando en montar un Ubuntu Server yusar FTP para acceder a los archivos.

Sin embargo, mi principal preocupaciónes cómo mantenerlo seguro. En estemomento no estoy seguro de si hacer quesea accesible desde Internet o sólo desde

mi red local. ¿Qué pasos debería llevar acabo para que sea lo más seguro posibleen ambos casos, tanto en el sistema en sícomo en la pasarela de acceso a la red?

En lo que respecta al cliente de BitTo-rrent, ¿hay alguna forma de restringir lostorrents que se ejecutan por tracker? Noquiero acabar compartiendo nada sospe-choso. Y otra pregunta, ¿crees que esmejor usar alguna otra distro más especí-fica para esto? ¡Gracias! Ashwin

Excepto para el acceso público desólo lectura, no es recomendable

usar FTP para servir archivos, principal-mente porque las contraseñas viajan sincifrar. Al menos para las subidas y todoslos accesos personales, yo recomendaríaalgún servicio cifrado como SSH, SSHFS oHTTPS con autenticación.

Para estar seguro de que no hay ningúnservicio accesible desde el exterior, apartede los que elija, puede usar las reglas deiptables que se muestran en el Listado 3,suponiendo que sea eth0 la interfaz de redexterna.

La primera regla crea un nuevo destinoDESDEINTERNET, a la que se pasa cadavez que un paquete llega a través de eth0

(segunda regla). La tercera regla permite lavuelta de todo el tráfico generado en lasconexiones que ha iniciado el propio servi-dor, de manera que las descargas hechas

01 May 16 22:54:37 ubuntu kernel: [ 1515.600386]

SQUASHFS error: squashfs_read_data failed to read

block 0x190bfa

02 May 16 22:54:37 ubuntu kernel: [ 1515.600389]

SQUASHFS error: Unable to read fragment cache

entry [190bfa]

03 May 16 22:57:41 ubuntu kernel: [ 1700.384133]

SQUASHFS error: zlib_inflate error, data probably

corrupt

04 May 16 22:57:41 ubuntu kernel: [ 1700.384139]

SQUASHFS error: squashfs_read_data failed to read

block 0x190bfa

05 ...

Listado 2: Extracto de la Salida desyslog.txt

01 iptables -N DESDEINTERNET

02 iptables -I INPUT -i eth0 -j DESDEINTERNET

03 iptables -A DESDEINTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT

04 iptables -A DESDEINTERNET -p tcp -m multiport --dports

21,22,443,6881:6889 -j ACCEPT

05 iptables -A DESDEINTERNET -p icmp --icmp-type echo-request -j ACCEPT

06 iptables -A DESDEINTERNET -j REJECT

Listado 3: Reglas de iptables

Page 71: Linux Magazine 78

algo en la máquina en comparación conotras distros Live:1. sudo funciona, así sin más2. Knoppix detecta todos los discos y

añade las entradas a /etc/fstab.Supongo que son cosas muy simples,

¡pero son tan útiles! Gracias una vez más ymis mejores deseos para el futuro. Salu-dos, Jeremy

PS: ¿Qué tal una versión DVD de 64 bits?Gracias por sus amables comenta-rios. Knoppix no es más que una

Debian preconfigurada. Desde que decidíque no era buena idea distribuirla con con-traseñas preestablecidas, no hay ningunacontraseña predefinida. Las únicas formasde hacerse root es con una terminalabierta en la que ya se sea root (consola detexto), o usando sudo sin contraseña.

El script que se encarga de poblar/etc/fstab se escribió cuando aún no exis-tían HAL ni udev. Ahora el script(rebuildfstab) lo ejecuta directamenteudev durante la detección de particionespara que los sistemas de archivos se pue-dan montar fácilmente usando las entra-das del archivo /etc/fstab, sin tener quellamar a HAL o udisks, ni tener que ejecu-tar el gestor de archivos con permisos deroot.

En cuanto al DVD en versión de 64 bits:por desgracia, no puedo mantener las ver-siones de 32 y 64 bits en paralelo, peroahora que junto al kernel de 32 bits seincluye en Knoppix también el de 64 bits,quizá sea más fácil crear derivados con unentorno de 64 bits puro usando Debian-amd64 como base y copiando los scriptsde arranque y las configuraciones deKnoppix.

Disco DuroQuerido Klaus: Gracias por deleitar-nos con tu talento. Aparte de 12.2

Slackware, Fedora 14 y Ubuntu 11.04 (ade-más de Kubuntu 10.10 durante algúntiempo) como sistemas operativos, mislíos también han tenido que ver con el car-gador de arranque GRUB 2. Al reiniciarcon el botón hardware de la máquina,tengo que esperar hasta que expire algúncontador, esperar a que la BIOS termine dereconocer el disco duro o reiniciar por soft-ware inmediatamente conCtrl+Alt+Supr. Muchas veces el LED deldisco duro continúa encendido y puedoesperar sentado. Conseguí arreglarlo porun tiempo con update-grub, pero final-mente pude instalar el antiguo GRUB (gra-

cias a la ayuda de Linux Magazine); des-pués de un tiempo, volvió a ocurrir.

La última vez, apagué el sistema rápida-mente y fsck reparó el sistema de archivosext3 dañado. ¿Qué está ocurriendo? Unavez se me apagó el sistema automática-mente sin previo aviso ¡y se reinició al pul-sar una tecla al azar! ¡La prueba de algúnbot zombi! Además, otra vez, ejecutandotop, me pareció ver un “rtkit-daemon”.¿Podrías explicarme todo esto?

La esencia de GNU/ Linux es la libertad.¿Cómo puedo evitar las trampas que con-vierten a mi sistema en un esclavo? Ya hehecho dd /dev/zero sobre mis discos durosde 200GB, pero los retardos en el arranquevuelven una y otra vez. Suelo usar Firefox,que ya es lo bastante popular como paraconvertirse en una pieza codiciada. ¿Ayu-daría eliminar mi partición DOSe? ¿Debe-ría hacer dd /dev/zero sobre todos mispendrives USB? Ya empiezo a desconfiarincluso de dd.

De un usuario de Linux abrumado, Wil-fred

En lo que respecta al “rtkit-dae-mon”, he de prevenirte de que NO

significa “rootkit daemon”, como parecescreer; “rt” significa “real-time (schedu-ler)”. Es una herramienta de ayuda paradotar al kernel de una extensión paratiempo real [1].

Francamente, desconozco la razón porla cual la máquina se reinicia repentina-mente o se modifica el cargador de arran-que por arte de magia, pero tiene pintamás bien de un problema de hardware, uncable defectuoso o problemas de RAM. Enel caso de problemas de software/ kernel,suelen aparecer mensajes de error del ker-nel indicando que se produjo un fallo odando algún “panic”. El sobrecalenta-miento de la CPU o de otras partes delchipset por culpa de algún ventiladorestropeado también podrían ser la causadel problema. Otra posibilidad es que lafuente de alimentación esté fallando y pro-voque oscilaciones en el nivel de potencia,lo que podría dar lugar a cuelgues o reini-cios de los discos duros y de otros periféri-cos. Son errores difíciles de encontrar si noes experimentando con las distintas partesdel hardware para ver cuándo se produceel problema. �

desde el servidor, las consultas DNS, etcé-tera, funcionen. La cuarta regla abre lospuertos 21 (FTP), 22 (SSH), 443 (HTTPS) y6881 a 6889 (torrent) para que los clientesde Internet puedan acceder a los serviciosofrecidos por el servidor. Si su intención esusar el cliente de torrent en modo sólo-cliente, probablemente quiera eliminar elrango 6881:6889 para que los intentos dedescarga provenientes de los clientesesclavos sean bloqueados mientras usteddescarga. La quinta regla le permite com-probar desde el exterior si el servidor estáactivo o no. Y la última regla impide cual-quier otra conexión entrante con un men-saje ICMP connection refused. Si le preocu-pan los ataques de tipo flood, puede usarDROP en lugar de REJECT, que hace que elservidor parezca “muerto” y no conteste aningún intento de conexión excepto aaquellos dirigidos a los puertos permiti-dos.

Si tanto el servidor como el proveedorsoportan IPv6, deberá aplicar estas mis-mas reglas con ip6tables o, alternativa-mente, deshabilitar IPv6 para que nadie sesalte las reglas aplicadas a IPv4 utilizandoIPv6 para llegar hasta el servidor.

Si quiere ofrecer HTTP sin cifrar paraproporcionar acceso anónimo a los archi-vos, deberá abrir también el puerto 80.

Además de todo esto, puede que quierapermitir conexiones FTP pasivas, para locual tendrá que cargar el módulo de kernelip_conntrack_ftp con objeto de que lasconexiones FTP entrantes puedan accedera puertos aleatorios para establecer lacomunicación de datos. Esto por supuestoes un riesgo de seguridad potencial, por loque mi recomendación es la de no usarFTP en absoluto y que todas las descargasse hagan a través de HTTP(S):.

Knoppix es una PasadaHola Klaus, sólo quiero agradecertetodo el trabajo hecho con Knoppix

y hacerte saber lo mucho que lo aprecio.Un par de cosas. Hace unos años, me lopasé genial y aprendí un montón sobreLinux creando mi propia distro Livebasada en Knoppix (llamada JNX). Dehecho, ¡pasé más tiempo y me divertí máspersonalizándola que usándola! Knoppixcambió mi vida.

Hoy me he cargado mi máquina Linuxprincipal y Knoppix 6.5 me ha salvado lavida (una vez más). Hay un par de cosasque quizá te parezcan triviales, pero quefacilitan mucho todo a la hora de arreglar

COMUNIDAD · Konsultorio

78 Número 78 W W W . L I N U X - M A G A Z I N E . E S

[1] rtkit: http:// packages. ubuntu. com/

lucid/ rtkit

RECURSOS

Page 72: Linux Magazine 78

COMUNIDAD · Blogs: Para Mamá

80 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Mi madre, la célebre mitad del

equipo “Mamá y Papá (TM)”,

murió el 7 de marzo del 2011.

He escrito y hablado muchas veces

sobre mi madre y mi padre y de su tradi-

cional incapacidad para hacer frente a la

tecnología orientada a los dispositivos,

lo cual es tremendamente irónico al ser

su hijo más joven adicto de toda la vida

a cualquier cosa técnica.

Hace cuarenta años, si trabajabas con

un ordenador, lo normal es que tuvieras

un título universitario en ciencias de la

computación (o en lo que se convirtió

ciencias de la computación), tal vez un

máster o incluso un doctorado. Si no

podías entender lo que estaba mal con

tu programa o el sistema, podías pregun-

tar a la persona sentada en el cubículo

de al lado, que tenía un nivel similar al

tuyo. Con el tiempo compartido comen-

zaron a aumentar el número de mainfra-

mes, pero aún así, sólo personas forma-

das instalaban el software, configuraban

la red y realizaban las copias de seguri-

dad. En esencia, se hacían cargo de “la

máquina” por ti. El equipo de soporte

con el que se trabajaba en esos días tam-

bién era atendido por titulados en cien-

cias de la computación.

Luego, hacia 1977, tanto Bill Gates

como Steve Jobs pusieron mainframes

en las mesas de todos, y se esperaba que

cada uno fuera capaz de cuidarlo por si

mismo. Es cierto que a los mainframes

se les llamaba “ordenadores personales”

y que los sistemas operativos eran sim-

ples en comparación con los de las

monstruosas unidades centrales de la

época, pero todavía se necesitaba insta-

lar el software, hacer copias de seguri-

dad y configurar las redes. Pasó el

tiempo y la tecnología se hizo más com-

pleja y el equipo de soporte que necesi-

taba el usuario final “Mamá y Papá” se

trasladó más y más lejos, hasta que

finalmente la persona a la que llamabas

se encontraba en un país extranjero.

Ya no podías ir tan fácilmente con el

problema a alguien y sentarte a averi-

guar qué estaba mal. En vez de eso, a

menudo primero se te preguntaba si

estabas sosteniendo el ratón correcta-

mente o si acababas de reiniciar el sis-

tema. La “ayuda” se volvía más centrali-

zada en nombre de la “eficiencia” (y

rentabilidad) para las personas y las

empresas que la prestan.

La mayoría de las grandes empresas

tenían sus propios equipos de soporte,

pero las pequeñas y los particulares no.

En la mayoría de los países, las peque-

ñas y medianas empresas constituyen

una gran parte del producto interior

bruto (incluso más con el agregado agrí-

cola), y no suelen tener la ayuda profe-

sional que necesitan. Conozco a un

ingeniero eléctrico que dirige su propia

empresa y que normalmente pasa al

menos tres horas por semana cuidando

de tres de sus ordenadores. Por

supuesto, el software que utiliza es

sofisticado, pero él preferiría pasar esas

tres horas semanales dirigiendo su nego-

cio. A partir de este ejemplo, suponga-

mos que cada usuario final de un orde-

nador de sobremesa gasta 15 minutos al

día, a un coste de cinco dólares,

haciendo lo que podría considerarse

“tareas no esenciales” para el negocio.

Esto significa que los (aproximada-

mente) 125 mil millones de ordenadores

de sobremesa malgastan 6.250 millones

de dólares al día. Si se estima que 300

“trabajadores del conocimiento” pierden

15 minutos al día, es como si nueve per-

sonas nunca se presentaran a trabajar.

Muchos creen que la computación en

nube soluciona este problema. La gente

que utiliza software “en la nube” tendrá

a otras personas que le arreglen las apli-

caciones, elimine los virus, haga las

copias y demás, pero incluso si el sis-

tema funcionase perfectamente, el soft-

ware que están utilizando esas personas

no está hecho a la medida de sus necesi-

dades. Tendrán que cambiar la forma en

la que trabajan para amoldarse al soft-

ware, y esto creará ineficiencia en sus

negocios.

Vivimos en un mundo cada vez más

diverso. Dar soporte a los 5 (o incluso

50) idiomas principales del mundo no es

suficiente y ¿cómo van a poder influir

las pequeñas comunidades de varios

cientos de personas en empresas que tie-

nen que satisfacer las necesidades de

miles de millones? He oído muchas

veces a representantes de las grandes

compañias declarar que implementar

cierta característica o realizar un cambio

en su software no era “lo mejor para los

intereses de su negocio”, haciendo caso

omiso de lo que es mejor para los intere-

ses de sus clientes. Como el software era

de código cerrado, los clientes no

podían tomar sus propias decisiones

empresariales sobre la manera de usar el

software existente o cambiarlo para

satisfacerlas mejor.

Necesitamos parar la producción

masiva del software como producto,

cambiarlo por la venta de un servicio y

volver a introducir el concepto de la

venta de desarrollo de software, en el

que se adapta el software como un servi-

cio, para satisfacer las necesidades del

usuario final. De esta manera, el control

del software podrá por fin volver a

manos del cliente. �

PARA MAMÁUn cambio de vida hace que maddog revisite el soporte para sus usua-

rios finales tipo “Mamá y Papá” y pondere un modelo de negocio dife-

rente para los desarrolladores de software.

POR JON “MADDOG” HALL

Page 73: Linux Magazine 78

PRÓXIMO NÚMEROPRÓXIMO NÚMERO©

Ph

oo

san

i-foto

lia.c

om

HERRAMIENTAS

WEB

A LA VENTA: FEBRERO 2012

82 Número 78 W W W . L I N U X - M A G A Z I N E . E S

Ya puedes seguir el día a díade lo que sucede en elmundo de GNU/ Linuxconectando con las noticiasdiarias en nuestro Facebook:

http:// www. facebook. com/ linuxmagazine.

y Twitter:

http:// twitter. com/ linux_spain

También puedes recibir noti-cias de lo que te espera enlos si guientes números deLinux Maga zine, así comoofertas, regalos y novedadessubscribiéndote a nuestroboletín en http:// www. linux-magazine. es/ Readers/ Newsletter.

Las más recientes tecnologías webvienen cargadas con nuevas her-ramientas, nuevas técnicas, nuevosdispositivos y nuevos modelos denegocios... Parece un buen momentopara repasar el mundo cambiante dela administración y desarrollo web. Elmes que viene veremos algunas de lasherramientas más importantes uti-lizadas en la actividad para la creacióny administración de la última ge - neración de sitios web