Thursday, October 25, 2007

"FN Keys" en Linux

Un problema que he tenido con todas las distribuciones que he probado últimamente ha sido el tema de las teclas especiales del portátil, esas que sirven para ajustar el volumen, hibernar, etc. En algunas distros funcionaban algunas cosas, en otras salía el OSD pero no funcionaban y en la mayoría no funcionaban en absoluto. En las distribuciones de prueba ni me he molestado en investigar sobre el asunto pero en mi gentoo tenía que hacer que funcionasen estas teclas ya que su comodidad es incomparable a hacer las cosas con el raton desde algun menú, como el de KMix.

Los pasos para tener las teclas fn funcionando en un Sony Vaio SZ son:
1. Instalar soporte de teclas especiales sony en el kernel. Antes el módulo se llamaba sony_acpi, pero ahora es sony-laptop. Con esto conseguimos que el kernel genere eventos acpi cada vez que pulsamos la tecla fn + f1-f12
2. Procesar los eventos acpi. Para esto basta una sección adicional en el script /etc/acpi/default.sh. Por supuesto, se puede llamar a un script aparte poniendo el clasificador correspondiente en /etc/acpi/events/ y creando el script en la carpeta anterior, o en una subcarpeta, a gusto del usuario. En mi caso, la seccion relevante del default.sh es:
  1. #!/bin/sh
  2. # /etc/acpi/default.sh
  3. [...]
  4. case "$group" in
  5. button) [...]
  6. sony)
  7. case "$value" in
  8. 0000000d)
  9. logger "mute"
  10. /usr/local/bin/vol_mute
  11. ;;
  12. 0000000e)
  13. logger "bajando el volumen"
  14. /usr/local/bin/vol_down
  15. ;;
  16. 0000000f)
  17. logger "subiendo el volumen"
  18. /usr/local/bin/vol_up
  19. ;;
  20. 00000010)
  21. logger "bajando el brillo"
  22. /usr/local/bin/bright_down
  23. ;;
  24. 00000011)
  25. logger "subiendo el brillo"
  26. /usr/local/bin/bright_up
  27. ;;
  28. *)
  29. logger "acpid: sony action $value is not defined"
  30. ;;
  31. esac
  32. ;;
  33. ac_adapter) [...]]
  34. *) log_unhandled $* ;;
  35. esac
3. Crear los scripts que den la funcionalidad. En caso del volumen se puede usar el comando amixer. Para el brillo basta leer/escribir en /sys/class/backlight/sony/brightness. Por supuesto se pueden asignar las funciones que se quieran a las teclas, como ejecutar scripts de mantenimiento, arrancar navegadores... Como ejemplo dejo dos scripts de control de brillo y volumen, que es lo mas usado.
Brillo:
  1. #!/bin/bash
  2. BRIGHTNESS="$(cat /sys/class/backlight/sony/brightness)"
  3. if (( BRIGHTNESS < 7))
  4. then
  5. BRIGHTNESS=$((BRIGHTNESS+1))
  6. echo $BRIGHTNESS > /sys/class/backlight/sony/brightness
  7. # DESCOMENTAR PARA OSD
  8. # PERC="$(( (BRIGHTNESS*100)/7 ))"
  9. # osd_cat --pos=middle --align=center --barmode=percentage --percentage=$PERC --text=BRILLO &
  10. fi
Volumen:
  1. #!/bin/bash
  2. VOLUMEN=$(/usr/local/bin/vol_get)
  3. (( VOLUMEN = VOLUMEN + 5 ))
  4. if [ $VOLUMEN -gt 100 ]; then
  5. VOLUMEN=100
  6. fi
  7. /usr/local/bin/vol_set $VOLUMEN
Siendo vol_get:
  1. amixer sget Master | grep Left: | sed -e "s/[^[]*\[\([^%]*\).*/\1/"
