Estas aquiContenido / Autenticación (login) con el DNI electrónico en Debian Etch GNU/Linux

Autenticación (login) con el DNI electrónico en Debian Etch GNU/Linux


PorEl Nigromante- Publicado el16 Marzo 2007

En un artículo anterior explicábamos aproximadamente cómo instalar y configurar el nuevo DNI electrónico (DNIe) en nuestro sistema Debian (o basado en Debian: Ubuntu y derivados).

Aparte del habitual uso para identificarse en sitios web con el navegador, el DNIe puede usarse para más cosas, por ejemplo, firmar ficheros, o autenticarse (hacer "login") en el PC. En este artículo describo cómo implementar esta última aplicación...

Para autenticarnos con el DNIe en Linux utilizaremos un módulo PAM ("Pluggable Authentication Module") desarrollado también por el grupo OpenSC. El proyecto en cuestión al que nos referimos se llama Pam PKCS#11.

Seguidamente explicaré el proceso para utilizar esta herramienta, paso por paso.

1. ¿Qué son los módulos PAM?

En las distribuciones modernas de Linux el mecanismo de autenticación de los usuarios es un servicio modular, proporcionado a las aplicaciones por el propio sistema.

Por ejemplo, cuando una aplicación como "login" requiere la autenticación de un usuario, no la realiza ella misma sino que "solicita" al sistema que autentique al usuario. La parte del sistema que realiza la autenticación es una pila de módulos PAM, que se van ejecutando encadenadamente hasta devolver el resultado del proceso (autenticación OK o incorrecta) a la aplicación. Una vez que la aplicación obtiene este resultado, puede seguir realizando acciones (mostrar un mensaje de rechazo o ejecutar los scripts de arranque del usuario autenticado, por ejemplo).

Cada módulo PAM de la pila puede realizar distintas funciones, como autenticación propiamente dicha, gestión de contraseñas, gestión de la sesión...

Asimismo, cada aplicación que utiliza PAM tiene su configuración personalizada (incluyendo qué modulos y en qué orden se ejecutarán) en el fichero correspondiente del directorio /etc/pam.d/.

Lo interesante de esta arquitectura es que para cambiar el esquema de autenticación de múltiples aplicaciones basta con insertar un módulo adicional, o cambiar un módulo existente por uno nuevo.

Para más información, se puede consultar la página principal de PAM, aquí.

2. ¿Qué hace pam_pkcs11?

Precisamente, lo que permite el módulo pam_pkcs11 es introducir un paso de autenticación adicional (o alternativo), en el que se accede a los certificados de nuestra tarjeta (DNIe) y después de la pertinente verificación devuelve el correspondiente resultado indicando si la autenticación fue correcta o no.

En concreto, este módulo nos pedirá el PIN del DNIe, si es correcto accederá a los certificados del mismo y, comparando los datos que contienen con un "mapeo" configurado previamente en el sistema, determinará quién es el usuario (y la cuenta correspondiente).

El "mapeo" consiste simplemente en un fichero que contiene, para cada usuario, una línea del tipo:

dato del certificado -> usuario

El dato del certificado dependerá del "mapeador" que utilicemos. Para el mapeador más simple, por ejemplo, el dato que se utiliza es el DN del usuario contenido en el certificado.

Para más información, se puede consultar el manual de pam_pkcs11.

3. Instalando pam_pkcs11

(Asumimos que ya tenemos correctamente configurado el
DNI electrónico, de lo contrario ver el artículo citado al principio.)

Este módulo puede descargarse en forma de archivo fuente (.tar.gz) que hay que compilar...

El proceso sería tedioso de explicar aquí, así que un buen amigo mío se ha tomado la molestia de crear un paquete Debian para instalarlo directamente...

Desde aquí podemos descargarnos un comprimido .tar.gz que contiene tanto el paquete fuente Debian, como el paquete binario ya compilado (el que nos interesa): libpam-pkcs11_0.5.3-1_i386.deb

Para instalarlo, escribimos desde una consola:

sudo dpkg -i libpam-pkcs11_0.5.3-1_i386.deb

Esto instalará el paquete y creará un directorio de configuración en /etc/pam_pkcs11. (Si no tenemos instalado algún paquete requerido, dpkg se "quejará": instalaremos el paquete adicional necesario, y volveremos a intentar la instalación anterior).

4. Configurando pam_pkcs11

Podemos dejar la configuración (fichero /etc/pam_pkcs11/pam_pkcs11.conf) por defecto intacta. De esta forma utilizaremos el "subject mapper", que nos mapea el DN de un certificado del DNIe a una cuenta de usuario.

A continuación descargaremos todos los certificados de las Autoridades de Certificación del DNIe, en el directorio /etc/pam_pkcs11/cacerts.

Los certificados pueden obtenerse de los enlaces de esta página (están comprimidos, los guardamos descomprimidos: tienen extensión .crt).

En ese directorio, ejecutamos la herramienta "make_hash_link.sh" que crea unos enlaces (utilizados por nuestro módulo) a dichos certificados:

cd /etc/pam_pkcs11/cacerts
sudo make_hash_link.sh
cd ..

Seguidamente, conectaremos el lector, introduciremos el DNIe, y ejecutaremos el comando siguiente:

pkcs11_inspect

Esta utilidad nos pedirá el PIN del DNIe, y mostrará la información que necesitamos para crear el archivo de mapeo: los DNs de los dos certificados del DNIe (el de autenticación y el de firma).

Creamos el fichero de texto /etc/pam_pkcs11/subject_mapping:

sudo gedit /etc/pam_pkcs11/subject_mapping

(si usamos el editor de texto de gnome.)

Y añadimos una línea con uno de los DNs obtenidos con la utilidad anterior, asociándolo a nuestra cuenta de usuario. Por ejemplo, si nuestra cuenta es "fulanito" escribiremos algo así:

