Linux Magazine 72r

73
DVD L a nueva versión de Kubuntu [1] incluye las novedades de Ubuntu “Natty Narwhal”, más algunos ases que se guarda en la manga. Kubuntu 11.04 viene con lo último del proyecto KDE, la versión 4.6.6, con todas las mejoras de estabilidad y funcionalidades que eso implica. Además se ha mejorado la inter- acción con otros sistemas, pudiéndose compartir carpetas con máquinas Linux, Windows o Mac a través de Dolphin. Otra mejora es la integración de OwnCloud, el servidor de almacenamiento remoto de KDE, con el sistema; y de aplicaciones GTK (como Inkscape o Firefox), que ahora ofrecen un aspecto coherente con el resto de aplicaciones gracias al tema Oxy- gen. Slackware [2] es una de las distros más antiguas del ecosistema GNU/Linux, remontándose sus orígenes al año 1993. El énfasis de Slackware no está precisamente en la facilidad de uso, sino en su estabili- dad, robustez y el control que confiere al usuario/administrador. A pesar de sus profundas raíces, Slackware se mantiene al día, y esta versión viene con los escrito- rios KDE 4.5.5 y Xfce 4.6.3, un kernel 22.6.37.6 y las últimas versiones de las aplicaciones de escritorio más utilizadas.KUBUNTU 11.04 Y SLACKWARE 13.37 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 Kubuntu, la etiqueta con la pala- bra “Kubuntu” tiene que estar hacia arriba, y viceversa para usar Slack- ware. 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 72 WWW.LINUX - MAGAZINE.ES [1] Kubuntu: http://www.kubuntu.org/ [2] Slackware: http://www.slackware. com/ RECURSOS Este DVD contiene dos caras, con Kubuntu 11.04 por un lado y Slackware 13.37 por el otro. Kubuntu viene en versión “Live” y de instalación, por lo que puede ser arrancada y probada sin instalar nada en el disco duro. Para empezar a usar su Linux, inserte el DVD en el reproductor y rearranque el ordenador. Si no aparece el menú del DVD, tiene que ajustar la BIOS para arrancar desde el disco. Para hacerlo, normalmente ha 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 72r

Page 1: Linux Magazine 72r

DVD

La nueva versión de Kubuntu [1]

incluye las novedades de Ubuntu

“Natty Narwhal”, más algunos ases

que se guarda en la manga. Kubuntu 11.04

viene con lo último del proyecto KDE, la

versión 4.6.6, con todas las mejoras de

estabilidad y funcionalidades que eso

implica. Además se ha mejorado la inter-

acción con otros sistemas, pudiéndose

compartir carpetas con máquinas Linux,

Windows o Mac a través de Dolphin. Otra

mejora es la integración de OwnCloud, el

servidor de almacenamiento remoto de

KDE, con el sistema; y de aplicaciones

GTK (como Inkscape o Firefox), que

ahora ofrecen un aspecto coherente con el

resto de aplicaciones gracias al tema Oxy-

gen.

Slackware [2] es una de las distros más

antiguas del ecosistema GNU/ Linux,

remontándose sus orígenes al año 1993. El

énfasis de Slackware no está precisamente

en la facilidad de uso, sino en su estabili-

dad, robustez y el control que confiere al

usuario/ administrador. A pesar de sus

profundas raíces, Slackware se mantiene

al día, y esta versión viene con los escrito-

rios KDE 4.5.5 y Xfce 4.6.3, un kernel

22.6.37.6 y las últimas versiones de las

aplicaciones de escritorio más utilizadas.�

KUBUNTU 11.04 Y

SLACKWARE 13.37 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 Kubuntu, la etiqueta con la pala-

bra “Kubuntu” tiene que estar hacia

arriba, y viceversa para usar Slack-

ware.

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 72W W W . L I N U X - M A G A Z I N E . E S

[1] Kubuntu: http:// www. kubuntu. org/

[2] Slackware: http:// www. slackware.

com/

RECURSOS

Este DVD contiene dos caras, con

Kubuntu 11.04 por un lado y Slackware

13.37 por el otro. Kubuntu viene en

versión “Live” y de instalación, por lo

que puede ser arrancada y probada sin

instalar nada en el disco duro.

Para empezar a usar su Linux, inserte

el DVD en el reproductor y rearranque

el ordenador. Si no aparece el menú

del DVD, tiene que ajustar la BIOS para

arrancar desde el disco. Para hacerlo,

normalmente ha 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 72r

EDITORIAL

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

En el Gen Egoísta, el biólogo britá-

nico Richard Dawkins explica

cómo el altruismo, el sacrificio del

individuo por sus semejantes (en el sen-

tido más literal de la palabra, por sus

hijos, familiares y amigos, su tribu en

suma), es producto de la evolución de la

“necesidad” de los genes de replicarse,

sublimada en un instinto mucho más

sofisticado que el de la supervivencia.

El uso de una envoltura de lípidos para

protegerse mejor del entorno, dando lugar

a las primeras células; la asociación de

esas células en estructuras biológicas más

complejas; la evolución de esas estructu-

ras hacia formas de vida animales; el cre-

cimiento del cráneo para alojar un cere-

bro cada vez más grande; el desarrollo de

la empatía y el sacrificio… todos esos

hitos de los seres vivos, se pueden expli-

car en función de que los genes del orga-

nismo que los alcanza tiene mayores

garantías de que su réplica sobreviva…

para replicarse de nuevo.

Al igual que la sucesión de una serie de

lo que parecen felices coincidencias (cabe

recordar que por cada organismo que

consigue replicarse hay literalmente

millones que no lo consiguen, algo que

viene sucediendo a lo largo de más de

3.000.000.000 de años en una placa de

petri del tamaño de un planeta) ha dado

lugar a la variedad de seres que pueblan

la biosfera terrestre, lo mismo sucede en

el ámbito de la noösfera, lugar donde

millones de ideas nacen, se reproducen

(aunque no siempre) y, a veces, mueren.

Algunas de ellas se replican mejor que

otras y cogen arraigo en la mente de los

humanos, contagiándose hasta permear

un gran número de individuos o toda la

especie. Se convierten en los denomina-

dos memes (término también acuñado

por Dawkins en la misma obra citada más

arriba).

Los memes son algo más que vídeos de

gatitos tocando el piano, y si bien el tér-

mino se suele asociar a las bromas textua-

les o visuales de 4chan, en realidad abar-

can los descubrimientos científicos, las

corrientes de pensamiento y artísticas, las

modas, las religiones, los prejuicios, los

fanatismos ideológicos y, por

supuesto, los chistes sobre Chuck

Norris.

Y el software libre también es

un meme. Sabemos que el soft-

ware libre trasciende al código y

las aplicaciones. Ha contagiado a

las artes, la ciencia y la ingeniería,

y las está transformando. Puede

que no todas las “formas de vida”

generadas en el proceso sobrevi-

van y muchas de las que no adop-

ten el nuevo gen tampoco, pero

algunas sí lo harán y estarán

mejor adaptadas a su constante-

mente cambiante mundo cultural

y a nuestro modo de vida.

La metáfora biológica va

incluso más allá del par gen/

meme. Cuando se empezó a utili-

zar (despectivamente) el término

“viral” para describir las licencias tipo

GPL, en realidad no se podía haber usado

un adjetivo más acertado. Hay que enten-

der que no sólo hay virus que destruyen a

los seres que habitan, sino que los hay

que juegan su rol en la evolución, siendo

agentes de la modificación de las estruc-

turas del ADN de sus huéspedes, modifi-

caciones que, a su vez, dan lugar a nue-

vos seres que puede que se adapten mejor

a su entorno. Si el código es el gen, las

licencias son sus virus, esto es, los meca-

nismos utilizados para su propagación y

mutación.

La gracia está en que, así como la evo-

lución de las especies biológicas es ciega

(la naturaleza no tiene un objetivo defi-

nido para ninguno de los seres vivos que

existen en su seno), la evolución del soft-

ware sí es dirigida. Cada línea de código

que se reescribe para hacer un programa

más eficiente, cada nueva funcionalidad

integrada en una aplicación y cada nueva

aplicación creada para satisfacer una

necesidad, son un paso más hacia una

mejor integración de la tecnología infor-

mática con los humanos a quienes sirve.

Esa evolución no se da más rápida-

mente y con mayor calidad de resultados

que en el software libre. Volviendo a las

placas de petri, el software privativo aísla

su código en laboratorios estériles donde

las modificaciones están estrictamente

controladas por criterios basados exclusi-

vamente en la rentabilidad y donde los

“dioses” que ejecutan los cambios son

pocos y seleccionados, operando bajo

condiciones igualmente restrictivas.

Mientras tanto, el software libre ha imple-

mentado un teatro de desarrollo evolutivo

global, animando a que todos seamos dio-

ses, concediéndonos el poder de crear

mutaciones a nuestro antojo. No sólo eso,

sino que, mientras las empresas celosas

de su propiedad intelectual pueden estar

diseñando el equivalente informático del

ántrax o aplicaciones infectadas de

viruela (puede que incluso sin querer), la

impuesta transparencia del software libre

obliga a la creación socialmente responsa-

ble y de código sano.

Y ese es el mayor argumento a favor de

su supervivencia. Es sin duda la especie

más apta. �

Paul C. Brown

Director

GENES Y MEMESNos sentimos orgullosos de nues trosorígenes como pu blicación, quese remonta a los primeros días dela revolución Linux. Nuestrarevista hermana, la publicaciónalemana Linux Magazine,fundada en 1994, fue la primerarevista dedicada a Linux enEuropa. Desde aquellastempranas fechas hasta hoy,nuestra red y experiencia hancrecido y se han expandido a lapar que la comunidad Linux alo ancho y largo del mundo.Como lector de LinuxMagazine, te unes a una redde información dedicada ala distribución delconocimiento y experienciatécnica. No nos limitamos ainformar sobre el movimientoLinux y de Software Libre, sinoque somos parte integral de él.

Page 3: Linux Magazine 72r

INSEGURIDADES

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

Cuanto más código, más problemas

MENOS RIESGOLos plugins proporcionan mucha funcionalidad pero, dependiendo de su calidad, también pueden aportar

agujeros de seguridad. Mostramos cómo protegernos de ellos. POR KURT SEIFRIED

8

El software libre nunca deja de

sorprender; pocas cosas en el

mundo (excepto los Legos) son

tan fáciles de modificar, moldear,

ampliar y mejorar. Son muchos los pro-

gramas que soportan explícitamente

plugins y extensiones, facilitando aún

más esta labor. Entre otros, se pueden

contar Firefox, TYPO3, WordPress, y,

por supuesto, el kernel Linux.

Entonces, ¿por qué suponen un pro-

blema los plugins (módulos, extensio-

nes, etc.)? Sabemos que permiten pro-

bar nuevas ideas y conceptos sobre el

software sin necesidad de obtener el

beneplácito del proyecto principal. A

veces, por una serie de razones técnicas,

legales, de marketing o políticas, los

proyectos de software no pueden o no

quieren ofrecer determinadas funciona-

lidades (como es el caso de Firefox y

AdBlock Plus).

Además, como ocurre con proyectos

como TYPO3 o WordPress, que proveen

sistemas de gestión de contenidos

(CMS) y funcionalidades de publicación

de blogs (que básicamente son un sub-

conjunto de lo que es un CMS), la canti-

dad de código fuente sería impracticable

si cada una de las funcionalidades dese-

adas se distribuyese integrada en la

solución (en Septiembre de 2010, Word-

intencionadamente maliciosos, la cruda

realidad es que la calidad de su código

deja mucho que desear.

Los proyectos de gran envergadura,

como Firefox, TYPO3 o WordPress,

atraen la atención y colaboración de la

gente; en algunos casos existen equipos

de seguridad dedicados que auditan

continuamente el código y trabajan

codo con codo con la comunidad de

seguridad para intentar resolver de la

manera más rápida posible sus proble-

mas. Algunas empresas especializadas

en seguridad tienen interés en desvelar

agujeros de seguridad en este tipo de

programas, puesto que les proporciona

cierto reconocimiento. Por suerte, la

mayoría de estas empresas colaboran

con los proyectos para que esos aguje-

ros sean resueltos a la mayor brevedad

posible sin causar demasiados inconve-

nientes a los usuarios finales. Pero los

proyectos de plugins no suelen contar

con este tipo de recursos; en muchos

casos, simplemente es un único des-

arrollador el que libera el código públi-

camente.

TYPO3TYPO3 soporta extensiones que van

desde plugins de calendario, hasta

workflow de correo electrónico, editores

de textos o soluciones de foro, por citar

algunas. El núcleo de TYPO3 consta de

más de 6000 archivos, de los cuales

unos 1200 están escritos en PHP. En

2009 hubo 21 notificaciones de proble-

mas de seguridad que desvelaban 113

problemas relativos a TYPO3. De todos

los reportados, sólo 16 tenían que ver

con el verdadero código fuente del

núcleo de TYPO3 [2]; los otros 97 esta-

ban en extensiones de TYPO3.

Aunque esta cifra no fuese tan mala

como parece ser, según la página TYPO3

Press contaba con 11231 plugins; Firefox

posee actualmente más de 13000).

Por último, en los casos relativamente

poco frecuentes en los que el autor o la

empresa deciden que sólo pueden pro-

porcionar el código fuente de forma

cerrada, pueden integrarse partes de las

que de otro modo no se podría disponer.

¿Qué Hay de Malo?Como decía Stan Lee: “Un gran poder

conlleva una gran responsabilidad”. Los

plugins casi siempre se ejecutan dentro

de un contexto de seguridad y con el

nivel de privilegios de la aplicación a la

que pertenecen. Siguiendo esa lógica,

los plugins de Firefox tienen permiso

para acceder a todos los archivos a los

que puede acceder nuestra cuenta.

El plugin podría además interactuar

con nuestra sesión de login, ejecutar

procesos en segundo plano y hacer cual-

quier cosa que podamos realizar noso -

tros con nuestra cuenta – como editar el

crontab o el archivo .profile para ejecu-

tar scripts o código arbitrarios, incluso

aunque no hayamos ingresado al sis-

tema. De hecho, algo así ocurrió en

2008; un plugin de Firefox llamado Basic

Example Plugin for Mozilla difundió Tro-

jan.PWS.ChromeInject.A, que robaba

cuentas de usuario y contrase-

ñas [1]. Incluso

cuando no son

Page 4: Linux Magazine 72r

INSEGURIDADES

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

de un sitio web actualizado y reciente

suele ser un indicador de que se puede

usar con algo más de tranquilidad. La

ausencia de información de contacto es

mala señal.

Soluciones a Largo PlazoUna de las mejores soluciones a largo

plazo (potencialmente) es un proyecto

de WordPress. WordPress anunció que

separarían sus plugins en dos conjuntos:

los plugins del núcleo (core) y el resto.

Los plugins del núcleo serían los plugins

populares usados por todos y, por tanto,

con una mayor exposición ante los intru-

sos. Estos plugins serían (idealmente)

auditados e integrados en WordPress,

dando como resultado una mayor cali-

dad del código y una instalación y admi-

nistración más simples. Si bien, no

parece que este proyecto haya evolucio-

nado mucho.

ConclusiónLos plugins y extensiones han llegado

para quedarse. Por desgracia, la calidad

del código de muchos de ellos va desde

lo puramente mediocre a lo literalmente

terrible. Nuestro consejo es no usar nin-

guno que no publique actualizaciones

regularmente o cuyo comportamiento no

sea todo lo bueno que se esperaba. Por

otro lado, ciertos plugins como NoScript,

FlashBlock o AdBlock Plus pueden llegar

a mejorar significativamente la seguridad

del sistema – sobre todo teniendo en

cuenta la cantidad de ataques 0day para

Adobe Flash en 2010 [5]. �

que instalan plugins de forma silenciosa

(Java, Skype, etc.) y de las que posible-

mente no estemos al tanto. Algunas

extensiones mejor implementadas,

como NoScript o AdBlock Plus (Figura

1), ofrecen la opción de desinstalarse;

otras no tan bien implementadas, como

la consola de Java (Java Console), ilus-

trada en la Figura 2, no ofrecen la

opción de desinstalarlas, sino que tienen

una para deshabilitarlas.

Hay que evitar siempre las extensio-

nes que no tienen la opción de Deshabi-

litar o de Desinstalar. Pero, al menos en

Linux, si se tiene instalada una exten-

sión sin dichas opciones, se puede elimi-

nar manualmente yendo al directorio de

inicio, entrando a ~/.mozilla/firefox/, y

eliminando su directorio, que estará

dentro del directorio personal predeter-

minado [4]. Los directorios de las exten-

siones tienen nombres aleatorios para

evitar que los atacantes depositen en

ellos sus archivos. El único problema es

que hay que averiguar cuál es el directo-

rio de la extensión; utilizan un GUID

(realmente largo y, supuestamente,

único) como nombre de directorio, al

estilo de

ec8030f7-c20a-464f-9b0e-U

13a3a9e97384

por lo que hay que utilizar el motor de

búsqueda de turno para saber a qué

extensión corresponde cada directorio.

Los mismos problemas son aplicables a

las aplicaciones web. Funciona con la

mayoría de plugins y extensiones, pero,

si no, se pueden eliminar manualmente.

No siempre se pueden eliminar los

plugins que suponen una amenaza, aun-

que se pueden hacer otras cosas para

estar seguros de que se obtienen los

mejores plugins posibles. Lo primero a

tener en cuenta es si son recientes:

¿cuándo fue la última publicación y

cada cuánto tiempo publican? Los plu-

gins abandonados suelen ser muy peli-

grosos; las actualizaciones de seguridad

llevan más tiempo, si es que se produ-

cen. Además, hay que estar pendientes

del sitio web del proyecto. La existencia

Extension Repository, las versiones

actuales de los diez plugins más popula-

res han sido descargadas 317 veces, lo

que significa que la mayoría de los plu-

gins de TYPO3 han sido descargados

menos de 300 veces (evidentemente, un

plugin se puede descargar para ser insta-

lado en más de un sitio, pero por norma

general estas cifras son bastantes repre-

sentativas). De hecho, el equipo de

seguridad de TYPO3 ha etiquetado un

buen número de reportes con el texto

“Este CSB (Collective Security Bulletin)

es un listado de extensiones vulnerables,

bien con pocas descargas o con poca

importancia para la comunidad de

TYPO3” [3].

Según las cifras de CVE (Common Vul-

nerabilities and Exposures) de los últi-

mos años, el núcleo de TYPO3 acumuló

un total de 20 vulnerabilidades, mien-

tras que las diferentes extensiones tuvie-

ron 235 (un ratio que se mantenía en

2009). Lo mismo ocurre con Firefox y

WordPress, o con cualquier otro soft-

ware que soporte el uso de plugins o

extensiones.

El Kernel LinuxOtro gran ejemplo del uso de plugins (o,

en este caso, módulos) es el Kernel

Linux. En la mayoría de los sistemas con

kernel de fábrica hay más de 1000

módulos disponibles (por ejemplo, Cent -

OS 5.4 tiene 1251 en el momento de

escribir estas líneas). El tamaño total de

dichos módulos es de 96MB, lo cual

supondría un aumento en el tamaño del

kernel de los 2MB a 98MB. Para prote-

gerse a sí mismos de los módulos que

sólo son código binario, los desarrolla-

dores de Linux han implementado un

sistema que marca el kernel como “con-

taminado” (tainted) cuando se carga un

módulo con alguna licencia no libre.

Debido a que el kernel Linux hace uso

de los módulos para la mayoría de las

funciones periféricas (esto es, que no

pertenecen al núcleo en sí), es relativa-

mente fácil actualizar el sistema sin

tener ni siquiera que reiniciar.

Soluciones a Corto PlazoExisten varios soluciones a corto y largo

plazo para lidiar con las vulnerabilida-

des. A corto plazo, la solución más

obvia es reducir la superficie de ataque.

Firefox es un gran ejemplo de ello,

puesto que son varias las aplicaciones

RECURSOS

[1] Plugin malicioso de Firefox: http://

blog. mozilla. com/ security/ 2008/ 12/

08/ malicious-firefox-plugin/

[2] Seguridad de TYPO3: http:// typo3.

org/ teams/ security/

security-bulletins/

[3] Boletín de seguridad de TYPO3:

http:// typo3. org/ teams/ security/

security-bulletins/

typo3-sa-2010-018/

[4] Desinstalando add-ons: http:// kb.

mozillazine. org/

Uninstalling_extensions

[5] Zero-day vulnerability: http:// en.

wikipedia. org/ wiki/ Zero-day_attack

Figura 2: Un plugin no tan bueno (Java Con-

sole).

Figura 1: Un buen plugin (AdBlock Plus).

Page 5: Linux Magazine 72r

En un post en el blog de desarrollo del

proyecto, Rubin alude a los rumores y

los tacha de FUD, alegando que Google

liberará Honeycomb “cuando esté listo”,

y añade que el motivo del retraso es que

se está adaptando el sistema para teléfo-

nos móviles.

También alude a las noticias de que

Google exige ciertos requisitos a los

fabricantes antes de certificar la compati-

bilidad del dispositivos, explicando que

no es realista que Google asegure el fun-

cionamiento del sistema y sus apps en

un amplio abanico de dispositivos

incompatibles entre sí.

En fin, ¿qué van a decir? Hasta Microsoft

declara abierta la plataforma Windows de

vez en cuando [2]. Lo que sí convence un

poco más es el hecho de que Asus (sí,

Asus, no Google) liberó el kernel de

Honeycomb por su cuenta y riesgo a raíz

del lanzamiento de su Asus Eee-pad…

… Y Google no hizo nada para impe-

dirlo.

¿Alguien dijo FUD? �

Novell Obligada a RecularEl impacto en el software libre obliga a

Novell a anular la venta de sus patentes

a Microsoft, Apple y Oracle.

Considerando las alegaciones presen-

tadas por la Free Software Foundation y

la Open Source Initiative, el Departa-

mento de Justicia de EE.UU. invalida la

venta de 882 patentes a CPTN, un con-

glomerado de empresas creado por

Microsoft, Oracle y Apple.

En concreto, Microsoft and Co. ten-

drán que vender de vuelta las patentes a

Attachmate, la empresa con la que

Novell anunció su fusión en noviembre.

Los miembros de CPTN podrán adquirir

licencias de uso de las patentes en cues-

tión, pero nada más.

La posición dominante en el mercado

de Microsoft, Apple y Oracle, en combi-

nación con las patentes acumuladas por

Novell a lo largo de su larga historia,

habrían puesto en peligro la capacidad

de innovación del sector TI en general, y

en especial en el ámbito del software de

código abierto. �

Android Sigue SiendoAbierto según Google.Han habido muchas especulaciones

sobre si Android va a seguir siendo

abierto o no, sobre todo en el momento

en el que Google no publicó (y sigue sin

publicar a día de hoy) el código fuente

de Honeycomb. Sin embargo, Andy

Rubin, vicepresidente de ingeniería, des-

miente la cerrazón de Android [1].

Una de Cal y Otra de ArenaSony (sí, Sony, la empresa que ha distri-

buido CDs con rootkits para frenar su

copia no controlada y perseguido inmi-

sericordemente a los hackers empeña-

dos en abrir sus consolas de videojue-

gos) abre un portal [1] que revela cómo

desbloquear sus propios terminales

móviles.

Publicado en su portal “Developer

World”, y tras las obligadas advertencias

de los peligros que entraña el proceso

(pérdida de la garantía y funcionalida-

des, brickeo de la terminal, etc.), el

documento explica con todo detalle los

14 pasos para desloquear el bootloader

de los terminales móviles comerciali-

zado bajo la marca Sony-Ericsson y

equipados con Android.

Este proceso, a todos los efectos, abre

los móviles a la sustitución de los ROMs

originales por otros customizados (como

CyanogenMOD del que hablamos en

nuestro Facebook [2]) y la ejecución de

aplicaciones no certificadas ni por Sony

ni Google (el llamado “homebrew”).

Todos los terminales comercializados

desde principios del 2011 hasta hoy de la

gama Xperia, el cruce entre móvil y PSP

de la empresa japonesa y que podemos

adquirir en nuestro país, pueden ser

desbloqueados. �

NOTICIAS

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

NOTICIAS

[1] Novell ha de anular la venta de sus

patentes: http:// www. pcworld. com/

businesscenter/ article/ 225717/

doj_limits_microsofts_purchase_of_

novell_patents. html

RECURSOS

[1] Sony te ayuda a desbloquear sus

teléfonos: http:// unlockbootloader.

sonyericsson. com/

[2] El ROM Android libre Cyanogen:

http:// www. facebook. com/

linuxmagazine. es/ posts/

10150150215741302

RECURSOS

[1] Reflexiones de Andy Rubin sobre las

acusaciones de cerrar el código:

http:// android-developers. blogspot.

com/ 2011/ 04/

i-think-im-having-gene-amdahl-mo

ment. html

[2] Windows 7 Mobile es “Open” según

Microsoft (y otras barbaridades):

http:// www. facebook. com/

linuxmagazine. es/ posts/

10150113256506302

[3] Sitio del Asus Eee-Pad. Pulsa

“Download” para acceder a la

fuente del kernel de honeycomb:

http:// www. asus. com/ Eee/ Eee_Pad/

Eee_Pad_Transformer_TF101/

RECURSOS

Page 6: Linux Magazine 72r

PORTADA • OSSTMM

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

La gobernanza y la conformidad

son una realidad para la mayo-

ría de empresas de tecnología

de la información. A menudo se espe-

cifican requisitos claros para llevar a

cabo auditorías de seguridad mediante

una política de seguridad interior o

con una regulación externa, como la

Payment Card Industry Data Security

Standard (PCI DSS) 2.0, la Health

Insurance Portability and Accountabi-

lity Act (HIPAA) de 1996, la Patient

Safety and Quality Improvement Act

(PSQIA) de 2005, y muchas leyes de

privacidad estatales y locales.

Sin embargo, rara vez se cubre una

metodología para llevar a cabo las

pruebas y auditorías internas por el

personal técnico en la política interna

o requisitos externos. El Open Source

Security Testing Methodology Manual

(OSSTMM) proporciona una metodo-

logía a seguir para profesionales de la

seguridad y los administradores del

sistemas.

OSSTMM Versión 3El OSSTMM 3 fue desarrollado por

Pete Herzog en el Instituto para las

Metodo-

logías de Seguri-

dad y de Código Abierto

(ISECOM) de manera que “ya no tenga

que depender de mejores prácticas

generales las evidencias anecdóticas o

supersticiones, ya que hemos verifi-

cado la información específica para

nuestras necesidades en la que basar

nuestras decisiones de seguridad”.

Dicho de otra manera, OSSTMM 3 es

una metodología estándar, en la que la

información se puede compartir abier-

tamente (y debatirla y revisarla),

mientras que hasta hace poco, muchas

auditorías se basaban en la experien-

cia del auditor principal. La versión 3

es la versión más reciente del docu-

mento, aunque la 3.2 está actualmente

bajo revisión.

El OSSTMM versión 3 se puede des-

cargar directamente desde la página

web de ISECOM [1]. Mantenerlo a la

mano como referencia durante la lec-

tura de este artículo podría ser útil con

algunos de los ejemplos.

Conformidad de pruebas con OSSTMM versión 3

VERIFICACIÓNMETÓDICA

El Open Source Security Testing

Methodology Manual proporciona

una metodología estándar para

las verificaciones de seguridad.

POR RON McCARTY.

Ron McCarty es escritor indepen-

diente, consultor de tecnologías

de la información y el propietario

de Your Net Guard LLC, una

empresa de consultoría IT ubicada

en Dallas, Texas. Ron obtuvo su

Licenciatura en Sistemas de la

Información en la Universidad de

Maryland y tiene un Master en

Administración por la Capella Uni-

versity. Recientemente ha escrito

el libro Ubuntu Linux System

Administration. Puede contactar

con él en mccarty@yournetguard.

com o en twitter como @ronmc-

carty.

EL A

UT

OR

Page 7: Linux Magazine 72r

La versión 3 incluye 15 capítulos

que describen tanto la metodología

como un informe STAR para la captura

de los resultados.

Software LibreAunque OSSTMM 3 proporciona infor-

mación sobre qué debe ser recogido y

sometido a pruebas, no proporciona la

forma de llevar a cabo los pasos con-

cretos. Por ejemplo, OSSTMM esta-

blece que deberíamos verificar el

registro de la red, pero no especifica

con qué herramientas o servicios

hacerlo. Afortunadamente, muchos de

los pasos que componen la metodolo-

gía se pueden llevar a cabo utilizando

herramientas de software libre.

En este artículo vamos a cubrir el

uso de algunas de estas herramientas

en torno al apartado 11.2 de Logística

del OSSTMM. El uso de herramientas

de software libre de ninguna manera

se limita a las que contemplamos aquí,

pero puede proporcionar un punto de

partida para determinar lo que se

ajuste a nuestras necesidades.

Después de revisar el docu-

mento en detalle, puede

determinar su propio

conjunto de herra-

mientas. Las que

hemos escogido en

este artículo están

disponibles en for-

mato de paquetes

para la mayoría de

versiones de Linux,

y son fáciles de ins-

talar y utilizar.

11.2 LogísticaEl apartado 11.2 del

OSSTMM cubre la parte

logística de la auditoría.

La mayoría de los consulto-

res y auditores se refieren

a este paso como la

infraestructura de la audi-

toría, en el sentido de que

esta parte de la auditoría

tiene que ver con identificar

con precisión el alcance y la

configuración

general del

entorno para “evi-

tar los falsos positivos

y falsos negativos”.

Si estamos traba-

jando con alguien que

no tiene conocimiento

de OSSTMM, entonces

puede que escuche-

mos terminología de

identificación de red y

de aislamiento

durante esta fase.

11.2.1 Marco deTrabajoEsta parte de la meto-

dología busca garanti-

zar el alcance apro-

piado de una audito-

ría a nivel de IP y

dominio e incluye 13

pruebas (partes a-m).

Muchos de los pasos

pueden llevarse a

cabo utilizando la

misma herramienta,

de manera que es

lógico de vez en

cuando agruparlos.

Las secciones 11.2.1(a) hasta 11.2(c)

cubren la propiedad y el registro de las

direcciones IP y los dominios de la

empresa auditada.

Para esta parte de la metodología, el

comando whois es muy útil. Whois

está disponible de forma libre, y suele

ser bastante común en las distribucio-

nes de Linux. En mi Ubuntu Server, he

instalado el paquete con

apt-get install whois

Whois es fácil de usar, y simplemente

lo llamamos con la información que

buscamos. Por ejemplo,

whois mcwrite.net

mostrará quién ha registrado el domi-

nio (véase el Listado 1). El propietario

del dominio es el Titular. En algunos

casos es necesario investigar la estruc-

tura jurídica de una sociedad si los

dominios están registrados por una

empresa subsidiaria.

De la consulta whois simple pode-

mos verificar:

OSSTMM • PORTADA

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

01 # whois mcwirte.net

02 Domain Services Provided By:

03 Your Net Guard LLC, [email protected]

04 http://www.YourNetGuard.com/

05

06 Registrant:

07 Ronald McCarty

08 14160 Dallas Pky Suite 520

09 Dallas, TX 75240

10 US

11

12 Registrar: DOTSTER

13 Domain Name: MCWRITE.NET

14 Created on: 08-JUL-00

15 Expires on: 08-JUL-11

16 Last Updated on: 18-JUN-10

17

18 Administrative, Technical Contact:

19 McCarty, Ronald [email protected]

20 14160 Dallas Pky Suite 520

21 Dallas, TX 75240

22 US

23 817-680-7351

24

25

26 Domain servers in listed order:

27 NS1.AFRAID.ORG

28 NS2.AFRAID.ORG

29 NS3.AFRAID.ORG

30 NS4.AFRAID.ORG

Listado 1: whois de mcwrite.net

Page 8: Linux Magazine 72r
Page 9: Linux Magazine 72r
Page 10: Linux Magazine 72r

• 11.2.1(d) Verificar el propietario de

los objetivos desde la información de

registro de dominio. El Titular con-

tiene el propietario de la empresa, y

el contacto administrativo contiene

a la persona a la que se le permite

administrar (cambiar) la informa-

ción de dominio.

Si cualquiera de estas pruebas no coin-

cide con los registros proporcionados a

la empresa auditora, la información de

registro o sus documentos legales

deben corregirse. Pueden ocurrir des-

ajustes cuando una empresa se muda

o es adquirida. O, si un contacto admi-

nistrativo ha cambiado de empresa, la

información es probable que esté des-

actualizada.

Whois puede buscar tanto direccio-

nes como dominios. Para 11.2.1.(c)

Verificar el propietario de los objetivos

desde la información de registro de la

red, se necesitan unos pocos coman-

dos más. Para investigar las redes se

necesitará una lista de direcciones de

red desde la DMZ, desde la empresa de

servicios web, y desde cualquier pro-

veedor de servicios si el correo electró-

nico u otros servicios están subcontra-

tados. A continuación, se puede ejecu-

tar whois para las distintas redes o

direcciones IP.

Con frecuencia, las direcciones esta-

rán registradas a nombre de otra per-

sona, ya que las direcciones DMZ a

menudo no son portables (es decir, no

pueden ser transferidas entre los

ISPs), y alojan servidores en otras

redes. Cada uno de estos registros

recabados con whois deberían ser vali-

dados con acuerdos o facturas de ser-

vicios. A veces, estos registros son

correctos, porque los proveedores han

sido adquiridos por otros.

Otra herramienta de software libre,

dig, es muy útil en la investigación de

hosts específicos y direcciones IP den-

tro del dominio. Dig viene de serie con

muchos sistemas y está preinstalada

en Ubuntu Server 10.4, que se utilizó

para este artículo. Si tenemos que ins-

talarla, es parte del paquete bind-utils

disponible en la mayoría de versiones

de Linux.

Dig se puede utilizar para varias de

las siguientes pruebas.

• 11.2.1(g) Búsqueda de nombres de

dominio similares o mal escritos que

puede ser confundidos con el obje-

tivo. Los auditores deben asegurarse

que no se están ejecutando pruebas

contra dominios que no pertenecen

a la organización. Para el ejemplo

anterior hemos utilizado

mcwrite.net, pero un error común

sería que alguien auditase contra

mcwrite.com. Por lo tanto, un whois

del dominio registrará la diferencia,

y se puede utilizar un dig para

• 11.2.1 (a) Verificar el alcance y el

propietario de los objetivos señalados

para la auditoría. El titular es la

entidad a la que pertenece el domi-

nio.

• 11.2.1(b) Determinar la ubicación de

la propiedad y el propietario de los

objetivos de housing. De nuevo, el

campo Titular contiene el propieta-

rio y la ubicación del dominio.

PORTADA • OSSTMM

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

01 # dig www.mcwrite.com

02

03 ; <<>> DiG 9.7.0-P1 <<>> www.mcwrite.com

04 ;; global options: +cmd

05 ;; Got answer:

06 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45953

07 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

08

09 ;; QUESTION SECTION:

10 ;www.mcwrite.com. IN A

11

12 ;; ANSWER SECTION:

13 www.mcwrite.com. 86400 IN A 217.160.37.30

14

15 ;; Query time: 175 msec

16 ;; SERVER: 192.168.1.1#53(192.168.1.1)

17 ;; WHEN: Tue Feb 1 12:09:32 2011

18 ;; MSG SIZE rcvd: 49

Listado 2: dig para mcwrite.com

01 # dig -x 204.9.177.195

02

03 ; <<>> DiG 9.7.0-P1 <<>> -x 204.9.177.195

04 ;; global options: +cmd

05 ;; Got answer:

06 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51562

07 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

08

09 ;; QUESTION SECTION:

10 ;195.177.9.204.in-addr.arpa. IN PTR

11

12 ;; ANSWER SECTION:

13 195.177.9.204.in-addr.arpa. 75540 IN PTR blogs.typepad.com.

14

15 ;; Query time: 26 msec

16 ;; SERVER: 192.168.1.1#53(192.168.1.1)

17 ;; WHEN: Tue Feb 1 12:14:17 2011

18 ;; MSG SIZE rcvd: 75

Listado 3: dig Inverso

01 # nmap -sP 192.168.1.0/24

02 Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-01 12:25 CST

03 Host www-internal.mcwrite.net (192.168.1.3) is up (0.076s latency).

04 Host ubuntu.mcwrite.net (192.168.1.7) is up (0.055s latency).

05 Host vm.mcwrite.net (192.168.1.18) is up (0.055s latency).

06 Nmap done: 256 IP address (1 host up) scanned in 0.12 seconds

Listado 4: Escaneo Nmap Sólo ping

Page 11: Linux Magazine 72r

garantizar que la dirección IP se encuentra fuera del

espacio de direcciones de la organización (véase el

Listado 2).

La herramienta dig también puede utilizarse para verifi-

car:

• 11.2.1(h) Verificar que los nombres de dominio obje-

tivo se resuelven en sistemas fuera del control del pro-

pietario, tales como dispositivos de cacheo.

• 11.2.1(i) Verificar qué direcciones IP objetivo se trazan

a ubicaciones diferentes de la localización del propie-

tario.

• 11.2.1(j) Verificar que las resoluciones inversas de

nombres de direcciones del sistema objetivo se corres-

ponden con el alcance y el propietario del alcance.

Para la búsqueda inversa, dig requiere el parámetro -x

(véase el Listado 3).

Si la red es muy grande, puede que tengamos que escri-

bir un contenedor de scripts para dig. Otro paquete de

código abierto, Nmap, también puede funcionar para

esto. Nmap tiene un parámetro rara vez usado, -R, que

devolverá la búsqueda inversa de direcciones IP. (Por lo

general durante los escaneos, la DNS no se desea.) No

es necesario un escaneo completo, y un análisis sola-

mente de ping (-sP) será más que suficiente. La explora-

ción sólo de ping se muestra en el Listado 4, que ejecuta

un escaneo completo desde 192.168.1.0 hasta

192.168.2.25 y devuelve la dirección inversa (véase el

Listado 4). Nmap no suele estar instalado en las distri-

buciones de Linux por defecto, sin embargo, está dispo-

nible para la mayoría de las distribuciones en forma de

paquete. En Ubuntu 10.4 puede ejecutar

apt-get install nmap

para instalarlo. Si Nmap no está disponible en forma de

paquete, su código fuente está disponible en [2].