Y vol_set:
  1. #!/bin/bash
  2. if [ $# -lt 1 ]
  3. then
  4. echo "Uso: $0 VOLUMEN"
  5. exit 1
  6. fi
  7. amixer -q sset Master ${1}%
Los scripts son de andar por casa y chapuceros, de hecho creo que son los primeros que he escrito, así que no tengo mucha idea de normas de estilo, ni siquiera de normas en general ;) Pero espero que sirvan para ilustrar el proceso a seguir para ajustar el comportamiento al gusto de cada uno. Y por supuesto la regexp de sed ha sido copiada de una web y modificada para que funcione con la salida del amixer (salida filtrada chapuceramente con grep xD).
Por supuesto, existen otros métodos como mapear los eventos acpi a pulsaciones de teclas en X, o a través de módulos de KDE, pero esas soluciones o son más complejas y menos potentes o se acercan más al Plug & Pray y si no funcionan a la primera, no hay manera de arreglarlas.

PD: el codigo para la su publicación ha sido porcesado usando esta página. Increíble lo que he tardado en encontrar una página de ese tipo, la relación señal/ruido en Internet cada vez es peor.

Thursday, October 18, 2007

Troubleshooting: disparando a los problemas

Entre las distribuciones Linux podemos encontrar dos tipos: las que son para geeks y ponen todo bajo tu control y las que son para gente despreocupada que solo quiere que las cosas funcionen. Bueno, y luego tenemos otras como Ubuntu que se procalama defensona de los inocentes y luego se leen perlas como las de este blog. La frase que me maravilla en concreto es:
Sabía que no iba a ser un camino de rosas. El caso es que después de dos horas mirando millones de foros y tutoriales, ¡lo conseguí!
Pues vaya, eso si que es facilidad de uso. Yo en gentoo tardé aproximadamente media hora y de ello 15 minutos fueron torpezas que hice por no seguir lo que decía en el HOWTO. Y precisamente gentoo es una de las distribuciones del primer tipo, de "hágalo usted mismo", pero con una cantidad enorme de manuales, HOWTOs, foros y demás documentación. El IKEA de las distribuciones, pero sin tener nombre sueco. No es mi intención machacar a Ubuntu, pero sí que le tengo un poco de manía, y hay cosas como estas que no me hacen cambiar de opinión precisamente.
El caso es que tras instalar gentoo en el portátil e instalar los programillas necesarios para navegar por internet, ver videos y escuchar múscia, ofimática, juegos, torrents, etc., pues había una serie de pequeños fallos e imperfecciones que molestaban por ahí. Y como instalé gentoo para aprender mas que para usar Linux pues me puse manos a la obra y al final las cosas se fueron solucionando. Por si alguien tiene los mismos problemas, aquí dejo un par de soluciones:

* Reproducción de mp3 acelerada
La mayoría de mp3 se escuchan bien con amaroK + xine, pero los del podcast de "Security Now!" se escuchaban acelerados, como si cada segundo de podcast de reprodujera en unas décimas con el característico sonido agudo y luego quedaba un hueco de silencio lo que quedaba de segundo. Y asi durante todo el podcast. Por supuesto, tanto en el iTunes en XP, en el iPod e incluso en el VLC en gentoo soaba perfecto, así que era culpa de amaroK. Y dado que el amaroK solo es una "interfaz" al motor de sonido, teía que ser culpa de xine. En internet no había mucha info, así que me puse a activar los USE flags desactivados y recompilar el xine-lib, a ver si se solucionaba. Y efectivamente, funcionó, tras activar el flag "mad" y recompilar, el amaroK empezó a reproducir los podcasts de manera normal.

* Aplicaciones GTK "feas"
Esta es más fácil. Usando KDE algunas aplicaciones simplemente parecen feas. Esto es porque usan la librería GTK en lugar de QT, la nativa de KDE. Instalando (emergiendo) el paquete "gtk-engines-qt" todo solucionado. Aparece un menu en el centro de control, bajo "Aspecto y Temas" y desde ahí se puede configurar el aspecto que se quiera.

* Escritorios múltiples con Compiz-Fusion
El problema es que KDE trae por defecto 4 "escritorios virtuales". Cuando se instala compiz, el famoso cubo genera 4 "viewports", es decir, las 4 caras del cubo. El problema es que uno no se entiende con el otro y en el paginador de escritorios aparecen 4x4=16 esritorios! Por supuesto, solo 4 son reales y si se hace click en el escritorio 5, se muestra el 1. Esto tiene fácil solucion y es ajustar los escritorios virtuales a 1 y de esta manera solo apareceran los 4 "viewports" en el paginador. Hasta ahí todo bien, pero resulta que en cuanto se cierra la sesión y se inicia de nuevo, vuelven a aparecer los 16 escritorios porque por alguna razón, KDE no recuerda el cambio de 4 escritorios virtuales a 1 (o de 4 a 17, simplemente lo vuelve a poner a 4). La solución a esto la encontré por casualidad trasteando con el compiz, y resulta que lo que hay que hacer es abrir una consola, matar a compiz, ejecutar kwin (el gestor predeterminado), ajustar los escritorios virtuales a 1 y reiniciar la sesión. Supongo que también funcionaría si se ajusta antes de instalar compiz, lo que sería más elegante.

