viernes, 19 de agosto de 2011

Moodle, Drupal, SHA512 y John The Ripper.

A ver si no me lío mucho y voy al grano.

Problema:

"Sincronizar" usuario de una plataforma Moodle 1.9.x y un Drupal 7. Los usuarios deben poder acceder al Drupal7 con la misma cuenta que Moodle. No he visto módulo SSO para Drupal 7 así que decide cocinarme yo el tema. El problema es que no sabía que en Drupal 7 no "hashea" el password con MD5 sino que lo hace con SHA512.

Marrón:

Las pruebas las hice con Drupal 6, hace un tiempo, y le he comentado por anticipado al cliente "eso con un script lo soluciono en una mañana". Mal. Muy mal. Pero bueno, el proyecto está en marcha y lo único que falta es solucionar este pequeño inconveniente.

Descripción del marrón:

  • "El" Moodle y "el" Drupal se ejecutan en distintas máquinas. No es problema, por lo menos yo no veo inconveniente, a priori.
  • Tengo funcionando un script en PHP que exporta los usuarios a un fichero CSV en la máquina Moodle. Sin problema.
  • La máquina Moodle envía por scp el fichero a la máquina Drupal. Sin problema.
  • En la máquina Drupal ejecuto un script lee los registros del CSV y los inserta en la tabla users de Drupal. Aquí está el marrón.
Como indicaba, Drupal no usa md5 sino sha512, por lo tanto si intentas logearte en el sistema no podrás acceder.

Posible solución:

La mejor solución, o la más adecuada en este caso, a mi modo de ver, sería instalar OpenLDAP y se acabarían los problemas, pero no es posible.

La posible solución(no válida a efectos de LOPD, privacidad y demás, pero bueno, al final lo que cuenta es solucionar el problema( ¿?¿?¿? ) ) sería.

A) Averiguar el password del usuario.
B) Insertar/actualizar el campo password de la tabla users de Drupal.


Para el punto B, Drush es la solución, máxime cuando vamos a usar PHP y bash(shell_exec vía PHP). No voy perder el tiempo en este punto, ya que en este post viene bien explicado.

Para el punto A) voy a utilizar el fichero listado_users_passwords.txt generado en la máquina que corre Moodle, cuyo contenido(es un ejemplo, así que no os molestéis en hacer el gamberro que he modificado los datos ^_^).
user,12c41121e857a474b1ce23e24166019, guillermopuertas@microsoft.com

Preparo el fichero para que John The Ripper pueda leerlo e intentar que me indique el password del usuario y poder pasarlo como parámetro a Drush para actualizar el password.

Ahora viene el verdadero motivo por el cual escribí este post: aplicaciones multihilo.

Instalar John en un sistema basado en Debian GNU/Linux no tiene ciencia. Aptitude o apt-get install john y problema resulto. Luego bastaría con:

john -format=raw-MD5 listado_users_passwords.txt

Y en cinco minutos tema resuelto. Esto está muy bien si sólo tienes un usuario, pero cuando son 429, necesitas sí o sí agilizar el proceso. La verdad es que todavía no tengo muy claro el concepto de multihilo a nivel de programación, pero lo que sí he observado es que muchas aplicaciones compiladas para distribuciónes Linux NO tiene soporte multicore, por lo tanto tu dual o quad core por el que has pagado XXX€ y del que tanto farda con tus compis, se queda en un cutre core la mitad del tiempo de proceso. John The Ripper no es una excepción. En el proceso anterior, abrí htop y pude comprobar a ojímetro como uno de los cores del procesador/(Intel(R) Core(TM)2 Duo CPU E7200 @ 2.53GHz) del PC del trabajo estaba más ocioso que Paquirrín en agosto.

Decidí investigar,leer y comprender el por qué. John The Ripper, por lo menos en la versión para Ubuntu/Debian GNU/Linux , sólo va a usar 1 core de tu máquina.En el wiki de Openwall encontré un artículo muy interesante acerca de "Parallel and distributed processing with John the Ripper", que por supuesto recomiendo leer. Seguí navegando y no recuerdo en qué web, leí algo acerca de la versión Jumbo de John The Ripper. En la práctica es un patch que permite usar varios cores. Lo mejor de todo no es esto. Lo más interesante es que me he enterado de que hay una "Community-enhanced version" Jumbo Powered. Genial. La descargo, la compilo y a probar. Juzguen ustedes mismos.