El uso de dig, Nmap, o ambos puede completar los

apartados 11.2.1 (k) hasta el (m), que giran en torno a

probar o refutar si una máquina es parte de la auditoría.

En aquellas situaciones en las que la dirección IP no

está bajo control exclusivo, deben revisarse los acuer-

dos de servicios, y posiblemente, las notificaciones

enviadas antes de realizar cualquier tipo de pruebas de

penetración, para evitar ejecutar pruebas que pudieran

afectar más allá de los recursos de la organización.

11.2.2 Calidad de RedEl apartado 11.2.1 se centra en identificar correctamente

el alcance de la red para asegurar que las posteriores

pruebas son exactas y se realizan sólo contra los siste-

mas que pertenecen a la organización.

El apartado 11.2.2 Calidad de Red se refiere a las prue-

bas de red y gira en torno a la medición de los tiempos

de respuesta de la red, que a menudo es el programa de

muchas auditorías de infraestructura. Dependiendo del

tipo de aplicaciones dentro del alcance de una auditoría

en particular, elegir herramientas libres en lugar de pro-

pietarias puede no ser posible. Sin embargo, para las

pruebas generales de calidad de la red aquí se puede

Page 12: Linux Magazine 72r

de al menos 100 veces y registre el

promedio tanto para las peticiones

de servicio completo como para las

respuestas de paquetes para cada

uno de los tres protocolos. El

comando del Listado 5 lleva a cabo

esta solicitud para TCP (HTTP).

La prueba 11.2.2(b) requiere seis

medias, y la prueba 11.2.2(c) requiere

el cálculo de los resultados con pérdi-

das. Estas dos pruebas se pueden

satisfacer mediante la ejecución de

cron y el calculo de los totales. Para la

prueba con ICMP (ping), el ping están-

dar de Linux utiliza un simple paráme-

tro -c (recuento) (véase el Listado 6).

ResumenAunque las áreas del OSSTMM que

hemos cubierto se pueden verificar

fácilmente con herramientas de fácil

acceso e instalación que se prestan a

su uso por parte del administrador

del sistema para la realización o asis-

tencia de las auditorías, otras áreas

del OSSTMM se prestan más a una

utilización más compleja de estas

herramientas (con scripts) o herra-

mientas que requieren un mayor

esfuerzo (por ejemplo, Metasploit y

BackTrack para 11.4 Auditoría de

Visibilidad y 11.5 Verificación de

Acceso). �

utilizar una combinación de Apache

Bench (ab) y ping.

Apache Bench es la parte de pruebas

del paquete apache-utils, y no hay que

instalar Apache para usarlo. Además,

puede utilizarse para probar las res-

puestas a cualquier servidor web – no

se limita a los servidores web Apache

– y está disponible en la mayoría de

distribuciones de Linux instalando el

paquete apache-utils. La herramienta

ab se puede utilizar para cumplir con

la siguiente prueba:

• 11.2.2(a) Medición del índice de

velocidad y pérdida de paquetes en el

alcance de un servicio solicitado en

TCP, UDP e ICMP tanto para una

petición de servicio completo como

para un par de petición/respuesta.

Repita cada petición en una sucesión

PORTADA • OSSTMM

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

[1] OSSTMM 3: http:// www. isecom. org/

mirror/ OSSTMM. 3. pdf

[2] Nmap.org: http:// nmap. org/

download. html

RECURSOS

01 ab -n 100 -c 1 http://www.mcwrite.net:80/

02 This is ApacheBench, Version 2.3 <$Revision: 655654

$>

03 Copyright 1996 Adam Twiss, Zeus Technology Ltd,

http://www.zeustech.net/

04 Licensed to The Apache Software Foundation,

http://www.apache.org/

05

06 Benchmarking www.mcwrite.net (be patient).....done

07

08

09 Server Software: Apache

10 Server Hostname: www.mcwrite.net

11 Server Port: 80

12

13 Document Path: /

14 Document Length: 31309 bytes

15

16 Concurrency Level: 1

17 Time taken for tests: 38.796 seconds

18 Complete requests: 100

19 Failed requests: 0

20 Write errors: 0

21 Total transferred: 3162500 bytes

22 HTML transferred: 3130900 bytes

23 Requests per second: 2.58 [#/sec] (mean)

24 Time per request: 387.960 [ms] (mean)

25 Time per request: 387.960 [ms] (mean, across

all concurrent requests)

26 Transfer rate: 79.61 [Kbytes/sec] received

27

28 Connection Times (ms)

29 min mean[+/-sd] median max

30 Connect: 59 64 2.5 64 75

31 Processing: 250 324 71.8 322 710

32 Waiting: 59 63 2.3 63 78

33 Total: 312 388 72.2 384 774

34

35 Percentage of the requests served within a certain

time (ms)

36 50% 384

37 66% 393

38 75% 397

39 80% 400

40 90% 452

41 95% 540

42 98% 720

43 99% 774

44 100% 774 (longest request)

Listado 5: Medición de la Velocidad y la Pérdida de Paquetes con ab

01 ping -c 3 www.mcwrite.net

02 PING www.mcwrite (204.9.177.195) 56(84) bytes of data.

03 64 bytes from blogs.typepad.com (204.9.177.195): icmp_seq=1 ttl=49 time=61.8 ms

04 64 bytes from blogs.typepad.com (204.9.177.195): icmp_seq=2 ttl=49 time=60.0 ms

05 64 bytes from blogs.typepad.com (204.9.177.195): icmp_seq=3 ttl=49 time=60.7 ms

06 ---

07 --- www.mcwrite.net ping statistics ---

08 100 packets transmitted, 100 received, 0% packet loss, time 2003ms

09 rtt min/avg/max/mdev = 60.014/60.874/61.832/0.772 ms

Listado 6: Test ICMP con ping

Page 13: Linux Magazine 72r

Deección de Intrusiones • PORTADA

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

La capacidad de reaccionar en el

momento justo a veces salva

vidas. Los sistemas de detección y

prevención de intrusiones (IDS/ IPS) ayu-

dan a los administradores de los centros

de datos a evaluar los archivos de logs y

los mensajes de una gran variedad de

dispositivos y sistemas operativos, a

identificar rápidamente las intrusiones y

a iniciar la acción oportuna.

Sistema Híbrido: PreludeConviene saber muy bien la diferencia

entre un IDS basado en host (HIDS) y

uno basado en red (NIDS). Los IDS basa-

dos en host, como Tripwire, suelen eva-

luar únicamente los archivos del sistema

para detectar ataques locales, mientras

que los IDS basados en red, como Snort,

son capaces de analizar el tráfico de la

red en busca de indicios de ataque o acti-

vidades ilícitas.

Prelude [1] es un IDS híbrido que

combina las ventajas de los HIDS y de

los NIDS. Impresiona por su gran canti-

dad de funcionalidades, incluida una

práctica interfaz web de administración

y varios agentes cliente. El esfuerzo de

sus desarrolladores a lo largo de estos

últimos años ha servido para crear un

producto maduro capaz de gestionar

entornos a gran escala. Debido a su

arquitectura basada en plugins y a fun-

cionalidades como el Correlator Engine,

los administradores más experimenta-

dos pueden incluso crear sus propios

addons.

API LibpreludeLa librería de Prelude también permite

integrar programas existentes. Libpre-

lude proporciona APIs para varios len-

guajes de programación, incluidos

C++, Python, Perl y Ruby [2]. Algo que

IDS ampliable e independiente de plataforma con Prelude

CENTRAL DEALERTASEl sistema de gestión de información de seguridad Prelude recibe mensajes IDS basados

tanto en host como en red y los muestra en una práctica interfaz web. Te enseñamos cómo

configurarlo.

POR DAVID RUPPRECHTER

Figura 1: La interfaz web de Prelude se llama Prewikka. Proporciona al usuario una vista tabu-

lada de la totalidad de los eventos registrados por los distintos agentes.

© Bram Janssens - 123RF.com

Page 14: Linux Magazine 72r

PORTADA • Detección de Intrusiones

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

facilita dicha integración es el formato

Intrusion Detection Message Exchange

Format [3], desarrollado por el grupo

IDWG (Intrusion Detection Working

Group), y que proporciona un formato

estandarizado para los mensajes IDS que

pueden ser reenviados a una base de

datos SQL centralizada por herramientas

software como las soportadas por la API

de Libprelude.

Con este método, los administradores

se evitan correlacionar las entradas de

log desde la red, ya que los distintos

agentes de Prelude envían los datos a un

gestor centralizado a través de conexio-

nes SSL cifradas. El gestor añade los

datos a la base de datos en tiempo real y

los dispone para su consulta. Mediante

heartbeats enviados a los agentes, el ges-

tor sabe si la conexión está o no activa.

En caso de producirse alguna interrup-

ción, los agentes cachean las entradas

que no se hayan podido transmitir y las

envían al restablecerse la conexión.

Hay agentes disponibles para al menos

las siguientes plataformas:

• IDS Snort basado en red [4]

• Open Source Security (OSSEC) basado

en host [5]

• Logs de sistemas Linux a través de

Prelude-LML [6]

• Autenticación PAM

Además, el sistema SIM (Security Infor-

mation Management) es capaz de anali-

zar los logs de los típicos servicios y apa-

ratos de hardware, incluidos varios apa-

ratos de Cisco, Exim, Microsoft SQL, Cla-

mAV, Nessus, Apache, Tripwire, Netfilter,

ipchains e ipfw.

OSSEC proporciona también detección

de rootkits, monitorización del registro

de Windows y comprobación de la inte-

gridad de los archivos. Todas estas fun-

cionalidades están disponibles indepen-

dientemente de la plataforma de que se

trate, ya sea Linux, Windows, VMware

ESX, BSD, Solaris, AIX, HP-UX o Mac OS

X. Con la integración de syslog remotos

se suman aparatos de hardware como los

cortafuegos Cisco PIX/ ASA, Juniper

NetScreen y SonicWALL.

Gestor de PreludeEn calidad de autoridad central para los

cuatro componentes de Prelude (gestor,

sensores, Libprelude, interfaz web), el

gestor acepta los datos transferidos por

los sensores desde las conexiones mane-

jadas mediante la librería Libprelude. El

gestor de Prelude se

instala fácilmente en

Debian; basta con eje-

cutar aptitude install

prelude-manager lib-

prelude y aparecerá un

diálogo de

configuración de dpkg

desde el cual podemos

seleccionar la base de

datos (MySQL o Pos-

tgreSQL) e introducir

la contraseña de root

de SQL. El sistema

genera entonces la

clave SSL.

Después de configurar la base de datos

y de crear un perfil de gestión, podemos

modificar el archivo de configuración

/etc/prelude-manager/prelude-manager.c

onf. Para que el sistema pueda recibir los

registros desde los agentes remotos, hay

que modificar las entradas listen y susti-

tuir la dirección de loopback por la direc-

ción IP de la máquina.

También es necesario modificar la

configuración de SQL de la sección [db]:

[db]

type = mysql

host = localhost

port = 3306

name = nombre_base_de_datos

user = nombre_de_usuario

pass = Contraseña

En Debian GNU Linux, necesitamos

poner la variable RUN en

/etc/default/prelude-manager a YES, la

cual se encarga de iniciar el gestor de

prelude con /etc/init.d/prelude-manager

start.

PrewikkaPrewikka, la interfaz web de Prelude, es

útil para mostrar la información propor-

cionada por lo que pueden ser una gran

cantidad de agentes (Figura 1) [7]. Para

instalarla en Debian, ejecutamos apti-

tude install prewikka y completamos la

configuración. Por ejemplo, necesitare-

mos una base de datos, que podemos

instalar utilizando el script

/usr/share/prewikka/database/mysql.sql.

Este paso colocará la configuración de

Prewikka en el archivo

/etc/prewikka/prewikka.conf. Luego,

necesitaremos configurar las variables

software, place y title. Por ejemplo:

software: Prewikka

place: dotlike.net

title: ConsolaPrelude

La siguiente sección en el archivo de

configuración controla el acceso a Pre-

wikka:

[database]

type: mysql

host: localhost

user: prewikka

pass: Contraseña

name: prewikka

La configuración predeterminada del

paquete de Debian suele proporcionar

unos valores bastante útiles. Una vez

configurado, se puede iniciar la interfaz

web con el comando prewikka-httpd,

que pone a la escucha el servidor web

integrado en el puerto 8000. Para usar

una instalación de Apache, consultar el

cuadro de texto titulado Prewikka como

Virtual Host.

El nombre de usuario y la contraseña

predeterminados para Prewikka son

admin/admin, que debemos cambiar

desde Settings | My Account al acceder la

primera vez. La interfaz web es intuitiva

y proporciona un resumen claro de las

alertas. Las opciones de filtrado, como

source, target, analyzer o classification

están disponibles para todos los campos.

El menú de la parte inferior derecha per-

mite establecer el período y el número de

eventos por página.

Sensores de Prelude: LMLUno de los sensores más importantes

para los administradores de Linux es

LML (Prelude Log Monitoring Lackey)

[6]. Este sensor ejecuta un HIDS y moni-

toriza los archivos de logs especificados,

Si preferimos ejecutar en Apache la interfaz web de Pre-

wikka, se pueden añadir las líneas mostradas en el Listado 1

al directorio /etc/apache2/site-available/ en Debian.

Para habilitar el host, necesitamos usar el comando a2ensite

archivo_de_vhost. También es posible ponerlo en un archivo

aparte y emplear una directiva Include en

00_default_vhost.conf.

Luego, se reinicia el servidor web con /etc/init.d/apache res-

tart. Evidentemente, el servidor de Prelude necesita un

registro de DNS que se pueda resolver. Dependiendo de la

estructura de la red, quizás haga falta un registro de tipo A

para preludehost en el servidor de DNS.

Prewikka como Virtual Host

Page 15: Linux Magazine 72r

Deección de Intrusiones • PORTADA

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

continúan ampliando

su juego de reglas, el

administrador debe

mantener actualiza-

das las firmas. Al

registrarnos gratuita-

mente en el sitio web

de Snort [4], recibi-

mos un código para la

actualización automá-

tica de las firmas, que

se liberan 30 días des-

pués de su publica-

ción. Otros programas

de terceros, como

Oinkmaster [8] o

Pulled Pork, permiten

automatizar la actuali-

zación de las firmas

mediante tareas de

cron.

Bleeding Snort [9] es una alternativa a

las reglas oficiales de Snort, y algo simi-

lar a lo que utilizan los aparatos comer-

ciales Sourcefire [10]. El sitio web del

proyecto publica continuamente las

reglas creadas por expertos en redes y

seguridad. Además, se pueden combinar

libremente ambos juegos de reglas.

Para instalar Snort con una base de

datos MySQL en segundo plano, ejecuta-

mos aptitude install snort-mysql, elegi-

mos Systemstart como método de arran-

que, y deshabilitamos Promiscuous

Mode. En modo promiscuo, Snort ana-

liza todos y cada uno de los paquetes,

incluso aunque no vayan dirigidos a la

dirección IP de la interfaz de red. El

envío de los logs por email es opcional;

obviamente, la base de datos para los

logs será ahora Prelude.

Configuración del SnifferHa llegado el momento de aplicar una

serie de cambios al archivo de

configuración /etc/snort/snort.conf. Para

conseguir que Snort envíe sus datos a

Prelude, añadimos la siguiente sección:

output alert_prelude: U

profile=snort

Con los siguientes valores se especifica

la red a monitorizar:

# for IPv4:

var RED_LOCAL 192.168.0.0/24

# for IPv6 USE flag:

ipvar RED_LOCAL 192.168.69.0/24

enviando los eventos al gestor de Pre-

lude. Para instalar LML en Debian, ejecu-

tamos aptitude install prelude-lml.

Después de instalar un nuevo sensor,

hay que registrarlo en el gestor de Pre-

lude a través de una conexión cifrada.

Para registrar Prelude-LML, hacemos lo

siguiente:

prelude-admin register U

prelude-lml U

“idmef:w admin:r” U

<I>Lista_IP_Gestores<I> U

-uid 0 -gid 0

Poco después, Prelude nos insta a ejecu-

tar el comando prelude-admin registra-

tion-server prelude-manager desde una

segunda terminal. Este paso tiene como

resultado una contraseña de un solo uso

que el sensor utilizará para autenticarse

en la sesión de consola existente. Luego,

aparece lo siguiente en la terminal desde

la que se ejecuta el comando:

Approve registration? [y/n]: y

Cambiando la dirección del servidor en

el archivo de configuración /etc/pre-

lude/default/client.conf (línea

server-addr = IP) nos aseguramos de

que los agentes locales envíen a partir de

ahora sus datos al servidor especificado.

SnortPara integrar con Prelude el popular soft-

ware Snort, se ha de habilitar la detec-

ción de intrusiones basada en firmas.

Dado que los desarrolladores de Snort

# La red externa se puede

# dejar como any

var RED_EXTERNA any

Las funcionalidades de Snort – como la

posibilidad de detectar escaneos de puer-

tos – dependen de una serie de preproce-

sadores. Dichos preprocesamientos se

pueden optimizar mediante configura-

ciones granulares, por lo que lo más

lógico es revisar el archivo de

configuración entero.

Snort necesita además un perfil Pre-

lude:

prelude-admin register snort U

“idmef:w admin:r” U

<I>Lista_IP_Gestores<I> U

-uid 0 -gid 0

que permitirá la cooperación entre Snort

y Prelude.

OSSECLa independencia de la plataforma es

importante para nosotros, el IDS basado

en host OSSEC es una opción posible.

Una vez obtenida la última versión [5],

se pueden instalar fácilmente las libre-

rías de desarrollo de Prelude necesarias

para la compilación ejecutando aptitude

install libprelude-dev. Después de des-

comprimir el tarball en el subdirectorio

src, ejecutamos make setprelude para

habilitar el soporte de Prelude, y luego

install.sh para comenzar la instalación.

La instalación local está bien para los

usuarios que no piensen integrar disposi-

tivos de terminal por hardware u otro

tipo de clientes, pero lo más normal es

que queramos seleccionar server y habi-

litar el demonio de comprobación de

integridad (Integrity Check Daemon) y el

motor de detección de rootkits (Rootkit

Detection Engine). Para proporcionar

protección frente a ataques por fuerza

bruta, podemos habilitar Active Res-

ponse y Firewall Drop para bloquear

automáticamente a las máquinas remo-

tas con iptables, ipchains o ipfw, depen-

diendo del sistema en cuestión.

Para evitar problemas con falsos posi-

tivos en la red, se podría especificar tam-

bién una lista blanca de direcciones IP.

El siguiente paso consiste en habilitar la

recepción de mensajes de syslog si pla-

neamos integrar aparatos de hardware.

Llegados a este punto, ya podemos

modificar el archivo /var/ossec/etc/

01 <VirtualHost 192.168.0.1:80>

02 ServerName preludehost

03 ErrorLog /var/log/apache2/error_log

04 CustomLog /var/log/apache2/access_logcombined

05 <Location “/”>

06 AllowOverride None

07 Options ExecCGI

08 <IfModule mod_mime.c>

09 AddHandler cgi-script .cgi

10 </IfModule>

11 Order allow,deny

12 Allow from all

13 </Location>

14 Alias /prewikka/

/usr/share/prewikka/htdocs/ScriptAlias

/usr/share/prewikka/cgi-bin/prewikka.cgi

15 </VirtualHost>

Listado 1: Configuración de Virtual Hostpara Prewikka

Page 16: Linux Magazine 72r

PORTADA • Detección de Intrusiones

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

ossec.conf para decirle a OSSEC que le

pase la información a Prelude:

<ossec_config>

<global>

<email_notification>

no

</email_notification>

<prelude_output>

yes

</prelude_output>

</global>

Por último, necesitamos registrar OSSEC

en Prelude:

prelude-admin register OSSEC U

“idmef:w admin:r” U

<I>Lista_IP_Gestores<I> U

-uid ossec -gid ossec

Como el servicio de análisis se ejecuta

con su cuenta de usuario, tenemos que

usar ossec como UID y GID. Una vez

completada la instalación, iniciamos el

HIDS ejecutando /var/ossec/bin/ ossec-

control start. Para que los agentes pue-

dan conectar con OSSEC, hay que

registrarlos antes en el servidor. El

comando /var/ossec/bin/manage_

agents nos permite hacerlo desde un

abrirá la conexión utilizando un servicio

de Windows.

La funcionalidad de syslog de OSSEC

es útil para aparatos hardware como los

cortafuegos PIX de Cisco. Aunque esta

funcionalidad la habilita el proceso de

instalación anteriormente descrito, el

servidor no recibe mensajes de syslog

por defecto. Para que esto ocurra, debe-

mos añadir al archivo de configuración

/var/ossec/etc/ossec.conf la dirección IP

desde la cual se permite el envío:

<remote>

<connection>syslog</connection>

<allowed-ips>

10.21.81.4

</allowed-ips>

<allowed-ips>

10.21.81.9

</allowed-ips>

<port>5140</port>

</remote>

Con esta configuración, OSSEC procesa

los mensajes de syslog de las máquinas

con las direcciones IP 10.21.81.4 y

10.21.81.9.

El motor Prelude Correlator Engine [12]

resulta realmente útil a la hora de seguirle

la pista a los atacantes porque nos ofrece

la opción de correlacionar los eventos

IDMEF y generar así las correspondientes

alertas correlacionadas, que contendrán a

su vez las alertas individuales implicadas

(Figura 5). Para instalar Prelude Correla-

tor en Debian, basta con ejecutar aptitude

install prelude-correlator, luego se puede

registrar el agente con:

menú de consola controlado con el

teclado (Figura 2).

Después de introducir el nombre, hay

que introducir la dirección IP. Si la direc-

ción IP se asigna dinámicamente, se

habrá de especificar la red de clase C en

la que reside el agente (por ejemplo,

10.21.81.0/ 24). Luego, elegimos un ID

para el agente; el ID predeterminado

para el primer agente será 001, y no hay

motivo para cambiarlo. Para asociar el

agente al dispositivo de hardware, nece-

sitamos además una clave de autentica-

ción. Con el comando

/var/ossec/bin/manage_agents U

-e 001

creamos una.

Windows y SyslogSi se desea integrar un cliente Windows

con OSSEC y Prelude, es necesario que

Libprelude [11] se encuentre en el sis-

tema. La instalación no son más que un

par de clicks de ratón; probablemente

deseemos seleccionar todos los compo-

nentes de software desde Source Code

(Figura 3).

Después de realizar la instalación, el

administrador de Windows debe ejecutar

Manage Agent (desde el menú de inicio

o desde el directorio OSSEC). Tras intro-

ducir la dirección IP del servidor OSSEC

(OSSEC Server IP) y la correspondiente

clave de autenticación, la máquina Win-

dows ya puede abrir conexiones con el

IDS basado en host (Figura 4). Pulsando

Save se guardan los datos introducidos;

para ajustar la

configuración,

vamos a View |

Config. Des-

pués de reini-

ciar, OSSEC

Figura 3: Al instalar los agentes de Windows para OSSEC, se debe selec-

cionar todo excepto “Source Code”.

Figura 2: El script “manage_agents” ofrece

un menú simple desde el cual el administra-

dor puede registrar clientes (agentes) en el

servidor.

01 From setuptools import setup, find_packages

02 setup(

03 name=’PortscanGeoinfoPlugin’,

04 version=’1.0’,

05 description=”Información geográfica de las

máquinas que han escaneado puertos”,

06 author=”David Rupprechter”,

07 packages=find_packages(),

08 entry_points=’’’[PreludeCorrelator.plugins]

PortscanGeoinfoPlugin =

portscangeoinfoplugin:PortscanGeoinfoPlugin’’’

09 )

Listado 2: setup.py

Page 17: Linux Magazine 72r

Deección de Intrusiones • PORTADA

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

prelude-admin register U

prelude-correlator “idmef:rw” U

<I>Lista_IP_Gestores<I> U

-uid 0 -gid 0

Prelude Correlator ya aporta por sí

mismo una serie de plugins. En Debian,

los encontramos en el directorio

/usr/share/pyshared/PreludeCorrelator/pl

ugins/, y se pueden habilitar en forma de

entradas en el archivo /etc/prelude-corre-

lator/prelude-correlator.conf. Por ejem-

plo, con

[BruteForcePlugin]

disable = false

se habilita el plugin para fuerza bruta.

Podemos arrancar el Correlator mediante

/etc/init.d/prelude-correlator start.

Plugins PropiosSi estamos interesados en crear plugins

propios, tendremos que disponer de cier-

tos conocimientos previos en Python y

01 # Descargar

http://geolite.maxmind.com/download/geoip/data-

base/GeoLiteCity.dat.gz

02 # y añadir el contenido del archivo en

03 # /usr/share/GeoIP/ para una información

04 # geográfica más detallada

05

06 # Rogamos informe de bugs a rupprechter at dotlike dot

net

07 # para más información rogamos visite

www.dotlike.net/portscangeoinfo.php

08

09 import os

10 import re

11 import shlex, subprocess

12 import sys

13

14 from PreludeCorrelator.context import Context

15 from PreludeCorrelator.pluginmanager import Plugin

16 from PreludeCorrelator.idmef import IDMEF

17

18 strout = None

19

20 class PortscanGeoinfoPlugin(Plugin):

21 def run(self, idmef):

22 classification = idmef.Get(“alert.classifica-

tion.text”)

23

24 NMAPFSCAN = “PSNG_TCP_FILTERED_PORTSCAN”

25 NMAPSCANUDP = “PSNG_UDP_FILTERED_PORTSCAN”

26 NMAPPSNG = “ICMP PING NMAP”

27 TCPPSCAN = “(portscan) TCP Portscan”

28 NMAPSCAN = “PSNG_TCP_PORTSCAN”

29 SSHSCAN = “SSH insecure connection attempt (scan).”

30 SSHSCAN2 = “Possible attack on the ssh server (or

version gathering).”

31 if classification != NMAPPSNG and classification !=

NMAPFSCAN \

32 and classification != TCPPSCAN and classification

!= NMAPSCAN \

33 and classification != SSHSCAN and classification !=

SSHSCAN2 and classification != NMAPSCANUDP:

34 return

35 source =

idmef.Get(“alert.source(*).node.address(*).address

”)

36 for saddr in source:

37 ctx = Context((“NETWORK_INFO_PORTSCAN_ATTACKER”,

saddr), { “expire”: 600, “alert_on_expire”: True },

update = True, idmef=idmef)

38 if ctx.getUpdateCount() == 0:

39 ctx.Set(“alert.correlation_alert.name”, “Net-

work scan of host(s) detected” )

40 ctx.Set(“alert.classification.text”, “Network

information for scanning host”)

41 ctx.Set(“alert.assessment.impact.severity”,

“high”)

42 # only create one alert per source

43 # GeoIP

44 # only do GeoIP lookup if IP address is not pri-

vate

45 if saddr.find(“10.”, 0, 4) != -1 or

saddr.find(“172.”, 0, 4) != -1 or saddr.find(“192.”,

0, 4) == -1:

46 # if GeoIP City Database exists

47 if os.path.exists(“/usr/Share/GeoIP/GeoLite-

City.dat”) == True:

48 import GeoIP

49 gi = GeoIP.open(“/usr/share/GeoIP/GeoLite-

City.dat”,GeoIP.GEOIP_STANDARD)

50 geoinfo = gi.record_by_addr(saddr)

51 geo = re.sub(r’\’’, r’’, re.sub(r’: ‘, r’:’,

str(geoinfo)) )

52 idmef = IDMEF()

53 idmef.Set(“alert.classification.text”, “Geo-

graphical Information for portscanning host”)

54 idmef.Set(“alert.correlation_alert.name”, geo

)

55 idmef.Set(“alert.assessment.impact.severity”,

“high”)

56 idmef.Set(“alert.assessment.impact.descrip-

tion”, “Geographical information for portscanning

host “ + saddr)

57 idmef.alert()

58 ctx.update(idmef=idmef)

59 # else if only GeoIP Country Database exists

60 elif

os.path.exists(“/usr/share/GeoIP/GeoIP.dat”) ==

True:

61 import GeoIP

62 gi = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE)

63 idmef = IDMEF()

64 idmef.Set(“alert.classification.text”, “Geo-

graphical Information for portscanning host”)

65

idmef.Set(“alert.correlation_alert.name”,str(gi.co

untry_code_by_addr(saddr)) )

66 idmef.Set(“alert.assessment.impact.severity”,

“high”)

67 idmef.Set(“alert.assessment.impact.descrip-

tion”, “Geographical information for portscanning

host “ + saddr)

68 idmef.alert()

69 ctx.update(idmef=idmef)

Listado 3: main.py

Page 18: Linux Magazine 72r

del plugin. Para crear nuestro propio plu-

gin, modificamos los nombres Portscan-

GeoinfoPlugin y portscangeoinfoplugin y,

opcionalmente, corregimos los campos

description, author y version.

En mi ejemplo, el código del plugin se

encuentra en el directorio portscangeoin-

foplugin. Aquí, el script también acep-

tará comodines. Al introducir

Pluginname = U

<I>Directorio<I>:Mi_plugin

en el script de instalación, se referencia

al plugin Mi_plugin de dentro del direc-

torio Directorio. Luego, python setup.py

build y python setup.py install comple-

tan la instalación.

Ahora debemos añadir las siguientes

líneas al archivo /etc/prelude-correlator/

prelude-correlator.conf para que se habi-

lite el plugin cada vez que se inicie el

Correlator:

[PortscanGeoinfoPlugin]

disable = False

El directorio del plugin contiene los

archivos init.py y main.py (Listado 3). El

archivo init.py contiene una única línea

con el nombre del plugin:

from main import U

PortscanGeoinfoPlugin

El plugin PortscanGeoinfo nos muestra

las impresionantes opciones que ofrece

Prelude Correlator Engine: con la fun-

ción Popen integramos los programas de

línea de comandos y sus salidas.

Control Absoluto de la RedCon la combinación de NIDS y HIDS en

forma de sensores de Prelude podemos

analizar toda la información proporcio-

nada por nuestras redes, incluida la

información proveniente de los syslog de

dispositivos terminales que lo soporten –

todo ello centralizado en una interfaz

web. No importa si tenemos Windows,

Cisco, o servidores Linux, ya que esta

configuración permite integrar cualquier

máquina en nuestros centros de datos

con una instancia de monitorización

centralizada.

Mediante el uso de plugins individua-

les para la visualización de la informa-

ción recogida de alertas correlaciona-

das en Prewikka, ponemos muy difícil a

un eventual intruso el acceso a nuestra

red. �

leer el capítulo 4.2 del IDMEF-RFC [3].

Esta sección del RFC está relacionada

con las clases de mensajes que los desa -

rrolladores de plugins pueden usar.

El plugin PortscanGeoinfo, que he cre-

ado como ejemplo, está disponible desde

[13]. Este programa reacciona antes los

escaneos de puertos detectados por

Snort y OSSEC, y ofrece al administrador

la posibilidad de mostrar información

geográfica acerca de la ubicación del ata-

cante mediante una alarma de correla-

ción. A fin de permitir a Snort la detec-

ción de los escaneos de puertos, debe-

mos habilitar el preprocesador portscan

en el archivo snort.conf.

La alerta correlativa Network Informa-

tion for scanning host contiene tanto la

información geográfica sobre la IP como

las alertas asociadas de los sensores de

Snort y OSSEC. El plugin espera durante

cinco minutos, recopila durante este

tiempo todos los eventos de portscan

necesarios, y los reúne en una alerta de

correlación. Para que esto suceda debe-

mos instalar GeoIP para Python

mediante el comando aptitude install

geoip-python libgeoip1. Si no nos basta

con la información sobre el país, la base

de datos GeoIP City Lite de [14] propor-

ciona más detalles.

Estructura de los PluginsCada plugin de correlación contiene un

archivo llamado setup.py (Listado 2),

que es el responsable de la instalación

PORTADA • Detección de Intrusiones

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

David Rupprechter trabaja como

técnico de TI para un integrador

de sistemas líder, y está centrado

en la seguridad TI, la progra-

mación de tecnologías de redes y

Linux en http:// www. dotlike. net.EL A

UT

OR

[1] Prelude: http:// www.

prelude-technologies. com/ en/

solutions/ universal-sim/ index. html

[2] Libprelude: https:// dev.

prelude-technologies. com/ wiki/

prelude/ ManualDevel

[3] RFC 4765: IDMEF: http:// www. ietf.

org/ rfc/ rfc4765. txt

[4] Snort: http:// www. snort. org

[5] OSSEC: http:// www. ossec. net

[6] Prelude LML: https:// dev.

prelude-technologies. com/ wiki/ 1/

PreludeLml

[7] Prewikka: https:// dev.

prelude-technologies. com/ wiki/ 1/

Prewikka

[8] Oinkmaster: http:// oinkmaster.

sourceforge. net

[9] Bleeding Snort: http:// www.

bleedingsnort. com

[10] Sourcefire: http:// www. sourcefire.

com

[11] Agente Libprelude para Windows:

http:// www. prelude-technologies.

com/ download/ releases/ libprelude/

libprelude-1. 0. 0. exe

[12] Correlation Engine: http:// www.

prelude-technologies. com/ en/

solutions/ correlation-engine/ index.

html

[13] PortscanGeoinfo: http:// www.

dotlike. net/ portscangeoinfo. php

[14] Base de datos GeoIP city: http://

geolite. maxmind. com/ download/

geoip/ database/ GeoLiteCity. dat. gz

[15] Listados de código para este artí-

culo: http:// www. linux-magazine. es/

Magazine/ Downloads/ 72

RECURSOS

Figura 4: A diferencia de la integración de

syslog, el agente de Windows utiliza por

defecto una conexión cifrada segura para

transferir sus datos.

Figura 5: Las alertas correlativas registran los ataques incluso en los casos en los que el atacante se dirige a varios dispositivos; en este ejem-

plo se ilustra un escaneo de puertos.

Page 19: Linux Magazine 72r

Ayudantes de Snort • PORTADA

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

Snort es viejo – en la escala TI,

incluso anciano. Marty Roesch

comenzó el desarrollo del sniffer

de red [1] en 1998. Su plan original era

desarrollar uno que pudiera funcionar

en diversos sistemas operativos. La ver-

sión inicial, que data de 1998, contenía

1200 líneas de código, pero de estos

humildes comienzos surgió uno de los

motores de IDS de redes más potentes.

En 2001, Roesch fundó Sourcefire [2],

una empresa que hoy es sinónimo de

potentes dispositivos de detección de

intrusiones en redes basados en Snort, y

que continúa desarrollando Snort como

una forma de corresponder a la comuni-

dad de código abierto.

Snort es un motor que analiza y

estandariza el tráfico de red y luego

comprueba las firmas para identificar

actividades sospechosas. Snort no pro-

porciona herramientas para la gestión

de firmas, ni el almacenamiento de los

mensajes de los análisis en una base de

datos o registros forenses. En el

pasado, los administradores solían uti-

lizar herramientas como Oinkmaster

[3] o BASE [4] para procesar la infor-

mación de Snort; sin embargo, estos

proyectos han quedado huérfanos o

dormidos. Afortunadamente, algunos

trabajos nuevos han cubierto este

hueco: Snorby [5], OpenFPC [6] y

Pulled Pork [7]. Este artículo muestra la

última generación de proyectos que dan

soporte a Snort.

SnifferCon la versión 2.9, los desarrolladores

de Snort presentaron la nueva DAQ (la

librería de adquisición de datos), que

reemplaza a la clásica libpcap. A partir

de esta versión, Snort depende de la

librería DAQ, por lo que no se podrá ins-

talar el sniffer sin ella (véase el cuadro

titulado “DAQ”).

La versión actual de Snort es la

2.9.0.3. A diferencia de la anterior, los

desarrolladores simplemente han corre-

gido algunos fallos. Antes de compilar

Snort debemos asegurarnos de tener ins-

taladas en el sistema las librerías DAQ,

Dnet y PCRE. La Tabla 1 muestra las

posibles modificaciones del script ./con-

figure de Snort. Aunque podemos tener

varias configuraciones de bases de

datos, lo más probable es que deseemos

evitarlas; vamos a mostrar cómo utilizar

Barnyard [12] como base de datos resi-

dente.

El archivo con el código fuente de

Snort sólo proporciona un script de

comienzo para Red Hat y las distribucio-

nes basadas en Fedora. Probablemente

haya que modificar el script para que se

ajuste a nuestras necesidades de instala-

ción – o incluso que tengamos que escri-

birnos nuestro propio script. Lo impor-

tante es recordar que necesitamos ejecu-

Snorby, Open FPC y Pulled Pork traen de vuelta a Snort

CARNE FRESCA

Snort es el estándar de facto para la detección de intrusiones en redes

de código abierto. La comunidad de desarrolladores ha mantenido un

perfil bajo durante un par de años, pero las extensiones como Snorby,

OpenFPC y Pulled Pork le han proporcionado al viejo cerdito un poco

más de vida.

POR RALF SPENNEBERG

© ls

an

tilli - 123R

F.co

m

Page 20: Linux Magazine 72r

PORTADA • Ayudantes de Snort

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

tar Snort por medio de

/usr/local/bin/snort-c/etc/snort/snort. conf.

Antes de comenzar a utilizar Snort por

primera vez, debemos copiar el conte-

nido del directorio etc que se encuentra

en el directorio del código fuente a

/etc/snort/ y crear un directorio

/var/log/snort. El cuadro titulado

“snort.conf” contiene la ayuda necesaria

para modificar el fichero de

configuración snort.conf.

FirmasEvidentemente, Snort necesita ahora las

firmas que le proporcionarán el conoci-

miento para detectar las intrusiones.

Existen básicamente tres fuentes de fir-

mas:

• Las reglas VRT de Sourcefire Vulnera-

bility Research Team

• Las reglas Emerging Threats

• Las reglas GPL

Estas reglas han de mantenerse actuali-

zadas siempre – en este artículo utili-

zaremos más adelante Pulled Pork para

las actualizaciones. Si tenemos la

intención de utilizar Snort en un

entorno en producción, es probable

que deseemos utilizar las reglas VRT o

las Emerging Threats. Ambas se

encuentran disponibles tanto de forma

gratuita como de pago. Las reglas VRT

gratuitas se diferencian de las comer-

ciales porque se publican 30 días des-

pués que las comerciales, pero permi-

