viernes, 2 de septiembre de 2011

Como usar la usb para iniciar sesion en ubuntu

Como ya es costumbre mía estaba leyendo en internet sobre consejos de seguridad y encontré una lista de 20 consejos para mejorar la seguridad del openssh en un servidor, el consejo que más me llamó la atención fue habilitar el "two-factor authentication", que es básicamente crear una llave RSA y mover la llave privada a un usb, entonces cuando llamas al comando ssh con la opción -i para decirle cual llave privada usar. Después de pensarlo un rato me pregunté ¿podré configurar esto del two-factor authentication en mi Ubuntu de uso personal (en este caso mi laptop)? Investigué un poco y para mi sorpresa no solo es posible sino bastante fácil, así que aquí dejo los pasos y las referencias:

Pasos a seguir:
1. Instalamos los programas necesarios:
sudo apt-get install pamusb-tools libpam-usb

2. Conectamos una USB a la computadora

3. Agregamos el USB a la configuración del PAM:

$ sudo pamusb-conf --verbose --add-device=my-usb
Inspecting /org/freedesktop/Hal/devices/storage_serial_*******************************
 Invalid: Device does not contain any volume
Inspecting /org/freedesktop/Hal/devices/storage_serial_SanDisk_Cruzer_Blade_*************************
 Valid
Please select the device you wish to add.
* Using "SanDisk Cruzer Blade (*****************************************)" (only option)

Which volume would you like to use for storing data ?
* Using "/dev/sdb1 (UUID: AAAA-9999)" (only option)

Name  : my-usb
Vendor  : SanDisk
Model  : Cruzer Blade
Serial  : *****************************************
UUID  : AAAA-9999

Save to /etc/pamusb.conf ?
[Y/n] y
Done.

4. Agregamos el usuario que podrá usar el usb (my-usb) para ingresar.

$ sudo pamusb-conf --add-user myuser --verbose
Which device would you like to use for authentication ?
* Using "my-usb" (only option)

User  : myuser
Device  : my-usb

Save to /etc/pamusb.conf ?
[Y/n] y
Done.

5. Configuramos el sistema para que permita el inicio de sesión usando el modulo pam_usb:
Tenemos que editar el archivo common-auth

sudo nano /etc/pam.d/common-auth 
Buscamos la línea que dice auth required pam_unix.so nullok_secure y agregamos la siguiente línea: auth sufficient pam_usb.so. Aquí dejo un ejemplo de como quedó mi archivo /etc/pam.d/common-auth
auth    sufficient      pam_usb.so
auth    required        pam_unix.so nullok_secure
Nota: realmente importante, por favor tener mucho cuidado al editar este archivo pues si lo dejan mal terminaran con un sistema al que no podrá ingresar, el post original recomiendan dejar una consola con permisos de administrador y el archivo abierto pues en caso de que algo salga mal puedan arreglarlo.

Probar que funciona: Al momento de redactar este tutorial no he verificado cerrar mi sesión e ingresar otra vez usando la usb, pero si ejecute la siguiente prueba indicada en el post original y me funcionó bien:
$ su myuser
* pam_usb v0.4.2
* Authentication request for user "myuser" (su)
* Device "my-usb" is connected (good).
* Performing one time pad verification...
* Regenerating new pads...
* Access granted.


Alternativa, Requerir tanto el usb como una contraseña: De acuerdo con el post original si deseamos que ambos, la contraseña y el usb sean requeridos para ingresar debemos modificar el archivo /ect/pam.d/common-auth para que quede de la siguiente forma:
auth    required      pam_usb.so
auth    required        pam_unix.so nullok_secure
Y al probarlo de la misma forma antes mencionada debemos ver algo como lo siguiente:
$ su ubuntu-user
* pam_usb v0.4.2
* Authentication request for user "ubuntu-user" (su)
* Device "my-usb" is connected (good).
* Performing one time pad verification...
* Access granted.
Password:
Donde como pueden ver se valida la presencia del usb y luego se solicita la contraseña.

Alternativa, Bloquear/Desbloquear el equipo cuando se remueve/reconecta la usb:  Modificamos el archivo /etc/pamusb.conf, específicamente la sección user, en dicha sección debe estar ya creada y con una entrada indicando el dispositivo que el usuario requiere para ingresar, solo debemos agrergar dos entradas más de modo que quede más o menos como el siguiente ejemplo:
 
           
                  my-usb
           
          gnome-screensaver-command -l 
          gnome-screensaver-command -d 
 
Nota: si no usas gnome reemplaza el comando gnome-screensaver-command por algo que si te funcione.

Conclusión Esta forma de ingresar me trae algunas ideas sobre como se podría en una empresa o institución eliminar la necesidad de usar contraseñas o agregar una capa más de seguridad. Se imaginan llegando a su puesto de trabajo y colocando una usb en la pc y luego empezar a trabajar sin tener que hacer más nada. Hasta la próxima. Referencias: http://askubuntu.com/questions/10524/usb-drive-login-token-system http://linuxconfig.org/linux-authentication-login-with-usb-device

Actualización 3-sep-2011:  después de salir y volver a ingresar pude comprobar que la validación por usb funciona bien en el inicio de sesión.

Actualización 7-ene-2012: tristemente el proyecto pamusb parece estar muerto, incluso ya eliminaron el paquete de Debían y  Ubuntu :(