/C=ES/serialNumber=00000019L/SN=PEREZ/GN=FULANITO/CN=PEREZ SANCHEZ, FULANITO (AUTENTICACI\xC3\x93N) -> fulanito

(Es una sola línea, aunque pueda aparecer partida aquí.)

Con todo esto ya estaría configurado el módulo.

5. Cambiando la configuración PAM de la aplicación

El último paso que nos queda es cambiar la configuración PAM de la aplicación de control de acceso. En nuestro caso, cambiaremos la configuración de "gdm" (el gestor de entrada de gnome):

(Para la aplicación "login" propiamente dicha, de la consola, el proceso es equivalente.)

Editamos el archivo /etc/pam.d/gdm, y justo encima de la línea:

@include common-auth

Introducimos esta otra (incluimos un comentario si queremos):

# Autenticación PKCS#11 con DNIe
auth sufficient pam_pkcs11.so

De esta forma, añadimos un mecanismo de autenticación adicional (y opcional) con el DNIe.

Con "sufficient" indicamos que es una autenticación opcional: si la autenticación con DNIe falla, permitimos de momento introducir la contraseña habitual. Si funciona, no se preguntará la contraseña habitual y nos "loguearemos" directamente. También la podemos poner como "required".

6. Probando la autenticación con el DNIe

Si queremos, podemos reiniciar el sistema.

Si utilizamos gnome (con gdm) se presentará la pantalla de bienvenida habitual.

Conectaremos el lector e introduciremos el DNIe.

En el campo de nombre de usuario de gdm pulsaremos ENTER directamente (el módulo pam detectará automáticamente nuestro usuario, como veremos).

A continuación, gdm nos pedirá el PIN del DNI electrónico. Lo introduciremos...

Si el PIN era correcto, y estamos "mapeados", gdm iniciará el login con nuestra cuenta... y fin de la historia: habremos accedido a nuestro entorno de escritorio habitual.

7. Observaciones finales

Aparte del "mapeador" que hemos utilizado, este módulo PAM contiene otros mapeadores más avanzados (incluido uno para acceso a ldap). Es recomendable consultar la documentación.

Hay que hacer notar que la versión actual de esta herramienta tal vez no esté demasiado madura. Asimismo, los mecanismos de comprobación que se utilizan puede que no estén a la altura de unas exigencias de seguridad demasiado altas.

Sin embargo, aun como prueba de concepto únicamente, el proceso mostrado en este artículo resulta interesante. Puede tomarse como referencia para implementar mecanismos de autenticación más avanzados, usando PAM.

Espero que este artículo haya sido de utilidad.

Etiquetas

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).

¿Por qué no usar directamente el módulo que aparece en el repositorio de debian-Etch : libpam-p11? ¿No implementa todo lo necesario para llevar a cabo la tarea?

Es lo primero que intenté, sobre todo porque no me gusta instalar paquetes no oficiales.

Sin embargo, libpam-p11 sólo proporciona 2 mecanismos de "mapeo":

- El primero requiere descargarse los certificados que vamos a utilizar, desde la tarjeta (en nuestro caso el DNIe). Sin embargo, con las herramientas disponibles en Debian - concretamente "pkcs15-tool" - yo no he podido. El problema es que los certificados están protegidos, y esa utilidad además parece que no te pide el PIN.

- El segundo requiere generar una clave con la utilidad ssh-keygen, pero lamentablemente parece que la versión de openssh en Debian no está compilada con soporte para tarjetas inteligentes.

En cualquier caso, estos modos de operación también están incluidos en el libpam_pkcs11.

Aunque también puede ocurrir que yo sea un poco inútil y existan otras maneras de hacer las cosas...

Saludos.

Agradecido una vez más por simplificarnos el trabajo a la hora de hacer uso de nuestros gnu/linux...

Un articulo im-pre-sio-nante!!

vGalcet_

La empresa SmartAccess (www.smartaccess.es) comercializa un producto que permite utilizar de forma parecedia el DNIe como mecanismo de autenticación en Windows (incluido Vista).

He seguido tus instrucciones y todo va de maravilla en Ubuntu 7.04. Sólo un par de actualizaciones en librerías. Ningún problema.

Gracias, Nigromante.

SmartAccess (y posiblemente otros) comercializan algo 'parecido'. Sólo una 'pequeña' diferencia. Necesitas un Active Directory (R) corriendo sobre alguna de las versiones "server" de Windows... y prepara la cartera...

SmartAccess comercializa un producto para servidores que es el SmartID Corporate que funciona como tu bien dices, hace falta AD, pero tiene otro que es SmartID Card&Go con el que no hace falta ningun tipo de directorio para funcionar. Puede funcionar bien en maquinas Stand Alone o en AD.

Hola,

Tengo una red con Citrix y para autentificar a los usuarios lo hace contra un linux (Fedora) con openldap, sería posible activar la autentificacion con el DNIe?, como se vincularia al directorio ldap?

Un saludo

Yo estoy igual que tu.

Estoy intentando implementar pkcs11 en Openldap y no tengo pantalones :S

Hola, muchas gracias por el tutorial.

Tengo una duda, el nombre del usuario (login) debería ser el mismo nombre que tenga el certificado, ¿correcto?, en el ejemplo hulanito debe ser el nombre que viene en el certificado como el usuario del sistema.

Mi duda/problema es que mi nombre es compuesto y no puedo crear un login con un espacio en medio. ¿Cómo puedo hacerlo?. Un Saludo y muchas gracias

Publicidad

Patrocinadores

Kriptópolis alojado en
Zilos-Veloxia Network

Tu mejor defensa:
Bufet Almeida

Publicidad