Comando: john -format=raw-MD5 listado_users_passwords.txt
Versión John: Version: 1.7.3.1-1
Paquete: deb
SSOO: Ubuntu 10.10 x86
Kernel: 2.6.35-30-generic-pae
Resultado John:
Loaded 1 password hash (Raw MD5 [raw-md5])
3169Y (user)
guesses: 1 time: 0:00:05:25 (3) c/s: 4876K trying: 314d* - 318bh

Comando: john -format=raw-MD5 listado_users_passwords.txt
Versión John: Version: 1.7.8-jumbo-5
Paquete: src(tar.gz)
SSOO: Ubuntu 10.10 x86
Kernel: 2.6.35-30-generic-pae
Resultado John:
Using raw-md5 mode, by linking to md5_gen(0) functions
Loaded 1 password hash (Raw MD5 [gen])
3169Y (user)
guesses: 1 time: 0:00:02:32 DONE (Fri Aug 19 13:06:13 2011) c/s: 10374K trying: 314d* - 3132E

No sé si al final consiguiré mi propósito, seguro que aplicaré KISS y solucionaré de otro modo el problema.

Nota: sí, he elimando el fichero .john de mi $home.


jueves, 18 de agosto de 2011

bootinst.sh : Permission denied Slax


Me gusta Slax. La uso a menudo para instalar Gentoo en otras máquinas. En caso es que esta tarde me disponía a instalar Gentoo en mi HP-Mini y durante un tiempo(unos minutos :P ) fue imposible cambiar el permiso el fichero pues al ejecutar bootinst.sh devolvía: Permission denied. Revisando los foros de Slax, un crack apuntaba que es probable que la distribución que utilizo (Debian GNU/Linux) montase el pendrive con el atributo noexec, por lo tanto no sería posible cambiar los permisos a +x al fichero en cuestión. La solución, como casi siempre en GNU/Linux, muy sencilla:
mount /dev/sdb1 -o exec /media/usb
Ahora ya podemos ejecutar bootinst.sh y disfrutar de Slax. Por cierto, nunca está de más echar un vistazo a las páginas del manual de mount.

miércoles, 17 de agosto de 2011

"Instalar" Gingerbread en un tablet Archos 101 [OpenAOS] [Android 2.3]

Ni en vacaciones tenía ganas de mirar este tema. No por tiempo, sino por que simplemente no me apetecía. Esta tarde, en lugar de darle vueltas a la configuración de los servidores del Kernel 2011, he preferido frikear un buen rato e instalar Gingerbread en el tablet Archos 101 del curre.

Antes de comenzar, que quede claro una cosa: este post se resume básicamente en "instalar CyanogenMod" en un tablet Archos. ¿Que no sabes lo que es CyanogenMod? Pues visitas la web del proyecto, muy interesante, por cierto. Ahora en serio y hablando claro: CyanogenMod es una "modificación" de Android 2.3 Gingerbread que añade funcionalidades extra a las proporcionadas por el original de Google.

Paso 1: Instalar el SDE de la web oficial de Archos.
  • Navegas hasta www.archos.com, link Soporte & Cuenta, item Descargas. En la parte inferior encontrarás un enlace a "Special developer edition firmaware", clic ahí.
  • Dependiendo del modelo de tablet elige el enlace que coincida con tu modelo. En mi caso el primero "SDE firmware for ARCHOS Generation 8 devices:"
  • Aceptas las condiciones y el aviso de Archos y descarga el fichero AOS en tu PC.
  • Activa el "modo" almacenamiento masivo en el tablet.
  • Copia el fichero que has descargado en la carpeta raíz del tablet.
  • Apaga el tablet.
  • Enciende el tablet y mantén pulsado el botón "Volumen -" unos 10 segundos hasta que veas el "Boot Menu".
  • Para desplazarse por el menú usa las teclas de "Volumen". Selecciona "Recovery System" pulsando la tecla de encendido. A continuación selecciona "Update firmware".
  • Una vez finalizado el proceso, apaga el tablet.
  • Enciende de nuevo el Archos 101 y verás que se ha añadido un nuevo ítem al menú "Developer edition menú".
  • Apaga de nuevo el tablet.