* KNetworkManager no se inicia automáticamente
En lugar de los net.ethX clásicos de gentoo me dio por instalar el NetworkManager. Y el invento funciona medianamente bien pero resulta que la interfaz de KDE, el KNM, ignora la opción de "Iniciar KNetworkManager automáticamente al ingresar en el sistema". La solución la leí en un foro de fedora, creo recordar y consiste en copiar el archivo ".desktop" del KNM a la carpeta /usr/share/autostart. El archivo en sí se puede sacar del menú del sistema, arrastrandolo y creando una copia.


Bueno, por hoy es suficiente, otro día más.

Tuesday, October 16, 2007

openSUSE 10.3 + Compiz-Fusion

Con tanto trajín de distribuciones, cada una instalando su propio gestor de arranque, al final se le queda a uno el MBR hecho un desastre. Y mas cuando alguna distribucion lo que hace es copiar el menú existente y encadenarlo al que instala ella misma. Es decir, uno arrranca el PC tras instalar por ejemplo, SuSE, y aparece un menu de arranque. En ese menu se puede seleccionar entre arrancar SuSE, Pequesuave Ventanas o las instalaciones anteriores de Linux. Pues cuando se selecciona la instalacion anterior, en lugar de arrancar el sistema, nos lleva al menu original de esa instalación.

El caso es que arranqué SuSE para arreglar el desastre y de paso instalar ese gestor de arranque tan bonito que trae (gfxboot se llama el invento, y es un parche al grub desarrollado precisamente por la gente de SuSE).
Ya que estaba, y recordando la instalación del qemu, decidí probar suerte con el compiz-fusion. Compiz viene instalado por defecto y sólo hace falta activarlo con un par de clicks, pero no hay nada como un estar a la última. Y nueva sorpresa: sólo hace falta instalar el "opensuse-xgl-settings" desde el YaST y luego dentro del configurador, darle al botón "Instalar", luego a "Configurar" y luego a "Activar". Reinicio y todo listo. Sin un solo comando, ni consola, ni nada. Esto sí que es un sistema "user-friendly".

Ojo, no digo que yo no me lo pase bien toqueteando todo lo que puedo con el consola con gentoo, lo que pasa es que no se puede predicar a los cuatro vientos lo facil que es un sistema y luego para cualquier cosa que no sea navegar por internet, tener que estar haciendo sudo apt-get install, editando xorg.conf's, creando scripts y demás historias...

Para terminar, un par de screenshots.

Escritorio por defecto:


Compiz-Fusion:



En fin, no se de donde han salido todos los fans de Ubuntu, pero para instalar Compiz-Fusion hay que hacer casi el mismo trabajo que para gentoo... ¿eso es ser facil / para principiantes? A ver si un día de estos saco tiempo y hago una pequeña comparativa entre todas las distros que he tocado la últma semana.

Linux para... ¿seres humanos?

Tras usar Windows durante un tiempo, uno se hace a la idea de que cada X tiempo toca formatear. Eso, y que de manera casi inevitable hay que instalarse un antivirus, antispyware, bla, bla, bla... Bueno, yo soy un temerario y a parte de usar WEP en la wifi de mi casa jamás en 9 años que llevo usando un PC he tocado un antivirus. Eso de tener un programa mirando todo lo que haces, lo que te bajas, lo que envías por msn a amigos incautos y tocando las narices en general, no me hace mucha gracia. Para programas inútiles que consuman recursos prefiero el compiz, que al menos da una alegría a la vista, jeje. Y por cierto, en estos 9 años: 0 infecciones por virus para el menda. Del blaster me libré por conectarme por router y de lo demás, por tener dos dedos de frente al navegar por internet. En realidad no hay antivirus que proteja al usuario de su propia estupidez así que toda el concepto de "antivirus" carece un poco de sentido....