ten acceder al conjunto completo de

reglas. La edición comercial de las

reglas Emerging Threats incluye reglas

adicionales que no se suministran en la

versión gratuita.

Los siguientes ejemplos utilizan las

reglas VRT, que se pueden descargar

como parte de una suscripción comer-

cial o bien obtenerlas gratuitamente con

un retraso de 30 días (tras registrarse).

Una vez que nos hayamos subscrito o

registrado, Sourcefire nos proporcionará

un “Oink Code” que habrá que incluir

en la petición de descarga:

wget http://www.snort.org/reg-rU

ules/snort rules-snapshot-2903.U

tar.gz/<oinkcode> -O snortrulesU

-snapshot-2903.tar.gz

El conjunto de reglas VRT incluye cuatro

directorios: etc contiene los ficheros de

configuración que necesitan los conjun-

tos de reglas Snort

y Barnyard, que

deberemos copiar

en el directorio

/etc/snort. rules,

que contiene las

reglas basadas en

texto para Snort,

ha de copiarse en

/etc/snort/rules.

preproc_rules nos

da las reglas del

preprocesador –

sólo hay que copiar el directorio en

/etc/snort/preproc_rules.

Por último, las reglas binarias para

Snort se encuentran disponibles en

so_rules. Necesitamos copiar el subdi-

