MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

pam-usb con soporte para TCOS

pam-usb es un módulo de autenticación PAM que, usando una memoria USB, permite hacer login (su, gksu, GDM, KDM, etc...) mediante la verificación del modelo, vendedor fabricante, número de serie y una pareja de claves aleatorias (llamadas PADS) una situada en la memoria USB y otra en la $HOME del usuario.

El módulo funciona muy bien salvo que sólo permite el acceso local en la máquina y he estado pensando que ya que en TCOS tenemos varias formas de llegar a los dispositivos de almacenamiento podemos usar pam-usb para autenticar en remoto.

Como primer acercamiento he estado revisando el código (bastante simple: pam +  dbus + hal) y como en TCOS no hay dbus ni hal en remoto he portado parte de él a llamadas XMLRPC y autenticación mediante la cookie de Xorg.

Funcionamiento

Cuando GDM (o el gestor que sea) recibe un usuario llama a PAM para ver si puede autenticarlo antes de pedirle la contraseña, pam-usb toma el control y comprueba que es una petición remota (la variable $DISPLAY tiene este aspecto: xx.xx.xx.xx:0) entonces dispara mi parte «pusb_remote_auth»

  1. hace una primera llamada XMLRPC para inyectar la cookie de las X como propiedad de la ventana root mediante xprop
  2. GDM sabe el usuario y antes de llegar a mi parte sabe si tiene un dispositivo (Vendedor Fabricante, modelo , número de serie, UUID de la partición) con el UUID hacemos una petición de montaje en el terminal: «mount /dev/disk/by-uuid/$UUID /mnt/$UUID»
  3. Leemos (si existe) el directorio .pamusb del dispositivo y devolvemos en base64 el contenido (clave aleatoria binaria) por XMLRPC que se comparará al PAD que tiene el usuario en su $HOME/.pamusb (en este punto pam-usb original hace la comparación de 2 archivos, yo sólo tengo uno y el base64 de otro por lo que tendré que crear un temporal o hacer la comparación de base64 del remoto y local)
  4. Una vez comparados actualizamos los PAD y mandamos al terminal el base64 del nuevo PAD para que lo guarde en el dispositivo y lo desmonte

Para que todo esto funcione, lógicamente, hay que haber dado de alta un usuario en la configuración /etc/pamusb.conf, para ello hay una herramienta: pamusb-conf (python+dbus+hal) que detecta el dispositivo USB y edita el XML para añadir la pareja dispositivo~usuario, esta herramienta sólo funciona en local y también habrá que hackearla o incluso hacer un frontend gráfico.

De momento no he subido nada al SVN pero supongo que a lo largo de esta semana ya habrá algo de código para ver y probar.

UPDATE: (21:05)

Ya he subido el código al SVN de TCOS [pam-usb-tcos], y de paso he mandado un mail al autor original a ver que le parece la escabechina que he hecho con su aplicación.


Articulos relacionados:

Comentarios

  1. Aloriel Vendor
    08/09/2008 | 16:50

    Fabricante mi querido Mario ;)

    Cuídate.

  2. Minaya Gracias
    08/09/2008 | 20:07

    Andaba detrás de éste tema desde hace meses y tú me lo acabas de poner a huevo.

    Pues eso, muchas gracias Mario.

Comentarios cerrados