Linux Magazine 72r
-
Upload
h-luis-garcia-real -
Category
Documents
-
view
591 -
download
17
Transcript of 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
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.
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
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).
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
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
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
• 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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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.
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.
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.
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.
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
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
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.
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.
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.
RECURSOS
Figura 6: Los controles de antena y radio de Gpredict.
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»
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
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» .
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
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
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
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.
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
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
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.
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.
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
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
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
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
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
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
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
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…
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
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
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.
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.
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
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.
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.
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.
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
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.
¿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
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
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.
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.
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.
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:
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
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
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
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
EL AUTOR
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
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