MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

El maravilloso mundo de xauth y MIT-MAGIC-COOKIE

Si normalmente leeis este humilde blog, habreis visto que una de las últimas mejoras de TCOS es el acceso a dispositivos extraibles en el terminal mediante una mezcla (bastante rara) de udev, shell scripts, XMLRC y python.

Pues bien tcos-devices, que dista mucho de ser perfecto, tenía algún fallo que he ido descubiendo poco a poco:

  • Memorias USB con más de una partición
  • Memorias sin etiqueta (LABEL)
  • Autenticación
  • Refresco de 1 segundo, mucha carga
Si la memoria USB tiene varias particiones iba montando todas una encima de otra en el mismo punto de montaje, hay muy pocos que usen más de una partición pero si nos vamos a discos duros USB, mp3's, o cámaras de fotos, la cosa no es tan general, así el primer arreglo es mirar si el directorio que vamos a usar existe (mal asunto) y buscar otro acabado en -X (siendo X un número) hasta que no exista (el comportamiento anterior de gnome-volume-manager, por ejemplo, usbdisk-1, usbdisk-2)

No es muy usual que una partición de las memorias USB tenga etiqueta así que el punto de montaje será primero la etiqueta y si no el fabricante (siguiendo la regla anterior)

Para el tema de autenticación es donde más horas de neuronas he metido, no sirve la misma autenticación de tcosmonitor ya que el usuario y contraseña son de administrador de todos los terminales (habría que duplicar por todas las home de usuarios y sería muuuuyyyy inseguro), así que tenía que pensar otro método rápido que comprobase si la persona que intenta usar el disquete está sentado delante del equipo donde ha metido el disquete (esto en PXES es como la casa de «tocameroque», ya que metes el disquete en un terminal y lo puedes leer desde cualquiera, cosas de "sambas" mal configurados...)

Pensando otras formas me acordé que ltspfs usa la cookie de las X, he leido montones de páginas man (xauth, Xserver, mcookie, Xauth, Xau, Xsecurity) y algunas webs [1], y ya lo refinitivo, el código fuente de varios paquetes: libxau6, mtools, floppyd.... Total que al final he decidido usar parte de ltspfsd pero sin sockets, una función simple que reciba una cookie, la guarde en un archivo temporal exporte la variable de entorno XAUTHORITY a ese archivo temporal e intente conectarse mediante XOpenDisplay, si conecta se deja usar USB, disquetes, cdrom, sino se devuelve un error. Al final el código de xauth no ha quedado muy mal... En el terminal y por medio de python se captura la cookie de sessión y se procesa con una nueva clase TcosXauth.py

Al obligar a la autenticación, la cantidad de datos que se envian y reciben aumenta por lo que he tenido que disminuir el intervalo de escaneo del demonio USB, a 3 segundos, que en el peor de los casos ese será el retraso entre enchufar un pendrive y que empiece a detectarlo, en el mejor de los casos puede ser 0.

Resumen de la autenticación:

  1. tcos-devices, por medio de TcosXauth lee la cookie que coincida con su $DISPLAY
  2. Prueba a conectarse con ella con la función TcosXauth::test_auth()
  3. tcosxmlrpc recibe esa cookie y el hostname, crea un archivo .Xauthority temporal e intenta abrir la pantalla
  4. Si falla devuelve error, en caso contrario devuelve OK.
  5. Si falla la xauth tcos-devices se cierra sino empieza a ejecutarse el demonio
  6. Cada 3 segundos (intervalo sujeto a cambios) tcos-devices le pide a tcosxmlrpc un resumen de los eventos USB de udev
  7. tcosxmlrpc lo envía, si está vacío se esperan otros 3 segundos, sino se buscan los eventos programados (básicamente BUS=usb y ACTION=add/remove)
  8. Se lanza el evento que corresponda en un hilo (thread) así si tiene un problema no congela el demonio o no lo cierra.
  9. El evento termina y se guarda en un diccionario el dispositivo y el punto de montaje para cuando se desmonte.
  10. Vuelta a empezar....
De paso con la autenticación por cookies he eliminado el parámetro -ac del arranque de las Xorg por lo que ahora los terminales tienen unas X seguras que sólo pueden usar ellos y el administrador de red mediante tcosxmlrpc. Hoy no hay capturas como no sean de gedit....



Articulos relacionados:

Comentarios

  1. adrian15 Enhorabuena
    28/09/2006 | 18:05

    Sonido en Red. Guardianes. Y gestión de dispositivos en red, incluso USB pendrives!

    Enhorabuena. Dentro de poco el TCOS superará al PXES con creces.

    adrian15

Comentarios cerrados