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

17/03/2007 - 17:47 por Amaury B. F. | Informe spam
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/serialNumber000019L/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.

http://www.kriptopolis.org/autentic...-gnu-linux
 

Leer las respuestas

#1 AntonioV
16/05/2007 - 18:28 | Informe spam
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)

On 17 mar, 18:47, "Amaury B. F." wrote:
En un artículo anterior explicábamos aproximadamente cómo instalar y
configurar el nuevoDNIelectró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 losdatosque 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 elDNIelectró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/serialNumber000019L/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 deacceso. 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 delDNIelectró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 paraaccesoa 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.

http://www.kriptopolis.org/autentic...tronico...

Preguntas similares