Paso 2: Instalar el bootloader OpenAOS.

¿Qué es OpenAOS? Es la versión Gingerbread para dispositivos Archos. Tiene más información en la web www.openaos.org.. Como veis voy al grano, citando sólo lo más importante para completar el proceso. Luego que cada uno se pare en lo que más le interese :P.
  • Del sitio web http://download.openaos.org/bubu/gen8/ descargas dos ficheros: initramfs.cpio.gz y zImage. Recomiendo comprobar la suma md5 de los dos ficheros. Recordad que estamos "jugando" con el firmware del tablet.
  • Enciende el tablet pulsando el botón "Volumen -" durante 10 segundos hasta que veas el "Boot menu".
  • Selecciona en el menú "Recovery System"/"Developer Menu Edition"/"Flash kernel and initramfs".
  • El almacenamiento USB debería haberse activado. Copia los fichero initramfs.cpio.gz y zImage en el directorio raíz del tablet y pulsa "Flash kernel and initramfs"
  • Espera a que finalice el proceso y apaga el tablet.
Paso 3: Instalar la imagen Cyanogenmod en el tablet.
  • Descargar la imagen más reciente desde la URL http://download.openaos.org/bubu/gen8/android/
  • Nombre del fichero debería ser similar a este: openaos-gingerbread-gen8-20110708_183154.img.gz
  • Descomprime el fichero y renómbralo a : openaos-gingerbread.img. MUY IMPORTANTE: Si no lo descomprimes y lo renombras NO podrás arrancar con Cyanogenmod.
  • Reinicia el Archos 101 con el clásico "Volumen - ". Elige "Developer Edition", espera unos segundos y verás un nuevo menú donde podrás elegir Gingerbread. He leído en algún sitio que si no aparece la entrada para el boot en Gingerbread, con un nuevo reinicio sería suficiente.
En teoría, y si no he olvidado nada, estos son los pasos(muy resumidos) para instalar Gingerbread en tu Archos 101. Por cierto, la mayor parte de este post viene de aquí. He añadido el paso 1, ya que en el original no se citaban los pasos. Si que decir tiene, que NO me responsabilizo de nada de lo que le pueda pasar a tu tablet.





jueves, 11 de agosto de 2011

No he perdido la fe...

...desde 1999 en el mundo del software libre ni en GNU/Linux. Ni siquiera en 2008 cuando compré un Apple Macbook.*1

Conocí la obra de Neal Stephenson, si no recuerdo mal, en 2005. Había leído fragmentos de Criptonomicón e incluso, con un buen amigo, charlado largo y tendido sobre cómo había cambiado su concepción de la vida después de leer Snow Crash.

Este verano en la mochila, a parte de unos cuantos gadgets, guardo también "En el principio... fue la línea de comandos.". Ayer, a punto de terminar una estupenda jornada playera, finalicé por no sé qué veces este ensayo. Desconozco la razón, pero tenías más ganas que nunca de llegar a mi casa, arrancar "mi" Debian GNU/Linux y pulsar la tecla "Vivir".

Vamos a dejar los desvaríos y a centrarnos en el verdadero motivo de este post. "En el principio...fue la línea de comandos" es una obra maestra, una verdadera apología de la libertad y de la capacidad innata para decidir libremente tu futuro, tus pensamientos...tu vida.

Si bien es cierto que Stephenson en la actualidad afirma que si reescribiese el libro no escribiría ni la mitad de las afirmaciones libertarias(en términos de software claro.Se confiesa, ahora, fiel usuario de MacOSX) que escribió en 1999, a mi este particular me trae sin cuidado.

Os recomiendo encarecidamente la lectura de este ensayo. En el que podréis deleitaros con párrafos tan maravillosos como estos:

"Todo esto es perfectamente congruente con la pertenencia a la burguesía, que es un estado tanto mental como material. Y explica por qué Microsoft se ve constantemente atacado en la Red desde ambos lados. Los que se siente pobres y oprimidos interpretan todo lo que hace Microsoft como parte de algún siniestro complot orwelliano. A los que les gusta considerarse usuarios inteligentes e informados, les desquicia lo chapucero que es Windows."