Volviendo al tema de los formateos periódicos, cuando se vuelven necesarios cada 3 meses hasta el más inexperto se cansa y pide ayuda a su amigo informático. Que por cierto, esto de "el amigo informático" ya lo trataré en otros posts, porque tiene tela el asunto y ya me he desviado bastante. El caso es que uno analiza las necesidades del usuario y le dice que para navegar, msn y ofimática cualquier distibución de Linux es más que suficiente. Pero claro, tiene que ser un Linux "fácil" y aquí empiezan los problemas.

El primero que viene a la mente es el tan de moda Ubuntu, pero a parte de parecerme bastatne feo (cosa solucionable), para hacer cualquier cosa hay que andar abriendo consolas y haciendo sudos. Si eso es un sistema para novatos que baje dios y lo vea.

Luego uno piensa en los "clásicos". Aún recuerdo mi primer linux, aquel Mandrake 7.2 que venía con un revista e instalé en el PIII450, 256Mb, 10Gb y Voodoo3 de la familia. Ya arranqué un PCLinuxOS (los desarrolladores son ex-Mandrake) hace unas semanas y me pareció una gran distro, así que la opción lógica fue la nueva Mandriva 2008.0 Free, en teoría la versión oficial de la saga. La verdad es que me decepcionó un poco al no traer driviers para la ipw3945 pero el centro de control no estaba nada mal. Aún asi la falta de drivers "out-of-the-box" me pareció un fallo muy grave para una distribución que pretende ser fácil.

Hace unos meses había grabado un DVD con la openSUSE 10.2 y no me convenció demasiado, al igual que la 9.algo un tiempo atrás, pero ya que había salido hace poco la 10.3 decidí probarla. Y solo me queda decir: ¡wow! Vaya mejora en apenas unos meses. Mientras la 10.2 no reconocía ni la pantalla 1280x800 del portatil, la 10.3 directamente arrancó con un precioso splashboot a pantalla completa. Impresionante. Y el escritorio no es para menos. Estuve unas horas trasteando con el YaST y la verdad es que parece que no hace falta tocar la consola ni un solo momento para configurar todo como se quiere. Incluso instalé el qemu a golpe de ratón sin ningún problema. Me ha dejado tan buen sabor de boca que en cuanto termine de "tunear" el gentoo del portátil (con, por ejemplo, el gfxboot de SuSE) sustituiré el Debian 4.0 del PC de escritorio por un flamante openSUSE 10.3. Y eso, tras... ¿5? años usando Debian, son palabras mayores.

Eso sí, del servidor/router el único que puede sustituir a mi querido Debian es ese OpenBSD que ando probando y no tiene tan mala pinta como creía. Pero los experimentos, con gaseosa; así que de momento, y por muchos meses, seguirá habiendo un Debian en mi casa :)

PD: al principio he hablado de "Windows". Tras las últimas clases de "Traducción de textos informáticos" en la facultad no se si esto es correcto. Después algunas barbaridades de días pasados, esta mañana me enteré de que "phishing" es totalmente incorrecto y hay que sustituirlo directamente por la palabra "estafa". Vamos, que si te timan al comprar una casa, te han hecho phishing, así de repente. Y todo esto en un artículo que trataba de explicar qué es el phishing.... ¡perdon! qué es "la estafa". Así que creo que en honor a mi sabia profesora de inglés debería empezar a hablar de Pequesuave Ventanas XP, no vaya a ser que me suspenda a final de cuatrimestre...

Wednesday, October 10, 2007

(In)seguridad wireless II

Con un par de meses de retraso me entero que un grupo de alemanes han terminado de romper el WEP. Si bien ya era conocido que con unos cientos de miles de tramas y menos de una hora de proceso se podía sacar una clave de 128bits, el nuevo método deja esos logros a la altura del betún.

A grandes rasgos, se aprovecha de las tramas ARP para obtener cadenas de 16 bytes de datos pseudoaleatorios del RC4. Esto es gracias a que los 8 bytes de LLC y los 8 de la cabecera ARP son totalmente constantes y conocidos, tanto para la petición como para la respuesta. Así que simplemente se hace un XOR con los contenidos cifrados de la trama ARP y se obtiene el flujo RC4 original. Las propias tramas ARP se distinguen por su longitud. Repitiéndolo (muchas) veces se obtiene la cantidad necesaria de tramas cifradas con distintos IV's para efectuar un ataque estadístico y así recuperar la clave WEP de la wifi.