rectorio de la distribución (por ejemplo,

so_rules/precompiled/Ubuntu-10-4/x86-6

4/2.9.0.3/*) en /usr/local/lib/ snort_

dynamicrules y los ficheros *.rules en el

directorio /etc/snort/so_rules/.

Sourcefire Vulnerability Research

Team ofrece algunas reglas sólo en for-

mato binario. Existen dos razones para

el uso del formato binario: por un

lado, el lenguaje de reglas de Snort es

un lenguaje muy potente pero no es

capaz de identificar paquetes sospe-

chosos en algunos ataques. Las libre-

rías binarias mejoran considerable-

mente la tasa de detección. La

segunda razón es que un tercero

podría haber descubierto una vulnera-

bilidad en Sourcefire bajo un acuerdo

de confidencialidad (NDA). Si el

equipo de VRT distribuyese la firma en

texto claro, estarían publicando deta-

lles sin la autorización necesaria.

Actualizando con PulledPorkLa mayoría de los usuarios utilizan

Oinkmaster para actualizar los conjun-

tos de reglas. Como los trabajos de

desarrollo de esta herramienta se

encuentran dormidos, Pulled Pork admi-

nistra las tareas en diversos entornos.

Pulled Pork también procesa las reglas

binarias y organiza los elementos en los

directorios adecuados. Para la instala-

ción sólo es necesario descargarse el

paquete desde Google Code. La versión

actual de Pulled pork (0.5.0) requiere

01 <SNORT_ATTRIBUTES>

02 <ATTRIBUTE_TABLE>

03 <HOST>

04 <IP>10.1.2.3</IP>

05 <OPERATING_SYSTEM>

06 <NAME>

07 <ATTRIBUTE_VALUE>Windows</ATTRIBUTE_VALUE>

08 </NAME>

09 <FRAG_POLICY>Windows</FRAG_POLICY>

10 <STREAM_POLICY>Win XP</STREAM_POLICY>

11 </OPERATING_SYSTEM>

12 <SERVICES>

13 <SERVICE>

14 <PORT>

15 <ATTRIBUTE_VALUE>80</ATTRIBUTE_VALUE>

16 </PORT>

17 <IPPROTO>

18 <ATTRIBUTE_VALUE>tcp</ATTRIBUTE_VALUE>

19 </IPPROTO>

20 <PROTOCOL>

21 <ATTRIBUTE_VALUE>http</ATTRIBUTE_VALUE>

22 </PROTOCOL>

23 </SERVICE>

24 </SERVICES>

25 </HOST>

26 </ATTRIBUTE_TABLE>

Listado 1: Una Tabla de Atributos de unHost

Insta-Snorby está basado en la librería TurnKey Linux Virtual

Appliance [9], que proporciona máquinas virtuales para diver-

sos propósitos. Basada en Ubuntu Linux, permite a los adminis-

tradores probar varias aplicaciones sin tener que instalar nada.

Insta-Snorby es una imagen ISO; la versión 0.6.0 soporta una

instalación sin complicaciones en un dispositivo. Contiene:

• Snort 2.9.0.3

• Barnyard 2.19

• Snorby 2.2.1

• Open FPC

• Pulled Pork

Para instalarla como un dispositivo virtual, necesitaremos pro-

porcionarle a Insta-Snorby al menos 512 MB de RAM para evi-

tar el uso de una memoria de intercambio.

Insta-Snorby

Page 21: Linux Magazine 72r

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

BarnyardUna vez que se haya instalado Snort con

las especificaciones, registrará los men-

sajes en un fichero binario en formato

Unified2, que no podremos leer directa-

mente, de modo que será necesario utili-

zar otra herramienta para almacenar los

datos en una base de datos. La herra-

mienta perfecta es Barnyard2, que

adopta el papel del proceso que escribe

los datos en la base de datos, redu-

ciendo por tanto la carga del servidor. El

archivo con el código fuente de Barn-

yard se encuentra disponible en [12]; su

instalación desde el código fuente no

supone ningún problema.

Barnyard necesita escribir ficheros en

el directorio /var/log/snort y escribir el

contenido del fichero en la base de

datos. Snort almacena los ficheros en

este directorio con el patrón

merged.log.XXXXXXXX, donde

XXXXXXX es la marca de tiempo que

Barnyard referencia para ayudar a igno-

rar los ficheros antiguos. Si no se

encuentra la marca de tiempo, habrá

que eliminar la opción nostamp del

fichero de configuración para la salida

del plugin Unified. Como el fichero de

registro de Unified sólo contiene infor-

mación binaria, Barnyard tiene que

acceder a otros ficheros de

configuración de Snort para poder inter-

pretar el contenido del fichero, así que

introducimos las rutas de estos ficheros

en el fichero de configuración

/usr/local/etc/barnyard2.conf y modifi-

camos el resto de los parámetros:

Perl y los módulos Archive::Tar,

Crypt::SSLeay y LWP::Simple de Perl,

que se pueden instalar en la mayoría de

las distribuciones por medio del gestor

de paquetes. Para instalar Pulled Pork,

copiamos el directorio etc en

/etc/pulledpork y el script de Perl

pulledpork.pl en /usr/local/bin. El

fichero de configuración pulledpork.

conf también es autoexplicativo. Las

únicas tareas importantes son la modi-

ficación de la regla de la URL con el

Oink Code, las rutas para instalar las

reglas y las reglas compartidas de obje-

tos, dependiendo de la distribución que

tengamos. Pulled Pork puede modificar

las reglas durante la instalación. Para

hacerlo, referencia cuatro ficheros de

configuración adicionales, que pode-

mos activar:

• dropsid.conf: Pulled Pork cambia

todas las reglas de este fichero para

decirle a Snort que descarte los paque-

tes.

• enablesid.conf y disablesid.conf:

PulledPork activa y desactiva las

reglas de estos ficheros.

• modifysid.conf: Pulled Pork modifica

las reglas en los ficheros especifica-

dos.

El programa se ejecuta tecleando pulled-

pork.pl -c /etc/pulledpork/pulledpork.

conf. Antes de descargar las reglas,

Pulled Pork utiliza las sumas de compro-

bación para ver si las reglas en el servi-

dor son nuevas. El resto lo realiza un

trabajo programado de forma diaria en

cron.

config utc

config daemon

config logdir: /tmp

config waldo_file: /var/logU

/snort/waldo

#output alert_fast: stdout

output database: log, mysql, U

user=snort password=snortpw U

dbname=snortdb host=localhost

Antes de ejecutar Barnyard2, debemos

crear la base de datos:

# cat << EOF | mysql -u root -p

create database snortdb;

grant all on snortdb.* to U

snort@localhost identified U

by “snortpw”;

EOF

# mysql -u snort -password=U

snortpw snortdb < schemas/U

create_mysql

La siguiente línea en el script de

comienzo automatiza el proceso de

arranque:

barnyard2 -d /var/log/snort/U

-f merged.log -c /usr/local/U

etc/barnyard2.conf -n

La -n le indica a Barnyard2 que sólo pro-

cese los mensajes nuevos que se añadan

al fichero de registro de Snort. Para

poder ignorar los mensajes antiguos

cuando se reinicie, insertará un marca-

dor en un fichero Waldo [13].

SnorbySnorby, que hace de interfaz de Snort,

sólo se encuentra oficialmente disponi-

ble por medio de su propio repositorio

Git [14], pero a veces nos podemos tro-

pezar con varios archivos comprimidos.

Antes de poder instalar Snorby, necesi-

tamos resolver algunas dependencias:

Ruby (>=1.8.7), Rubygems y las

siguientes Rubygems: tzinfo, builder,

memcache-client, rack, rack-test, erubis

mail, text-format, bundler, thor, i18n,

sqlite3-ruby y rack-mount rails=3.0.0.

Los requisitos de Ruby en particular

implican que tenemos una distribución

reciente o que estamos preparados para

instalar todos estos paquetes desde el

código fuente. Ubuntu a partir de Kar-

mic y Fedora 14 incluyen la versión

1.8.7 de Ruby; ninguna de estas versio-

nes incluyen la versión 3 de Rails.

Figura 1: El panel de control de Snorby ordena los mensajes según su gravedad.

Ayudantes de Snort • PORTADA

Page 22: Linux Magazine 72r

PORTADA • Ayudantes de Snort

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

Tras descomprimirlo, en el directorio

de Snorby tecleamos bundle install; este

paso instala un par de paquetes adicio-

nales. rake snorby:setup finalmente ins-

tala Snorby. Hay un par de ficheros de

configuración autoexplicativos –

snorby/config/snorby_config.yml y

snorby/config/initializers/mail_config.rb

– que necesitamos modificar, pero luego

podemos ejecutar Snorby tecleando

rails -c para que aparezca la ventana de

inicio de sesión.

Tras iniciar la sesión, veremos el panel

de control de Snorby, una GUI de última

generación con los mensajes entrantes

(Figura 1) que permite ver cada evento

en detalle (Figura 2).

Análisis ForenseSnort sólo detecta los ataques potencia-

les en la red y registra cualquier paquete

sospechoso que haga saltar las alarmas.

A menudo esto sucede demasiado tarde,

ya que Snort no puede viajar hacia atrás

en el tiempo y registrar los paquetes

enviados previamente. Sólo se pueden

modificar las firmas para que registren

la subsecuencia de paquetes desde la

misma conexión. Esta complicación

hace que sea prácticamente imposible

analizar un ataque con éxito a nivel de

red.

El reciente proyecto OpenFPC (cap-

tura completa de paquetes) tiene como

objetivo resolver este problema.

OpenFPC es la rama hija de la plantilla

de Sourcefire, como Pulled Pork; el

número de versión es bastante bajo

(0.4), y necesitamos instalar primero

unos cuantos paquetes para cubrir las

dependencias. En las distribuciones

lación openfpc-install.sh install y res-

pondemos a las preguntas (por ejemplo,

el nombre de usuario y la contraseña).

El fichero /etc/openfpc/ openfpc- default.

conf se usa para otras configuraciones.

Luego arrancamos el servidor y compro-

bamos la disponibilidad de los clientes:

openfpc --action start

openfpc-client --action status

Para que el programa se ejecute en el

momento de arranque del ordenador,

encontraremos los scripts de arranque

en /etc/init.d. Para integrarlo con

Snorby, necesitamos hacer un pequeño

basadas en Debian como Ubuntu, la ins-

talación es más fácil, ya que podemos

hacer lo siguiente:

aptitude install apache2 U

daemonlogger tcpdump U

tshark libarchive-zip-perl U

libfilesys-df-perl libapache2U

-mod-php5 mysql-server php5U

-mysql libdatetime-perl U

libdbi-perl libdate-simple-perlU

php5-mysql libterm-readkey-perlU

libdate-simple-perl

Tras descomprimir el código fuente de

OpenFPC, ejecutamos el script de insta-

Figura 2: En la interfaz web de Snorby, los administradores pueden clasificar los resultados,

añadir comentarios y gestionar los sensores y los usuarios.

Opción Función

--enable-ipv6 Activa el soporte IPv6. Incluso si no se desea realmente usar IPv6, se debería activar esta función. Esta es la

única opción para que Snort soporte el parámetro ipvar utilizado en los ficheros de configuración 2.9.

--enable-static-daq Integra una librería DAQ estática. Esto facilita la distribución del binario.

--enable-zlib Muchos servidores comprimen las páginas cuando las sirven. Con este parámetro, Snort podrá analizar tam

bién las páginas web. Sin embargo, implica la incorporación de la librería Zlib al sistema.

--enable-targetbased Activa la configuración del preprocesador específica de un host, tal como se describe en el artículo.

--enable-decoder-preprocessor-rules Permite activar y desactivar las pruebas individuales del preprocesador.

--enable-reload Soporta una recarga simple en el caso de que cambie la configuración de Snort. El reiniciado siempre

implica la pérdida de algunos paquetes.

--enable-reload-error-restart Si falla la recarga, Snort se reinicia.

--enable-normalizer Activa el código normalizador en el modo en línea. Un binario de Snort puede funcionar en el modo en línea

IPS o en modo pasivo IDS si se utiliza la librería DAQ.

--enable-inline-init-failopen Permite a Snort pasar los paquetes sin comprobarlos durante la inicialización del modo en línea.

Tabla 1: Opciones de Configuración

Page 23: Linux Magazine 72r

Ayudantes de Snort • PORTADA

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

cambio mediante la GUI web. En la

interfaz administrativa, activamos el

plugin OpenFPC e introducimos en

OpenFPC el path:https:// Open-FPC- Ser-

ver_ name/ openfpc/ cgi-bin/ extract. cgi.

Luego podemos descargar el fichero

Pcap de la conexión entera directa-

mente desde la alerta en Snorby (Figura

3) y enviarlo a Wireshark para su análi-

sis.

La Seguridad TienePrioridadPor razones de seguridad, no debería-

mos nunca ejecutar Snort con los privi-

legios del root; tiene mucho más sentido

crear una cuenta dedicada para Snort y

añadir el nombre de la cuenta y el grupo

al fichero de configuración de Snort.

Además, podemos encerrar Snort en una

jaula Chroot; el fichero snort.conf que-

daría de la siguiente forma:

config set_uid: snort

config set_gid: snort

config chroot: /chroot/snort

Evidentemente, necesitamos modificar

algunos permisos y estructuras de direc-

torios para evitar que Snort tenga pro-

blemas.

Snort también ofrece algunos métodos

avanzados, tales como la reconstrucción

del tráfico basada en el destino. Los

investigadores Vern Paxson y Umesh

Shankar descubrieron en 2003 que dife-

rentes sistemas operativos manejan la

desfragmentación IP y reensamblan TCP

de diferentes maneras. Esto le propor-

ciona a un atacante la posibilidad de

camuflar un ataque de modo que com-

prometa el objetivo pero que no sea

detectado por el IDS.

Para permitir que esto suceda, el ata-

cante debería fragmentar el exploit, ade-

más crea el fragmento con la carga ata-

cante dos veces. Un fragmento contiene

la carga y el otro contiene datos no peli-

grosos. Si se envían los dos en sucesión,

el éxito o el fracaso del ataque y la habi-

lidad del IDS para detectarlo dependerán

de cómo responda el sistema objetivo.

¿Preferirá el primer o el segundo frag-

mento para la desfragmentación? Esta-

bleciendo los parámetros con cuidado,

el atacante podría ejecutar el exploit sin

que el IDS lo detecte.

Existen diferencias similares con los

segmentos TCP y el solapamiento de

los fragmentos y los segmentos. Para

asegurarse de que Snort siempre

detecte estos ata-

ques de forma correcta, necesita des-

fragmentar y reensamblar los paquetes

de la misma forma que lo haría el sis-

tema objetivo.

Snort posee un par de trucos propios

en respuesta a estos métodos de ataque

avanzado: soporta los modos de des-

fragmentación de first, last, bsd,

bsd-right, linux, windows y solaris, con

bsd por defecto. Para métodos de reen-

samblado más complejos, véase la

Tabla 2.

Si sólo utiliza uno o dos sistemas ope-

rativos, la configuración es bastante

simple: sólo hay que editar la sección

del preprocesador de snort.conf:

preprocessor frag3_engine: U

policy linux bind_to [10.1.1.U

12/32,10.1.1.13/32] U

detect_anomalies

preprocessor frag3_engine: U

policy windows bind_to U

10.2.1.0/24 detect_anomalies

Esta configuración está bien para las

redes Windows con dos ordenadores

Linux. De forma similar, habría que

modificar el preprocesador Stream5.

Para más detalles, léase el fichero

La mayoría de los parámetros de configuración que se encuen-

tran en el fichero snort.conf pueden quedarse tal cual, pero

habrá que hacer unos cuantos cambios. La configuración DAQ

utiliza la interfaz de paquetes AF y proporciona un búffer de 256

MB para utilizarlo de caché para cualquier paquete que aún no

haya procesado. La variable HOME_NET define la red a prote-

ger. Las variables RULE_PATH, SO_RULE_PATH y

PREPROC_RULE_PATH hacen referencia a los directorios

correctos. El plugin de salida unified2 crea los ficheros de regis-

tro:

config daemon

config interface: eth0

config daq: afpacket

config daq_mode: passive

config daq_var: buffer_size_mb=256

ipvar HOME_NET 192.168.0.0/24

var RULE_PATH /etc/snort/rules

var SO_RULE_PATH /etc/snort/so_rules

var PREPROC_RULE_PATH /etc/snort/preproc_rules

output unified2: filename merged.log, limit 128,

vlan_event_types

Para utilizar reglas de preprocesamiento y reglas de objetos

compartidos, deberemos quitar los signos de comentario que

se encuentran al comienzo de las directivas incluidas en las

correspondientes secciones.

snort.conf Uno de los mayores problemas a la hora de ejecutar Snort en

una red rápida es su propio rendimiento. Si Snort tardara dema-

siado en analizar los paquetes y fallase a la hora de obtener los

paquetes a la velocidad necesaria de la librería Libpcap [10], la

librería descartaría el paquete. Es más, los administradores han

usado dos soluciones diferentes para solucionar este problema:

Phil Wood añadió un búffer de memoria en anillo a Libcap; el

tamaño del búffer se especificaba cuando se cargaba la librería.

A partir de la versión 1.0 de Libpcap, el búffer en anillo viene

implementado en la librería. Otra solución es la librería PF_ring

[11], que reemplaza a la librería libpcap.

La versión 2.9 de Snort presenta DAQ (librería para la adquisi-

ción de datos) como una alternativa nueva y mucho más sim-

ple, que accede directamente a la tarjeta de interfaz de red sin

hacer uso de Libpcap. DAQ es fácil de instalar, sin embargo, la

mayoría de las distribuciones no cuentan con los paquetes pre-

compilados con los parámetros correctos. De hecho, la página

web de Snort sólo ofrece paquetes RPM. Tras descargar la

última versión 0.5 del código fuente, sólo hay que seguir los

pasos típicos: ./configure,make,sudo make install. No hay

muchas dependencias que resolver. Para asegurarse de que se

pueden compilar los fuentes, probablemente haya que instalar

el compilador de C, Flex, Bison y libpcap >= 1.0. Si no va a usar

Libpcap, sino que accede a la NIC directamente por medio de la

librería DAQ, puede desactivar Libpcap

usando --disable-pcap-module.

DAQ

Page 24: Linux Magazine 72r

mente desde un análisis de Nmap pode-

mos utilizar Hogger [15].

¡Corre, Cerdito, Corre!Con una combinación inteligente de los

componentes adecuados, podemos crear

un sistema de detección de intrusiones

en la red con Snort. Obviamente, necesi-

tamos utilizar un buen hardware en una

red rápida. Dispositivos como el que

comercializa Sourcefire pueden monito-

rizar las redes a velocidades de hasta 10

Gbps ejecutanto Snort 2.9 en un hard-

ware altamente especializado.

Comparado con

esto, el hardware

normal habitual-

mente alcanza su

límite a 1 Gbps. Se

recomiendan tarje-

tas interfaces de

red premium –

como las fabrica-

das por Napatech

[16], por ejemplo

– una generosa

cantidad de RAM y

una CPU rápida.

Además, los admi-

nistradores que

buscan rendi-

miento necesitarán

modificar los pará-

metros del prepro-

cesador para indicar la cantidad de RAM

disponible.

Conseguir que Snort maneje redes de

10 Gbps es todo un reto – pero no impo-

sible – con una buena experiencia, el

hardware adecuado y un ajuste óptimo.

La respuesta que Steven Sturges de

Sourcefire da cuando se le pregunta

acerca de cuál es el mayor desafío, es

concisa: “Velocidad”. Y continúa expli-

cando que no es difícil analizar 500

Mbps en tiempo real; el reto está en

intentar hacer lo mismo con ¡10 Gbps! �

README.stream5 que se encuentra en

el directorio del código fuente de

Snort.

Si tenemos muchos sistemas operati-

vos en la LAN, esta clase de administra-

ción es demasiado compleja. En tal

caso, necesitamos una tabla de atributos

de los hosts para definir la información

en un fichero XML (Listado 1). La tabla

se define en snort.conf como

attribute_table filename /path/to/file. La

tabla de atributos de hosts contiene

información de cada ordenador indivi-

dual. Para crear el fichero XML directa-

PORTADA • Ayudantes de Snort

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

Ralf Spenneberg es profesor free-

lance de Unix/ Linux, consultor, y

autor y CEO de Ralf Spenneberg

Open Source Training. Ralf ha

publicado varios libros sobre

detección de intrusiones, SELinux,

cortafuegos y redes privadas vir-

tuales. La segunda edición de su

último libro VPN on Linux se pub-

licó hace unos meses.

EL A

UT

OR

[1] Snort: http:// www. snort. org

[2] Sourcefire: http:// www. sourcefire.

com

[3] Oinkmaster: http:// oinkmaster.

sourceforge. net

[4] BASE: http:// base. secureideas. net

[5] Snorby: http:// www. snorby. org

[6] OpenFPC: http:// www. openfpc. org/

[7] Pulled Pork: http:// code. google. com/

p/ pulledpork/

[8] Insta-Snorby del 19.01.2011 http://

www. snorby. org/ Insta-Snorby-0. 6. 0.

iso

[9] Librería TurnKey Linux Virtual

Appliance: http:// www. turnkeylinux.

org

[10] Librería libpcap: http:// www.

tcpdump. org

[11] LibreríaPF_ring: http:// www. ntop.

org/ PF_RING. html

[12] Barnyard2 http:// www. securixlive.

com/ barnyard2/ index. php

[13] Fichero Waldo: http:// en. wikipedia.

org/ wiki/ Waldo_file

[14] Repositorio Snorby Git: https://

github. com/ Snorby/ snorby/ tarball/

master

[15] Hogger: http:// code. google. com/ p/

hogger/

[16] Napatech: http:// www. napatech.

com/ applications/ network_security/

intrusion_detection. html

RECURSOS

Figura 3: Si usamos el fichero PCAP, podremos definir con precisión qué paquetes queremos

que extraiga OpenFPC.

Método Efecto

first Prefiere el primer segmento de solapamiento

last Prefiere el último segmento de solapamiento

bsd Free BSD 4.x, Net BSD 2.x, Open BSD 3.x, AIX

linux Linux 2.4 y 2.6

old-linux Linux 2.2 y anteriores

windows Windows 98, NT, 2000, XP

win2003 Windows 2003 Server

vista Windows Vista

solaris Solaris 9.x

hpux10 HPUX 10

hpux HPUX 11

irix IRIX 6

macos MacOS >= 10.3

Tabla 2: Reensamblado Basado en elObjetivo

Page 25: Linux Magazine 72r

Vídeodiscos HD • PRÁCTICO

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

perar – busque el logotipo AVCHD en el

dispositivo.

MPEG4 AVC, también conocido como

H.264, es un códec de alta eficiencia, y el

codificador libre x264 AVC [2] ofrece, con

diferencia, la mejor calidad para la codifica-

ción H.264, especialmente a bitrates bajos.

Si utilizamos primero el codificador x264

para convertir vídeo al formato AVCHD,

luego podemos empaquetarlo en un disco

compatible Blu-ray. La configuración

correcta obtiene hasta 3 horas de vídeo con

una resolución de 1080p en un DL-DVD de

8 GB con una resolución razonable, y si

sólo hay que poner 1,5 horas de vídeo en el

disco, no habrá prácticamente ninguna

diferencia entre la calidad del disco de 8 GB

AVCHD y un disco Blu-ray.

Hasta el momento, Linux no proporciona

una herramienta para crear menús de Blu-

ray o AVCHD, sin embargo, herramientas

como tsMuxeR [3] permiten preparar una

película individual que se pondrá en mar-

cha automáticamente en un reproductor de

Blu-ray después de grabarlo en un BD-R(E)

o en un DVD.

Por último, habrá que grabar el archivo

de formato AVCHD en un DVD utilizando

una herramienta de grabación que sea

Con paso lento, pero seguro, Blu-ray

se está volviendo atractivo como

medio de almacenamiento. La alta

capacidad de los discos ópticos Blu-ray, que

están diseñados para contener los datos de

hasta seis DVDs estándar, está llamando la

atención como soporte para vídeos de alta

definición. Por desgracia, Linux ofrece un

apoyo limitado para Blu-ray. Sin embargo,

podemos crear – en Linux – nuestros pro-

pios discos que se reproducirán en disposi-

tivos Blu-ray y otros reproductores de vídeo

HD. En este artículo describiremos cómo

grabar nuestros propios discos Blu-ray com-

patibles con vídeo de alta definición.

Tostando en Blu-rayEstrictamente hablando, no es necesario

un disco Blu-ray o un grabador Blu-ray a

juego para crear un disco de vídeo HD

compatible con Blu-ray. El formato AVCHD

[1] especificado originalmente por Sony y

Panasonic para cámaras de vídeo HD, per-

mite a los usuarios grabar contenido en

alta definición en DVD o DL-DVD, que los

reproductores Blu-ray pueden reproducir.

La mayoría de reproductores actuales

entienden el formato AVCHD, aunque

algunos modelos antiguos se niegan a coo-

compatible con la versión 2.5 del Formato

de Disco Universal (UDF). Como se verá

más adelante en este artículo, la aplicación

comercial de grabación Nero Linux es la

única herramienta para la creación en

Linux de discos compatibles UDF 2.5.

Contenido HDPara crear un disco Blu-ray o AVCHD, pri-

mero es necesario algún tipo de contenido

de vídeo de alta definición (HD). Los pro-

gramas de edición con capacidad HD como

Kdenlive, OpenShot Video Editor o Cinele-

rra permiten editar las películas grabadas

con una cámara de vídeo HD y exportarlas

ph

yzic

k, 1

23R

F

Crea tus propios discos HD y Blu-ray

Alta DefiniciónCasera

Ante la falta de oferta comercial de tecnología Blu-ray, los usuarios de Linux han tendido a considerar este

medio con escepticismo. Sin embargo, en Linux podemos crear nuestros propios discos de vídeo HD tanto en

formato Blu-ray como DVD. POR DANIEL KOTTMAIR

Figura 1: El dialogo Stream de VLC nos lleva

directamente al asistente de conversión.

Page 26: Linux Magazine 72r

a problemas en el proceso de distribución

[7].

Codificación de VídeoEl codificador x264, cortesía del proyecto

VideoLAN, es conocido por su eficiencia,

velocidad y excelente nivel de optimiza-

ción. Para controlarlo podemos utilizar

FFmpeg o Mencoder con Libx264; diversos

transcodificadores, como el Asistente para

Exportación de Streaming en VLC, Trans-

mageddon o Arista también usan x264.

También hay un programa x264 stand-

alone que sólo acepta como entrada

YUV4MPEG sin comprimir.

Muy pocos frontends x264 permiten la

configuración exacta necesaria para crear

un disco Blu-ray o un archivo de vídeo

compatible con AVCHD. Por esta razón, la

solución descrita en este artículo se basa en

la creación de una tubería con Mplayer y

x264. Como no se puede enviar directa-

mente la salida de MPlayer como YUV4-

MPEG sin comprimir a x264 a través de una

tubería, voy a utilizar un archivo FIFO al

que acceden ambos programas. El archivo,

que siempre tiene un tamaño de 0 bytes, no

permite la escritura a menos que se esté

produciendo una lectura al mismo tiempo,

por lo que emula un medio lento, así que

no necesitamos tener cientos de GB de

espacio para el flujo de vídeo YUV4-HD sin

comprimir. Debido a que MPlayer puede

reproducir casi cualquier cosa, necesitamos

convertir casi cualquier vídeo reproducible

en un flujo de vídeo compatible con Blu-

ray/ AVCHD utilizando esta técnica.

Codificacion de Vídeo en laShellInstalamos Mplayer y x264 desde los repo-

sitorios de nuestra distribución. Si por

a un archivo de vídeo HD de gran tamaño.

También se puede encontrar contenido HD

legal en Internet, como las versiones de alta

definición de películas de YouTube, o cortos

libres de Blender, como Elephants Dream,

Big Buck Bunny y Sintel [4]. Algunos archi-

vos de Internet proporcionan películas lega-

les en HD, como los dibujos animados Sita

Sings the Blues [5], lanzados bajo la licencia

Creative Commons, o el clásico de zombies

de George Romero “La noche de los muer-

tos vivientes [6], que según se indica está

en el dominio público en los EE.UU. debido

PRÁCTICO • Vídeodiscos HD

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

Los estándares Blu-ray y AVCHD definen qué apariencia deben tener el audio y el vídeo para que se pueda reproducir en un Blu-ray (o

una Playstation 3). La especificación del formato AVCHD es un subconjunto de la especificación Blu-ray, pero hay una gran confusión

sobre las diferencias entre Blu-ray y AVCHD.

Los dos estándares son muy similares, pero los nombres de los archivos y la estructura de AVCHD, son algo diferentes existiendo algu-

nas restricciones adicionales con respecto a las tasas de bits y los codecs.

De vez en cuando nos encontramos (incorrectamente) con denominaciones tales como BD5 o BD9 para AVCHD. Este formato, que fue

propuesto por Warner Home Video pero que nunca fue soportado oficialmente por los reproductores Blu-ray, tiene una estructura de

archivos y una especificación que es 100 por cien idéntica a la de Blu-ray, pero sólo es para discos DVD.

Tal y como indica su nombre, AVCHD sólo es compatible con AVC como códec de vídeo, mientras que Blu-ray también es compatible con

VC-1 – la designación de la Sociedad de Ingenieros de Cine y Televisión (SMPTE) para WMV3 de Microsoft – y MPEG2. Por esta razón, en

este artículo me ceñiré estrictamente a AVC: el código es el más eficiente y adecuado para ambos formatos.

Además del propio códec, también hay que tener en cuenta otros parámetros: las dos variantes asignan una formato 16:9 de alta defini-

ción y píxeles cuadrados. Esto significa que la resolución de vídeo debe ser exactamente 1280x720 (720p) o 1920x1080 (1080p). Sólo hay

una excepción, cuando Sony rompe con sus propias normas de píxeles cuadrados: la resolución anamórfica de 1440x1080. Pero sólo hay

un par de cámaras de vídeo HD que graban en este formato, por lo que puede ignorar esta opción tranquilamente. AVCHD también es

compatible con resoluciones SD como 480p o 576p. Todos los vídeos de alta definición que no son exactamente 1280x720 ó 1920x1080

tienen que escalarse primero a esta resolución, si no tendrá que utilizar el letter-boxing, quedando la imagen entre 2 franjas negras hori-

zontales.

Blu-ray y AVCHD son compatibles con CABAC (codificación aritmética), que mejora enormemente la calidad del AVC. Hay que tener cui-

dado con los cuadros de referencia, ya que tienen que estar completamente en memoria, y la memoria de un reproductor de Blu-ray es

muy limitada: las normas de nivel 4.1 del reproductor de Blu-ray y AVCHD sólo permiten un máximo de seis cuadros de referencia para

720p y cuatro cuadros de referencia para 1080p.

También hay restricciones en las imágenes por segundo: Blu-ray y AVCHD solamente permiten 24 fps para 1080p, 50 ó 60 para 1080i

(entrelazado), y 24, 50 ó 60 fps para 720. Desviaciones menores de esta tasa, como 23.96 fps, 25 fps o 59.9, también funcionarán, pero

tasas tales como 29,97 ó 30 fps no funcionarán de ninguna manera. Si tiene un vídeo de 30 fps, o el dispositivo de salida HD no es com-

patible con 25 fps, puede intentar --fake-interlaced --pic-struct como una opción adicional de x264.

Por último, debe prestar atención a las tasas de bits: Blu-ray es compatible con un flujo mayor global de tasa de bits (hasta 36 Mbps para

BD-R, de 48 Mbps para Blu-rays prensados) en comparación con el formato AVCHD (18 Mbps como máximo), ya que un DVD no entrega

los datos tan rápido como un reproductor de Blu-ray; DVD 2x es equivalente a 2,7 Mbps, pero BD 2x es equivalente a 9 MBps. Para estar

seguros, no ajustaremos un flujo de vídeo de más de 25 Mbps para el formato Blu-ray o más de 13 Mbps para AVCHD.

En lo que respecta al códec de audio, Blu-ray admite LPCM sin comprimir, Dolby Digital (AC3)/ Digital +/ TrueHD, DTS/ DTS-HD y (posterior-

mente a las especificación 2.3) China’s Dynamic Range Audio (DRA). Oficialmente, AVCHD sólo es compatible con Dolby Digital de 1 a 6

canales (64 a 640 kbps) o PCM sin comprimir (hasta 1,5 Mbps, 2 canales), aunque la mayoría de reproductores, saltándose la norma, tam-

bién admiten DTS.

Blu-ray y AVCHD

Figura 2: Configurando los parámetros com-

patibles con el estándar de sonido Dolby

Digital.

Figura 3: Se selecciona el fichero y el códec

objetivo, y a continuación pulsando Stream

comienza la conversión del sonido.

Page 27: Linux Magazine 72r

casualidad conseguimos una versión

“expurgada” de Mplayer a la que se le haya

quitado el códec por razones de patentes, y

la versión que tenemos no puede reprodu-

cir el archivo, sólo tendremos que descar-

gar el código fuente [8] y compilar el repro-

ductor. Los desarrolladores de x264 van

cambiando los parámetros a los que dan

soporte; si nuestro x264 no es compatible

con los parámetros que figuran listados

aquí, deberemos construir nuestra propia

versión otra vez.

Para comenzar, creamos el archivo FIFO

con el comando mkfifo stream.y4m: este

archivo es para el flujo YUV4 sin compri-

mir. A continuación, agregamos el

comando en la línea 1 del Listado 1. En otro

terminal, empezamos a leer y a codificar

desde el archivo Y4M (Línea 2). Sólo se

pueden ejecutar estos dos comandos suce-

sivamente en un guión mediante el envío

del proceso Mplayer a un segundo plano

utilizando el ampersand (&).

Añadimos los parámetros para los cua-

dros de referencia al segundo comando: -r 6

para 720p o -r 4 para 1080p. Las otras dife-

rencias entre AVCHD y Blu-ray sólo afectan

al valor para --crf – que fundamentalmente

define la tasa de bits – y los dos paráme-

tros --vbv-maxrate y --vbv-bufsize. Para

DVD, --vbv-bufsize se debe establecer con

un valor de 15000, mientras que para Blu-

ray debe ser de 40000 (--vbv-maxrate) y

30000 (--vbv-bufsize), respectivamente. Para

el modo de vídeo entrelazado 1080i hay

que añadir la opción --interlaced. Las confi-

guraciones que he utilizado aquí son las

recomendadas por los desarrolladores [9].

Varios parámetros adicionales de Mpla-

yer permiten modificar el vídeo – por ejem-

plo escalarlo, aligerarlo, añadir subtítulos

embebidos o cambiar el formato. La docu-

mentación de Mplayer [9] explica todas las

opciones ampliamente. Para las resolucio-

nes que no son exactamente 1280x720 ó

1920x1080, habrá que ampliar o recortar el

vídeo a la anchura adecuada, como en:

-vf dsize=1280:720:0,scale=0:0,U

expand=1280:720,

o

-vf dsize=U

1920:1080:0,scale=0:0,U

expand=1920:1080

Para comprobar si todo va como esperába-

mos, reproducimos el fichero fuente con

mplayer sin el parámetro -vo

yuv4mpeg:file=stream.y4m antes de codifi-

car.

Seleccionaremos la tasa de bits con el fin

de hacer el mejor uso posible del disco de

destino. Si la película sólo dura media hora,

podemos ir tranquilamente al máximo de

25 Mbps para el formato Blu-ray o 13 Mbps

para AVCHD. Si tenemos tres horas de con-

tenido, tendremos que bajar a 5 Mbps para

AVCHD en un DL-DVD. Téngase en cuenta

que es necesario agregar el tamaño de la

secuencia de audio a la secuencia de vídeo

– y no nos olvidemos de la sobrecarga

necesaria para transportar el flujo MPEG,

con lo que el resultado aumenta alrededor

de un 6,5 por ciento. El BD-R (de una sola

capa) puede contener un máximo de

23,30GB, un DL-DVD 7,95GB y un DVD

4.37GB. Antes de volver a empaquetar con

tsMuxer, el vídeo y el audio en bruto no

deberían ocupar más de 21.8, 7.5 ó 4.1GB.

Aunque x264 es un códec de alto rendi-

miento, la codificación llevará un tiempo

razonable en una máquina rápida. Su rendi-

miento dependerá del vídeo en sí – un vídeo

Vídeodiscos HD • PRÁCTICO

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

$ mplayer -vo yuv4mpeg:file=stream.y4m -nosound sourcefile

$ x264 --crf 22 --preset slow --tune film --weightp 0 --nal-hrd vbr --vbv-maxrate 15000 --vbv-bufsize 15000

--aud --keyint 24 --bframes 3 --slices 4 --level 4.1 --b-pyramid strict -o Output.264 stream.y4m

Listado 1: Configuración del Flujo

Figura 4: tsMuxeR nos deja crear la estructura necesaria para el

archivo. Figura 5: TsRemux es un programa .NET que ya no se mantiene.

Page 28: Linux Magazine 72r

Para convertir flujos de audio incompati-

bles, utilizamos cualquier codificador de

audio que admita Dolby Digital. La función

Stream file export del VLC media player, del

proyecto VideoLAN, es muy fácil de usar

(menú File), siendo posible convertir fácil-

mente audio en Dolby Digital (AC3 o a52).

Añadimos el archivo en el cuadro de diá-

logo Stream (VLC 1.1.4) – ya sea un vídeo o

sólo audio – y luego pulsamos Stream

(Figura 1).

A continuación, creamos un perfil de

audio AC3 a juego: para Encapsulation

seleccionamos raw; los archivos AC3 con-

tienen datos en crudo sin las cabeceras de

archivo. Tenemos que deshabilitar Video y

Subtitles. En la pestaña Audio codec (Figura

2), primero comprobamos que tenemos

a52/ AC3 como códec y 48 kHz como Sam-

ple rate en Audio. El Bitrate puede ser de

64, 96, 112, 128, 160, 192, 224, 256, 320,

384, 448, 512, 576 ó 640 kbps. Bitrates por

encima de 256 kbps sólo se utilizan nor-

malmente para canales de audio múltiples

en 5.1; una tasa superior a 224 kbps no

mejorará la calidad del audio estéreo nor-

mal.

En el asistente de Streaming, hacemos

clic en Add en la pestaña File e introduci-

mos el nombre del archivo de destino

(Figura 3). Nos aseguraremos de no poner

una extensión de archivo para el archivo

de destino, de lo contrario, el proceso de

transcodificación fallará en el inicio. A

continuación, iniciamos el proceso de

transcodificación pulsando Stream. Tras

la transcodificación, agregaremos la

extensión de .AC3 al archivo. Pulsamos

Stream para comenzar la conversión del

sonido.

Estructura AVCHD/ Blu-rayEl tsMuxeR de SmartLabs transporta el

flujo multiplexado que empaquetará el

vídeo AVCHD y los componentes de Dolby

Audio en una estructura de archivos com-

patibles con discos Blu-ray y AVCHD. En el

sitio web de SmartLabs [3] hay una versión

de tsMuxeR para Linux. Para empezar, ini-

ciamos el GUI tsMuxeR (Figura 4) y selec-

cionamos el archivo 264 creado por x264

que contiene la pista de vídeo y después el

archivo de audio Dolby Digital (add), a

continuación, hacemos clic para seleccio-

nar el idioma de la pista de audio. En la

parte inferior, seleccionamos el formato ele-

gido (Blu-ray disk o AVCHD disk), y luego

podemos añadir opciones tales como capí-

tulos.

tsMuxeR también nos permite crear

subtítulos, concatenar flujos (suponiendo

que la codificación sea idéntica), o dividir

flujos (por ejemplo, para versiones de

AVCHD en discos duros FAT32, donde sólo

se permite un tamaño máximo de archivo

de 4 GB). Pero no debemos cambiar nin-

guna otra configuración para evitar que el

flujo sea incompatible. Una vez que tene-

mos todo configurado, pulsamos Start

muxing, y tsMuxer empaquetará los datos

de audio y vídeo en un flujo de transporte

MPEG-2 (M2TS) y creará una estructura

de archivos compatible con Blu-ray o

AVCHD.

La única alternativa en Linux a tsMuxeR

es el programa TsRemux (Figura 5), un pro-

grama. NET que no se ha actualizado en

mucho tiempo. Nos las arreglamos para

ejecutar TsRemux en Mono con un par de

modificaciones (TSremunix.exe). El pro-

grama es una versión muy prematura, la

real, que contiene ruido, tarda mucho más

que un vídeo CGI sin ruido – y de la tasa de

bits seleccionada: cuanto mayor sea la tasa

de bits, más lenta será la codificación.

Para acelerar el proceso de codificación

usamos el modo CRF (Factor de Velocidad

Constante), que ofrece una calidad similar

a la codificación de 2 pasadas pero dura el

doble de tiempo. Si tenemos 1,5 horas de

película, empezamos con un factor de CRF

de 22, y cambiamos el valor si es necesario

– cuanto mayor sea el factor de CRF, más

pequeño es el archivo y más baja la tasa de

bits. Si queremos asegurar que alcanzamos

la tasa de bits de destino en la primera

pasada, reducimos la calidad y utilizamos

una sola pasada con -B bitrate_in_kbps en

lugar de --crf.

x264 admite hasta ocho núcleos, inclui-

dos los núcleos virtuales proporcionados

por Hyper-Threading de Intel. Con nuestra

configuración de vídeo de alta calidad,

hemos conseguido una velocidad casi a

tiempo real en un equipo de seis núcleos

Sechskern (Core i7 980X) para un vídeo de

720p a 24 fps, es decir, le llevó media hora

codificar 30 minutos de película. La herra-

mienta MediaInfo [10] debe estar en cual-

quier máquina que se utilice para editar

vídeo. MediaInfo identifica la tasa de bits

del flujo final.

Codificación de AudioSi ya tenemos una pista de audio Dolby

Digital, podemos extraerla fácilmente con

la siguiente orden:

$ mplayer -dumpaudio -dumpfile U

audiofile_name.ac3 U

moviefile_name

PRÁCTICO • Vídeodiscos HD

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

Figura 6: La configuración UDF es importante para la creación de dis-

cos AVCHD y Blu-ray. Figura 7: Nero está listo para tostar un videodisco HD.

Page 29: Linux Magazine 72r

0.0.21.2, plagada de errores, y que no ofrece

ninguna ventaja sobre tsMuxeR – además,

no soporta explícitamente AVCHD. A esto

hay que añadir el hecho de que como

entrada sólo admite archivos MPEG-TS, lo

que significa que primero tenemos que

empaquetar el vídeo y el audio en formato

MPEG-TS. Por esta razón, sólo debemos

probar TsRemux en el (muy improbable)

caso de que tsMuxeR no funcione.

Si además deseamos crear una versión

del archivo que utilice el formato de archivo

contenedor MKV para reproducirlo en la

amplia variedad de HDs multimedia con

reproductores compatibles con MKV que

hay actualmente en el mercado, podemos

combinar (“mux”) el flujo de vídeo y audio

con MKVmerge. El programa MKVmerge,

con su sencilla interfaz gráfica de usuario,

es parte del paquete MKVtoolnix, que

podemos encontrar en el repositorio de

nuestra distribución. Las GUIs de

MKVmerge y tsMuxeR son muy similares y

enseguida nos haremos con él. En MKV -

toolnix, a partir de la versión 4.1, es impor-

tante que nos aseguremos de establecer a

None el valor de Compression en la pestaña

Extra Options para las pistas de audio y

vídeo; de lo contrario el archivo no funcio-

nará en la mayoría de los reproductores

hardware.

QuemandoLo único que necesitamos hacer ahora es

grabar la estructura Blu-ray o AVCHD cre-

ada por tsMuxeR en el disco adecuado. En

el primer intento, para probar si todo está

funcionando, utilizaremos un DVD-RW

regrabable o un BD-RE. Para grabar el

archivo necesitamos Nero 4 Linux [11], que

tiene un precio de 20 euros y es el único

programa que nos permite configurar el

nivel UDF en Linux. Decididamente, tanto

para Blu-ray como para AVCHD, necesita-

mos quemar con un nivel UDF de 2.5.

(Desafortunadamente, el programa

mkudffs utilizado por la mayoría de herra-

mientas de grabación de Linux, que es

parte de las Udftools y que no ha sido

actualizado desde hace muchos años, no

puede crear imágenes ISO con un nivel

superior a UDF 2.01).

En el menú DVD de Nero (Figura 6),

vamos a Manual settings para DVD-ROM

(UDF) y lo establecemos en UDF 2.5; el

planteamiento es idéntico para Bluray.

Nero nos avisará de que no se puede grabar

UDF 2.5 en Linux, pero podemos pasar por

alto la advertencia. Este mensaje es anterior

a la versión 2.6.26 del kernel, que incluyó

la compatibilidad UDF 2.5 en Linux. Move-

mos las carpetas BDMV y CERTIFICATE al

directorio raíz del disco, de lo contrario no

funcionará. Escribimos un nombre para el

disco y hacemos clic en Burn.

¡Todo Terminado!Una vez finalizado este proceso, debemos

tener en la bandeja de nuestro dispositivo

grabador un DVD o un Blu-ray con vídeo

HD, y el disco deberá funcionar en repro-

ductores Blu-ray y en la Playstation 3. Este

disco está libre de protecciones de copias

DRM que plagan los discos Blu-ray comer-

ciales, por lo que puede duplicarse. Proba-

mos la AVCHDs y los Blu-rays creados con

los siguientes reproductores: BDP-S370/

S570 Sony y Playstation 3, DMP-BD45/ 65

Panasonic, Pioneer BDP-120, Samsung

BDC-6900, LG BX 580, Philips BDP-3000 y

Sharp BD-HP90S. El disco funcionó bien en

todos estos dispositivos, a excepción del

Sharp, que rechazó el BD-RE, ya que ni

siquiera alcanzaba la velocidad necesaria;

parece un problema de compatibilidad con

el BD-RE Verbatim que utilizamos en nue-

tras pruebas. �

Vídeodiscos HD • PRÁCTICO

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

[1] Página de AVCHD: http:// www. avchd-info. org/

[2] Página del codificador x264: http:// www. videolan. org/ developers/ x264. html

[3] tsMuxeR: http:// www. smlabs. net/ en/ products/ tsmuxer/

[4] Película con Blender: http:// www. blender. org/ features-gallery/ movies/

[5] “Sita Sings the Blues”: http:// www. archive. org/ details/ Sita_Sings_the_Blues

[6] “The Night of the Living Dead”: http:// www. archive. org/ details/ night_of_the_living_dead

[7] Lista de Wikipedia de las películas en

el dominio público en USA: http:// en. wikipedia. org/ wiki/ List_of_films_in_the_public_domain_in_the_United_States

[8] Página del proyecto Mplayer: http:// www. mplayerhq. hu/ design7/ news. html

[9] Documentación de Mplayer: http:// www. mplayerhq. hu/ design7/ documentation-es. html

[10] Mediainfo: http:// mediainfo. sf. net/ es

[11] Nero 4 Linux: http:// www. nero. com/ enu/ linux4. html

RECURSOS

Page 30: Linux Magazine 72r

Desde el primer satélite artificial,

el Sputnik, que fue lanzado en

1957, un gran número de naves

espaciales de diferentes diseños han

orbitado el planeta: de simples satélites

de comunicaciones, a las sondas espacia-

les con complejos instrumentos y la

Estación Espacial Internacional (ISS). La

mayoría de estos cuerpos celestes artifi-

ciales están en una baja órbita terrestre

en altitudes de entre 200 y 1200 kilóme-

tros. Por el contrario, los satélites de tele-

visión y meteorológicos usan órbitas

geoestacionarias a unos 36.000 kilóme-

tros sobre el ecuador (su velocidad angu-

lar es equivalente a una órbita por día,

por lo que un satélite en esta ubicación

se mantendrá en la misma posición res-

pecto a la superficie de la Tierra). En una

noche clara podemos ver muchos de

estos satélites como puntos de luz que

cruzan el cielo. Los observadores no

expertos tienden a confundirlos con

aviones.

Una de las formas más populares de

identificar satélites y predecir sus órbitas

es a través de la página web Heavens

PRÁCTICO • Gpredict

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

Above [1], que ha ofrecido predicciones

durante muchos años trazando órbitas

de satélites en mapas estelares. Además,

cada vez existen más programas de

apoyo planetario de localización por

satélite y que extraen los satélites artifi-

ciales en sus cartas de inicio. Gpredict

[2] (que viene de Gnome Predict) se cen-

tra exclusivamente en los satélites, y por

lo tanto ofrece muchas más opciones

que Heavens Above.

Variantes de InstalaciónMuchas distribuciones incluyen Gpredict

en sus repositorios, como es el caso de

Ubuntu, que hemos usado en nuestro

equipo de laboratorio. Aunque la rama

Universe de Ubuntu 9.04 sólo ofrece un

paquete antiguo de Gpredict, el 0.90,

Ubuntu 10.04 y posteriores vienen con la

versión más reciente 1.1. Sin embargo, la

última versión de Gpredict es la 1.2.Para

instalarla, descargamos el código fuente

[3] desde la página web de Gpredict, y a

continuación debemos prepararnos para

hacer frente a una serie de obstáculos.

Ubuntu 9.04 no es capaz de resolver

algunas dependencias de la versión 1.2,

ya que las versiones más recientes de

Gtk+ y GLib no están disponibles como

paquetes para 9.04.

A pesar del mensaje de error de que

intltool es demasiado antiguo, fuimos

capaces de compilar Gpredict 1.2 en

Ubuntu 10.04. Sin embargo, no pudimos

descargar los paquetes necesarios

libfree type6, a pesar de que el gestor de

paquetes los listaba. En lugar de esto,

nos dirigimos a la página de búsqueda

de paquetes de Ubuntu [4]. Antes de

compilar el código fuente, también tuvi-

mos que instalar los paquetes de

desarrollo para las librerías necesarias

relacionadas con Gtk+ 2.12, GLib 2.16,

iyew

keo

, 123R

F

Software de seguimiento de satélites

CAÍDO DEL CIELOPuedes predecir y monitorizar órbitas de satélites y controlar equipos

de radio aficionado con el software de seguimiento de satélites Gpre-

dict. POR MICHAEL GOTTWALD

También conocido como QRA Maiden-

head Locator [5], el localizador QTH define

una rejilla cuadrada de 84 datos WGS geo-

désicos. Desarrollado por aficionados al

final de los años 50, y codificado múltiples

veces, ayuda a calcular la distancia y direc-

ción entre usuarios de redes de radio. El

localizador QTH para Chicago, por ejem-

plo, es EN61EU.

Localizador QTH

Page 31: Linux Magazine 72r

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

libcurl 7.16.0, GooCanvas 0.9, libfre e -

type6, Hamlib (sólo en tiempo de ejecu-

ción), y otros, dependiendo de su distri-

bución.

Centro de ControlTras iniciar Gpredict, veremos algo que

recuerda a un centro de control de misio-

nes espaciales con pantallas que trazan

las órbitas de las estaciones espaciales

como líneas en un mapa de la Tierra

(véase la Figura 1). La configuración

básica divide la ventana principal en tres

secciones: el mapa del mundo que aca-

bamos de comentar, las áreas de infor-

mación de satélites y la vista polar. El

mapa del mundo también muestra todos

los satélites seleccionados, incluyendo

sus huellas y el área en la superficie de la

Tierra desde donde se puede ver el saté-

lite.

El primer paso es definir nuestra ubi-

cación, que Gpredict utiliza como esta-

ción de tierra. Por lo general podemos

elegir entre una larga lista de lugares,

que Gpredict ofrece en Edit | Preferencesen la pestaña Ground Stations del menú

General. Para facilitar su uso, el pro-

grama ordena la lista por regiones como

Europa, Asia, Estados Unidos y así suce-

sivamente.

Si ninguna de las ciudades que ofrece

Gpredict está cerca de su casa, puede

definir la ubicación manualmente. Para

ello es necesario introducir el nombre de

su ubicación y las coordenadas geográfi-

cas, todos los demás detalles son opcio-

nales. Al introducir la altitud se puede

predecir la refracción atmosférica en el

cálculo de la órbita. El programa calcula

el localizador él solo (consulte la sección

“Localizador QTH”).

En la ventana Preferences también se

define el formato numérico a usar, las

vistas del módulo, el contenido de las lis-

tas de predicciones, la resolución de

tiempo y muchas otras cosas. Si es nece-

sario, también puede configurar su

equipo de radio y las unidades de la

antena desde aquí. Al elegir Show localtime instead of UTC en los formatos de

número, las horas reportadas tendrán

más sentido para nosotros.

Si Gpredict no le indica que lo haga,

debería actualizar los elementos de

órbita de los satélites justo después de la

instalación y luego un par de días

más tarde. Cuando los satélites

orbitan la Tierra, su órbita se ve

afectada por la fricción de la

atmósfera residual con el tiempo.

El efecto es bastante leve, pero

puede tener un efecto importante

sobre la exactitud de la predic-

ción. Para actualizar los datos de

forma rápida y sencilla a través

de Internet seleccionamos Edit |Update TLE | From network. La

actualización descarga los ele-

mentos de dos líneas actuales (un

formato común para la represen-

tación de las órbitas de satélites

como un bloque de números en

dos líneas) de los satélites que

hemos seleccionado para obser-

var.

ModularGpredict utiliza un diseño modu-

lar, donde cada módulo contiene

un número arbitrario de satélites y una

estación terrestre. El programa organiza

los módulos en pestañas, entre las que

puede ir cambiando el usuario. Este

diseño hace que sea posible, por ejem-

plo, organizar los satélites que queremos

monitorizar por temas (Astronomía,

observación, meteorología, etc.) (véase

la Figura 1) o como listas (ciudades,

hoteles, etc.) para diferentes estaciones

terrestres.

Cuando creamos un nuevo módulo

(File | New module), primero tenemos

que asignar un nombre, a continuación

seleccionar la estación terrestre, y final-

mente asignar uno o más satélites (véase

la Figura 2) – ya sea mediante la selec-

ción de la lista organizada alfabética-

mente o mediante la búsqueda de un

satélite, escribiendo su nombre. El algo-

ritmo de búsqueda es un poco peculiar:

Gpredict no busca un nombre que

comienza con la cadena que hemos tecle-

ado, sino que muestra el primer nombre

que contiene la cadena en cualquier posi-

ción. Esto significa que a medida que

escribimos IRA (para encontrar el satélite

de infrarrojos IRAS), obtenemos primero

ARIRANG 1, hasta que, tras teclear el

nombre completo, obtenemos IRAS. Ade-

más, la función de búsqueda distingue

entre mayúsculas y minúsculas, lo que

en realidad no importa porque los nom-

bres de los satélites en la lista están todos

en mayúsculas.

Gpredict • PRÁCTICO

Figura 1: La ventana principal de Gpredict con un mapa del mundo (distorsionado debido a la

ventana maximizada), información del telescopio espacial Hubble y la vista polar.

Figura 2: Los usuarios pueden seleccionar hasta

1.200 satélites y agruparlos según sus necesidades.

Page 32: Linux Magazine 72r

eclipsado). Para

tener la mejor vista

de un satélite, ten-

drá que estar en la

luz del sol, mientras

que en nuestra ubi-

cación es de noche,

o por lo menos en el

crepúsculo.

Para habilitar esta

columna, marca-

mos la casilla Visibility during pass en la

pestaña Multiple Passes del panel Predicten Edit | Preferences. Este valor pone a

Gpredict en una liga diferente de, por

ejemplo, Heavens Above, que sólo mues-

tra pasadas visibles, y también explica

por qué los detalles de los pasadas de los

satélites pueden ser diferentes entre dos

fuentes de información.

Haciendo doble clic en una línea de la

lista de satélites, obtenemos una visión

detallada de la pasada (véase la Figura

3). La pestaña Data es una tabla de posi-

ciones orbitales individuales, incluyendo

la fecha y la hora, y las coordenadas en

formato de acimut (Az, el ángulo entre el

norte y la proyección perpendicular del

satélite hacia el horizonte) y elevación

(El). El número de grados en la columna

El muestra lo alto que estará el satélite

sobre el horizonte local en un momento

determinado (valor positivo más

grande). En función de la elevación

máxima y la altura

de la órbita, el saté-

lite cruzará el cielo

más rápida o más

lentamente. Esta

tabla también se

puede imprimir o

guardar.

VisualizaciónPara la visualiza-

ción, la segunda

pestaña contiene un

diagrama polar

(véase la Figura 4,

que también se pre-

senta en la parte

inferior izquierda

de la ventana prin-

cipal de forma pre-

determinada) que

muestra el cielo

local sin estrellas y

constelaciones,

pero con los puntos

cardinales. Para modificar la orientación

del mapa, dependiendo de nuestra direc-

ción de observación, elegimos uno de los

botones de Orientation en la pestaña

Polar View del panel Modules en Prefe-rences.

La tercera pestaña, Az/El, contiene un

gráfico de visibilidad que nos permite

ver si el satélite seleccionado es visible.

Una pequeña flecha en la parte dere-

cha de cada módulo hace aparecer un

menú con 10 entradas. Un elemento del

menú realmente interesante aquí es Skyat a glance, que muestra un gráfico de

visibilidad de los satélites asignados al

módulo a lo largo de un eje temporal

(véase la Figura 5). Aquí, podemos ver

qué satélite aparecerá, cuándo y con qué

frecuencia dentro del período de tiempo

configurado (por defecto: ocho horas).

Gpredict no se limita sólo a la fecha

actual, o a tablas de predicción, sino que

también puede mostrar una pantalla con

La posibilidad de mostrar la lista de

selección de un grupo específico es una

útil función de búsqueda: por ejemplo,

podemos optar por mostrar el Espacio yCiencias de la Tierra, Geoestacionarios o

un grupo más especializado, como los

Últimos Lanzamientos.Cada módulo nuevo que creamos está

organizado en su propia ficha. Los satéli-

tes asignados al grupo se muestran en el

mapa del mundo con sus huellas. Si

pasamos el ratón sobre un satélite, vere-

mos una burbuja (al menos en las ver-

siones posteriores a Gpredict 0.9) con los

detalles de las coordenadas actuales y el

tiempo en minutos hasta la próxima

adquisición de la señal (AOS) en la esta-

ción de tierra. Si el satélite es actual-

mente visible por encima de nuestra

estación de tierra, se muestra el número

de minutos hasta la pérdida de la señal

(LOS). Para ver la trayectoria del satélite,

pulsamos con el botón derecho y selec-

cionamos la función Ground Track en el

cuadro desplegable.

Traza TerrestreEl menú Future passes nos lleva a una

tabla con las pasadas que tendrán lugar

en los próximos tres días. La columna de

la derecha, Vis (visibilidad), indica si el

paso será visible (V) u oculto (E, de

PRÁCTICO • Gpredict

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

Figura 3: Detalles de la pasada del satélite

telescopio infrarrojos WISE (Wide-field

Infrared Survey Explorer) del 7 de diciembre

de 2010 por la mañana.

Figura 5: El diagrama de visibilidad de satélites en el módulo selec-

cionado.

Figura 4: La vista polar muestra la pasada de la Estación Espacial

Internacional a través del cielo de Stuttgart, Alemania, en la mañana

del 13 de diciembre de 2010.

Page 33: Linux Magazine 72r

el tiempo acelerado, o hacer correr el tiempo hacia atrás. Para

ello, seleccionamos Time Controller del menú emergente.

Control RemotoPor último, no debemos olvidar una característica muy

importante de Gpredict: su función de control de radio y

antena, basada en la librería Hamlib. Las librerías de equi-

pos de radio Ham permiten escribir programas para contro-

lar los equipos de radio aficionados desde nuestro ordena-

dor y actuar sobre rotores de antena especiales de manera

que Gpredict pueda realizar un seguimiento del satélite

seleccionado (véase la Figura 6). Debido a que carecíamos

de este hardware, no hemos podido probar esta funcionali-

dad. El detallado manual de Hamlib en el manual de Gpre-

dict [6] proporciona más detalles.

ConclusionesGpredict es un muy buen software de localización de satéli-

tes y predicción de órbitas que también permite el control

de equipos de radio aficionado. La interfaz es intuitiva y

ofrece todo lo que podríamos buscar en una herramienta de

este tipo. El manual en formato PDF de 64 páginas, muy

bien estructurado, ayuda a los usuarios a encontrar su

camino por todo el programa. �

[1] Heavens Above: http:// www. heavens-above. com/

[2] Página web de Gpredict: http:// gpredict. oz9aec. net/

[3] Descarga de Gpredict: http:// sourceforge. net/ projects/

gpredict/ files/

[4] Búsqueda de paquetes de Ubuntu: http:// packages.

ubuntu. com

[5] Localizador QTH: http:// en. wikipedia. org/ wiki/

Maidenhead_Locator_System

[6] Manual de Gpredict: http:// voxel. dl. sourceforge. net/

project/ gpredict/ Gpredict/ 1. 2/ gpredict-user-manual-1. 2.

pdf

RECURSOS

Figura 6: Los controles de antena y radio de Gpredict.

Page 34: Linux Magazine 72r

DESARROLLO • Python: ZeroMQ

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

La comunicación de información

a través de una red es, a día de

hoy, una de las principales

tareas de prácticamente cualquier pro-

grama. Nos resulta casi raro pensar en

un programa que no disponga de la

capacidad de compartir información

mediante algún tipo de protocolo.

Ya sea mediante TCP/ IP, XMLRPC o

AJAX, el abanico de posibilidades es

inmenso. Existen literalmente cientos

de protocolos de comunicaciones que

podemos usar, y a pesar de ello apa-

rece ZeroMQ ¿cómo se le puede ocu-

rrir a alguien crear un nuevo proto-

colo de red?

ZeroMQLos creadores de ZeroMQ pertenecen

a la empresa iMatix Corporation. Esta

empresa diseñó el protocolo AMQP,

cuyo objetivo era unificar y simplifi-

car el desarrollo de software que tra-

bajase con sistemas de cola de men-

sajes. Un sistema de cola permite a

una aplicación enviar mensajes a otra

aplicación. Dicho así parece una cosa

muy sencilla, pero esconde muchas

dificultades. No sólo queremos que la

aplicación A mande mensajes a B,

sino que A no tenga que saber que B

quiere sus mensajes. El sistema de

cola recibirá los mensajes de A y

cualquier aplicación podrá «suscri-

birse» a esa cola y recibir los mensa-

jes. De esta forma es posible diseñar

sistemas en los que podemos reem-

plazar los diferentes componentes en

cualquier momento sin que todo

caiga como un castillo de naipes (ver

Figura 1). AMQP fue un éxito, pero

era un mero protocolo de comunica-

ción y dependía de los distintos siste-

mas de cola (comerciales y libres)

que existen. Ejemplos libres de estos

sistemas son por

ejemplo Rab-

bitMQ o Acti-

veMQ [2] y [3].

Los usuarios

más importantes

de los sistemas

de colas de even-

tos son las

empresas finan-

cieras, y cuando

algo les funciona

(cosa que no

siempre ocurre), rápidamente buscan

mejorarlo. La gente de iMatix com-

probó que los sistemas de cola no

eran lo bastante flexibles. Dependías

de los servidores de cola de mensajes,

software que no controlabas, y no era

posible diseñar sistemas realmente

complejos a partir de ellos. Aunque el

protocolo AMQP permitía interactuar

con todos ellos de forma estándar,

cada servidor era incompatible con el

resto.

Para suplir estas necesidades, iMa-

tix decidió crear algo nuevo: un proto-

colo de comunicaciones que simplifi-

case el famoso protocolo TCP/ IP pero

ZeroMQRedes de alto rendimiento

Gracias a ZeroMQ es posible crear complejos sistemas de comunicaciones en Python de forma sencilla.

POR JOSÉ MARÍA RUÍZ

© S

eb

astia

n D

ud

a, 1

23R

F.co

m

01 import zmq

02

03 context = zmq.Context()

04 socket = context.socket(zmq.REP)

05 socket.bind(“tcp://127.0.0.1:5000”)

06

07 while True:

08 msg = socket.recv()

09 print “He recibido: “, msg

10 socket.send(msg)

Listado 1: Servidor «Hola Mundo»

Page 35: Linux Magazine 72r

que incorporase las características

más importantes de los sistemas de

cola y permitiese prescindir de los ser-

vidores de cola de mensajes si fuese

preciso. De este proyecto nació

ZeroMQ, cuya implementación iMatix

liberó como software libre.

REQ/ REPExplicar qué es ZeroMQ es más com-

plicado que demostrarlo, por lo que

arrancaremos con un ejemplo sencillo

de su potencia. Comencemos con

nuestro habitual «Hola Mundo».

Vamos a necesitar dos programas, uno

actuará como servidor y el otro como

cliente. El servidor aparece en el Lis-

tado 1, mientras que el cliente apa-

rece en el Listado 2. Debemos arran-

car el servidor como cualquier pro-

grama Python en un terminal:

> python servidor.py

El servidor se quedará bloqueado en

un bucle infinito esperando recibir

mensajes, por lo que pasaremos a

arrancar el programa cliente en otro

terminal:

> python cliente.py

Enviando: hola

Enviando: mundo

Enviando: cruel

En la consola donde arrancamos el

servidor aparecerá:

He recibido: hola

He recibido: mundo

He recibido: cruel

¿Qué ha ocurrido? Uno de los objeti-

vos de ZeroMQ es el de simplificar el

desarrollo de código que haga uso de

la red. En el Listado 1 podemos ver

innovaciones de ZeroMQ en los

siguientes apartados.

PUB/ SUBZeroMQ no habría recibido ninguna

atención si sólo simplificase TCP/ IP.

Han sido características como las

opciones zmq.PUB y zmq.SUB las que

han atraído la atención de numerosos

desarrolladores y empresas.

El multicasting (la habilidad de

hacer que varios clientes reciban el

mismo mensaje a la vez) ha sido

siempre difícil con el protocolo TCP/

IP. Existen protocolos alternativos que

lo emplean para tareas específicas,

como por ejemplo el bombeo (strea-

ming) de vídeo por Internet, pero sue-

len ser bastante complicados de usar.

Si al multicasting añadimos la opción

de suscribirse a determinados «even-

tos», indicando que sólo deseamos

recibir determinados mensajes, enton-

ces nos encontramos en un terreno

que hasta la llegada de ZeroMQ

estaba dominado por las colas de

eventos.

que sólo son necesa-

rias 5 instrucciones

para tener un servi-

dor que recibe men-

sajes y responde a los

mismos con un alto

rendimiento. Las pri-

meras tres lineas pre-

paran el servidor:

• Generamos un con-

texto que prepara y

gestionará el tra-

bajo.

• Creamos un socket,

con el parámetro

zmq.REP (res-

puesta).

• Vinculamos el soc-

ket a un protocolo,

dirección IP y puerto.

A continuación entramos en un bucle

infinito en el que recibimos un men-

saje, hacemos algo con él y comunica-

mos al cliente que lo hemos recibido.

Los mensajes en ZeroMQ son unas

cadenas de caracteres. Mientras en

otros protocolos es preciso trabajar a

bajo nivel con datos binarios, en

ZeroMQ podemos trabajar con mensa-

jes, lo que simplifica bastante nuestro

trabajo (el mensaje puede ser XML o

JSON).

Los primeros 3 pasos del código del

cliente son muy similares, pero en

lugar de crear el socket con el paráme-

tro zmq.REP, empleamos zmq.REQ

(request, petición) y conectamos con

el servidor en lugar de vincular el so -

cket. Posteriormente enviamos los

mensajes y esperamos a que el servi-

dor nos comunique que los ha reci-

bido.

No hemos hecho nada que no sea

posible con TCP/ IP, aunque la simpli-

cidad de ZeroMQ ya es de por sí todo

un logro. Pasemos a comprobar las

Python: ZeroMQ • DESARROLLO

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

Figura 1: Esquema de funcionamiento de las colas de mensajes .

01 import zmq

02 context = zmq.Context()

03 socket = context.socket(zmq.REQ)

04 socket.connect(“tcp://127.0.0.1:5000”)

05

06 for i in [‘hola’, ‘mundo’, ‘cruel’]:

07

08 socket.send(i)

09 print “Enviando: “, i

10 msg_in = socket.recv()

Listado 2: Cliente «Hola Mundo»01 import zmq

02 context = zmq.Context()

03 socket = context.socket(zmq.REQ)

04 socket.connect(“tcp://127.0.0.1:4000”)

05

06 for i in [‘@josemaria hola mundo’,

07 ‘@linuxmagazine linux mola’,

08 ‘@otro mensaje aburrido’]:

09 socket.send(i)

10 msg_in = socket.recv()

Listado 3: Fichero emisor.py

Page 36: Linux Magazine 72r

En el Listado 4 está el código del

emisor de mensajes, que es práctica-

mente idéntico al que empleamos en

el Listado 2. Es en el Listado 5 donde

encontramos diferencias. En lugar de

conectarnos al socket del servidor con

zmq.REQ, lo hacemos con zmq.SUB.

Este cambio nos permite suscribirnos

a determinados mensajes de una

forma bastante sencilla. Empleando el

método setsockiopt() configuramos la

conexión para recibir solamente los

mensajes que comiencen con las

cadenas “@linuxmagazine” y “@jose-

maria”. ZeroMQ descartará cualquier

mensaje cuyo inicio no coincida con

estos patrones. Podemos suscribirnos

a tantas «colas» como deseemos, y

ZeroMQ se encargará de filtrar los

mensajes que seleccionemos por nos-

otros de forma eficiente.

ZeroMQ da por supuesto que una

vez se haya mandado el mensaje, éste

llegará a su destino. Esto significa

que no controla si la otra parte ha

recibido el mensaje. Esta forma de

trabajar se diseñó así a propósito,

buscando aumentar el rendimiento. Si

queremos de nuevo un mayor nivel de

seguridad, podemos hacer que tanto

servidor como cliente comuniquen

que los datos han llegado correcta-

mente a la otra parte, empleando por

ejemplo un mensaje a una conexión

REQ/ REP.

Hemos podido replicar algo tan

complicado como un sistema de cola

de mensajes con subscriptores en

mucho menos de 100 lineas de código

fuente, lo que no está nada mal.

PUSH/ PULLLo que voy a explicar ahora es un

poco más complicado. Incluso la

documentación oficial de ZeroMQ se

vuelve confusa en este punto, pero las

ideas básicas son muy sencillas.

Cuando estamos creando un sistema

complejo compuesto por diferentes

componentes (sean hebras, procesos o

programas en distintas máquinas), lo

ideal sería tener la posibilidad de aña-

dir nuevas máquinas al sistema de

forma total transparente, y que estas

nuevas máquinas contribuyan hacién-

dose cargo de parte del trabajo. Es lo

que a día de hoy se conoce como

«escalar» y la obsesión de casi todas

las empresas de la Web.

Usando la Figura 3 como referencia,

pensemos en un sistema en el que hay

un proceso que recibe o emite una

serie de datos. Los datos deben ser

enviados a otro proceso para ser

manipulados. En nuestro ejemplo

serán cadenas de caracteres que se

Vamos a crear un ejemplo que simu-

lará cómo funciona más o menos

Twitter (una empresa que en realidad

es una cola de mensajes gigante). Ten-

dremos un servidor al que un cliente

«emisor» bombeará mensajes y otros

clientes estarán subscritos a determi-

nados «emisores» – el esquema de la

Figura 2 aclara un poco la situación.

En una cola de eventos tradicional

dispondríamos de un servidor (como

por ejemplo RabbitMQ) que recibiría

los mensajes, los almacenaría y pasa-

ría a distribuirlos a los clientes subs-

critos a ellos. ZeroMQ se ha diseñado

como una herramienta para imple-

mentar el nivel de seguridad que des-

eemos. ZeroMQ no almacena los men-

sajes en el disco duro o una base de

datos, los almacena en memoria y los

bombea a gran velocidad. Está en

nuestras manos decidir si queremos

almacenar los mensajes temporal-

mente para ofrecer más seguridad

(por ejemplo guardándolos en

SQlite3).

Comencemos con el servidor que

podemos ver en el Listado 3. El código

no dista mucho del que usamos para

el servidor del anterior apartado. En

lugar de emplear un solo socket usare-

mos dos. A uno nos vincularemos

como un servidor tradicional, mien-

tras que al otro lo haremos empleando

el modelo PUB/SUB. Recibiremos los

mensajes a través de socket_recv y los

reenviaremos a través de socket.

DESARROLLO • Python: ZeroMQ

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

01 import zmq

02 from random import choice

03 context = zmq.Context()

04

05 socket_recv =

context.socket(zmq.REP)

06 socket_recv.bind

(“tcp://127.0.0.1:4000”)

07

08

09 socket =

context.socket(zmq.PUB)

10 socket.bind

(“tcp://127.0.0.1:5000”)

11

12 while True:

13 msg = socket_recv.recv()

14 socket_recv.send(msg)

15 print “Reenvío:

{0}”.format(msg)

16 socket.send(msg)

Listado 4: Fichero tuiter.py

01 import zmq

02 import random

03

04 context = zmq.Context()

05 envio =

context.socket(zmq.PUSH)

06 envio.bind(“tcp://*:5557”)

07

08 print “Tenemos que esperar a que

los workers se conecten”

09 raw_input()

10 print “Comenzamos a bombear

trabajo...”

11 cadenas = [‘hola’, ‘aloha’,

‘hello’]

12 random.seed()

13

14 for i in range(0,5):

15 cadena = random.choice

(cadenas)

16 envio.send(cadena)

17 print “Enviando: {0}”.

format(cadena)

Listado 5: Fichero origen.py

Figura 2: Nuestro «tuiter» .

Page 37: Linux Magazine 72r

pasarán a mayúsculas. El resultado de

la operación se recibirá en un último

proceso que hará algo con los datos

(como por ejemplo imprimirlos en

pantalla). El sistema escalará si es

posible añadir nuevos procesos que

realicen la operación sin tener que

modificar el código fuente de ninguno

de los programas.

ZeroMQ dispone de un sistema para

poder implementar este tipo de

diseño: los sockets PUSH/ PULL. Si en

los sockets PUB/ SUB disponemos de

un emisor y un número indetermi-

nado de receptores que reciben un

mensaje, en los sockets PUSH/ PULL

sólo uno de los receptores recibirá el

mensaje. La elección del receptor será

aleatoria, por lo que la carga

de trabajo se irá repartiendo

entre los distintos receptores.

De forma «mágica», ZeroMQ

nos da la posibilidad de esca-

lar sin apenas esfuerzo.

Para poder ver PUSH/ PULL

en acción vamos a tener que

arrancar no 3… sino 4 progra-

mas como mínimo en distin-

tos terminales: origen.py, dos

o más instancias de worker.py

(que procesarán los mensa-

jes) y resultado.py. El pro-

grama origen.py (Listado 6)

será el único que funcione en

modo PUSH. En este tipo de

conexión, todas las conexio-

nes PULL esperan a que se

emitan datos desde una cone-

xión PUSH. Como se ve en la

Figura 3, worker.py (Listado

7) espera los datos de ori-

gen.py, y resultado.py (Lis-

tado 8) espera los datos que

provengan de worker.py.

Podemos ver todo el sistema como un

flujo de datos que arranca en

origen.py y acaba en resultado.py.

Para que las instancias de worker.py

se conecten correctamente con ori-

gen.py, debemos arrancar primero ori-

gen.py y esperar a que los distintos

worker.py se conecten a nosotros

antes de comenzar a emitir datos.

Para ello, origen.py debe detenerse

nada más arrancar, cosa que hacemos

esperando una entrada de teclado.

Esto nos da tiempo para arrancar las

distintas instancias de worker.py. Si

arrancáramos worker.py antes que ori-

gen.py, comprobaríamos que todos

los mensajes enviados desde

origen.py serían procesados por una

única instancia worker.py en lugar de

distribuirse el trabajo. Una vez haya-

mos arrancado las dos, o más, copias

de worker.py, podemos arrancar tam-

bién resultado.py.

Para posibilitar que el trabajo se

pueda distribuir entre los distintos

worker.py, he introducido un retraso

de 1 segundo en el procesado del men-

saje con time.sleep(). De esta forma,

origen.py mandará los mensajes a la

instancia de worker.py que esté libre.

Cuando, por fin, todo esté arran-

cado y pulsemos cualquier tecla en el

terminal donde hayamos arrancado

origen.py, podremos ver cómo los

mensajes son procesados por distintas

copias de worker.py y distribuyéndose

el trabajo entre ellos.

ConclusiónSólo hemos visto de forma superficial

las características principales de

ZeroMQ, y aún así queda patente que

es un proyecto muy interesante.

ZeroMQ nos proporciona los ingre-

dientes básicos para crear una arqui-

tectura de red de la complejidad que

queramos sin apenas esfuerzo. El ren-

dimiento de ZeroMQ lo hace ideal

para cualquier problema que requiera

tiempos de respuesta pequeños. Ade-

más, la disponibilidad de librerías

ZeroMQ en más de 10 lenguajes de

programación lo hacen idóneo para

comunicar programas de todo tipo.

ZeroMQ es, sin lugar a dudas, uno de

los proyectos más sorprendentes de

los últimos años. �

Python: ZeroMQ • DESARROLLO

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

Figura 3: Arquitectura PUSH/ PULL.

01 import zmq

02 import time

03 context = zmq.Context()

04

05 recepcion =

context.socket(zmq.PULL)

06 recepcion.connect

(“tcp://localhost:5557”)

07

08 envio =

context.socket(zmq.PUSH)

09 envio.connect

(“tcp://localhost:5558”)

10

11 while True:

12 cadena = recepcion.recv()

13 print “Proceso:

{0}”.format(cadena)

14 envio.send(cadena.upper())

15 time.sleep(1)

Listado 6: Ficheroworker.py

01 import zmq

02

03 context = zmq.Context()

04

05 recepcion =

context.socket(zmq.PULL)

06 recepcion.bind(“tcp://*:5558”)

07

08 while True:

09 mensaje = recepcion.recv()

10 print “Recibo:

{0}”.format(mensaje)

Listado 7: Ficheroresultado.py

[1] Protocolo ZeroMQ: http:// www.

zeromq. org/

[2] RabbitMQ, Erlang en acción: http://

www. rabbitmq. com/

[3] ActiveMQ, proyecto Apache: http://

activemq. apache. org/

RECURSOS

Page 38: Linux Magazine 72r

DESARROLLO • API Secret Service

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

Según el creador del anillo de claves

de Gnome - Gnome Keyring - Stef

Walter, “Un buen software de

seguridad debería ser tan seguro e inofen-

sivo, pero tan fácil de usar, como la puerta

de una sala de estar”. El proyecto Gnome

Keyring [1] proporciona un repositorio

central de contraseñas, archivos de claves

y certificados para los servicios y aplica-

ciones que el usuario necesite. Las aplica-

ciones de Gnome, como Empathy, Evolu-

tion o Network Manager acceden al servi-

cio de anillo de claves; la interfaz Seahorse

[2] ayuda con la administración de claves

PGP y SSH.

El homólogo de Gnome Keyring en el

escritorio KDE es Kwallet [3], que usa

aplicaciones como Konqueror o Knetat-

tach. Ambas herramientas cifran sus

colecciones de datos confidenciales prote-

giéndolas con una frase de paso.

Aunque hasta entonces Gnome Keyring

y Kwallet eran incompatibles, en 2009 Stef

Walter y el desarrollador de Kwallet,

Michael Leupold, decidieron aunar esfuer-

zos. El resultado de dicha colaboración es

una nueva interfaz llamada Secrets Service

API. Los desarrolladores eligieron la plata-

forma Freedesktop.org para alojar la espe-

cificación. Gnome y KDE tratan de popu-

larizar la plataforma más concienzuda-

mente desde el Desktop Summit de 2009

que tuvo lugar en Gran Canaria. El pro-

yecto Secrets Service permitirá a los pro-

gramadores el uso de una interfaz común

con la que interactuar con servicios de

contraseñas, archivos de claves y certifica-

dos desde aplicaciones tanto de KDE

como de Gnome, así como desde el resto

de escritorios que sean capaces de ajus-

tarse a la plataforma.

ArquitecturaEl documento [4] está aún en estado

borrador, y los detalles de la versión para

desarrolladores [5] continúa cambiando

ocasionalmente, pero la arquitectura

básica de la API Secrets Service ya está

definida.

Esta API permite a las aplicaciones

guardar información secreta enviando

peticiones a un servicio que cifra y alma-

cena dicha información. El servicio

devuelve entonces los datos cifrados a las

aplicaciones que los soliciten. La API tam-

bién es capaz de cifrar el intercambio de

información que se produce entre el servi-

cio y sus clientes.

El servicio se ejecuta dentro de la sesión

de login del usuario. En KDE se llama kse-

cretserviced. Las versiones de Gnome a

partir de la 2.30 incluyen el borrador de la

API en el demonio gnome-keyring-daemon

y en aplicaciones como el navegador web

Epiphany o el cliente de chat Empathy.

El software almacena multiples secretos

en una colección. El programador puede

usar métodos de la colección para crear o

eliminar el objeto que contiene los secre-

tos individuales o elementos (items). Las

colecciones se identifican por sus rutas de

objeto, como por ejemplo /org/freedes-

ktop/secrets/collection/xxxx, donde xxxx

es una versión abreviada del nombre de la

colección. También es posible crear alias

de los objetos.

Los secretos se almacenan en un array

de bytes; cada secreto puede contener

varios campos y valores, incluyendo XML.

También se pueden almacenar atributos

sin cifrar junto con los valores para facili-

tar la búsqueda de elementos mediante el

método SearchItems().

El proceso de creación o eliminación,

así como otras acciones, puede requerir

interacción con el usuario. La aplicación

cliente puede llamar al método que mues-

Servicios universales de anillo de claves con la API Secrets Service

AGENTESECRETOLa API Secrets Service proporciona una interfaz unificada en Gnome y

KDE para contenidos confidenciales.

POR MATHIAS HUBER

© D

esis

lava D

imitro

va - 1

23R

F.co

m

Page 39: Linux Magazine 72r

tra el diálogo que puede ser asignado a

una ventana de aplicación referenciando

su ID de ventana.

La API Secrets Service proporciona ade-

más un mecanismo de bloqueo para con-

trolar el acceso a elementos y colecciones.

Cuando se bloquea un elemento o una

colección, no se puede acceder al secreto

almacenado ni usar un programa cliente

para modificarlo. El frontend del anillo de

claves de Gnome, Seahorse (ver la Figura

1), también proporciona a los usuarios

algunas configuraciones de bloqueo; por

ejemplo, se puede bloquear una colección

si no hay actividad por parte del usuario

durante una cantidad de tiempo determi-

nada.

SesionesCon el fin de confiar un secreto a Secrets

Service, o de leer un secreto custodiado

por él, la aplicación cliente tiene que abrir

una sesión con el servicio. La sesión ter-

mina cuando se llama al método Close() o

bien cuando la aplicación sale de la sesión

de D-Bus. El intercambio de información

confidencial tiene lugar dentro de la

sesión. Aunque la API prevé e implementa

para ello el modo de texto-plano, la expe-

riencia nos dice que el cifrado es infinita-

mente preferible. La API especifica por

tanto un intercambio de claves Diffie-Hell-

man, más cifrado AES 128 en modo Chai-

ned Block Cipher y Padding en línea con

PKCS #7.

Implementación¿Qué hay de las implementaciones? Stef

Walter casi ha acabado la implementación

Contacto con el ViejoMundo¿Son capaces los desarrolladores de apli-

caciones, aparte de los de KDE y Gnome,

de interactuar con la API Secrets Service?

“La especificación continúa cambiando”,

asegura Michael Leupold, “Tras comple-

tar las implementaciones de Gnome y

KDE, queremos publicar una versión ofi-

cial de la especificación. Sería estupendo

que se implicasen otros entornos de

escritorio, así como proyectos de soft-

ware como el de Mozilla”. �

de la especificación en Gnome Keyring. La

librería libgnome-keyring implementa la

parte cliente de la API y se utiliza en

muchas aplicaciones de Gnome. Walter

planea publicar una nueva versión de la

librería, posiblemente llamada Gsecrets,

que soportará funcionalidades avanzadas.

En cuanto a KDE, Michael Leupold está

trabajando actualmente en Ksecretservi-

ced, un desarrollo completamente nuevo,

ya que el actual Kwalletd no se presta a ser

modificado para soportar la API. Entre

otras cosas, el software tradicional no

sirve para desbloquear información sensi-

ble cuando el usuario inserta una Smart-

card. El software podría no soportar todas

las funcionalidades de la lista de imple-

mentaciones deseadas, pero aún así es un

“reemplazo completo para Kwallet sin

exponer a los usuario a regresiones”,

como Leupold reveló a Linux Magazine.

Ksecretserviced usará varios frontends y

backends (Figura 2). Los frontends sopor-

tan comunicaciones de cliente: uno de

ellos implementará la nueva API; otro pro-

porcionará una interfaz Kwallet por moti-

vos de compatibilidad. Y ambos utilizan

D-Bus. Otros clientes pueden utilizar fron-

tends adicionales.

Los backends se encargan del almace-

namiento y la lectura de los secretos. El

primer backend, que se encuentra actual-

mente en desarrollo se usará un nuevo for-

mato con extensión *.ksecret. Además de

esto, los programadores de KDE también

trabajan para soportar el formato de

Gnome Keyring. En un futuro, el software

soportará el uso de Smartcards y otros

medios cifrables.

API Secret Service • DESARROLLO

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

Figura 2: La arquitectura del demonio Ksecretserviced de Michael

Leupold prevé frontends para la API antigua y la nueva.

Figura 1: Seahorse, basado en Gnome Keyring, proporciona una inter-

faz para la gestión de claves GPG y SSH.

[1] Gnome Keyring: http:// live. gnome.

org/ GnomeKeyring

[2] Seahorse: http:// projects. gnome.

org/ seahorse/

[3] Kwallet: http:// utils. kde. org/

projects/ kwalletmanager/

[4] Borrador 0.1 de la API Secrets Ser-

vice: http:// people. gnome. org/

~stefw/ secrets/ html/

[5] Versión Git de la API: http://

gitorious. org/ +xdg-secrets-api/

xdg-specs/ secrets-xdg-specs

[6] D-Bus: http:// www. freedesktop. org/

wiki/ Software/ dbus

[7] PKCS #11: http:// www. rsa. com/

rsalabs/ node. asp?id=2133

[8] PKCS #7: http:// www. rsa. com/

rsalabs/ node. asp?id=2129

[9] Diagrama de Gnome Keyring:

http:// git. gnome. org/ browse/

gnome-keyring/ plain/ docs/

gnome-keyring. svg

RECURSOS

Page 40: Linux Magazine 72r

DESARROLLO • Perl: Scripting

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

Antes de que los hoteles, cibercafés o aeropuertos dejen que los nuevos usuarios acce-

dan a sus redes WiFi, redirigen las peticiones del navegador (Figura 1), haciendo que

sus potenciales clientes tengan primero que lidiar con una página de bienvenida

(Figura 2). Al llegar a esa página, lo que se ve son términos de uso sin fin – que nadie lee

de todos modos – casillas de verificación que tenemos que habilitar, anuncios o las

tres cosas.

Los proveedores de WiFi configuran estas páginas de bienvenida como

obstáculos que les permiten centralizar el registro de direcciones MAC del

cliente en la red WiFi y recordar al usuario sus obligaciones como inter-

nauta ejemplar. Una vez que hemos pasado por todas estas etapas obli-

gatorias, el punto de acceso baja su puente levadizo y nos da el acceso

web y la capacidad de abrir conexiones TCP arbitrarias a Internet

(Figura 3).

Sin Web No Hay AccesoEn algunos casos, los usuarios ni siquiera quieren acceder a

la web, sino que sólo desean abrir un túnel SSH. Luego,

con un terminal abierto y el navegador cerrado, se sor-

prenden de que se les asigne una dirección IP, aunque

el cortafuegos, obviamente, está bloqueando el acceso

a Internet. El script Perl splash descrito en este artículo

ayuda a los usuarios con este dilema colándose a tra-

vés de los formularios web que se encuentran entre

el usuario con muchas ganas de empezar y el acceso

pleno a Internet. Para ello, splash pulsa en todos los

enlaces, activa todas las casillas, acepta todas las coo-

kies y las envía gentilmente de regreso al proveedor de

WiFi, que piensa que se trata de un ser humano real y vivo

que está utilizando su navegador para toda esta comunica-

ción.

Evitamos las molestas páginas de bienvenida WiFi

APROBADORÁPIDO

Un script en Perl ahorra a los usuarios la molesta tarea de pulsar en las

páginas de bienvenida del proveedor de WiFi, acepta automáticamente

los términos de uso y permite acceder lo más rápido posible sin un

navegador.

POR MICHAEL SCHILLI

Figura 1: El usuario ha solicitado google.com, pero previamente la red WiFi

lo lleva a la página de bienvenida del proveedor.

Page 41: Linux Magazine 72r

Tácticas de Plugin Flexibles

Pero, ¿cómo puede un sencillo script mane-

jar lo que podrían ser miles de configuracio-

nes diferentes de páginas de bienvenida? Los

proveedores de WiFi podrían crear comple-

jas formas o incluso utilizar su artillería

pesada como animaciones Flash o Java Script

para defenderse de los scripts automáticos.

Para contrarrestar esto, el script confía en

una estrategia de plugin que permite al usua-

rio, o a un tercero, modificarlo para controlar

los nuevos métodos. Cada plugin prueba su

propio enfoque para flanquear la página de

bienvenida.

Por ejemplo, el plugin ClickAllLinks.pm se

hace camino pulsando en todos los enlaces

de la página, mientras que CheckBoxFill.pm

intento de acceso no se realiza correcta-

mente, el script lo intenta con el siguiente

plugin. De lo contrario, nos devuelve un

mensaje de éxito y finaliza.

Abajo con el MuroLa Figura 4 muestra cómo reacciona el script

si la conexión de red no está activa porque el

usuario no ha seleccionado ninguna de las

redes WiFi disponibles o no ha introducido

la contraseña WPA. Mientras las peticiones a

Google devuelvan errores, o se congelen

durante más de cinco segundos, el script se

habilita todas las casillas de verificación que

aparecen en el primer formulario web antes

de pulsar el botón enviar. Los usuarios sólo

tienen que añadir nuevos plugins en el direc-

torio de plugins, a continuación el script los

recoge automáticamente, sin necesidad de

ninguna configuración, y lo intenta con ellos

como una nueva táctica.

Cada vez que un plugin completa su eje-

cución, el script Splash hace una petición a

http:// www. google. com para ver si real-

mente devuelve la página web o si aparece

otra página de bienvenida en el camino. Si el

Perl: Scripting • DESARROLLO

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

Figura 2: El WiFi del hotel redirige la primera petición del navegador a

una página de bienvenida.

Figura 3: Los usuarios simplemente tienen que pulsar para acceder a

los términos de usuario, y podrán navegar durante 24 horas.

01 ############################

02 package SplashJumper;

03 ############################

04 # Mike Schilli, 2010

05 # ([email protected])

06 use strict;

07 use warnings;

08 use Module::Pluggable

09 require => 1;

10

11 sub new {

12 bless {}, shift;

13 }

14

15 1;

Listado 1:SplashJumper.pm

01 #############################

02 package SplashJumper::Plugin::

ClickAllLinks;

03 #############################

04 # Mike Schilli, 2010

05 # ([email protected])

06 #############################

07 use Log::Log4perl qw(:easy);

08

09 #############################

10 sub register {

11 #############################

12 return “click-all-links”,

13 10;

14 }

15

16 #############################

17 sub process {

18 #############################

19 my ($self, $mech) = @_;

20

21 for

22 my $link ($mech->links())

23 {

24

25 INFO “Clicking on “,

26 $link->url();

27 my $resp =

28 $mech->get($link);

29

30 INFO “Got “,

31 length($resp->content()),

32 “ bytes back”;

33

34 $mech->back();

35 }

36 }

37

38 1;

Listado 2: ClickAllLinks.pm

Page 42: Linux Magazine 72r

ejecución, lo lógico

es ejecutar los plu-

gins con mayores

oportunidades de

éxito en primer

lugar.

Los dos plugins que veremos aquí definen

prioridades de 10 y 50, respectivamente, de

modo que el script siempre probará Clic-

AllLinks primero antes de aplicar la táctica

que Check- BoxFill muestra en el Listado 3.

Cuando se ejecuta un plugin de contra -

ataque a la página de bienvenida, el script

llama a su método process() y le pasa el

simulador de navegador $mech, un objeto de

la clase WWW::Mechanize. Este módulo

CPAN es perfecto para capturar páginas web,

analizar su contenido y profundizar en sus

enlaces. A menudo se utiliza para imple-

mentar screen scrapers, ya que proporciona

más o menos un conjunto completo de fun-

cionalidades del navegador (excepto el

código JavaScript o plugins de Flash), acepta

cookies automáticamente, y los devuelve al

servidor.

En el plugin Click-AllLinks, el método

links() identifica todos los enlaces de la

página de bienvenida recuperados en forma

de objetos WWW::Mechanize::Link y utiliza

un bucle for para iterar sobre la lista. La fun-

ción INFO, importada de los tesoros de

Log4perl, le indica al usuario curioso qué

enlace está pulsando actualmente el plugin.

El método get() del simulador de navegador

ejecuta a continuación la petición web.

Mecanizar con AutocheckEl control explícito de errores no se realiza

aquí porque WWW:: Mechanize se ejecuta

en modo autocheck de forma predetermi-

nada. Genera una excepción por cada error

que encuentra, y el bloque eval{} agrupado

alrededor de la llamada al plugin en el script

principal (véase el Listado 4, línea 81) los

agrupa antes de que el programa principal

pase a gestionar el error.

En la línea 30 (Listado 2), el plugin utiliza

a continuación la instrucción INFO para indi-

car el número de bytes devueltos al pulsar el

enlace, y el método back() en la línea 34

pulsa el botón Atrás del navegador virtual

para volver a la página de bienvenida.

El plugin CheckBoxFill del Listado 3 uti-

liza un enfoque diferente. Busca a través del

archivo HTML de la página de bienvenida

con el objetivo de encontrar el primer formu-

lario de la web y luego utiliza la instrucción

form_number(1) para configurarla como

current_form. El método find_input() extrae

todos los campos de entrada de tipo “casilla

de verificación” del formulario, y el bucle for

de las líneas 27-29 los selecciona a todos lla-

mando a sus métodos check(). La línea 32

llama entonces a submit_form() para enviar

el formulario web de vuelta al servidor, antes

de que la línea 34 vuelva a la página de bien-

venida para asegurarse de que el próximo

plugin encuentra las condiciones de partida

normales.

Este método hace posible controlar páginas

de bienvenida como las que se muestran en

las Figuras 6 y 7, las cuales requieren que el

usuario marque una casilla de verificación y

luego pulse un botón que envía el formulario.

toma un breve descanso y luego lo intenta de

nuevo. Una vez que el cliente tiene una

dirección IP y las peticiones web al menos

muestran la página de bienvenida, el script

lanza un plugin tras otro en la pared artificial

(Figura 5) hasta que finalmente la derrumba.

El Listado 1 muestra la clase de base Splas-

hJumper para todos los plugins, la cual sim-

plemente define un constructor. Tira del

módulo Module::Pluggable de CPAN y le

pasa el parámetro require => 1. El módulo

comprueba entonces el subdirectorio Splas-

hJumper/Plugin en busca de los archivos

.pm, ejecuta una instrucción require, y los

carga en el script activo.

El Mejor PrimeroEl Listado 2 muestra un típico plugin con el

módulo ClickAllLinks. Cuando se carga el

script principal del plugin, llama al método

register(), que devuelve el nombre de la tác-

tica actual y un número de prioridad. El

script principal ordena los plugins numérica-

mente en base a los números de prioridad

que reporta, llamando a los plugins con

menor valor en primer lugar. Esto significa

que los plugins pueden decidir entre ellos

quién va primero. Para reducir el tiempo de

DESARROLLO • Perl: Scripting

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

Figura 4: Si la conexión de red está desactivada, el script intenta

alcanzar el servidor de Google a intervalos de 5 segundos.

Figura 5: Si el script encuentra una página de bienvenida, aplica pri-

mero el método click-all-links.

01 #############################

02 package SplashJumper::Plugin::

CheckBoxFill;

03 #############################

04 # Mike Schilli, 2010

05 # ([email protected])

06 #############################

07 use Log::Log4perl qw(:easy);

08

09 #############################

10 sub register {

11 #############################

12 return “checkbox-fill”, 50;

13 }

14

15 #############################

16 sub process {

17 #############################

18 my ($self, $mech) = @_;

19

20 $mech->form_number(1);

21

22 my @inputs =

23 $mech->current_form

24 ->find_input(undef,

25 “checkbox”);

26

27 for my $input (@inputs) {

28 $input->check();

29 }

30

31 INFO “Submitting form 1”;

32 $mech->submit_form(

33 form_number => 1);

34 $mech->back();

35 }

36

37 1;

Listado 3: CheckBoxFill.pm

Page 43: Linux Magazine 72r

El Listado 4 finalmente muestra el pro-

grama principal, Splash. Empieza por defi-

nir en la línea 13 la URL de prueba, que el

script recupera para descubrir si la conexión

a Internet está activa. La página de Google

es perfecta para esto, porque es ligera y es

muy probable que esté disponible en una

conexión a Internet que funcione. La línea

16 inicializa el entorno de trabajo Log4perl

en el nivel DEBUG para dar al usuario infor-

mación detallada sobre el plugin en ejecu-

ción en ese momento y las acciones que

está llevando a cabo en el navegador virtual.

Gracias a la utilización de Module::Plug-

gable, los objetos de la clase de base Splash -

Jumper disponen de un método plugins()

que devuelve una lista de todos los plugins

instalados en el subdirectorio de Plugin. La

línea 28 comprueba si cada plugin propor-

ciona un método register(), como se

requiere, y omite plugins no implementados

correctamente, devolviendo un mensaje de

error en este sentido al mismo tiempo.

Los plugins correctamente implementa-

dos devuelven sus tácticas como $algo en la

línea 35 y su prioridad numérica preferida

en la variable $order. El script empaqueta la

información que

encuentra en una

matriz y empuja

una referencia al

final de la matriz

@ways. La línea

44 ordena los ele-

mentos de esta

matriz numérica-

mente por el

campo order, de

manera que un

plugin con una

prioridad de 10

ejecuciones se

ejecuta antes

(before) que un

plugin con una

prioridad de 50.

El simulador de navegador

WWW::Mechanize establece su tiempo de

espera a cinco segundos en la línea 50. Esto

significa que el bloque del bucle de las

líneas 53 a 62 sólo se congela en el método

get() durante cinco segundos antes de darse

por vencido, durmiendo durante cinco

segundos , y a continuación vuelve a inten-

tar acceder al servidor de Google. Al final

del bloque, que Perl repite ejecutando un

redo, al menos la red local WiFi está funcio-

nando y al cliente se le asigna una dirección

IP válida. Sin embargo, el proveedor de

WiFi aún podría haber encaminado las peti-

ciones a www. google. com a un servidor

interno que produce la página de bienve-

nida.

Perl: Scripting • DESARROLLO

Figura 6: La red WiFi del aeropuerto de San Diego requiere que el usua-

rio marque una casilla de verificación y entonces envía el formulario

web.

Page 44: Linux Magazine 72r

error que se pro-

duzca en el plu-

gin, y la línea 88

comprueba la

variable $@ para

ver si ha suce-

dido algo.

InstalaciónPara asegurarnos

de que el script

encuentra el módulo Splash Jumper, éste

deberá estar instalado en la ruta de la bús-

queda del script %INC: la forma más sencilla

de hacerlo es poner los dos en el mismo

directorio. Los plugins se almacenan en el

recién creado subdirectorio

SplashJumper/Plugin, de modo que el

diseño del archivo se parece a esto:

splash

SplashJumper.pm

SplashJumper/Plugin/U

ClickAllLinks.pm

SplashJumper/Plugin/U

CheckBoxFill.pm

Algunos plugins adicionales podrían contro-

lar múltiples formularios web, o incluso sor-

tear los trucos de JavaScript. También nece-

sitan almacenarse en el directorio Plugin. Su

método register() tiene que asignar un nom-

bre para la táctica, y decide una prioridad

para definir el orden en que se ejecutará.

Después de abrir la tapa de su portátil en el

aeropuerto, sólo tiene que lanzar el script

splash. Su salida nos indica cómo lucha

nuestro guerrero de bolsillo en su nuevo

entorno y si logra vencer esos obstáculos

artificiales. �

El bucle for de las líneas 65 a 95 intenta

burlar la página de bienvenida con una gran

variedad de plugins, y una vez que la URL

de la última solicitud es igual a la URL de

prueba (es decir, no se redirige a la página de

bienvenida), la línea 72 decide que la página

de bienvenida ha sido derrotada y la cone-

xión a Internet está abierta.

Si no es este el caso, la línea 85 llama al

método process() para el próximo plugin en

línea con igual o mayor prioridad. El bloque

eval{} de las líneas 81 a 86 atrapa cualquier

DESARROLLO • Perl: Scripting

52 Número 72 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/ 72

RECURSOS

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

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

03 # splash - Traverse WiFi

04 # Splash Pages

05 # Mike Schilli, 2010

06 # ([email protected])

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

08 use strict;

09 use SplashJumper;

10 use WWW::Mechanize;

11 use Log::Log4perl qw(:easy);

12

13 my $url =

14 “http://www.google.com”;

15

16 Log::Log4perl->easy_init(

17 $DEBUG);

18

19 my $sj = SplashJumper->new();

20

21 my @ways = ();

22

23 for

24 my $plugin ($sj->plugins())

25 {

26

27 if (

28 !$plugin->can(“register”))

29 {

30 ERROR “$plugin can’t do”,

31 “ register()”;

32 next;

33 }

34

35 my ($algo, $order) =

36 $plugin->register();

37

38 push @ways,

39 [ $algo, $plugin,

40 $order ];

41 }

42

43 # sort by plugin priority

44 @ways = sort {

45 $a->[2] <=> $b->[2]

46 } @ways;

47

48 my $mech =

49 WWW::Mechanize->new();

50 $mech->timeout(5);

51

52 # wait until network is up

53 {

54 INFO “Trying $url”;

55 eval { $mech->get($url); };

56 if ($@) {

57 INFO

58 “Connection down, retrying”;

59 sleep 5;

60 redo;

61 }

62 }

63

64 # try to get past splash page

65 for my $ways (@ways) {

66 eval { $mech->get($url); };

67

68 my $current_url =

69 $mech->response->request

70 ->uri;

71

72 if ($current_url eq $url) {

73 INFO “Link is up.”;

74 last;

75 } else {

76 INFO “Link still down”;

77 }

78

79 my ($algo, $plugin, $order)

80 = @$ways;

81

82 eval {

83 INFO “Processing splash “,

84 “page $current_url “,

85 “with algo $algo”;

86 $plugin->process($mech);

87 };

88

89 if ($@) {

90 ERROR

91 “Algo $algo failed ($@)”;

92 } else {

93 INFO

94 “Plugin $algo succeeded”;

95 }

96 }

Listado 4: Splash

Figura 6: La red WiFi del aeropuerto de San Diego requiere que el usuario

marque una casilla de verificación y entonces envía el formulario web.

Page 45: Linux Magazine 72r

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

Para balancear la carga y mejorar la

disponibilidad, primero necesita

organizar los servidores en un

cluster. Y para eliminar posibles sorpresas

en la gestión del cluster, todos los servido-

res miembros deben ser idénticos. Esto

facilita dicha tarea de gestión, pero tam-

bién la hace realmente aburrida. Cluster

SSH [1], que le ahorrará mucho trabajo

con muy poco coste, tiene una interfaz Tk

minimalista con un cuadro de texto de

entrada. Cualquier comando que teclee

en el cuadro se ejecutará en todos los ser-

vidores conectados. Por ejemplo, el

comando mostrado en la Figura 1 es htop.

Cuando se lanza, Cluster SSH espera

una lista de servidores con los que abre

conexiones SSH – por ejemplo:

Charly Kühnast

es Gerente de

Sistemas Unix

en el centro de

datos de Möers,

Alemania, cerca

del conocido

Rhin. Entre sus

labores se incluye la seguridad del

cortafuegos, la disponibilidad y el

cuidado de la DMZ (zona desmilita-

rizada). Divide su tiempo libre entre

el calor, la humedad y oriente,

donde se divierte cocinando, visi-

tando acuarios y aprendiendo

japonés respectivamente.

EL A

UT

OR

SimultaneidadEspontánea

El día a día del administrador de sistemas: Cluster SSHtiempo fuera demasiado alto, significaría

que ha olvidado actualizar el kernel.

Si se crea un fichero de configuración

~/.csshrc para cada usuario, las configu-

raciones en este fichero son complemen-

tarias o reemplazan al fichero /etc/clus-

ters.

RenovaciónHay gente a la que no le gusta la ventana

con el terminal negro tal y como se mues-

tra en la captura de pantalla. Con la

entrada

terminal_bg_style = dark

podrá añadir la iluminación adecuada a

ese ambiente vampiresco. Para aumen-

tarla, sólo habrá que cambiar dark por

light.

Cluster SSH también puede asignar una

fuente de color para cada servidor, lo cual

puede ser muy útil, ya que cuando la

fuente de color siempre es la misma en el

servidor, después de un tiempo, se pue-

den identificar los nodos de un vistazo

simplemente por el tono que presenten

las 24 terminales. Si desea prescindir del

color, puede cerrar la caja de pinturas

tecleando terminal_colorize = 0. Para

cambiar el tamaño estándar de la pantalla

de 24 líneas con 80 caracteres, escriba

algo como:

terminal_size = 120x32

Mi veredicto: Ningún cluster sin Cluster

SSH. �

A Charly no le gusta la idea de tener que buscar entre los ficheros de

registros de una docena de servidores proxy cuando la página solici-

tada muestra un error. Dado que él ha desarrollado Cluster SSH, puede

tirar de la cuerda en varios equipos a la vez

Por Charly Kühnast

La Columna de Charly • ADMINISTRACIÓN

user@server1 user@server2 U

user@server3

Para optimizar el proceso se pueden agru-

par los servidores con una etiqueta en el

fichero /etc/clusters:

proxys admin@proxy1 U

admin@proxy2 admin@proxy3

mailserver admin@mailserver1 U

admin@mailserver2 U

admin@mailserver3

A continuación, cuando se llama a cssh

proxys, aparecerán las terminales de

todos los servidores proxy que se

han definido. Existe la posibili-

dad de volver a utilizar de nuevo

las etiquetas en una lista de ser-

vidores. Si ahora se añade

allservers proxys mailserver

al fichero /etc/clusters, Cluster

SSH abre un terminal para todos

los servidores etiquetados como

proxys y mailserver cuando se

llama a:

cssh allservers

El escritorio se encuentra ahora

bastante concurrido, pero puede

ser práctico si se necesita, por ejemplo,

comprobar los tiempos de funciona-

miento de estos servidores – si este

Figura 1: htop se está ejecutando en cada una de las

tres máquinas del cluster. Con Cluster SSH, el admin-

istrador se evitará tener que visitar cada nodo por

sepa rado.

[1] Cluster SSH: http:// sourceforge. net/

projects/ clusterssh

RECURSOS

Page 46: Linux Magazine 72r

ADMINISTRACIÓN • Btrfs

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

Btrfs [1] es un nueva generación de

sistema de ficheros destinado a con-

vertirse en el sistema de ficheros por

defecto de muchas distribuciones Linux futu-

ras. Inicialmente desarrollado por Oracle,

viene con licencia GPL (General Public

License) Versión 2, y a partir de la versión

2.6.29-rc1 del kernel de Linux se aceptó den-

tro del desarrollo principal del kernel. Btrfs es

el acrónimo de sistema de ficheros B-tree,

pero normalmente se pronuncia como “But-

ter FS” (butter significa mantequilla en

inglés). Este innovador sistema de ficheros

está inspirado en el sistema de ficheros ZFS

de Sun Microsystem (ahora Oracle), que ofi-

cialmente nunca se portó al kernel de Linux

debido a problemas de licencias entre CDDL

(Common Development and Distribution

License) y GPL.

Btrfs es conocido como un sistema de

ficheros COW (Copy-On-Write). Cuando se

modifican datos, nunca se modifican en su

lugar. Se crea un bloque de datos o una serie

de bloques de datos nuevos para almacenar-

los. Este concepto sirve de ayuda para que

Btrfs pueda soportar funcionalidades avan-

zadas, como imágenes y subvolúmenes. Un

volumen puede referirse a uno o a varios gru-

pos de discos o particiones.

El sistema de ficheros Btrfs permite agru-

par varios discos en uno único y (si se especi-

fica) en un volumen RAID redundante, el

redimensionado dinámico de volúmenes, la

desfragmentación en línea, la verificación de

las sumas de control, la compresión y

muchas otras características más. A pesar de

que algunas de sus funcionalidades aún se

encuentran incompletas, Btrfs se activa en

una configuración por defecto de un kernel

vanilla y se encuentra soportado oficialmente

por varias distribuciones Linux, incluyendo

Fedora y Ubuntu. Si está utilizando un sis-

tema que no ofrezca Btrfs, habrá que recom-

pilar el kernel para activar Btrfs, además de

compilar el juego de herramientas btrfs-progs

para gestionarlo.

En este artículo mostraremos cómo crear y

administrar un sistema de ficheros Btrfs, y

examinaremos algunas de las funcionalida-

des avanzadas. Sin embargo, hay que tener

en cuenta que Btrfs es relativamente nuevo y

aún se encuentra bajo desarrollo.

La Utilidad deAdministraciónEn el momento de redactar este artículo,

Btrfs no es un sistema de ficheros arrancable;

por ello, no podrá contener el directorio

/boot, donde residen las imágenes de arran-

que y del kernel.

Las dos principales utilidades que se nece-

sitan para crear y gestionar un volumen Btrfs

son mkfs.btrfs(8) y btrfs(8). (Muchas guías

sobre Btrfs también hacen referencia a

btrfsctl, una herramienta antigua que actual-

mente ha sido reemplazada por btrfs). La uti-

lidad btrfs es una herramienta de propósito

general que se puede utilizar para adminis-

trar los volúmenes Btrfs, monitorizar su uso,

crear subvolúmenes e imágenes, crear volú-

menes nuevos, añadir o quitar discos de los

volúmenes existentes y permitir la desfrag-

mentación en línea y el balanceo del volu-

men.

Por ejemplo, en un sistema Linux, para

saber si hay algún dispositivo Btrfs introduci-

ríamos el siguiente comando:

$ sudo btrfs device scan

Para descubrir todos los sistemas de ficheros

multidiscos de la máquina deberemos ejecu-

tar este comando tras reiniciar o recargar el

Tan suave como lamantequillaBtrfs se presenta como un ganador para los expertos gracias a sus

avanzadas funcionalidades como subvolúmenes, imágenes y redimen-

sionado dinámico de volúmenes.

POR PETROS KOUTOUPIS

Administración de volúmenes de almacenamiento con Btrfs

Errores y fsck

La wiki de Btrfs [1] contiene el siguiente aviso: Téngase en cuenta que Btrfs aún no

posee una herramienta fsck que pueda solucionar errores. Aunque Btrfs es estable en

una máquina estable, es posible que actualmente pueda corromperse el sistema de

ficheros de forma irrecuperable en el caso de que se produzca algún cuelgue de la

máquina o un corte del suministro eléctrico de los discos que no permita el volcado de

los datos de forma correcta. Estos problemas se solucionarán cuando la herramienta

fsck se encuentre disponible.

Listado 1: Listando Sistemas de Ficheros Btrfs$ sudo btrfs filesystem show

Label: none uuid: f2346c58-64fd-42a5-afdb-10e9e134d0a1

Total devices 1 FS bytes used 2.40GB

devid 1 size 7.64GB used 4.60GB path /dev/sda6

Page 47: Linux Magazine 72r

módulo btrfs. Si lo que deseamos es listar los

tipos de dispositivos (Listado 1), utilizare-

mos:

$ sudo btrfs filesystem show

Creación de un VolumenNuevoPara utilizar el nuevo sistema de ficheros

Btrfs debemos formatear y etiquetar un volu-

men consistente en uno o más discos o parti-

ciones. La creación de un volumen Btrfs

nuevo es bastante sencilla. Para crear un

volumen con un sólo disco tecleamos:

$ sudo mkfs.btrfs /dev/sdb

Para utilizar múltiples discos, deberemos eje-

cutar el siguiente comando, listando todos

los discos. (Para las opciones de RAID de

Btrfs, véase el cuadro titulado “Btrfs y

RAID”).

$ sudo mkfs.btrfs /dev/sdb U

/dev/sdc /dev/sdd

En el Listado 2, mkfs.btrfs configura los dis-

cos de modo que los metadatos se distribu-

yan por todos ellos. Para distribuir tanto los

datos como los metadatos por todos los dis-

cos (sin utilizar una configuración de

espejo), utilizaremos el comando:

$ sudo mkfs.btrfs -m raid0

/dev/sdb /dev/sdc /dev/sdd

Para utilizar una configuración de espejo

tanto de los metadatos como de los datos dis-

tribuyéndolos por todos los discos, lo hare-

mos con:

$ sudo mkfs.btrfs -m raid10 U

-d raid10 /dev/sdb /dev/sdc U

/dev/sdd /dev/sde

Tras crearse un nuevo volumen Btrfs, se

añade una entrada nueva en la lista del sis-

tema de ficheros Btrfs de la máquina. Para

listar todos los sistemas de ficheros Btrfs y

qué dispositivos incluyen, se puede utilizar el

comando btrfs. En el Listado 3 podemos

apreciar el volumen Btrfs recién creado.

Para leer y escribir será necesario montar

el volumen desde cualquier dispositivo de

bloques especificado cuando se creó el volu-

men. Los Listados 3 y 4 utilizan /dev/sdb

para designar el volumen entero.

Añadir y Eliminar DiscosUna de las mejores funcionalidades del sis-

tema de ficheros Btrfs es la posibilidad de

añadir o eliminar dinámicamente discos. Si

disponemos de un disco que haya fallado o

que deseemos colocar en otro sitio, podemos

quitarlo con el comando:

$ sudo btrfs device delete U

/dev/sdd /mnt/

Cuando se invoque la opción filesystem

show, la utilidad btrfs mostrará que ya no se

encuentra uno de los discos (Listado 5).

Para añadir un disco se utiliza:

$ sudo btrfs device add U

/dev/sdd /mnt/

El Listado 6 muestra el listado actualizado

del sistema de ficheros. En este punto, el sis-

tema de ficheros incluye tres discos, pero

todos los metadatos y datos se encuentran

aún almacenados en /dev/sdb y /dev/sdc.

Ahora hay que balancear el sistema de fiche-

ros y repartir los ficheros por todos los dis-

cos. El proceso completo de balanceo

reparte los datos por todos los discos exis-

tentes:

Btrfs • ADMINISTRACIÓN

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

Figura 1: Imagen en la que se aprecia cómo

los datos se distribuyen a través de un volu-

men RAID 0 y cómo se almacenan de forma

redundante en un volumen RAID 1.

Btrfs y RAID

RAID (Redundant Array of Independent Disks) es un método por el cual múltiples discos duros independientes conectados a un orde-

nador aparecen como un único disco. Dependiendo del tipo de RAID, el rendimiento puede mejorarse de forma increíble, especial-

mente si se distribuyen los datos por múltiples discos, eliminándose los cuellos de botella de un único disco para las operaciones de

lectura/ escritura. La mayoría de los algoritmos de RAID ofrecen una forma de redundancia que puede resistir un número finito de

fallos de disco. Cuando un disco falla en un array redundante, el sistema funcionará en un modo degradado hasta que se restaure. La

tecnología es capaz de restaurar el sistema a un punto anterior al momento del fallo. Existen numerosos tipos de RAID. Hasta la fecha,

Btrfs soporta oficialmente RAID 0, RAID 1 y RAID 10, pudiendo duplicar también los metadatos en un único disco. Existe un parche que

proporciona soporte para RAID 5 y RAID 6, pero oficialmente no ha sido integrado en el proyecto.

Un array RAID 0 consiste en la distribución de los datos por todos los discos que formen el array, escribiendo según el algoritmo de

round-robin. Las operaciones de lectura y escritura acceden a los datos de la misma forma. La escritura o lectura de los datos de forma

concurrente por medio de varios discos tardan menos tiempo que la realización de esa misma operación en un único disco, con lo que

un sistema RAID 0 puede mejorar de forma considerable el rendimiento, aunque RAID 0 no ofrece redundancia. Si uno de los discos

del array fallara, entonces el array entero fallará.

En un array RAID 1 (discos en espejo), uno de los discos almacena una réplica exacta del otro disco. Si uno de los discos fallase, el

segundo entraría en acción y seguiría a partir de donde se quedó el primero. El rendimiento global es igual al rendimiento que se con-

sigue con un único disco. En algunas implementaciones RAID 1, las operaciones de lectura se afinan para que consigan velocidades

mayores por medio de un mecanismo conocido como balanceo de lectura. El balanceo de lectura proporciona la habilidad de obtener

los datos de los dos discos del array.

El sistema híbrido RAID 10 usa las dos técnicas anteriores. La Figura 1 muestra un ejemplo de cómo los datos se escriben en un chunk

a través de múltiples discos en un volumen RAID.

Listado 2: Formateando Múltiples Discos

$ sudo mkfs.btrfs /dev/sdb /dev/sdc /dev/sdd

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL

WARNING! - see http://btrfs.wiki.kernel.org before using

adding device /dev/sdc id 2

adding device /dev/sdd id 3

fs created label (null) on /dev/sdb

nodesize 4096 leafsize 4096 sectorsize 4096 size 6.00GB

Page 48: Linux Magazine 72r

Para verificar que el subvolumen existe en la

raíz del volumen Btrfs, se utiliza la opción

list:

$ sudo btrfs subvolume list /mnt

ID 256 top level 5 path subvol

El Listado 8 muestra los contenidos de la raíz

del sistema de ficheros.

Si deseamos especificar un subvolumen

como el volumen por defecto cuando se

monte, es necesario obtener el ID del subvo-

lumen (como se puede observar en el

comando anterior) e invocar la utilidad btrfs

con la siguiente opción:

$ sudo btrfs subvolume U

set-default 256 /mnt

Por otro lado, podemos montar el subvolu-

men en un directorio separado.

$ sudo mount -t btrfs -o U

subvol=subvol /dev/sdb U

/subvol

Aunque se pudiera pensar que la imagen de

los datos es un subvolumen, difiere en

implementación. Una imagen es un estado

individual de un volumen de almacena-

miento en un momento determinado. Las

imágenes normalmente se utilizan para el

archivado de datos. Los administradores de

volúmenes más tradicionales requieren que

la imagen se tome de todo el volumen lógico

entero. Btrfs, por otro lado, permite crear

imágenes de ficheros individuales o de direc-

torios enteros que se encuentren en el volu-

men Btrfs. (Recuérdese que todo esto es

posible gracias al diseño COW del sistema

de ficheros Btrfs).

Para ver cómo funciona el proceso de crea-

ción de imágenes, debemos comenzar cre-

ando un fichero con touch o dd (Listado 9).

Ahora que tenemos un fichero, podemos

crear una imagen de la raíz del sistema de

ficheros:

$ sudo btrfs subvolume snapshotU

/mnt /mnt/snapshot_of_root

Un listado de todos los subvolúmenes del sis-

tema de ficheros Btrfs tendrá ahora la imagen

incluida.

$ sudo btrfs subvolume list /mnt

ID 256 top level 5 path subvol

ID 257 top level 5 path U

snapshot_of_root

Cuando realicemos esta operación, un lis-

tado de los contenidos de la imagen recién

creada mostrará una imagen raíz del volu-

men Btrfs, con la excepción del directorio de

la imagen del subvolumen (Listado 10).

Ahora creamos un fichero nuevo en la raíz

del volumen. La imagen aún preservará los

datos originales del momento que se tomó

(véase la comparativa del Listado 11).

Para montar la imagen recién creada en un

directorio separado, deberemos teclear:

$sudo mkdir /btrfs_snapshot

$sudo mount -t btrfs -o subvol=U

snapshot_of_root U

/dev/sdb /btrfs_snapshot/

La realización de una copia de seguridad de

un volumen entero puede tardar bastante

tiempo y consumir grandes cantidades de

espacio de almacenamiento, incluso para los

ficheros que permanecen inalterados. Tam-

bién, cuando se realiza una copia de seguri-

dad de un volumen entero o de un subcon-

junto de volúmenes en un entorno de multi-

procesamiento simétrico, las operaciones de

escritura podrían seguir modificando los

datos de los ficheros del volumen, con la posi-

bilidad de corromper los datos. Diversas

estrategias proporcionan mayores proteccio-

nes. Por ejemplo, el volumen puede ponerse

offline o marcarse como de sólo lectura antes

$ sudo btrfs filesystem balanceU

/mnt/

Este comando lleva a la configuración mos-

trada en el Listado 7.

La operación de balanceo tarda un poco,

ya que requiere que todos los datos y meta-

datos del sistema de ficheros se vuelvan a

leer y reescribir por todos los discos del array,

incluyendo los discos nuevos añadidos.

Subvolúmenes e Imágenesde VolúmenesUn único volumen Btrfs puede contener

múltiples subvolúmenes. Si se define un sub-

volumen como “default” (por defecto) para

el volumen, cuando se monte el volumen, el

subvolumen aparecerá como raíz; incluso es

posible montar un subvolumen cuando el

volumen padre no se encuentre montado.

Cada subvolumen puede operar como un

sistema de ficheros independiente. En Btrfs,

todo el almacenamiento se encuentra en el

conjunto, y los subvolúmenes se crean a par-

tir de este conjunto – no necesitamos hacer

ninguna partición. Mientras que la capacidad

de almacenamiento se mantenga, se pueden

crear todos los subvolúmenes que se deseen.

Para crear uno deberemos introducir:

$ sudo btrfs subvolume createU

/mnt/subvol

Create subvolume ‘/mnt/subvol’

ADMINISTRACIÓN • Btrfs

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

Listado 3: Un Sistema de Ficheros Btrfs Nuevo

$ sudo btrfs filesystem show

Label: none uuid: f2346c58-64fd-42a5-afdb-

10e9e134d0a1

Total devices 1 FS bytes used 2.40GB

devid 1 size 7.64GB used 4.60GB path /dev/sda6

Label: none uuid: 0fa5bbee-6f69-4d10-a316-ac373e8b5f64

Total devices 3 FS bytes used 28.00KB

devid 1 size 2.00GB used 531.94MB path /dev/sdb

devid 2 size 2.00GB used 212.75MB path /dev/sdc

devid 3 size 2.00GB used 519.94MB path /dev/sdd

Listado 4: Montando y Verificando

$ sudo mount /dev/sdb /mnt/

$ df -t btrfs

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda6 8011776 2745480 5266296 35% /

/dev/sdb 6291456 56 6291400 1% /mnt

Listado 5: Tras Eliminar un Disco

$ sudo btrfs filesystem show /dev/sdb

Label: none uuid: 0fa5bbee-6f69-4d10-a316-ac373e8b5f64

Total devices 3 FS bytes used 36.00KB

devid 1 size 2.00GB used 156.00MB path /dev/sdb

devid 2 size 2.00GB used 136.00MB path /dev/sdc

*** Some devices missing

Page 49: Linux Magazine 72r

de procesar los archivos, pero en los entornos

en producción de alta disponibilidad, esta

propuesta puede que no sea muy práctica.

Las imágenes ofrecen una solución más

completa. Podemos utilizarlas para evitar los

retrasos y retener la atomicidad cuando se

almacenen ficheros enteros, directorios o sis-

temas de ficheros. En un entorno en produc-

ción, no es raro que un administrador de sis-

temas cree un trabajo cron planificado para

crear imágenes cada hora, día, semana o

mes de varios ficheros y directorios, inclu-

yendo los directorios home de los usuarios.

De esta forma, los administradores pueden

obtener ficheros recientemente modificados

o borrados sin muchos quebraderos de

cabeza.

Para borrar un subvolumen introducimos:

$ sudo btrfs subvolume delete U

/mnt/subvol

Cuando se listan todos los subvolúmenes del

volumen padre, podrá apreciarse que el sub-

volumen recientemente borrado no aparece:

$ sudo btrfs subvolume list /mnt

ID 257 top level 5 path U

snapshot_of_root

También podemos borrar las imágenes de los

subvolúmenes de la misma forma.

$ sudo btrfs subvolume delete U

/mnt/ snapshot_of_root/

Redimensionando unVolumenAl contrario que la mayoría de los sistemas

de ficheros alternativos, Btrfs permite redi-

mensionar dinámicamente un volumen exis-

tente. Esta opción aún se encuentra limitada

y necesita más tiempo para madurar, aunque

todavía es útil en algunos entornos. Si quere-

mos decrementar el tamaño de un volumen

de 6 a 5GB debemos introducir:

$ sudo btrfs filesystem resize U

-1G /mnt/

Resize ‘/mnt/’ of ‘-1G’

Ahora el volumen tiene un tamaño de 5GB

(véase el Listado 12). Para volver de nuevo a

un sistema de ficheros de 6GB lo haremos

con

$ sudo btrfs filesystem resize U

+1G /mnt/

Resize ‘/mnt/’ of ‘+1G’

Si deseamos utilizar el tamaño máximo del

volumen, teclearemos:

$ sudo btrfs filesystem resize U

max /mnt

El Listado 13 muestra la salida de df tras

volver a redimensionar de nuevo el volu-

men a 6GB (la capacidad máxima del volu-

men).

La limitación actual es que el módulo de

Btrfs no permite redimensionar un subvo-

lumen sin afectar el tamaño del volumen

padre. Por ejemplo, si el volumen padre

está montado en /mnt y el subvolumen en

/subvol, si se intenta decrementar el

tamaño del subvolumen para dejar más

espacio para crear un subvolumen nuevo

en el futuro, el volumen padre también

decrementará el tamaño total (Listado 14).

Btrfs no permite que el volumen padre se

mantenga constante y libere espacio

cuando se encoja un subvolumen.

Supongo que este problema se resolverá

próximamente, una vez que Btrfs haya

madurado más.

Comandos yConfiguracionesPara ver las páginas man de las utilidades

mkfs.btrfs y btrfs, introduciremos en la línea

de comandos:

$ man 8 btrfs

A pesar de que el comando df se utilice prin-

cipalmente para monitorizar el tamaño y uso

del sistema de ficheros completo, la herra-

Btrfs • ADMINISTRACIÓN

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

Listado 6: Tras Añadir un Disco

$ sudo btrfs filesystem show /dev/sdb

Label: none uuid: 0fa5bbee-6f69-4d10-a316-ac373e8b5f64

Total devices 3 FS bytes used 36.00KB

devid 1 size 2.00GB used 156.00MB path /dev/sdb

devid 2 size 2.00GB used 136.00MB path /dev/sdc

devid 3 size 2.00GB used 0.00 path /dev/sdd

Listado 7: Tras el Rebalanceo

$ sudo btrfs filesystem show /dev/sdb

Label: none uuid: 0fa5bbee-6f69-4d10-a316-ac373e8b5f64

Total devices 3 FS bytes used 36.00KB

devid 1 size 2.00GB used 352.75MB path /dev/sdb

devid 2 size 2.00GB used 204.75MB path /dev/sdc

devid 3 size 2.00GB used 340.75MB path /dev/sdd

Listado 8: Listando los Contenidos

$ ls -l /mnt/

total 0

drwx------ 1 root root 0 2010-12-29 15:51 subvol

Listado 9: Creando un Fichero de Prueba

$ sudo dd if=/dev/zero of=/mnt/test.dat count=4

4+0 records in

4+0 records out

2048 bytes (2.0 kB) copied, 0.000383095 s, 5.3 MB/s

$ ls /mnt/

subvol test.dat

Listado 10: Comparativa de la Imagen$ ls -l /mnt/snapshot_of_root/

total 2

drwxr-xr-x 1 root root 0 2010-12-29 15:57 subvol

-rw-r--r-- 1 root root 2048 2010-12-29 15:54 test.dat

$ ls -l /mnt/

total 6

dr-xr-xr-x 1 root root 60 2010-12-29 15:54 snapshot_of_root

drwx------ 1 root root 0 2010-12-29 15:51 subvol

-rw-r--r-- 1 root root 2048 2010-12-29 15:54 test.dat

Page 50: Linux Magazine 72r

cuenta que la desfragmentación tarda más

en volúmenes más grandes y con más

datos). Para desfragmentar un volumen

introducimos:

$ sudo btrfs filesystem U

defragment /mnt/

Del mismo modo que cualquier otro sistema

de ficheros en Linux, Btrfs también soporta el

montaje de un volumen Btrfs con una o

varias opciones de montaje. Por ejemplo,

para desactivar las sumas de comprobación

CRC-32C mientras se activa la compresión

zlib, deberemos teclear:

$ sudo mount -t btrfs -o U

nodatasum,compress /dev/sdb U

/mnt/

Btrfs también contiene optimizaciones para

los populares discos de estado sólido basa-

dos en tecnología flash (SSD). Para activar

las optimizaciones SSD, lo haremos con la

opción -o ssd en el montaje.

Téngase en cuenta que, en v2.6.31-rc1,

esta opción de montaje se activará si Btrfs es

capaz de detectar que el sistema de ficheros

no posee rotación. Los SSD van a representar

una parte importante en el futuro del almace-

namiento de datos, y es conveniente obser-

var que los desarrolladores han estado prepa-

rando su llegada. Véase la página wiki de

Btrfs para un listado completo de las opcio-

nes de montaje [2].

Merece la pena mencionar que si desea-

mos añadir una entrada en el fichero

/etc/fstab para montar el volumen Btrfs en el

arranque del sistema, podemos hacerlo intro-

duciendo una línea nueva que especifique

uno de los dispositivos, el punto de montaje,

el sistema de ficheros y la lista de todos los

dispositivos y opciones:

/dev/sdb /mnt btrfs U

device=/dev/sdb,device=U

/dev/sdc,

device=/dev/sdd, U

device=/dev/sde 0 0

O, podemos utilizar el UUID (como se mues-

tra en la salida del comando btrfs filesystem

show) seguido de las entradas típicas de fstab

(Listado 15).

ConclusiónLa próxima generación de sistemas de fiche-

ros para Linux está llena de funcionalidades

y características – si nos tomamos el tiempo

necesario para acostumbrarnos a las herra-

mientas. A pesar de que Btrfs posee funcio-

nes no implementadas aún, el sistema de

ficheros proporciona una flexibilidad sor-

prendente. Como Btrfs está evolucionando,

cabe esperar la aparición de soporte para

RAID 5 y RAID 6, comprobaciones en línea

de la integridad del sistema de ficheros e

incluso el soporte para la reciente deduplica-

ción de datos (una solución ideal para entor-

nos virtualizados). �

mienta btrfs posee su propia versión que

muestra más detalles de uso del sistema de

ficheros deseado.

$ btrfs filesystem df /

Data: total=3.06GB, used=2.24GB

Metadata: total=783.19MB, U

used=220.93MB

System: total=12.00MB, U

used=4.00KB

$ btrfs filesystem df /mnt/

Data: total=614.25MB, used=0.00

Metadata: total=128.00MB, U

used=32.00KB

System: total=12.00MB, U

used=4.00KB

Como se mencionó anteriormente, Btrfs

soporta desfragmentación online (téngase en

ADMINISTRACIÓN • Btrfs

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

RECURSOS

[1] Wiki de Btrfs: https:// btrfs. wiki. kernel. org/

[2] Opciones de montaje de Btrfs:

https:// btrfs. wiki. kernel. org/ index. php/ Getting_started#Mount_Options

[3] Entrada en Wikipedia sobre Btrfs:

http:// en. wikipedia. org/ wiki/ Btrfs

Listado 11: Comparativa Actualizada

$ ls -l /mnt/

total 10

dr-xr-xr-x 1 root root 60 2010-12-29 15:54 snapshot_of_root

drwx------ 1 root root 0 2010-12-29 15:51 subvol

-rw-r--r-- 1 root root 2048 2010-12-29 15:59 test_again.dat

-rw-r--r-- 1 root root 2048 2010-12-29 15:54 test.dat

$ ls -l /mnt/snapshot_of_root/

total 2

drwxr-xr-x 1 root root 0 2010-12-29 15:57 subvol

-rw-r--r-- 1 root root 2048 2010-12-29 15:54 test.dat

Listing 12: Salida de df$ df -t btrfs

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda6 8011776 2804452 5207324 36% /

/dev/sdb 5242880 72 5242808 1% /mnt

Listado 15: UUID y Entradas para fstab01 UUID-0fa5bbee-6f69-4d10-a316-ac373e8b5f64 /mnt btrfs defaults 0 0

Listado 13: Tras Redimensionar

$ df -t btrfs

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda6 8011776 2804456 5207320 36% /

/dev/sdb 6291456 72 6291384 1% /mnt

Listado 14: Redimensionando un Subvolumen

$ df -t btrfs

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda6 8011776 2804768 5207008 36% /

/dev/sdb 8388608 80 8388528 1% /mnt

/dev/sdc 8388608 80 8388528 1% /subvol

$ sudo btrfs filesystem resize -1G /mnt/subvol/

Resize ‘/mnt/subvol/’ of ‘-1G’

$ df -t btrfs

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda6 8011776 2804768 5207008 36% /

/dev/sdb 7340032 80 7339952 1% /mnt

/dev/sdc 7340032 80 7339952 1% /subvol

Page 51: Linux Magazine 72r

Pinta captó mi interés durante su

actualización a la versión 5.0,

lo que coincidió con el estreno

mi nueva cámara Nikon. Me he pasado

una considerable cantidad de horas

intentando aprender a sacar buenas

fotos, así que necesitaba el mejor editor

de imágenes con el que trabajarlas. A

pesar de que he estado utilizando GIMP

durante bastante tiempo, mis habilida-

des se limitan en gran medida a recortar

fotos para publicarlas en la web o para

utilizarlas para capturas de pantalla.

Así que la idea era probar Pinta y

comprobar si se adecuaba a mis exigen-

cias para su uso diario y ver si era posi-

ble hacer más tareas que con GIMP

(obsérvese que la denominación

correcta es GIMP, no “El GIMP”). Mis

requisitos no eran demasiado comple-

jos. Sólo exigía que fuera capaz de lim-

piar fotos, ajustar los niveles de color y

Pinta • LINUX USER

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

GIMP es una aplicación fantástica, pero requiere de un usuario con ta -

lento y muy paciente para sacarle todo su jugo. Pinta, un clon de la

popu lar aplicación Paint.Net de Windows, es un programa más simple

para el retoque de nuestras imágenes.

POR JOE “ZONKER” BROCKMEIER

Joe “Zonker” Brockmeier es periodista tecnológico freelance, editor, creador de

comunidades y defensor del software libre. Fue Community Manager de Open-

SUSE desde el 2008 hasta el 2010. Ahora escribe para Linux Magazine y otras pu -

blicaciones tecnológicas. Puedes encontrarlo en http:// www. dissociatedpress. net y

en Twitter e Identi.ca como jzb.

EL A

UT

OR

Una alternativa a GIMP más simple y agradable

Artista

Page 52: Linux Magazine 72r

u otra aplicación

propietaria, Pinta

sería una buena

elección. Ya he

mencionado que

Pinta es un clon

de Paint.net, no

un porte. Esto se

debe a que no usa

mucho código de

Paint.Net, a pesar

de estar basada en

general en

Paint.Net y de

estar diseñada

para copiar la

interfaz. Utiliza el

mismo código, pero no todo. Ambos

programas se encuentran bajo la licen-

cia MIT X11, que es una licencia de

software libre no-recíproca.

Si observamos la Figura 1, podremos

ver la interfaz de Pinta cuando se ini-

cia. He cargado una imagen de mi gata,

Lilah, sin efectos aplicados.

Como puede apreciarse, Pinta sigue

una interfaz de aplicación más tradicio-

nal que GIMP, con todas las barras de

herramientas acopladas en una sola

ventana. Si no deseamos este inicio,

podemos desacoplar las paletas y tener-

las flotantes, al igual que estarían en

GIMP o Photoshop.

Viaje a Través de PintaPinta tiene bastante que ofrecer, aparte

de una interfaz de ventana única o de

múltiples ventanas. Lo que este pro-

grama nos ofrece y que GIMP o Photos-

hop no, es su facilidad para encontrar

lo que estamos buscando y algunas fun-

cionalidades complicadas. ¿Puede ser la

simplicidad una ventaja? Sí, si no nece-

sitamos tantos pitos y flautas que no

harían más que molestarnos.

Una de las funcionalidades más nove-

dosas que nos ofrece es el Clone Stamp

(o sello de clon). La imagen que apa-

rece en la Figura 2 muestra un primer

plano de una vieja foto Polaroid de

algunos miembros de mi familia. Parti-

cularmente no me gustaba el sello en la

foto que indica que es de Crestwood

Bowl, así que cogí el Clone Stamp y

copié parte del fondo de la imagen.

Después de unas cuantas pasadas,

conseguí borrar el sello (Figura 3) y

hacer que pareciera razonablemente

bien fusionado con el fondo. Esto lo

hice con un tamaño de pincel de 35

(por defecto es 2). Si hubiera sido más

paciente y hubiera intentado combi-

narlo mejor, habría conseguido que

quizás incluso editarlas para extraer los

elementos que afeasen una buena foto.

Con Buena PintaEstoy usando la última versión de Pinta

en Linux Mint 10. Siempre podremos

hacernos con la versión más reciente

añadiendo el repositorio del equipo de

desarrollo nocturno a nuestras fuentes

de software en Linux Mint 10 o Ubuntu

10.10. También puede que funcione con

versiones anteriores de ambos, aunque

no lo he comprobado. Desde Launch-

pad, parece posible obtener los paque-

tes para Lucid (10.04) y también para

Maverick (10.10).

Para añadir el repositorio y obtener

Pinta ejecutamos:

sudo add-apt-repository ppa: U

moonlight-team/pinta

sudo apt-get update

sudo apt-get upgrade

Dependiendo del sistema que usemos,

tendremos que descargar además unas

cuantas librerías. Por ejemplo, si ejecu-

tamos Kubuntu, podremos ejecutar

Pinta, pero necesitaremos algunas libre-

rías de Gnome o Mono.

En caso de que no trabajemos con

Ubuntu, tendremos la opción de coger

el tarball con el fuente o buscar el repo-

sitorio del paquete de nuestra distribu-

ción favorita. Debo señalar que existen

versiones disponibles de Pinta para

Windows y Mac OS X. Si tenemos ami-

gos o familiares con Windows o Mac

instalados y queremos que utilicen una

aplicación FOSS en lugar de Photoshop

LINUX USER • Pinta

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

Figura 3: … y después de la clonación.

Figura 1: La interfaz de Pinta.

Figura 2: Imagen antes de la clonación…

Page 53: Linux Magazine 72r

fuera más difícil de distinguir, y Pinta

me hubiese permitido hacerlo. La fun-

cionalidad Clone Stamp es relativa-

mente nueva y aún presenta algunos

fallos en la versión 5.0. En lo que se

refiere a rendimiento, Pinta parece estar

a una altura similar a GIMP. Cuando se

trabaja con algunas imágenes de

tamaño moderadamente grandes (más

de 10MB), tanto Pinta como GIMP tar-

dan en cargarlas. Pero cuando trabaja

con Clone Stamp, Pinta se vuelve lento

con imágenes grandes.

Otra funcionalidad que me gustaría

destacar es la historia visual. En la

esquina inferior derecha de la Figura 3

podemos ver un cuadro conteniendo la

historia. Para ver cómo aparecería una

imagen si deshiciésemos o volviéramos

a realizar algunos pasos, podemos sal-

tarnos algunos de los que hemos ejecu-

tado. Por ejemplo, pulsando sobre un

paso, se muestra la imagen en ese

punto de la edición. La historia perma-

nece invariable hasta que hagamos algo

diferente, de modo que si volvemos tres

pasos y luego llevamos a cabo otra ope-

ración, comenzará a crear un nuevo

historial a partir de aquí.

Para crear un efecto caleidoscópico

de una imagen, vamos a echar un vis-

tazo el efecto de Inversión Polar. Lo

seleccionamos desde el menú Efectos |

Distorsiones. La Figura 4 es el original,

y en la Figura 5 he aplicado este efecto.

Los ajustes de color, brillo, contraste,

etc., los haremos desde el menú Ajus-

tes. A primera vista no hay mucha dife-

rencia entre Pinta y GIMP. Ambos ofre-

cen aproximadamente el mismo con-

junto de opciones, pero la mayoría de

los de GIMP se encuentran bajo el

menú Colores. Si abrimos ambos y los

comparamos conjuntamente, veremos

que los diálogos de las opciones de

GIMP son un poco más complejos. No

excesivamente complejos, pero Pinta es

definitivamente más amigable para los

principiantes.

Para convertir una imagen a blanco y

negro, GIMP exige que los usuarios

entiendan que la opción adecuada se

encuentra bajo el menú Modo, en Ima-

gen. No puede decirse que sea exacta-

mente obvio. Con Pinta, sólo hemos de

ir hasta Ajustes y seleccionar luego

Blanco y Negro. Simple ¿verdad?

Pinta tiene una relativamente buena

colección de efectos, que sin ser tan

completa como el

conjunto de filtros

de GIMP, sí pro-

porciona un aba-

nico de opciones

que no está nada

mal. Lo que aún

no está muy bien

implementado son

sus herramientas

de selección. La

Varita Mágica, que

nos facilitaría la

selección de los

distintos elemen-

tos en una ima-

gen, funciona muy

mínimamente en

Pinta, seleccio-

nando sólo unos

cuantos pixels de

un color similar.

En GIMP funciona

de manera mucho

más eficaz y más

previsible. Esto

mismo ocurre con

el selector de

Lazo, que va bien

en GIMP pero se

comporta un poco

erráticamente en

Pinta.

En la mayoría de

los casos, he podido utilizar Pinta para

hacer retoques mínimos para limpiar

fotos y para colgarlas en línea o guar-

darlas para la posteridad – mis necesi-

dades son bastante modestas, al igual

que las de los usuarios a los que está

destinado Pinta. Por tanto, si piensas

hacer trabajo profesional, es muy posi-

ble que sigas queriendo trabajar con

GIMP. Para eliminar los ojos rojos,

recortar fotos o realizar pequeños reto-

ques, aconsejo echar un vistazo a

Pinta, teniendo en cuenta sus limitacio-

nes.

Desventajas y ResumenA pesar de usar Pinta, he de reconocer

que aún no está lo suficientemente pre-

parado como para ser el sustituto de

GIMP. Ciertamente, es más simple y

fácil de usar, pero carece de la estabili-

dad de GIMP. Han pasado años desde la

última vez que conseguí que GIMP se

colgara con mis simples demandas de

retoque, pero en el caso de Pinta, unos

cuantos días fueron suficientes para lle-

varlo al borde del desastre. Además,

falla ocasionalmente – las funcionalida-

des de Deshacer y algunos efectos no

tienen los resultados esperados.

Sin embargo, como cualquier aplica-

ción que consigue llegar a su versión 5,

Pinta es extraordinariamente buena, y

está repleta de funcionalidades, de

modo que no permitas que unos cuan-

tos fallos te impidan probarla. Sospecho

que continuará madurando y posible-

mente sustituya a GIMP en algunas dis-

tribuciones como el editor de fotos e

imagen predeterminado. No es tan

compleja como GIMP, pero sí mucho

más amigable para el usuario. Por

tanto, teniendo en cuenta que sigue

bajo constante y activo desarrollo, pue-

des contar con ella como nueva herra-

mienta de edición. �

Pinta • LINUX USER

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

Figura 4: Estatua sin efectos aplicados.

Figura 5: El efecto Reflect en acción.

[1] Pinta: http:// pinta-project. com/

RECURSOS

Page 54: Linux Magazine 72r

LINUX USER • Diaspora

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

La película La red Social tuvo su

estreno cinematográfico en Sep-

tiembre del pasado año. En ella, la

ex-novia del fundador de Facebook,

Mark Zuckerberg, le comentaba al res-

pecto de su súbito ascenso hasta la cima

del éxito: “Internet no está escrito a

lápiz, Mark, está escrito con tinta”. La

web nunca olvida y Facebook hace muy

difícil que los usuarios puedan mantener

sus datos bajo control.

De hecho, los más críticos dicen que

las “configuraciones de privacidad” de

Facebook deberían llamarse en realidad

“configuraciones de publicidad”. Cual-

quier cambio en el sistema de privilegios

establece automáticamente un intercam-

bio generoso de datos del usuario como

configuración de la cuenta predetermi-

nada. Incluso los usuarios de Facebook

que escriben sobre protección de datos

en mayúsculas y valientemente se inten-

tan abrir paso a través de la jungla de la

configuración, a menudo no se dan

cuenta de que sus datos personales se

remiten a empresas que comercian con

perfiles personales a través de juegos

populares tales como Farmville.

La declaración del fundador de Facebook Mark Zuckerberg acerca de

que “La era de la privacidad ha terminado”, provocó una ola de indig -

nación. En respuesta, cuatro estudiantes fundaron Diaspora en Nueva

York. Seis meses más tarde, hacemos una revisión crítica a su red social

libre. POR MELA ECKENFELS

Ponemos a prueba una alternativa a Facebook

Asuntos Privados

Mela Eckenfels es autora y for-

madora freelance, y anteriormente

fue administradora de sistemas

Unix. Es la coautora del Geek

Cookbook (O’Reilly, en alemán)

junto con Petra Hildebrandt,

donde muestran lo mucho que

tienen en común la cocina y la pro-

gramación.

EL A

UT

OR

Page 55: Linux Magazine 72r

Diaspora • LINUX USER

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

Camino de Datos a laDiasporaLos problemas relativos a la protección

de datos con las redes sociales pueden

parecer bastante inocuos, y sobre todo

porque nadie fuerza a los usuarios (aún)

a publicar fotos comprometedoras o a

hablar públicamente sobre sus relacio-

nes personales. Sin embargo, la cuestión

es si un usuario de Internet actual real-

mente tiene que soportar los inconve-

nientes existentes de las redes sociales

sólo por intercambiar un par de palabras

con amigos y familia.

Si Daniel Grippi, Maxwell Salzberg,

Illa Zhitomirskiy y Raphael Sofaer consi-

guen sus objetivos, los usuarios no ten-

drán que preocuparse más por este pro-

blema. En Febrero de 2010, los cuatro

estudiantes del Courant Institute of

Mathematical Sciences de la Universidad

de Nueva York asistieron a una conferen-

cia del profesor de Derecho Eben

Moglen, en la que hizo una crítica a las

redes centralizadas describiéndolas

como “centralizadas con fines de espio-

naje”. Como consecuencia, los cuatro

idearon un servidor web de código

abierto con capacidades de alojamiento

de una red social como alternativa a

Facebook – había nacido Diaspora [1].

A finales de Abril, el grupo presentó el

proyecto en la plataforma de recauda-

ción de fondos Kickstarter y anunció que

comenzarían a trabajar tan pronto como

consiguieran 10,000 dólares – que logra-

ron recaudar en 12 días. Habían conse-

guido más de 200,000 antes de que

hubieran escrito una sola línea de

código. Entre sus donantes se encon-

traba el propio fundador de Facebook,

Mark Zuckerberg, quien comentó que

Diaspora era una “idea guay”.

Pronto encontraron un nombre para el

proyecto. La idea tras él: En lugar de

enviar datos de usuarios a un servidor

centralizado, como fotos o actualizacio-

nes de estado, el sistema deja los datos

Friend Key. Si la dirección de la semilla

de Alicia es, digamos, http:// seed-alice. de

y Alicia transmite un Friend Key de 3345,

la semilla de Bob puede alcanzar enton-

ces a Alicia en http:// seed-alice. de/ 3345/.

Además, las semillas intercambian lla-

ves públicas RSA en el primer contacto.

Cualquier comunicación subsiguiente

entre las semillas siempre utilizará codi-

ficación RSA. Diaspora está basado en

Ruby, Ruby on Rails y otros frameworks.

Las versiones actuales del programa

almacenan la información en una base

de datos Mongo [2], aunque para el

futuro los desarrolladores están pen-

sando en un sistema de nube cifrado en

la forma en que lo hace Tahoe Least

Authority File System [3].

La versión de prueba actual de Dias-

pora, que podemos descargar del reposi-

torio Git, ofrece funcionalidades básicas,

como la capacidad para intercambiar

mensajes entre semillas. También se

encuentran disponibles las APIs para su

conexión a Facebook y Twitter que per-

miten a los usuarios de Diaspora publi-

car sus mensajes directamente en esas

redes. Además, se están llevando a cabo

los experimentos iniciales con Webfinger

[4], si bien la función tiene bastantes

fallos en estos momentos.

Los desarrolladores dicen que manten-

drán Diaspora lo más agnóstico que les

sea posible en lo que se refiere a conte-

nido. En otras palabras, el sistema será

capaz de almacenar y transmitir cual-

quier formato de archivo. Evidente-

mente, este método implica que tendrán

que existir módulos o plugins para ayu-

dar al servidor de Diaspora a reproducir

contenido exótico, cómo vídeos y audio,

aunque dichos módulos no se introduci-

rán en la hoja de ruta hasta más tarde.

¿Seguridad?Algunos proveedores públicos de semi-

llas ya ofrecen a los usuarios la opción

de probar Diaspora sin tener que pelear

con lo que actualmente es un procedi-

miento de instalación bastante engo-

rroso. Pero dichos proveedores están de

hecho en conflicto con el método des-

centralizado de Diaspora, porque en este

escenario, los usuarios tienen que con-

fiarle nuevamente los datos a una tercera

parte, aunque ésta disfrute de una repu-

tación algo mejor que la de Facebook.

Además, en este escenario se compro-

mete la seguridad en el tránsito de datos

en la diáspora, en la

semilla del usuario.

Este método evita la

falta de control que

caracteriza a otras

redes sociales – o al

menos ese era el plan.

DistribuciónEquitativa

En vez de un servidor central (hub) al

que todos los usuarios necesitan contac-

tar, un mundo Diaspora ideal sólo utili-

zaría una semilla por host (también

conocido como un pod – o vaina). Los

desarrolladores aspiran a ejecutar las

semillas de Diaspora en cualquier tipo de

dispositivo, lo que significa que los

smartphones o tablets también pueden

actuar como pods. La semilla en sí es un

servidor web al que un usuario (al que

vamos a llamar Bob) puede acceder con

su navegador web favorito. Cuando Bob

se conecta, ve su muro, que se presenta

al estilo del de Facebook, junto con men-

sajes o fotos de sus amigos.

Si Alicia envía a Bob una foto de sus

recientes vacaciones en la nieve, el men-

saje viaja directamente de la semilla de

Alicia a la de Bob. Actualmente, este pro-

ceso está basado en un mecanismo

denominado “push” (“empujar”): la fun-

cionalidad complementaria “pull”

(“tirar”) no ha sido implementada aún.

Bob puede comentar entonces las fotos

del viaje de Alicia y empujarlas a la

semilla de Alicia. La semilla empuja el

comentario a las semillas de otros ami-

gos que también han recibido la foto por

ser miembros del mismo grupo que Bob.

El método peer-to-peer de Diaspora se

diferencia del concepto de la red social

actual y es más una reminiscencia de la

organización descentralizada de la Blo-

gosfera, la cual une multitud de blogs

individuales con comentarios, track-

backs y pingbacks. Sin embargo, Dias-

pora lleva las cosas un paso más allá:

cada semilla es otra instancia de la

misma aplicación que tiene una base de

comunicaciones estandarizada.

La Tripas de DiasporaLos pods utilizan HTTP para intercam-

biar datos. Si Bob añade a Alicia a su

semilla como un amigo, la semilla de

Bob no sólo recuerda la dirección de red

en la que está localizada la de Alicia,

sino que también guarda una única

Figura 1: La versión del desarrollador advierte claramente a los

usuarios de que no publiquen datos privados.

Page 56: Linux Magazine 72r

borrado por otro, consti-

tuiría a su vez una viola-

ción de privacidad, esta

vez del destinatario. Es

decir, que tus posts

siguen escritos en tinta y

parece ser que la única

solución que tiene Bob

es simplemente no escri-

bir mensajes no destina-

dos al ojo público.

En estos momentos

no puedo decir nada

más acerca de la seguri-

dad de la aplicación,

aparte del hecho de que

(a día de hoy) no existe. Poco después

del lanzamiento de la versión de prueba

inicial, muchos de los testers sospecha-

ron que el código estaba poblado de una

horda de fallos y una generosa dosis de

scripting multi-sitio.

Práctico o Poco RealistaSi no nos importa instalar desde el repo-

sitorio Git, podemos configurar fácil-

mente una instancia de Diaspora en

nuestro propio servidor. Una guía de ins-

talación útil [5] ayuda a los usuarios a

través de la configuración y puesta en

marcha del software.

Como los desarrolladores están conti-

nuamente trabajando en el código, es pro-

bable que encontremos que una funciona-

lidad que funcionó ayer no nos vaya hoy.

Esto fue lo que ocurrió con la máquina de

mi laboratorio, la cual, inicialmente, me

dio la opción de interconectarme con

Facebook y Twitter como servicios exter-

nos, pero un par de días después se negó a

hacerlo cuando ins-

talé la siguiente ver-

sión de Diaspora. Lo

único que funcionó

eficazmente fue el

acceso al pod basado

en el navegador, la

creación de nuevas

cuentas (Figura 1) y

su configuración.

Cuando intenté

enviar invitaciones

vía email, en algunos

casos el sistema me

devolvió enlaces

rotos.

Diaspora también

se niega a mostrar

fotos de perfiles de

usuarios, a pesar de que el upload de la

imagen funciona (véase la Figura 2).

Aunque Firefox en MacOS X soporta

arrastrar y soltar las imágenes, el nave-

gador de Mozilla en un sistema Ubuntu

actual insistió en que pulsara Upload a

photo para hacer exactamente lo mismo.

En este caso, y después de postear

mensajes, tuve que recargar la página en

el navegador de la máquina de mi labo-

ratorio para refrescar la presentación.

Después de añadir un par de amigos (lo

cual funciona de manera intermitente),

Diaspora me dio un muro con bastante

buena apariencia (Figura 3).

ConclusionesA causa de su descentralizada adminis-

tración y cifrado entre semillas, Diaspora

supone una buena opción para proteger

la privacidad de los usuarios, además de

soportar informes no censurados. Los

bloques de datos, las cuales sólo pueden

distinguirse del tráfico web normal

mediante la inspección profunda de

paquetes, serán bastante difíciles de blo-

quear, a diferencia de lo que ocurrió,

digamos, con Twitter o Facebook durante

las protestas en Irán y Egipto.

Pero actualmente, Diaspora no es más

que un sistema de blogging y microblog-

ging que comparte mensajes e imágenes

con amigos y agrega cuentas de otras

redes sociales. Una prueba de la versión

del desarrollador muestra que el soft-

ware probablemente no estará listo para

su uso en producción hasta dentro un

par de meses al menos.

Dicho esto, los usuarios preocupados

por la seguridad harían bien en seguir el

progreso de Diaspora. Una vez hayan

solucionado los problemas iniciales, esta

red social se convertiría en una pujante y

seria alternativa a Facebook. No puedo

asegurar que acabe matando a Facebook

– pero al menos no hay planes para inte-

grar Farmville. �

porque – tengamos o no RSA – las comu-

nicaciones sólo están cifradas entre pods

y no entre navegadores. Diaspora de

hecho sólo tiene sentido si la semilla se

ejecuta en la misma máquina y se puede

acceder a ella, pero no si los usuarios

están dispersos en última instancia entre

200 Facebooks en miniatura.

En realidad, todo lo que se refiere al

control total sobre nuestros datos es una

bonita ilusión, pero totalmente carente

de base en la realidad. Bob sólo necesita

acceder a su propia semilla para escribir

mensajes y publicar fotos, pero todos sus

mensajes serán enviados a las semillas

de sus amigos, los cuales los almacena-

rán a su vez.

No sé cómo Diaspora pretende asegurar

que el contenido que sea revocado desde

la semilla origen, se revoque en las semi-

llas destino con absoluta certeza. Además

se produce el dilema de que, permitir que

un programa acceda a tu semilla en un

dispositivo para eliminar un mensaje

LINUX USER • Diaspora

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

[1] Diaspora: http:// www. joindiaspora.

com

[2] MongoDB: http:// www. mongodb. org

[3] Tahoe LAFS: http:// tahoe-lafs. org

[4] Webfinger: http:// code. google. com/ p/

webfinger

[5] Guía de instalación de Diaspora:

https:// github. com/ diaspora/ diaspora/

wiki/ Installing-and-Running-Diaspora

RECURSOS

Figura 2: Aunque podemos cargar fotos en la sección de imá-

genes, no podemos seleccionar una imagen como nuestra foto de

perfil.

Figura 3: Una vez hemos añadido un contacto a nuestra lista de

amigos, podemos compartir mensajes y fotos. El problema de los

avatares estropea la vista.

Page 57: Linux Magazine 72r

mos una máquina que tenga instalados y

configurados estos componentes.

De manera alternativa, es posible mon-

tar el paquete XAMPP [2], que incluye

Apache, PHP y MySQL – todo preconfigu-

rado y listo para funcionar.

Instalando Piwigo yAñadiendo FotosAntes de continuar con la instalación

debemos crear una base de datos MySQL

para usarla con Piwigo. Una vez lo haya-

mos hecho, cogemos el script instalador

piwigo-netinstall.php del sitio web del

proyecto y lo copiamos en el documento

raíz de nuestro servidor. Luego, apunta-

mos nuestro navegador al script instala-

dor (por ejemplo, http:// 127. 0. 0. 1/

piwigo-netinstall. php) para comenzar el

procedimiento de instalación (Figura 1).

Ahora seleccionamos la lengua que dese-

amos, especificamos el directorio para la

instalación de Piwigo y pulsamos el

botón Cargar y descomprimir Piwigo. Una

vez que el script de instalación ha bus-

cado la última versión del software, pul-

samos el botón Instalar Piwigo, propor-

cionamos los datos de la conexión a la

base de datos requerida y la información

de la cuenta del administrador, y pulsa-

mos Empezar la instalación.

Lo primero que haremos una vez que

nuestra galería esté cargada y ejecután-

dose es rellenarla con fotos, y Piwigo nos

ofrece una manera muy conveniente de

hacerlo. Pulsamos el enlace Quiero subir

fotos para saltar a la interfaz de carga de

fotos (Figura 2). En la sección Pegar en

álbum, introducimos el nombre para el

nuevo álbum en el campo Nombre del

álbum, luego pulsamos el botón Browse y

seleccionamos las fotos que queremos

añadir. Para cargar en la categoría especi-

ficada en Piwigo pulsamos el botón

Subir.

Si por casualidad usamos digiKam

como nuestra aplicación de escritorio de

administración de fotos preferida, pode-

mos usar el plugin de exportación Kipi de

Piwigo para cargar las fotos directamente

desde digiKam a Piwigo (Figura 3). Antes

de poder cargar las fotos en Piwigo, ten-

dremos que crear al menos una categoría.

Para hacerlo, nos registramos en el pro-

grama como administrador, vamos hasta

Administración | Albums | Administrar y

creamos una nueva categoría. Luego,

cambiamos a digiKam, seleccionamos las

fotos que deseamos subir y elegimos

Workspace: Piwigo • LINUX USER

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

Hoy día, los servicios para com-

partir fotos se encuentran a

patadas y son muy baratos, pero

aún existen numerosas razones para alo-

jar nosotros mismos nuestra propia gale-

ría de fotos. Mediante la publicación de

fotos en nuestro servidor podemos con-

servar todo el control de nuestro conte-

nido, ajustar el software fotográfico a

nuestro gusto y sin tener que pagar nin-

gún extra adicional por funcionalidades

especiales.

Evidentemente, para publicar y admi-

nistrar fotos en nuestro propio servidor

necesitamos software que pueda manipu-

lar el trabajo. Y no nos equivocaremos si

elegimos el software de galería de fotos

Piwigo [1].

Esta aplicación, diseñada para compar-

tir fotos, ofrece un extenso abanico de

funcionalidades, siendo sumamente fácil

de usar y administrar.

Piwigo se ejecuta en la pila Apache/

PHP/ MySQL, de modo que necesitare-

Vemos cómo controlar nuestros

contenidos, alojando una galería

de fotos personal y publicándola

en nuestro propio servidor con

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

Nuestras fotos, a nuestra manera: Alojamos fotos con Piwigo

MomentoFotográfico

Page 58: Linux Magazine 72r

Exportar | Exportar

a Piwigo. Tras espe-

cificar las configura-

ciones de las cone-

xiones que se nos

solicitan y pulsar

Aceptar, podemos

cargar las fotos

seleccionadas pul-

sando el botón Aña-

dir fotos selecciona-

das.

¿No quieres usar

digiKam? Podemos

usar la utilidad pLo-

ader [3] para trans-

ferir las fotos desde

nuestra máquina a

Piwigo. De hecho,

pLoader posee unas

cuantas funcionali-

dades prácticas que

hacen que sea la

mejor herramienta

para mover fotos

desde nuestra

máquina a Piwigo.

Por ejemplo, pode-

mos configurarla

para añadir pies de

fotos a las que que-

remos subir, para

autorotar, cambiar

el tamaño e incluso

incrustarles marcas

de agua. Para confi-

gurar estas funcio-

nalidades pulsamos

el botón Preferen-

cias de la barra de

herramientas princi-

pal y ajustamos las

configuraciones en

las secciones ade-

cuadas (Figura 4).

Cuando utiliza-

mos pLoader para

subir fotos, dispone-

mos de una opción

para cargar dos ver-

siones de cada foto:

una versión cuyo

tamaño ha sido

modificado que

Piwigo usa como

previsualización y

una versión a alta

resolución unida a

ella – y que en

Piwigo se denomina versión de alta defi-

nición. Este método ayuda a Piwigo a

renderizar fotos más rápidamente mien-

tras permite a los usuarios ver versiones

de alta resolución de las fotos. A pesar de

que nada nos impide subir las fotos en su

tamaño original, el método de baja/ alta

resolución es más lógico. Para configurar

pLoader con este fin, pulsamos el botón

Preferencias y cambiamos a la sección

Tamaño foto. A continuación selecciona-

mos el elemento Usar original redimen-

sionado de la lista desplegable Tamaño

web y especificamos las dimensiones

deseadas y calidad de la imagen bajo

Opciones. Seguidamente elegimos el ele-

mento Sí, usar copia de foto original de la

lista desplegable Alta definición. Pulsa-

mos Cerrar para guardar las configuracio-

nes y cerramos la ventana.

Configuración de PiwigoNuestra galería Piwigo está casi lista,

pero antes de mostrarla deberemos ajus-

tar unas cuantas configuraciones. Para

empezar, nos registramos en la aplicación

como administrador y cambiamos a la

interfaz de administración pulsando el

enlace Administrar en la sección de

Usuario. Aquí podemos modificar las

configuraciones para las cuentas de usua-

rios existentes. Por ejemplo, si subimos

fotos a Piwigo sin modificarles el

tamaño, especificaríamos las configura-

ciones de las dimensiones máximas de

presentación. De no hacerlo, Piwigo mos-

trará las fotos en sus tamaños originales,

lo cual puede ser problemático cuando se

trate de imágenes de gran tamaño.

Para especificar las dimensiones máxi-

mas de presentación para la cuenta de un

usuario específico, seleccionamos la

cuenta, bajamos hasta Preferencias, intro-

ducimos los valores deseados en los cam-

pos Ancho máximo de las fotos y Altura

máxima de las fotos (800x600 va bien en

la mayoría de los casos) y pulsamos el

botón Validar. Para aplicar las configura-

ciones especificadas a todas las cuentas

de usuario existentes de una sola vez,

seleccionamos la opción todo antes de

pulsar Validar. Ya que estamos en ello,

podemos configurar el número de imáge-

nes por fila y el número de filas por

página, cambiar las configuraciones de

privacidad así como el estado de los

usuarios. También podemos añadir nue-

vos usuarios además de borrar los que

existen.

LINUX USER • Workspace: Piwigo

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

Figura 1: El script NetInstall hace que la instalación de Piwigo sea

tremendamente fácil.

Figura 3: Es posible cargar fotos directamente desde digiKam a

Piwigo.

Figura 2: Piwigo cuenta con su propio cargador de fotos basado en

web.

Page 59: Linux Magazine 72r

Workspace: Piwigo • LINUX USER

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

Piwigo ofrece un potente sistema de

privilegios de usuario, donde a cada

usuario se le asigna un estado (o “esta-

tuto” en la jerga de Piwigo) específico y

cada estado tiene un conjunto de dere-

chos de acceso predeterminado. Por

ejemplo, el estatuto Webmaster garantiza

al usuario acceso total a todas las funcio-

nalidades de Piwigo, mientras que el

estatuto Invitado sólo da acceso limitado

al sistema (Figura 5). Además, podemos

especificar un nivel de privacidad para

cada usuario, pudiendo seleccionar entre

los niveles Contactos, Amigos, Familia y

Admins. Luego, nos permite establecer

un nivel de privacidad para cada foto, de

modo que pueda ser vista sólo por usua-

rios que poseen el nivel de privacidad

adecuado.

En lugar de configurar privilegios de

acceso para cada foto individual, es posi-

ble configurar grupos para dar acceso a

los usuarios a determinadas categorías

específicas. Por ejemplo, pongamos que

queremos crear un grupo llamado Ami-

gos de las flores y permitir a sus miem-

bros acceso a las categorías privadas

Pétalos de flores y Estambres. Para

comenzar, necesitamos crear estas cate-

gorías en la sección Albums | Adminis-

trar. Una vez creadas, establecemos el

tipo de acceso a privacidad. Para hacerlo

pulsamos el icono Editar junto a la cate-

goría, seleccionamos la opción privaci-

dad en la sección Opciones y pulsamos

Validar. A continuación vamos hasta la

sección Usuarios | Grupos, creamos el

grupo Amigos de la flores, pulsamos el

icono Permisos y añadimos las categorías

privadas creadas a la lista Autorizados.

Por último, cambiamos a la sección

Usuarios | Administrar, seleccionamos

los usuarios que deseamos añadir al

grupo, elegimos el grupo de la lista des-

plegable asociar con grupo y pulsamos

Validar.

Como cualquier aplicación de compar-

tición de fotos que merece la pena,

Piwigo soporta etiquetado de imágenes –

siempre y cuando deseemos etiquetarlas.

Para hacerlo, podemos ir hasta la sección

Albums | Administrar y pulsar el icono

Administrar fotos del álbum al lado de la

categoría que contiene las fotos que que-

remos etiquetar. Ahora podemos despla-

zarnos hacia abajo a la sección Acción

(Figura 6), seleccionar Añadir Etiquetas,

introducir nuestras etiquetas en el campo

de texto, seleccionar la opción La totali-

dad del lote y pulsar

Aplicar la acción.

Esto aplica las eti-

quetas especificadas

a todas las fotos en

la categoría. Eviden-

temente, es posible

que sólo queramos

etiquetar ciertas

fotos en la catego-

ría. Para hacerlo,

marcamos las que

queremos etiquetar,

añadimos las eti-

quetas y selecciona-

mos la opción selec-

ción. En la sección

Acción también

podemos realizar

otras acciones por

lotes, como asignar

un autor a nuestras

fotos o establecer el

nivel de privacidad

deseado.

Finalmente, en la

sección

Configuración |

Opciones establece-

remos las configura-

ciones generales de

Piwigo. Bajo la pes-

taña Principal

podremos sustituir

el nombre por

defecto de la galería

y darle un título

propio, poner o qui-

tar la funcionalidad

de clasificación y

habilitar el registro

de usuarios. En la

subsección Mostrar

habilitaremos o des-

habilitaremos las

presentaciones indi-

viduales y las fun-

cionalidades de bús-

queda. Aquí especi-

ficaremos las fun-

cionalidades a las

que pueden tener

acceso los usuarios

en la página princi-

pal y qué propieda-

des se presentarán

para cada foto indi-

vidual. Para admi-

nistrar los comenta-

Figura 4: pLoader es una herramienta independiente que sirve para

cargar fotos desde nuestra máquina a Piwigo.

Figura 5: Administración de cuentas de usuario en Piwigo.

Figura 6: Etiquetado de fotos.

Page 60: Linux Magazine 72r

LINUX USER • Workspace: Piwigo

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

de navegación que

se encuentran a la

izquierda (Figura

7). La sección Espe-

ciales, por ejemplo,

contiene comandos

que nos permiten

ver fotos marcadas

como favoritas, las

mejor valoradas y

las imágenes más

vistas, aparte de las

añadidas más

recientemente. La

sección Menú posee

comandos que nos

permiten encontrar

fotos con una eti-

queta específica

rápidamente y llevar

a cabo búsquedas

avanzadas.

En la esquina

superior derecha de

la interfaz existen

una serie de iconos

con los que pode-

mos cambiar entre

los diferentes

modos de visualiza-

ción. Por ejemplo,

es posible cambiar a

la vista Calendario,

que agrupa y mues-

tra las fotos según

sus fechas de crea-

ción y carga. Cuando visionamos una

foto, podemos valorarla y añadirle

comentarios, además de marcarla como

favorita y examinar sus metadatos. Como

la interfaz de Piwigo no está sobrecar-

gada con funcionalidades, nos permite

explorar las fotos tranquilamente.

Ampliación de PiwigoLas funcionalidades por defecto de

Piwigo pueden ampliarse mediante el

uso de plugins, cuyo repositorio oficial

[4] nos ofrece una buena variedad de

módulos entre los que elegir. La instala-

ción de plugins en Piwigo puede llevarse

a cabo de dos maneras: manualmente o

bien a través de su interfaz de Adminis-

tración. Si optamos por esta segunda vía,

visitamos la sección Plugins |Adminis-

trar y pulsamos la pestaña Otros plugins

disponibles para ver una lista de todos

los plugins de Piwigo disponibles. Busca-

mos el que queremos y pulsamos el

enlace Instalar junto a él. A continuación

pulsamos la pestaña Lista plugins, pul-

sando nuevamente el enlace Instalar que

se encuentra al lado del plugin. Por

último, pulsamos el enlace activar para

habilitarlo.

De manera alternativa, es posible insta-

lar plugins manualmente cogiendo el plu-

gin específico que deseamos del reposito-

rio de plugins y desempaquetándolo en el

directorio plugins dentro de nuestra ins-

talación de Piwigo. Para instalarlo y acti-

varlo lo haremos en la sección Plugins |

Administrar.

Los plugins que deseemos instalar

dependerán, evidentemente, de nuestras

necesidades específicas, pero existen al

menos dos módulos que pueden resultar-

nos prácticos: RV Akismet [5] y AStat [6].

RV Akismet nos permite utilizar el exce-

lente servicio Akismet para manejar

comentarios de spam en nuestra instala-

ción de Piwigo. Para habilitar el plugin,

necesitamos obtener y añadir una clave

gratuita para el API de Akismet. Con el

plugin AStat podremos recopilar y anali-

zar estadísticas de Piwigo, incluyendo el

número de vistas para categorías indivi-

duales y fotos, además de las direcciones

IPs de los visitantes (Figura 8).

ConclusiónSi nos decantamos por alojar nosotros

mismos una solución para compartir

fotos, acertaremos de lleno eligiendo

Piwigo. Esta aplicación alcanza un equili-

brio perfecto entre funcionalidad y facili-

dad de uso, permitiendo la configuración

de plugins para ampliar sus funcionalida-

des predeterminadas. Además, Piwigo

nos ofrece distintas maneras de cargar

fotos, soportando un flexible sistema de

control de privilegios. En definitiva, tiene

todo lo que necesitamos para alojar fotos

en nuestro propio servidor. �

rios de las fotos de manera más eficiente

y para combatir los spams, es buena idea

establecer las configuraciones de comen-

tarios disponibles bajo la pestaña Comen-

tarios. Por ejemplo, podemos evitar que

se muestren comentarios sin moderar

marcando la casilla de confirmación Vali-

dación, siendo posible configurar opcio-

nes de notificación de comentarios de

manera que tanto nosotros como otros

administradores podamos mantenernos

al corriente de las actividades relaciona-

das con los comentarios. Bajo la pestaña

Parámetros Invitados podemos especifi-

car las preferencias de la cuenta del invi-

tado.

Uso de PiwigoPiwigo viene con una interfaz bastante

intuitiva muy fácil de usar. Su página de

inicio ofrece una lista de todas las catego-

rías, siendo posible acceder a todos los

comandos disponibles en las secciones

[1] Piwigo: http:// piwigo. org

[2] XAMPP: http:// www. apachefriends.

org

[3] pLoader: http:// piwigo. org/ ext/

extension_view. php?eid=269

[4] Repositorio de plugins de Piwigo:

http:// piwigo. org/ ext/

[5] Plugin RV Akismet: http:// piwigo. org/

ext/ extension_view. php?eid=192

[6] Plugin AStat: http:// piwigo. org/ ext/

extension_view. php?eid=172

RECURSOS

Figura 7: Piwigo en toda su belleza.

Figura 8: AStat nos permite reunir y analizar estadísticas de Piwigo.

Page 61: Linux Magazine 72r

ahorra tiempo cuando necesitamos eje-

cutar un elevado número de acciones en

el escritorio.

En vez de tener que buscar un pro-

grama a través del menú Applications o

de llamar a una ventana de Nautilus

para encontrar un fichero, podemos

encontrar un elemento con unas cuan-

tas pulsaciones de teclado. Si te ocurre

como a mí, que dependes del teclado,

un lanzador puede ser tu salvavidas.

¿Por qué Synapse?La idea de un lanzador suena bien – es

probable que ya uses uno de ellos –

pero ¿por qué utilizar Synapse [3]? Un

problema es el desarrollo actual. El de

Gnome Do se ha desacelerado. Su

equipo de desarrollo se ha mantenido

callado durante el pasado año. Justo

cuando escribía este artículo, publica-

ron su primera actualización desde

Mi escritorio preferido es

Gnome, porque en la práctica

lo encuentro muy útil. Sin

embargo, carece de un lanzador por

defecto. ¿Que qué es un lanzador? Un

lanzador es una aplicación que nos per-

mite arrancar programas o realizar otras

acciones con unas cuantas pulsaciones

de teclado.

Una de los primeros lanzadores más

populares fue Quicksilver de Mac OS X

[1], en el cual está inspirado Gnome Do

[2]. La idea es que el lanzador puede

ser llamado con un atajo de teclado

desde cualquier aplicación. En el caso

de Gnome Do y Synapse podemos usar

[Ctrl]+[Espacio]. A partir de este

momento será posible iniciar aplicacio-

nes, buscar en el diccionario, buscar

ficheros y llevar a cabo otras acciones –

de las nos ocuparemos más adelante. Lo

más importante es que el lanzador nos

Synapse • LINUX USER

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

Linux va de hacer que todo se haga mas rápida, eficiente y fácilmente. Si buscas acelerar tu trabajo en el

escritorio, echa un vistazo a Synapse – un lanzador similar a Gnome Do, pero con algunas importantes mejo-

ras. POR JOE “ZONKER” BROCKMEIER

Joe “Zonker” Brockmeier es

perio dista tecnológico freelance,

editor, 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

Haz más con el lanzador Synapse

Acábalo

Page 62: Linux Magazine 72r

importantes. Está bajo desarrollo activo,

siendo posible que sus paquetes princi-

pales aparezcan en la próxima versión

de Ubuntu (11.04), aunque los paquetes

ya se encuentran disponibles en un

Archivo de Paquetes Personales (PPA)

para Maverick Meerkat (10.10). El

código fuente, evidentemente, también

está disponible. Synapse se encuentra

bajo la versión 3 de la GPL.

Para extraer Synapse de Launchpad y

llevarlo hasta nuestro sistema, necesi-

tamos añadir dos PPAs: el PPA de

Synapse y el PPA de Markus Korn. Este

último también nos permite coger el

paquete de fuentes de Datos de Zeit-

geist, de modo que, junto con Synapse,

también podemos disfrutar de Zeit-

geist.

sudo apt-repository ppa: U

thekorn/ppa

sudo apt-add-repository ppa: U

synapse-core/ppa

sudo apt-get update

sudo apt-get install synapse

Estos comandos recogerán los PPAs

para las fuentes de datos de Synapse y

Zeitgeist – aunque

nótese que no especi-

fica ninguna de ellas.

Esto se debe a que

puede que no necesite-

mos todas las que se

encuentran disponi-

bles.

Por ejemplo, los

conectores los ofrecen

Vim y Emacs, y la

mayoría de los usua-

rios no necesitarán ni

querrán ambos. Ade-

más, puede observarse

que esas fuentes de

datos también depen-

den de los paquetes

principales, por tanto,

si cogemos las fuentes

de datos de Emacs, cogerá Emacs si no

lo tenemos instalado aún.

Aconsejo la búsqueda por las fuentes

de datos de Zeitgeist e instalar única-

mente las más apropiadas.

Uso y Personalización deSynapseEn este momento podemos comenzar a

usar Synapse. Para ejecutar el programa

desde el menú de Aplicaciones vamos a

Aplicaciones | Accesorios y lo iniciamos.

También podemos utilizar la herra-

mienta Gnome Ejecutar Aplicación

(Alt+F2) y ejecutar synapse.

Veremos una ventana como la que

aparece en la Figura 1. Se trata de un

simple cuadro de texto con algunas eti-

quetas para el tipo de datos a los que

podemos acceder desde Synapse. Pul-

sando el ratón sobre las etiquetas no

ocurre nada – todo debe hacerse desde

el teclado. La única excepción es la

configuración de las preferencias, pero

nos ocuparemos de esto un poco más

adelante.

Introducimos el nombre de un

comando que nos gustaría ejecutar o el

nombre del fichero que deseamos

encontrar, y Synapse comenzará a auto-

completar los ficheros y aplicaciones

que conoce. Sin embargo, no ofrecerá

utilidades de la consola o apps, de

modo que introduciendo ls no nos mos-

trará un enlace a ls. Pero, si comenza-

mos escribiendo vim, nos ofrecerá gVim

si se encuentra instalado. Si no encuen-

tra nada que coincida en documentos o

aplicaciones, nos remitirá amablemente

a buscar la cadena de texto en el diccio-

nario.

Podemos navegar entre tipos de docu-

mentos usando las teclas de flecha. La

tecla de la flecha hacia abajo nos des-

plaza a través del historial de Zeitgeist.

Las flechas derecha e izquierda permi-

ten que nos movamos a través de los

tipos de documentos, luego podemos

pulsar [Enter] para seleccionar.

Diciembre de 2009. Gnome Do parece

continuar, pero su calendario de actuali-

zaciones es un poco preocupante.

Aparte de esto, Synapse cuenta con

una funcionalidad de la que carece Do:

la integración Zeitgeist. Si no estás

familiarizado con esta tecnología, va

siendo hora de que le eches un vistazo

[4].

Zeitgeist mantiene un registro de

ficheros que hemos abierto, sitios web

visitados, música reproducida, etc. Por

ejemplo, si hace unos minutos abrimos

una imagen y deseamos volverla a ver,

podemos abrir Synapse y desplazarnos

hacia abajo – nuestra actividad habrá

quedado registrada. Y, naturalmente, si

deseamos ejecutar un programa o llevar

a acabo un conjunto de acciones, tales

como salirnos de Gnome o cerrar el sis-

tema, Synapse también nos ayudará con

esto.

El problema es que el programa tiene

que poder comunicarse con Zeitgeist

para hacer uso de las funcionalidades

de Synapse relativas a los registros de

datos. Si estamos usando aplicaciones

Gnome que ya hablan con el demonio

de Zeitgeist, tendremos todo preparado.

Aplicaciones como Evince, Rhythmbox,

Totem y Evolution estarán listas para

ser utilizadas. Otras, como Firefox, no

estarán relacionadas automáticamente –

pero eso lo podemos arreglar, y te mos-

traré cómo un poco más adelante.

Comenzamos con SynapseHasta donde yo sé, Synapse no se distri-

buye con ninguna de las distros más

LINUX USER • Synapse

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

Figura 1: Ventana principal de Synapse.

Figura 2: Configuración de los plugins de Synapse.

Page 63: Linux Magazine 72r

¿Parece sencillo? Eso es porque lo es.

Synapse no es una aplicación especial-

mente compleja. Sólo es muy útil.

ConfiguracionesSi deseamos someter a Synapse a nues-

tra voluntad, es decir, realizar cambios

a su apariencia o configuración, pode-

mos pulsar el pequeño punto que se

encuentra en la parte derecha de su

ventana. Aquí veremos un menú de

contexto con la opción Preferencias. Si

vamos hasta ella y pulsamos la pestaña

Complementos, veremos una ventana

como la de la Figura 2, donde podremos

conectar o desconectar los plugins que

añaden funcionalidades a Synapse.

Algunos de dichos plugins no estarán

disponibles si no tenemos instalada la

aplicación. Por ejemplo, Banshee estará

deshabilitado a menos que lo tengamos

instalado.

¿Deseamos cambiar el tema? Synapse

nos ofrece cuatro temas por defecto.

Son bastante similares, pero si quere-

mos hacer pruebas con ellos, podemos

ver las opciones en la pestaña General.

Los temas se encuentran en la parte

derecha, en el menú desplegable, tal y

como muestra la Figura 3.

Yo dejo conectados la mayoría de los

plugins, excepto el de Gnome Session.

No deseo apagar accidentalmente un

sistema o cerrar la sesión desde

Synapse, de modo que lo deshabilito,

como podemos ver en la Figura 4.

En la Figura 5 puede verse a Synapse

en acción. En ella se muestran algunos

documentos que se encuentran disponi-

bles en el historial de Zeitgeist. Como

he mencionado, Synapse es muy fácil

de usar y puede resultar bastante útil

después de que hayamos creado un his-

torial de acciones en Zeitgeist.

ResumenSynapse se ha

convertido en una

de mis aplicacio-

nes favoritas. Dis-

fruto con todas las

que se controlan a

través del teclado,

pues me permiten

evitar el uso del

ratón. Como este

software se

encuentra aún en

una versión ini-

cial, nos deja aña-

dir multitud de funcionalidades.

Synapse parece totalmente estable, aun-

que se podrían incorporar algunas fun-

cionalidades adicionales para llegar al

nivel de otras aplicaciones – o incluso ir

más allá.

Por ejemplo, me gustaría ver a

Synapse relacionarse con APT y Yum/

Zypper de modo que los usuarios pudie-

ran buscar paquetes fácilmente desde

Synapse si no se encuentran ya instala-

dos. Las forjas de Linux Mint lo han

hecho con su menú en Linux Mint 10,

permitiéndonos buscar paquetes y

comenzar una instalación directamente

desde el Menú de Mint.

Además, me encantaría tener alguna

manera de personalizar las aplicaciones

que se usan para manipular mis cosas.

Es fantástico que Synapse sepa qué

ficheros he editado con Vim, pero me

gustaría que luego iniciase Vim cuando

abro el mismo fichero de nuevo en vez

de abrirlo con gedit.

Aparte de estas limitaciones, pienso

que Synapse es casi perfecto. Por tanto,

si eres usuario de Gnome y deseas que

tu escritorio sea más eficiente, te sugiero

que te hagas con Synapse hoy mismo. �

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

Figura 5: Seleccionando documentos desde Synapse.

Figura 3: Preferencias generales de Synapse. Figura 4: Desconexión del plugin Gnome Session.

Synapse • LINUX USER

[1] Quicksilver: http:// en. wikipedia. org/

wiki/ Quicksilver_(software)

[2] Gnome Do: http:// do. davebsd. com/

[3] Synapse: https:// launchpad. net/

synapse-project

[4] Zeitgeist: http:// zeitgeist-project. com/

RECURSOS

Page 64: Linux Magazine 72r

LINUX USER • Línea de Comandos: Usuarios

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

Los recursos para la administración

de usuarios constituyen un ejem-

plo clásico de las diferencias que

existen entre las herramientas de la línea

de comandos y las gráficas. Si analiza-

mos las herramientas de usuario en

Fedora o Ubuntu, muy probablemente

pensaremos que son razonablemente

completas. No sólo contienen lo esencial

para crear y eliminar usuarios, sino que

incluyen pestañas avanzadas con herra-

mientas más complejas. Sin embargo, si

comparamos las herramientas de escrito-

rio con los comandos y las opciones dis-

ponibles en la línea de comandos, encon-

traremos las razones por las que los

administradores profesionales rehuyen

del escritorio. Las herramientas de admi-

nistración de usuarios del escritorio son

suficientes para la mayoría de las situa-

ciones, pero carecen del amplio abanico

de opciones disponibles desde la línea de

comandos.

Como la mayoría de los usuarios pro-

bablemente sepan, para registrarse en un

sistema GNU/ Linux hemos de tener un

nombre de usuario y una contraseña.

Además de eso, típicamente tenemos un

directorio personal en el que guardar

nuestros ficheros privados – general-

mente un subdirectorio de /home –, un

único grupo para acceder a los ficheros y

un solo ID de usuario.

Lo que pocos saben – especialmente

los usuarios princpiantes – es que las

normas que rigen todas estas característi-

cas pueden ser modificadas. Y, lo que es

casi más importante, las cuentas de usua-

rios pueden tener otras características,

como una única shell o una fecha de

caducidad, y todas esas cosas y todos los

usuarios en su conjunto pueden ser con-

trolados por los administradores

mediante unos cuantos comandos.

Añadimos Usuarios

En la mayoría de las distribuciones, la

herramienta básica para crear nuevos

usuarios es el comando useradd. Para

ejecutarla, accedemos como root a un

shell e introducimos el comando

useradd --create-home U

--passwd <I>CONTRASEÑA<I>U

<I>USUARIO<I>

sustituyendo CONTRASEÑA y USUARIOpor la contraseña del usuario y el nombre

de usuario respectivamente. De hecho,

podríamos crear el usuario simplemente

con

useradd <I>USUARIO<I>

pero la cuenta no estaría preparada para

ser usada. useradd se ejecuta sin salida

Figura 1: Ejecución del comando useradd -D

para ver las configuraciones por defecto que

usa el comando cuando crea un nuevo

usuario.

Administrar usuarios a través de

la línea de comandos es rápido y

sencillo gracias a las herramientas

creadas para ello.

POR BRUCE BYFIELD

Administración de usuarios

Amigos para Siempre

Page 65: Linux Magazine 72r

en la pantalla, de modo que sólo tendremos constancia de

nuestro éxito si buscamos una nueva entrada en la parte

inferior del fichero /etc/ passwd.

El nombre de usuario sólo debe estar en minúsculas, sin

mayúsculas o caracteres especiales – limitaciones que apre-

ciaremos cuando vayamos a introducir el nombre en el

prompt del comando.

Otros valores predeterminados se añaden automática-

mente al comando. Podemos ver dichos valores con

useradd -D

Ver Figura 1.

Algunos valores predeterminados de useradd posible-

mente sean adecuados, pero esto dependerá de las circuns-

tancias. Por ejemplo, usar la shell por defecto (general-

mente Bash) será razonable en la mayor parte de los casos,

al igual que el directorio por defecto bajo el cual se ubica

cada nuevo directorio. Sin embargo, aconsejamos ser pru-

dentes cuando creemos un nuevo directorio personal mien-

tras ejecutamos useradd.

De manera similar, en nuestro ordenador doméstico –

que nos preocupará menos en lo que a seguridad se refiere

– no importa demasiado tener una cuenta que nunca

caduca y que no llega a inactivarse una vez que expire.

Además, probablemente tampoco nos preocupe si el usua-

rio está configurado para recibir correo electrónico interno.

Sin embargo, en un servidor de empresa estas configura-

ciones son más importantes por razones de seguridad y pri-

vacidad. Es posible que también deseemos añadir los fiche-

ros que queremos copiar automáticamente a cada nuevo

directorio personal creado añadiendo copias de los mismos

a /etc/ skel, lo cual puede ahorrarnos horas de

configuración.

En caso de que necesitemos cambiar los valores predeter-

minados, las opciones de useradd nos permiten modificar-

los directamente durante la creación de nuevos usuarios.

En la mayoría de los casos, podemos fiarnos de los valores

predeterminados para el identificador de grupo (GID), pero

el directorio personal puede especificarse mediante -mo --create-home o bien especificando un directorio existente

después de -d o --home. De la misma manera, -s o --shell

Figura 2: El comando adduser es fácil de confundir con useradd,

pero es más amigable, siendo un tipo de asistente basado en

texto.

Page 66: Linux Magazine 72r

useradd -d U

--create_mail_spool yes

la configuraría para que reciba mail

interno.

Entre otras opciones useradd que pro-

bablemente deseemos incluir se encuen-

tra - -comment CADENA, la cual añade la

cadena de texto CADENA a la informa-

ción de la cuenta – a menudo el nombre

de usuario completo o la información de

contacto – y, para grandes sistemas, en

los que muy posiblemente tengamos a

gente trabajando a turnos, también que-

rremos usar --system para crear un nuevo

usuario con poderes administrativos.

Quizás la opción más importante

sea --groups GRUPO1, GRUPO2, que hace

que la cuenta sea miembro de los dos

grupos adicionales GRUPO1 y GRUPO2.

Los grupos que seleccionamos pueden

ser una manera de controlar a qué hard-

ware puede acceder cada usuario, y por

tanto, qué pueden hacer. Por ejemplo, en

mi sistema Debian, los usuarios deben

pertenecer al grupo llamado scannerantes de que puedan utilizar un escáner,

y al grupo audio para recibir sonido. Lo

que es más importante, los que no perte-

necen al grupo cdrom no pueden grabar o

reproducir CDs o DVDs. Un usuario que

pertenezca solamente al grupo que com-

parte su nombre de cuenta podría traba-

jar con sus propios ficheros y usar Inter-

net, pero nada más. El motivo para esto

es minimizar el riesgo que pueden supo-

ner dichos usuarios para el sistema como

un todo (aunque aún sería posible des-

trozar sus propios ficheros con malware

descargado de Internet – si tienen permi-

tido el acceso a

Internet, que esa es

otra historia).

En Debian, al

igual que en algunos

sistemas basados en

él, useradd dispone

de un front end

mucho más amiga-

ble – es decir, es

más interactivo y

requiere una menor

memorización de

opciones (Figura 2).

Llamado adduser (lo

que puede llevar a la

confusión), este

comando Debian no

sólo crea el grupo y

directorio necesarios sin ninguna interac-

ción humana, sino que también nos pide

la contraseña un par de veces para su

confirmación. El comando guarda otra

información, como el despacho y núme-

ros de teléfono del usuario, lo que puede

ser de utilidad en un entorno laboral. Si

no deseamos guardar estos datos adicio-

nales, simplemente pulsamos el botón de

retorno cuando aparezca cada campo.

El comando adduser se configura en

/etc/ adduser.conf, el cual, como la mayo-

ría de los ficheros de configuración de

Debian, está tan extensamente comen-

tado, que casi cualquier administrador de

sistemas puede editarlo sin la necesidad

de recurrir a documentación adicional.

Este comando también dispone de

varias opciones para cambiar su compor-

tamiento predeterminado, pero si esta-

mos usando adduser en vez de useradd,

muy probablemente desearemos no tocar

la mayor parte de ellos. Las excepciones

son - -shell SHELL y --system, los cuales

crean una cuenta con privilegios de

administrador.

Información del Usuario

Antes de modificar una cuenta es proba-

ble que deseemos información sobre ella.

La manera más simple de leer informa-

ción de una cuenta es ejecutando el

comando

less /etc/passwd

como usuario root. Cada línea de /etc/passwd da detalles de un usuario o

grupo. Para usuarios, el formato de cada

línea es:

CUENTA:CONTRASEÑA: U

UID:GID:COMENTARIOS: U

DIRECTORIO-PERSONAL:SHELL

En un sistema moderno, la contraseña

está cifrada, por tanto dicho campo

muestra únicamente una x. Los comenta-

rios incluirían el nombre completo del

propietario de la cuenta, además de su

información de contacto, con cada

campo separado por una coma. Podemos

revisar cada línea hasta encontrar una

que comience por el nombre de la cuenta

que estamos buscando.

Para encontrar información cuando

tenemos prisa, utilizaremos una de las

utilidades Bash. El comando users mues-

tra qué usuarios se encuentran actual-

seguido de una ruta a un programa shell,

pueden utilizarse para especificar otra

shell diferente a la preestablecida, o --skelDIRECTORIO otro directorio donde

encontrar los ficheros a copiar en cada

directorio personal.

Igualmente, el comando

useradd --expiredate U

<I>AAAA-MM-DD<I>

establece una fecha en la que una nueva

cuenta pasa a estar inactiva. Mientras

que en --expiredate --inactive DÍAS, DÍASes el número de días que han de pasar

antes de que la cuenta pase a inactivarse

de manera permanente tras la fecha de

caducidad. Un valor de 0 la deshabilita

en la fecha de caducidad, mientras que

otro de -1 asegura que nunca expirará.

Para cambiar las opciones predetermi-

nadas existentes podemos usar el

comando:

useradd -d <I>--CAMPO VALOR<I>

Donde CAMPO tiene el mismo nombre

que las opciones useradd, lo que significa

que

useradd -D --inactive 3

haría que la cuenta se inactivara tres días

después de que expire, y

LINUX USER • Línea de Comandos: Usuarios

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

Figura 4: El comando who -a nos ayuda a ver qué usuarios han inici-

ado sesión actualmente, aportando más información que users.

Figura 5: El comando groups nos permite ver rápidamente los distin-

tos grupos a los que pertenece el usuario.

Figura 3: El comando users lista un usuario

por cada inicio de sesión, lo que explica esta

extraña entrada.

Page 67: Linux Magazine 72r

mente conectados al sistema; esta ins-

trucción es importante porque lo desea-

ble es esperar hasta que se hayan desco-

nectado antes de editar sus cuentas, aun-

que también puede servir para mostrar a

cuáles deseamos forzar a que abandonen

el sistema porque no deberían estar allí.

Una particularidad del comando users es

que lista a los usuarios cada vez que ini-

cian sesión. Por tanto, si hemos iniciado

sesión en varios terminales virtuales,

nuestra cuenta se encontrará listada más

de una vez (Figura 3). Con el comando

who -a podemos recibir la misma infor-

mación en formato más detallado (Figura

4).

Para evitarnos el tedio que supone

escanear /etc/ passwd usamos el

comando groups (Figura 5), el cual,

cuando se usa sin opciones, informa de

los grupos a los que pertenece el usuario

actual. Cuando va seguido por el nombre

de una cuenta, da información de los

grupos de la cuenta especificados. De

manera similar, el comando

id -a USUARIO

aporta información de la cuenta de un

usuario y los identificadores de grupos

(Figura 6). Provistos de esta información,

podemos modificar las cuentas de usua-

rio de manera más fácil y precisa.

Edición de Usuarios

Existentes

La manera más fácil de editar una cuenta

de usuario es borrarla. La herramienta

básica para eliminar una cuenta de usua-

rio es userdel. Si usamos este comando

seguido del nombre de la cuenta, la eli-

minamos, pero mantenemos sus ficheros,

a los cuales puede accederse a través del

usuario root. Por ejemplo:

userdel sarah

eliminará la cuenta sarah, sin mostrar en

pantalla ninguna información de lo que

está haciendo.

Si deseamos borrar los ficheros en el

directorio personal, lo haremos con la

opción --remove. También tenemos el

modo “Terminator”: con la opción -- forcese eliminará al usuario aún estando

conectado, desconectándolo del sistema.

Al igual que adduser es una fachada

para useradd, deluser lo es de userdel,ofreciendo más control sobre cómo se

un signo de exclamación delante de la

contraseña codificada en /etc/ passwd,

desconectando a todos los usuarios de la

cuenta. Muy lógicamente, la opción con-

traria es --unlock, que restaura la cuenta a

su funcionamiento ordinario.

Conclusión

Los comandos de la shell para adminis-

tración de usuarios son especialmente

potentes y están muy bien organizados.

A diferencia de algunos otros relaciona-

dos, comparten muchas de las mismas

opciones, por tanto, pasar de – por

ejemplo – useradd a userdel es relativa-

mente fácil. En la mayoría de los casos

sólo hay que memorizar un único juego

de opciones. Incluso si comenzamos

editando grupos, encontraremos que

groupadd y groupdel están tan próximos

a useradd y userdel como permiten sus

diferencias.

El principal potencial para el descon-

cierto recae sobre adduser y deluser, con

sus nombres invertidos. Pero incluso

aquí, el grado de similitud es aún alto. En

cualquier caso, ambos son en realidad

asistentes que nos guían a través del pro-

ceso de administración de usuarios y nos

protegen de tener que recordar sus deta-

lles. Por otra parte, estas dos innovacio-

nes de Debian son también tan similares

entre sí como pueden serlo y tienen

opciones que se asemejan a las de sus

homólogos más básicos.

No importa qué herramientas elijamos,

las opciones para la administración de

usuarios en la línea de comandos llegan

mucho más lejos que las que se encuen-

tran disponibles desde el escritorio,

incluso si nos aventuramos con las pesta-

ñas avanzadas que nadie parece utilizar.

La administración de usuarios a través de

la línea de comandos es sencilla y rápida,

haciendo más fácil la realización de estas

tareas. En otras palabras, son precisa-

mente lo que querría todo el que necesita

administrar usuarios. �

borran las cuentas.

El comando deluserestá configurado por

los campos que se

encuentran en /etc/deluser.conf, los cuales establecen que un

valor de 0 es “apagado” y 1 encendido.

Una útil funcionalidad de deluser es la

salida constante que proporciona sobre lo

que está haciendo, a menos que lo ejecu-

temos con la opción --quiet. La

opción --remove-home hace exactamente

lo que dice. Nótese, sin embargo, que

deluser solamente eliminará ficheros que

se encuentran colocados en la cuenta del

directorio personal del usuario. Si por

alguna razón el usuario tenía ficheros en

otro lugar, tendríamos que localizarlos

manualmente.

Con todo, la opción más útil de deluseres --backup, que crea un archivo tar de

los ficheros en el directorio personal de la

cuenta en el directorio / antes de borrar-

los (Figura 7). También podemos

usar --backup-to DIRECTORIO para espe-

cificar otro lugar para el fichero de res-

paldo. De cualquier manera, podemos

guardar lo que deseemos sin tener que

archivarlo usando un comando separado.

Para modificar cuentas sin borrarlas, la

herramienta básica es usermod (contrac-

ción de “user modification”). Este

comando tiene muchas de las opciones

de useradd, incluyendo --commentCADENA, --home DIRECTORIO, --expire-date AAA-MM-DD, --inactiveDÍAS, --groups GRUPO1, GRUPO2, --pass-word CONTRASEÑA y --shell SHELL. Sin

embargo, si especificamos un grupo al

cual ya pertenece el usuario cuando usa-

mos la opción -- groups con usermod,

entonces borraremos el usuario de dicho

grupo, a menos que también incluyamos

la opción --append.

Una opción única para usermod

es --login NUEVO-NOMBRE, la cual cam-

bia el nombre de la cuenta – aunque no

el directorio personal para la cuenta. Si

queremos que el directorio personal coin-

cida con el nombre de la cuenta, como es

habitual, necesitaremos añadir --homeDIRECTORIO y transferir luego los fiche-

ros al nuevo directorio personal y borrar

el antiguo directorio

en operaciones sepa-

radas.

Otra opción exclu-

siva de usermod

es --lock, que añade

Línea de Comandos: Usuarios • LINUX USER

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

Figura 6: Otra opción para ver los miembros de grupos es id -a.

Figura 7: Al igual que adduser, el comando deluser proporciona un

asistente basado en texto para eliminar cuentas.

Page 68: Linux Magazine 72r

COMUNIDAD · Konsultorio

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

ordenador y la guarda en un lugar

fresco y seco (cosa que recomiendan

algunos documentos “cómo”), la capa-

cidad se reducirá a la mitad de su valor

inicial después de unos cuantos años.

Esto también coincide con mi experien-

cia personal. No hay forma de refrescar

las baterías de Li-Ion cuando se agotan,

y es peligroso tratar de sobrecargarlas

con una fuente de alimentación que no

sea adecuada para cargar baterías de

ordenador, cosa que algunos foros reco-

miendan.

Por el lado del software, puede reco-

pilar información acerca de la batería

de su portátil desde el kernel de Linux

verificando los archivos bajo

/proc/acpi/power (ruta antigua) y

/sys/class/power_supply/BAT0 (kernels

actuales).

Dell tiene un FAQ sobre las baterías y

cargadores [1] que puede serle útil.

Lista de Chequeo deVirtualBox

Hola Klaus. ¿Podría usted por

favor ayudarme a configurar Vir-

tualBox? Tengo problemas con el

famoso mensaje de error “vboxdrv”. He

probado a buscarlo en Google. Como

soy un principiante con Linux, me gus-

taría encontrar un tutorial de la A a la Z

sobre cómo conseguir poner en marcha

VirtualBox. Gracias, Foudi.

Creo que te refieres al mensaje

común de error “módulo no

encontrado/ cargado” que aparece al

iniciar VirtualBox.

VirtualBox, al igual que varias virtua-

lizaciones bajo Linux, consta de dos

partes: un programa en “espacio de

usuario” y un controlador del kernel

para el acceso a los recursos comparti-

dos de hardware del sistema real (host).

El programa VirtualBox es bastante fácil

encontrado ninguna ayuda. ¿Podría

ayudarme? Gracias, Anónimo.

La mala noticia es que el “soft-

ware de desconexión de la bate-

ría” incluido en su portátil Dell parece

ser un elemento aislado que requiere

un driver especial de acceso al hard-

ware, tanto en Windows como en

Linux. Pero si existe un controlador

para Linux disponible, no fui capaz de

encontrarlo, lo siento.

Por otro lado, muy probablemente la

vida de su batería no se degradará sólo

porque esté conectado al ordenador

cuando funciona alimentado por la red,

incluso cuando la batería está comple-

tamente cargada. Esto se debe a que la

fuente de alimentación apaga automáti-

camente la carga, y el equipo no fun-

ciona a través de la batería mientras el

adaptador de CA está conectado.

Las razones de pérdida de capacidad

en las modernas baterías de iones de

litio (Li-Ion) es simplemente el enveje-

cimiento de los materiales y el número

de ciclos de carga/ descarga. Descargar

completamente antes de cargar no

extiende la vida útil de estas baterías, a

diferencia de las baterías recargables

que conoce de otros equipos electróni-

cos.

Las recomendaciones sobre guardar

las baterías de portátiles “desconecta-

das de la alimentación” para extender

la vida útil son engañosas: la fuente de

alimentación de los portátiles moder-

nos interrumpe la carga de la batería de

forma automática una vez que se han

cargado completamente y sólo se reini-

cia el proceso de carga cuando la bate-

ría se autodescarga y alcanza un deter-

minado nivel por debajo de la carga

máxima.

Por lo tanto, incluso si usted no usa

la batería en absoluto, la saca de su

ELKONSULTORIODE 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]

Desconexión de la BateríaHola Klaus, tengo un portátil Dell

Studio 15 con Windows Vista

preinstalado (que no me gusta mucho).

Para trabajar cómodamente con Linux,

necesito una cosa más: poder desactivar

la carga de la batería para prolongar su

vida cuando se utiliza una fuente de ali-

mentación externa. No hay interruptor

de hardware para ello, pero sí es posible

con una aplicación de Dell que viene

instalada en mi Vista OEM, así que

supongo que se puede hacer a través de

algunas manipulaciones con ACPI.

He buscado en Internet soluciones o

documentos “COMO”, pero no he

Page 69: Linux Magazine 72r

de instalar, pero el módulo del kernel

vboxdrv, como todos los “controladores

de hardware” en Linux, debe corres-

ponder exactamente al kernel de Linux

en ejecución. Además, el módulo

vboxdrv también debe coincidir con la

versión del programa en espacio de

usuario. Estas son las dependencias

que pueden dificultar la instalación de

VirtualBox, o su actualización.

Por lo tanto, aquí está su lista de che-

queo:

1. ¿Está instalado el programa Vir-

tualBox? (La versión gratuita se llama

“virtualboxose”).

2. ¿Está instalado el módulo del ker-

nel de VirtualBox, vboxdrv, y se corres-

ponde exactamente con la versión del

programa?

3. ¿El módulo vboxdrv del kernel de

VirtualBox coincide exactamente con el

kernel de Linux en ejecución?

Lo siguiente es la comprobación en

línea de comandos, que debería funcio-

nar para Debian y Ubuntu:

dpkg -l | egrep -e ‘(virtualboxU

|vboxdrv|linux-image|U

linux-headers)’

que puede dar lugar a una salida simi-

lar a la mostrada en el Listado 1. En la

salida puede observar varios elementos:

• La versión del programa VirtualBox

instalado y la de los módulos son

ambas 3.1.4-dfsg-1, lo cual es

correcto.

• El kernel de Linux aparentemente se

ha actualizado a 2.6.35.4, pero la ver-

sión de virtualbox-ose-modules-

2.6.34 está preparada para una ver-

sión del kernel anterior. Por lo tanto,

el módulo no se carga, y VirtualBox

no puede iniciarse.

• Se podría utilizar un paquete de

fuentes del módulo del kernel para la

versión de VirtualBox 3.2.8 (virtual-

boxose-source) para compilar un

nuevo módulo del kernel (las cabece-

ras kernel-headers están instaladas,

por lo que no debe haber mayor pro-

blema).

Este es un típico ejemplo de por qué

VirtualBox está instalado pero no fun-

ciona. De hecho, se trata de mi propio

portátil (no he usado VirtualBox desde

hace un tiempo y no me he dado cuenta

de que ya no funcionaba). Así que, aquí

está la solución:

1. En primer lugar trate de instalar

VirtualBox y su módulo (del mismo

número de versión y que coincida con

la versión del kernel) con el uso de su

gestor de paquetes.

2. Si la opción 1 no es posible porque

su kernel no tiene precompilado el

módulo de VirtualBox o porque utiliza

un núcleo personalizado, instale el

paquete de fuentes del módulo del ker-

nel de VirtualBox de la misma versión

que el programa VirtualBox. Asegúrese

de que las cabeceras kernel-headers de

su kernel están instaladas y compile el

paquete del módulo usted mismo.

Debian tiene dos asistentes para la

compilación de módulos concurrentes:

uno denominado make-kpkg y el otro

dkms. El primero tiene que llamarse de

manera manual. Al segundo se le llama

automáticamente cada vez que se ins-

tala un nuevo núcleo y su paquete de

cabeceras. Tenga en cuenta que las ins-

trucciones de compilación son muy

específicas dependiendo de la distribu-

ción. El script de init de Ubuntu, que

también se utiliza para cargar el

módulo en el arranque, tiene un pará-

metro setup que disparará la recompila-

ción del módulo,

sudo /etc/init.d/vboxdrv setup

siempre que su configuración sea lo sufi-

cientemente completa como para compi-

lar módulos (es decir, que estén instala-

dos el compilador C y las cabeceras del

kernel, así como las utilidades make).

Después de compilar con éxito,

puede cargar el nuevo módulo con el

siguiente comando (para Ubuntu),

sudo /etc/init.d/vboxdrv start

o (para Debian),

sudo /etc/init.d/U

virtualbox-ose start

que también creará el dispositivo

/dev/vboxdrv que utiliza VirtualBox.

Si todo ha ido bien, VirtualBox debe-

ría volver a iniciarse y ejecutarse.

Configuración de SELinuxKlaus, acabo de instalar una

nueva copia verificada de Fedora

13. Abrí la administración de SELinux y

estaba preocupado por algunos de los

ajustes que se verificaban en la pestaña

Boolean y siguen estando activos

cuando se probó el modo confinado.

¿Cuál sería la mejor configuración a

aplicar para que un novato se mantenga

alejado de problemas? ¡Me gusta

mucho leer sus artículos! Gracias, un

estudiante.

En realidad, para un novato, e

incluso para un usuario profesio-

nal de GNU/ Linux, SELinux es proba-

blemente algo que en realidad no nece-

sita o no quiere tener activo. Está dise-

ñado para añadir una capa adicional de

seguridad mediante la protección de las

llamadas al sistema para los usuarios

locales con un complejo conjunto de

reglas. Pero, de hecho, también puede

hacer que su sistema apenas se pueda

usar o provocar comportamientos extra-

ños, ya que evita que incluso el admi-

nistrador tenga acceso a ciertos recur-

sos del sistema, dependiendo de una

configuración muy compleja. También

puede eludir restricciones para usuarios

sin permisos, lo que puede ser peligroso

para la seguridad de datos.

Mi consejo es apagar completamente

SELinux, a menos que tenga planeado

utilizar su equipo como un servidor

con múltiples usuarios y necesite un

alto nivel de seguridad local, y que esté

dispuesto a aprender su historia com-

Konsultorio • COMUNIDAD

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

ii linux-headers-2.6.35.4 2.6.35.4-10.00.Custom Header files related to Linux kernel, specifically,

ii linux-image-2.6.35.4 2.6.35.4-10.00.Custom Linux kernel binary image for version 2.6.35.4

ii virtualbox-ose 3.1.4-dfsg-1 x86 virtualization solution - base binaries

ii virtualbox-ose-modules-2.6.34 3.1.4-dfsg-1+2.6.34-10.0 VirtualBox modules for Linux (kernel 2.6.34)

ii virtualbox-ose-qt 3.1.4-dfsg-1 x86 virtualization solution - Qt based user interface

ii virtualbox-ose-source 3.2.8-dfsg-1 x86 virtualization solution - kernel module source

Listado 1: Salida de VirtualBox

Page 70: Linux Magazine 72r

versión? Hasta e incluyendo Fedora 11,

el propio /etc/inittab podía lanzar la

consola de ttyS0. Los problemas

comenzaron con Fedora 12 y continua-

ron con Fedora 13 [6], que requieren

ambos una configuración diferente,

porque /etc/inittab desde la versión 12

sólo contiene el nivel de ejecución por

defecto.

Para su información, la configuración

anterior a Fedora 12 era la siguiente:

vi /etc/inittab

...

C0:12345:respawn:U

/sbin/agetty -LU

ttyS0 57600 vt100

telinit q

También he descubierto la

configuración de consola serie de

Fedora 12 [7]. ¿Podría esto ser intere-

sante para que lo publique y lo

comente? Gracias! Geert Van Pamel.

No puedo responder a la pre-

gunta de por qué las distribucio-

nes cambian las cosas con cada lanza-

miento, pero probablemente el respon-

sable del lanzamiento piensa que es

una buena idea o aparece una nueva

funcionalidad que hace que el cambio

sea necesario. Seguramente no rom-

pen las cosas a propósito. A veces, los

drivers nuevos en el kernel tienen

efectos secundarios inesperados en los

componentes aparentemente no rela-

cionados.

El mensaje “LSR safety check enga-

ged” indica que el dispositivo hardware

de puerto serie no se puede encontrar o

no responde [8].

Esto puede estar relacionado con

asignaciones automáticas incorrectas

de interrupciones, que ya ha descu-

bierto. Nunca es evidente si se trata

de un problema de hardware que

puede ser evitado con drivers especia-

les (como los “board [patch] drivers”

que utiliza Windows para algunos

ordenadores) o si el esquema de asig-

nación de interrupciones elegido o

predeterminado del kernel de Linux

no funciona con esa placa madre

específica.

El dispositivo de serie por lo general

solicita una o más interrupciones 3 y 4,

que se encuentran en el rango de “inte-

rrupciones bajas”, mientras que ACPI

podría tratar de volver a enrutarlas a

interrupciones más altas con objeto de

mantener libres las bajas para hardware

muy antiguo, como las tarjetas ISA (que

podrían ni siquiera existir en el

equipo).

En cuanto a ACPI, existen algunas

opciones que podría intentar para cam-

biar su manejo de interrupciones sin

necesidad de apagar ACPI por com-

pleto. Sin embargo, no puedo prome-

terle que tenga influencia en el disposi-

tivo de serie. Puede que tenga que des-

activar la opción “puerto serie no-

estándar” en la configuración de su ker-

nel y volver a compilarlo para obtener

el mejor resultado.

linux acpi=noirq

linux acpi_osi=Linux

linux pci=noacpi

linux noapic nolapic

La última línea no tiene nada que ver

directamente con ACPI, pero se sabe

que ayuda como una solución si las

interrupciones están distribuidas inco-

rrectamente o faltan para ciertos dispo-

sitivos. �

pleta, a la que puede acceder en la

página web de la NSA [2] . Fedora tam-

bién tiene documentación muy deta-

llada de SELinux con diversos ejemplos

[3].

Consola Serie en FedoraEstimado Klaus, recientemente

he actualizado a Fedora 13. No

tuve mayores problemas, excepto que

tenía que extender la partición /usr de

1GB, y tuve un problema con la consola

serie del sistema, que me gustaría

comentarle aquí.

No logré volver a obtener una con-

sola de login conectando un emulador

de terminal a través de un cable serie.

Para resolver el problema, tengo que

reiniciar el sistema después de hacer las

siguientes modificaciones:

vi /etc/init/U

serial-console-ttyS0.conf

start on stopped rc U

RUNLEVEL=[2345]

stop on starting runlevel [016]

respawn

exec /sbin/agetty -L U

ttyS0 57600 vt100

#exec /sbin/mgetty -r -s 57600 U

/dev/ttyS0 vt100

Pero sigo obteniendo errores y el puerto

serie no funciona:

tail -f /var/log/messages

... kernel: ttyS0: U

LSR safety check engaged!

Algunos artículos [4] [5] sugieren el

uso de la opción de arranque acpi=off.

(He intentado con pnpacpi=off, pero

esto no ha funcionado.) La solución

con la opción de arranque acpi=off

parece que funciona. Pero, ¿tal vez

otras funcionalidades hardware podrían

estar ahora inaccesibles?

Esto parece ser un viejo error sin

resolver de Fedora que ha provocado un

conflicto IRQ de hardware con un

puerto de infrarrojos (que no existe) en

el ordenador portátil Compaq NC6000.

(He encontrado informes de errores

desde Fedora Core 6.) Parece que los

desarrolladores de Fedora nunca tuvie-

ron la oportunidad de reparar el pro-

blema. ¿Por qué el equipo de Fedora

cambia el comportamiento de la con-

sola serie y su configuración en cada

COMUNIDAD · Konsultorio

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

[1] FAQ de baterías Dell: http:// www. dell.

com/ content/ topics/ global. aspx/

batteries_sitelet/ en/

batteries_faq?c=us&l=en&cs=19

[2] SELinux: http:// www. nsa. gov/

research/ selinux/

[3] Ejemplos SELinux: http://

fedoraproject. org/ wiki/ SELinux

[4] Red Hat Bugzilla – El puerto serie no

funciona: https:// bugzilla. redhat. com/

show_bug. cgi?id=260481

[5] LinuxForums.org: http:// www.

linuxforums. org/ forum/

redhat-fedora-linux-help/

85411-dev-ttys0-nc6000-not-working.

html

[6] LinuxQuestions.org: http:// www.

linuxquestions. org/ questions/

fedora-35/

in-fedora13-etc-event-d-now-etc-sysc

onfig-init-827150/

[7] IT Resource Center Forums: http://

forums13. itrc. hp. com/ service/ forums/

questionanswer.

do?threadId=1444559

[8] HOWTO de puerto serie: http:// tldp.

org/ HOWTO/ Serial-HOWTO-17.

html#ss17. 17

RECURSOS

Page 71: Linux Magazine 72r

Linux Legal • COMUNIDAD

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

que cualquier obra derivada de código

GPL debe liberarse en las mismas condi-

ciones. Sin embargo, la estabilidad jurí-

dica de Android en lo que a software

libre se refiere, se basa en que Linux fun-

cione siempre debajo del espacio de

usuario, por lo que consigue, virtual-

mente, que se desactiven las libertades

del código bajo GPL. En esta ocasión

Google podría haber cometido un error

fatal, primero porque la cantidad de

código GPL apropiado podría muy pro-

bablemente considerarse como sustan-

cial y difícilmente esquivar su cláusula

copyleft, ni siquiera por medio del dere-

cho de competencia. Por otro lado, si no

procede a un combate legal, cualquier

huida hacia delante supondrá un cambio

fundamental en la estrategia de Android

y en el control que tiene Google sobre el

mismo y los fabricantes de aplicaciones

para Android.

Rehacer la biblioteca que conecta

Android y sus aplicaciones con la base

del núcleo de Linux, por razones de

tiempo y coste supone una vía técnica-

mente muy complicada y compromete el

crecimiento competitivo de Android. La

plataforma de Google puede que se vea

forzada a tomar el camino de una mayor

apertura y, – ¿por qué no? – definitiva de

su código. Se podría hablar entonces de

verdadera revolución en las telecomuni-

caciones, precisamente por medio de su

liberación técnica. �

� ¿Cómo puede Google no liberar el

código de Andoid Honeycomb? ¿No está

violando alguna licencia actuando así?

� Me gusta advertir a mis clientes que el

software libre no sólo ha provocado el

surgimiento de un buen número de

modelos de desarrollo nuevos de código,

sino que ha transformado radicalmente

la forma en que se crea, utiliza e imple-

menta el software de código cerrado.

Hasta la raíz.

Buena paradoja, pero es que no han

quedado modelos indemnes, y los nue-

vos ecosistemas cerrados, en el mejor de

los casos, han visto multiplicarse sus

costes y han tenido que adaptarse a la

realidad del software libre. Sí, hablo del

riesgo legal del software libre para las

empresas que desarrollan o utilizan soft-

ware cerrado.

Si se filtra código extraño en la “red”

de desarrollo de una empresa, ésta

arriesga mucho. Todos sabemos cómo se

hace a veces software: es común que un

programador busque una función y bus-

que un ejemplo y se limite a copiarlo. Al

fin y al cabo, hay un numero finito de

maneras de hacer una función, un bucle

... Los ejecutivos saben poco de software

libre, pero sí de que si sus informáticos

introducen código de la Comunidad,

pueden estar contaminando su propio

código, en el sentido de incluir código

con especificaciones legales que arries-

gan la forma de propiedad intelectual

que antes tenían. De esta manera, las

empresas someten a “cuarentena” el

código que les remiten ciertos proveedo-

res hasta que no se audita. Muchas veces

obligan a que les sean entregados certifi-

cados de que no existe código libre. De

hecho, los abogados actúan a veces

como verdaderos epidemiólogos y esta-

blecen, si el tamaño de la empresa lo

exige así como el valor de los activos

informáticos en juego, complejos diagra-

mas internos de control para aprobar y

verificar los componentes de software

que se manejan.

En plataformas multilicencia como

Android, por otro lado, que tiene una

intención muy clara de controlar el espa-

cio jurídico del contenido de su “plata-

forma” y con un enorme riesgo jurídico

de por medio, es normal que el futuro

completo del proyecto se vea en juego. Y

es que Google está conociendo la idea

jurídica de lo que es la “nube”, y la tiene

precisamente encima de Android. Ya no

son la casi docena de demandas por

patentes que soporta, la demanda adi-

cional de Oracle por infringir sus dere-

chos sobre java... Precisamente una

empresa auditora de código, OpenLogic,

desató la polémica este mes de marzo en

la AnDevCon, una conferencia de desa -

rrolladores de Android en San Francisco.

Esta empresa examinó 635 aplicaciones

de Android e iOS y escaneó el código

fuente y los binarios de las mismas,

dando como resultado que, del escaso

porcentaje de aplicaciones que emplean

código fuente libre, el 70% de las aplica-

ciones no cumplen con las licencias de

las mismas (GPL y Apache fundamental-

mente).

Sí, la versión de Android 3.0 “Honey-

comb”, que está siendo actualmente

vendida a los consumidores en el tablet

Xoom de Motorola, puede estar vulne-

rando la cláusula copyleft de la GPL y

además con respecto a una importante

cantidad de código. Este código es,

encima, un elemento crítico de su arqui-

tectura. El reproche que se le ha hecho a

Google es que se ha colado en 2,5

megabytes de código, correspondientes

a al menos 700 ficheros cabecera del ker-

nel de Linux. Google ha dedicado mucho

menos espacio en argumentar la sor-

prendente aparición de código Linux,

afirmando que se trataba de material no

sujeto a copyright. Sin embargo, Linus

Thorvalds ya dejó claro en 2003 que

“Usted puede ejecutar el kernel y crear

programas que no son GPL […] PERO

NO PUEDE USAR los ficheros de cabe-

cera del núcleo para crear archivos bina-

rios NO GPL. ¿Comprende?”

La coexistencia de software libre en un

contexto jurídicamente tan especial

como Android es difícil. La GPL exige

Jose María Lancho, abogado, contesta a las dudas legales de los lectores

LINUX LEGAL

Jose María Lan-

cho es abogado,

fundador de la

asociación Legal

Venture (http://

www.

legalventure.

com/), co-fun-

dador del Obser-

vatorio de Neutralidad Tecnológica

(http:// neutralidad. es/) y presidente de

Hispali nux. Puedes hacerle llegar tus

preguntas un correo a

[email protected]

EL AUTOR

Page 72: Linux Magazine 72r

COMUNIDAD · Blogs: Hacking y cerveza en Río

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

El niño sentado detrás de míestaba muy entusiasmado consu primer viaje en avión.

Cuando empezó a despegar, hizo unacuenta atrás muy fuerte hasta “¡Despe-gue!”. Es refrescante escuchar tantoentusiasmo, sobre todo porque el trans-porte aéreo se había convertido para míen un “ascensor mágico”. Las puertasse cierran en un lugar y se abren enotro, pero el viaje tiene poco de emo-cionante, sólo el destino.

Experimenté una emoción similarcon mi primer “Hack y Cerveza” conArduino. Organizado por mi amigoÁlvaro Justen en Río de Janeiro, deboadmitir que no estaba muy seguro deconseguir algo significativo con unasola noche de “hacking” hardware.

La planificación y el debate del“Hack y Cerveza” ocurrieron rápida-mente. Se pidió una cantidad parapagar el refrigerio: bocadillos, refrescosy (por supuesto) cerveza. Había cuatroproyectos a tratar y se presentaroncerca de 20 personas, así que que encada proyecto trabajaron entre cuatro ycinco de ellas.

Todos los proyectos necesitaban unArduino. Arduino es una plataformahardware “abierta” para la que se pue-dan hacer distintas variaciones de laplaca base. La mayoría de estas varia-ciones tienden hacia unidades que seinterconectan fácilmente a placas uni-versales para poder construir simples“extensiones” de hardware. Hay unaserie herramientas de desarrollo encadena (los llamados “toolchains”) quepermiten crear fácilmente los progra-

mas para probarlos y almacenarlos enel Arduino. Existe una bibliotecagrande de código fuente en constantecrecimiento que está disponible paraconstruir sencillos (y no tan sencillos)circuitos electrónicos. Lo mejor de todoes que estos componentes electrónicosy el propio Arduino son relativamentebaratos y reutilizables para otras cosas.

Después de repartir algo de picoteo,refrescos y cervezas, nos dividimos encuatro grupos. Uno de ellos lo dirigióuna joven que realizó una demostra-ción básica de la programación delArduino. Otro grupo estaba trabajandoen la interconexión de Arduino a unsemáforo, que era “difícil”, porque laluz necesita una potencia de entradamayor que la que el Arduino puedegenerar.

Mi grupo estaba intentando integrarun sensor de distancia que utilizaba elsonido para medirla. Estaban usandoalgún software ya desarrollado y publi-cado para Arduino, pero el sensor quese utilizó de muestra en el programaera bastante caro y habían encontradootro disponible por mucho menosdinero. El sensor ya había llegado yestaban ansiosos por ponerse en mar-cha.

Me invitaron a unirme al proyecto delgrupo del “sensor”. En principio meopuse, porque no sabía nada deArduino, sólo que tenía un espacio dememoria relativamente pequeño. Ade-más, hacía más de 20 años que nohacia ningún trabajo de electrónica,pero vi que Álvaro necesitaba un pocode ayuda. Muchos de los asistentes noeran estudiantes ni de informática ni deingeniería electrónica, sino de historiay de otras disciplinas, y sólo queríantener la experiencia de realizar estosproyectos.

El grupo del “sensor” cargó el códigode ejemplo y cableó sus sensores. Pordesgracia, el sensor no funcionaba; el

programa siempre devolvía distanciasmuy grandes. Me enteré de que sehabía utilizado otro sensor en el códigode ejemplo y les pregunté si tenían la“hoja de especificaciones” de ese sen-sor. Dijeron que no, por lo que sugeríbuscar en Internet el número de piezadel sensor para ver si podían localizarla hoja de especificaciones, y así lohicieron.

Nuestro sensor tenía tres pines – unopara la alimentación, uno para tierra yotro con la señal de salida que se pro-duce cuando el sensor detecta unaonda de audio que ha rebotado – y elgrupo estaba tratando de alimentar unaseñal de entrada en el pin de salida.Empecé a sospechar que el funciona-miento de este sensor era completa-mente diferente al del “código de ejem-plo”. Les expliqué que, sin más especi-ficaciones para la unidad, no podíadecir el intervalo de tiempo entre el“encendido” hasta que emitía el primerpulso. Tampoco sabía cuánto tiempoestaría presente el pulso de salida en elpin de salida o si el Arduino sería capazde capturar ese pulso. Sugerí utilizarun circuito electrónico conocido como“latch” (cerrojo), con el que mis com-pañeros de desarrollo no estaban fami-liarizados. Por desgracia, no estabandisponibles las piezas para construirlo.

El sensor no funcionó en esta sesiónde “Hack y Cerveza”, pero sé que miequipo aprendió mucho de sus esfuer-zos, y dijeron que seguirían intentán-dolo. Estaban emocionados por el viaje,no por el destino, que es a fin de cuentasde lo que tratan los “Hack y Cerveza”. �

¡DESPEGA!Maddog va a Río al evento “Hack y Cerveza” y aprende a disfrutar del

viaje. POR JON “MADDOG” HALL

[1] Un álbum en Flickr del Arduino

“Hack y Cerveza” en Río: http://

www. flickr. com/ photos/

pedromenezes/ sets/

72157624743215187/

RECURSOS

Page 73: Linux Magazine 72r

PRÓXIMO NÚMEROPRÓXIMO NÚMEROJu

lian

a M

aria

Villa

lob

os E

sp

ino

sa, 1

23 R

F

Historiasde Nubes

Todo el mundo sueña con un futuro en la nube, pero el lector con conocimientos técnicosbusca algo más que generalidades difusas. El mes que viene vemos la parte práctica de lacomputación en cloud. Con artículos sobre Nebula, OpenStack, Amazon y más, analizare-mos casos concretos de configuración bien de cerca y aprenderemos lo que estos servi-cios dan de sí.

Ya puedes mantenerte al día de lo quesucede en el mundo de GNU/ Linux sigu-iendo las noticias diarias en nuestro Face-book (http:// www. facebook. com/ linuxmagazine. es) y Twitter (http:// twitter. com/ linux_ spain).

También puedes recibir noticias de lo quete espera en los si guientes números deLinux Magazine, así como ofertas, regalosy novedades subscribiéndote a nuestroboletín en http:// www. linux-magazine. es/ Readers/ Newsletter.

A LA VENTA: JUNIO 2011

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