"Pero el precio que tuvimos que pagar los dueños de un Mac por una estética y un diseño superiores no fue meramente financiero. Había un precio cultural también, debido al hecho de que no podíamos abrir el ordenador y enredar con él. Doug Barnes tenía razón. Apple, pese a su reputación de ser la opción de los hackers creativos y contestatarios, había creado de hecho una máquina que desalentaba el hackeo, mientras que Microsoft, considerada una perezosa tecnológica y una plagiaria, había creado un vasto bazar de componentes sin orden ni concierto: una sopa primordial que había acabado autoorganizándose en Linux."


"Unix es difícil de aprender.El proceso de aprenderlo tiene múltiples pequeñas epifanías. Lo típico es estar a punto de inventar una herramienta o utilidad necesaria cuando te das cuenta de que alguien ya la inventó, y la incorporó, y eso explica algún extraño archivo o directorio que viste pero que nunca comprendiste realmente antes. "

Y el que da sentido a este blog y a gran parte de mi "vida y demás historias":

"¿Qué diría el ingeniero, una vez hubieras explicado tu problema y enumerado todas las insatisfacciones de tu vida? Probablemente te diría que la vida es una cosa muy difícil y complicada; que ninguna interfaz puede cambiar eso; que cualquiera que crea lo contrario es un imbécil; y que si no te gusta que escojan por ti, deberías empezar a elegir por ti mismo."







*1: Esto es otro debate. Considero que para poder hablar de un tema, cualquiera en general, y Apple en este particular, es necesario conocer, saber e informarse, antes de emitir un juicio de valor. Muchos de vosotros lo hacéis sin tener ni la más remota idea de lo que estáis diciendo. A menudo, yo también cometo este error, pero día a día intento no caer en el pozo de la ignorancia.

jueves, 4 de agosto de 2011

PPA para Hotot

Si usais Twitter o Identi.ca os habréis dado cuenta de las miles y miles de apss que existen para gestionar las cuentas.

He usado alguna que otra app para GNU/Linux, concretamente en GNOME, y la verdad es que ninguna me ha gustado, salvo Hotot.

Gwibber es muy pobre, las actualizaciones raras veces funcionan. Tweetdeck es de Adobe, por lo tanto propietario, entonces lo descarto. He probado incluso alguna para KDE que no recuerdo.

El caso es que hace unos meses buceando por Google Code encontré Hotot. Siempre(o casi siempre) funciona a las mil maravillas. He migrado mi ssoo de escritorio a Linux Mint y al buscar información sobre el proyecto me he enterado de que ya tienen PPA. Buena noticia. El proyecto ha madurado, me alegro!

Tenéis más info sobre los PPA de Hotot aquí: http://www.hotot.org/get_hotot.html

Autenticación básica Nginx en Debian 6.0

Desde hace un año aproximadamente uso Nginx en alguno de los servidores que administro y la verdad es que los resultados son más que aceptables, sobre todo desde que liberaron la versión 1.0.

No había trasteado aún no la autenticación básica sobre Nginx, pero es muy muy sencillo, incluso me atrevería a afirmar que más sencillo que en Apache2.

Indico los pasos que debéis seguir para habilitar "basic_auth" en Debian GNU/Linux Squeeze:

1.-Lee la documentación oficial!
2.- Instala apache2-utils(si, paradojas de la vida, dejas Apache2, pero....)
aptitude install apache2-utils
3.-Crea el fichero que almacenará las credenciales:

root@:/etc/nginx/conf.d# htpasswd -c /etc/nginx/conf.d/htpasswd admin
New password:
Re-type new password:
Adding password for user admin

4.- El fichero de configuración de Nginx debería ser similar a este:

server {
listen 3312;
auth_basic on;
server_name server.org;
include /etc/nginx/php.conf;
access_log /var/log/nginx/server.org.access_log;
error_log /var/log/nginx/server.error_log;
root /var/www/myfolder;
location /admin {
auth_basic "E logho ti, de quen ves sendo...";
auth_basic_user_file conf.d/htpasswd;
}
}

5.- Recargar la configuración de Nginx

root@x:/home/apermuy# /etc/init.d/nginx reload
Reloading nginx configuration: nginx.