Ahora los números. Si antes hacían falta cerca de medio millón de tramas (mas bien de IV's) para
poder empezar el análisis con esperanza. Ahora con 40mil (tramas) nos da una esperanza del 50% de encontrar la clave. Para orientarnos, con un AP 11g eso son unos 50 segundos de inyección. Y si antes hacía falta media hora larga para encontrar la clave a partir de los IV's capturados, con el método estadístico basado en ARP se tarda.... ¡3 segundos! Resultado: crackeo (perdón, "recuperación") de claves en menos de un minuto con posibilidades de éxito y en 2 minutos con seguridad de éxito. Para más detalles técnicos, consultar el paper de los autores.

Para llevarlo a la práctica, basta con:
- Tener un punto de acceso con WEP. No, no podeis hacerlo con el del vecino, ¡eso está prohibido!
- Una tarjeta que soporte inyección
- Una versión medianamente reciente del aircrack.
- Capturar paquetes enteros en lugar de sólo IV's
- Ejecutar el aircrack-ng con la opción "-z" para que haga el análisis PTW

Mañana lo probaré con alguna clave aleatoria en un AP dedicado, a ver que tiempo consigo :D

Parece mentira que aún tras leer todas estas maravillas siga usando WEP en casa. Todo por no dedicar 3 minutos a configurar wpa_supplicant. Eso sí, tengo el (leve) atenuante de filtrado mac, iptables tocapelotas y sin servidor DHCP. No sirve de gran cosa pero al menos entorpece a posibles vecinos cotillas. Si alguien es capaz de romper la clave, spoofear su MAC y adivinar cual es el rango de IP's válido así como la IP de gateway, como premio puede usar mi ancho de banda, o lo que quede de él. Eso o tener un usuario de FON, pero eso es otra historia...

Wednesday, October 3, 2007

(In)seguridad wireless

El día 28 de septiembre dejé de trabajar como becario de IT en una empresa de ingeniería y como regalo de despedida recibí un PSP "Slim & Lite". Una monada el bicho por cierto. Como no sabían mis gustos en cuanto a juegos en lugar de un UMD recibí un montón de complementos: cables, protectores para la pantalla, etc.

El caso es que volvía a casa en bus y tras trastear un buen rato con las configuraciones de todo el menú me dio por mirar la wifi. La consola tiene soporte para 802.11b (la wifi de 11Mbps, vamos). Siendo como es, un aparato de unos 20cm en su dimensión más amplia no creo que tenga una antena demasiado potente. Aún así, en los 5km que estuve trasteando en el bus antes de llegar a casa encontró nada menos que 67 redes distintas. Y eso que gran parte de esos 5km era una carretera con chalets a los lados...

Y el dato curioso, o quizá preocupante. De esas 67 redes, 10 estaban totalmente sin proteger, algunas incluso con ssid's de "default" o "Wireless". Vamos, si no han cambiado ni la ssid del punto de acceso la probabilidad de entrar al router con admin/admin son más bien altas. Y las consecuencias de eso dependen únicamente de la mala leche del "invitado".
Pero hay más. De las 57 restantes, 50 tenían cifrado WEP. Sí sí, WEP, ese que se rompe en unos minutos con cualquier herramienta de "auditoría de redes". Sólo 7 de las 67 redes tenían cifrado WPA, poco más del 10%. ¿Tan difícil es? ¿No viene en los propios menús de los routers inalámbricos "Cuidado: WEP malo", "Use WPA por su seguridad" y similares? No es que el vecino de al lado tenga que saber de IV's ni inyección de tramas, pero lo mismo le interesa saber que cualquier fulano que pase por la calle tiene acceso a sus carpetas compartidas en Windows, ¿no?

No es que un viajecillo en autobús con una PSP en la mano sea un estudio serio, pero es como para plantearse si a día de hoy realmente vale la pena pagar los 30 y pico euros al mes en ADSL si invirtiéndolos en una buena antena wifi se puede localizar por la ventana decenas de vecinos deseosos de compartir sus conexiones con el mundo...

Un saludo y hasta la próxima!

PD: para que todo esto sea más gracioso, yo mismo uso WEP en casa. Pero shhhhhh......