¿Cómo utilizo tarjetas inteligentes para autenticación en Ubuntu?

Tras vencer abrumadoramente en las elecciones de 1946, Juan Perón expone
frente al Consejo Superior del Partido Justicialista las necesidades
electorales futuras, y explica cómo emplear las tarjetas inteligentes
SmartCard en Ubuntu.

¡Trabajadores!

¡Una oligarquía sin Patria ni Bandera, encaramada en un ataque contumaz,
osó por insultar a la República, sometiendo a los descamisados a un
oprobio sin parangón en la historia!

Sin embargo, somos gratificados testigos de la Unión del Pueblo, en
donde una sola clase de hombres, los que trabajan, dan todo en pos de la
Comunidad. Esto nos ha hecho torcer el brazo a nuestro enemigo, pero no
podemos sostener todo en declamaciones, sino que ha de cimentarse en
organizaciones de toda índole que permitan consolidar los logros y
trazar los objetivos que anhelamos.

Como Conductor, no puedo más que regocijarme frente a la mancomunidad de
los hombres buenos de nuestra Nación. Los trabajadores, que forman la
masa, no son otra cosa que la Columna Vertebral de nuestro Movimiento.
Día a día son más numerosos quienes se afilian al instrumento político
que hemos dado en crear, el Partido Peronista: las banderas de Justicia
Social que hemos enarbolados son señeras del sendero que hemos de
recorrer todos los Argentinos. Bajo su alegre flamear es que
encontrsaremos el destino que la providencia nos depara. Indudablemente
que este partido ha de contar con un registro certificado y alegre,
consumado en forma de una Tarjeta Inteligente y personal expedida en
forma de Carnet a cada uno de nuestro millones de afiliados
encolumnados. En este caso el Justicialismo ha hecho vanguardia, pues se
trata de una tarjeta inteligente PIV capaz de soportar el estándar
FIPS-201.

Estas tarjetas plásticas contienen datos digitales codificados en un
chip accesible por radiofrecuencias. Naturalmente, que pueden comprarse
vírgenes y los proveedores de servicios PIV como nuestro Partido es el
encargado de cargar las credenciales digitales requeridas.

Lamentablemente, de momento el instrumental libre OpenSC de Ubuntu es
capaz de operar con tarjetas en modo "solo lectura", por lo que para
almacenar los certificados en ellas ha de recurrirse a otra metodología
indeseable. Por ejemplo, podríamos utilizar herramental privativo para
Linux, o bien utilizar un emulador o máquina virtual con un deleznable
Window$. No cubriré tales sistemas de grabación aquí, será suficiente
decir tales enjundios almacenarán en la tarjeta un Certificado (CA), un
par de Claves Públicas, y un Número de Identificación Personal PIN de
Usuario y otro PIN de Administrador.

En este caso utilizaré una tarjeta inteligente PIVKey C910 que emula el
Carnet de Afiliado Peronista. Esta tarjeta PIVKey C910 contiene un chip
RFID y es compatible con la norma FIPS201, y implementa la interfaz de
comandos estandarizadas NIST Sp 800-73 part 3.

¿Qué sucede si - por necesidad de un sistema de tales características -
debemos acceder a un sistema remoto o local con GNU con Linux con
nuestra tarjeta inteligente de Afiliado? Ya contamos con nuestra tarjeta
inteligente de afiliado peronista

Pues bien, en el caso habremos de preparar un sistema Ubuntu con tal
alternado criptográfico, si es posible. Os lo explicaré de forma
Justicialista. Como primer medida, hemos de preparar nuestro sistema, y
podremos hacerlo desde la Terminal. Para ello abrimos una con Ctrl+Alt+T
e ingresamos:

sudo apt install libccid pcsc-tools opensc opensc-pkcs11 libpam-pkcs11

Estas librerías son escenciales para operar criptográficamente y leer
las tarjetas, así como para ofrecerenos diferentes condimientaciones de
trabajo, entre ellas inicios de sesión mediante las SmartCards,
elevación de privilegios sólo a través de la SmartCard, etcétera.

Una vez descargada la paquetería, habremos de configurar el lector de
tarjetas inteligentes. En mi caso utilizaré un lector USB de Smart Cards
"Identiv SCR3310v2.0 USB Smart Card Reader", al cual Linux reconoce bajo
el nombre de "SCM Microsystems SCR3310".

Sin colocar tarjeta aún, conectamos el lector de tarjetas en un puerto
USB, y nos aseguramos que nuestro sistema lo reconozca. Para ello en la
terminal ingresamos:

opensc-tool --list-readers

..a lo cual nuestro sistema debería analizar el lector de tarjetas
inteligentes y si el mismo funciona correctamente, devolvernos algo
como:

# Detected readers (pcsc)
Nr.    Card    Features    Name
0    No        SCM Microsystems Inc. SCR 3310 [CCID Interface] (53311646706297) 00 00

Pues bien señores, como tenemos un solo lector de tarjetas, recibe el
número 0. Acto seguido, insertamos la tarjeta en el lector, y revisamos
que la misma sea reconocida, con el siguiente comando:

opensc-tool --reader 0 --name

..y el sistema nos devolverá el nombre de la tarjeta (recordemos que ha
sido creada anteriormente), por ejemplo, podría decir:

PIV-II Peronist Card

Configuración de la pila de autenticación PAM

El módulo pam-plcs11 que hemos instalado le permite a Ubuntu emplear
certificaciones digitales tipo X.509 para autenticar nuestros inicios de
sesión. Para ello el módulo hará uso de la librería abierta
opensc-pkcs11 a fin de acceder a la tarjeta inteligente y a su vez
recibir las credenciales necesarias.

El proceso de inicio de sesión con pam_pkcs11 es el siguiente:

   Ingresamos nuestro login o inicio de sesión
   Ingresamos el PIN.
   Validamos el Certificado.
   Asignamos el Certificado a un Usuario.
   Verificamos que la sesión y el usuario coincidan.

Para hacer realidad efectiva este tren de operaciones criptográficas,
como Conductores del sistema habremos de asegurarnos de:

   Configurar el módulo pam_pkcs11
   Agregar el/los Certificados y CRL(s) en los directorios necesarios
   Configurar la pila PAM para que haga uso del módulo pam_pkcs11
   Agregar el Nombre Común (CN) para el Inicio de Sesión

En primer lugar crearemos el fichero de configuración necesario, con el
siguiente bloque de comandos de organización:

cd /etc/pam_pkcs11 ;
sudo cp /usr/share/doc/libpam-pkcs11/examples /pam_pkcs11.conf.example.gz . ;
sudo gunzip pam_pkcs11.conf.example.gz ;
sudo cp pam_pkcs11.conf.example pam_pkcs11.conf

Dentro de este fichero de configuración /etc/pam_pkcs11/pam_pks11.conf
habremos de revisar las opciones "module", "cert_pòlicy" contenidas en
la cadena "pkcs11_module opensc {}". Debemos asegurarnos que la opción
"module" contenga la ruta absoluta hacia la librería open-pkcs11.so
instalada en nuestro sistema. Asimismo, la opción "cert_policy" debe
incluir a la cadena "oscp" como una de sus políticas de verificación de
certificados.

Por ejemplo,para hacer esto igreesamos en Ubuntu de 64 bits:

sudo nano /etc/pam_pkcs11/pam_pks11.conf

Esto abriá el editor peronista GNU Nano con el contenido del archivo
pam_pks11.conf. Ingresamos Ctrl+w para buscar la cadena "pkcs11_module
opensc {}". La modificamos para que incluye la configuración que os he
nombrado, a fin de que figure de la siguiente manera:

use_pkcs11_module = opensc;
module = /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so;
cert_policy = ca,signature,oscp_on;

Una vez completado este cambio en el editor, presionamos nuevamente
Ctrl+w para busca ahora la cadena "use_mappers", y la modificamos para
que quede así:

use_mappers = pwent;

También encontraremos dentro de este archivo las cadenas ca_dir y
crl_dir, que son las quie definen los directorios o carpetas donde
deseamos almacenar los ficheros que de las Autoridades de Certificación
("CA") y las Listas de Revocacion de Certificado "CRL" respectivamente.
Por ejemplo, podríamos usar los directorios siguientes:

ca_dir=/etc/pam_pkcs11/cacerts
crl_dir=/etc/pam_pkcs11/crls

Guardamos con Ctrl+o y salimos con Ctrl+x.

Ahora bien, el módulo pam_pkcs11 necesita conocer las Autoridades de
Certificación (CAs) a fin de ser capaz de validar el certificado que
estará contenido en la tarjeta. De forma opcional también podrá utilizar
Listas de Revocación de Certificación (CRL) que son opcionales, pero
también pueden usarse para validar el Certificado. En este caso,
utilizaré el servicio del sitio web http://ca.pivkey.com.

Agregamos cualquier CAs y CRLs requeridas en los directorios que
habíamos especificados en las cadenas ca_dir y crl_dir del fichero de
configuración pam_pkcs11.conf. En este caso los revisaremos con:

ls /etc/pam_pkcs11/cacerts

..y el sistema podría devolvernos los archivos que le cargamos:

PIVKeyDeviceCertificateAuthority.crt MenganoSARootCA.crt

ls /etc/pam_pkcs11/crls

pivkeydeviceca.crl menganorootca.crl

Ahora crearemos los enlaces hash usando el programa
pkcs11_make_hash_link. Por ejemplo, podríamos ingresar en la terminal:

cd /etc/pam_pkcs11/cacerts
sudo pkcs11_make_hash_link

..y al listar el contenido con del directorio cacerts con:

ls

..el sistema nos devolvería algo como:

c90bef04.0 PIVKeyDeviceCertificateAuthority.crt
e7d4c577.0 MenganoSARootCA.crt

Lo mismo hacemos con el directorio crls:

cd /etc/pam_pkcs11/crls
sudo pkcs11_make_hash_link

..y al listar con:

ls

..el sistema nos devolvería:

c90bef04.r0 e7d4c577.r0 pivkeydeviceca.crl menganorootca.crl


Configurar la pila PAM de Autenticación

El siguiente paso es integrar el módulo pam_pkcs11 a la pila PAM (la
encargada del conformar el sistema de autenticación cifrada). Existen
varias formas de hacerlo, y la configuración dependerá de la política de
seguridad que tengamos como Conductor del sistema. Os mostraré unos
ejemplos de integración basada en una política permisiva "de Unidad
Básica" y otra política astringente "de Comando Táctico Justicialista".

Loguearse en Escritorio gráfico con GDM3 de Ubuntu usando tarjeta
inteligente En la pila PAM tradicional, se utiliza el método de inicio
de sesión con contraseña, lo cual es sencillo y relativamente inseguro.
En este ejemplo "para unidad básica", podríamos integrar el uso del
módulo pam_pkcs11 a la pila PAM con el objetivo directo de utilizar la
tarjetas inteligentes a fin de loguearnos durante el Inicio de Sesión
gráfico GDM3 de Ubuntu.

Para ello editamos el fichero de configuración del mismo gdm-password e
incluimos el módulo.

Por ejemplo, ingresamos:

sudo nano /etc/pam.d/gdm-password

E incluiremos el módulo pam_pkcs11 a la pila PAM de autenticación del
sistema, agregando el siguiente contenido:

## Agregado peronista de módulo al stack PAM
## para logueo con tarjeta inteligente
auth    requisite   pam_nologin.so
auth    required    pam_succeed_if.so user != root quiet_success
auth    sufficient    pam_pkcs11.so
@include common-auth
auth    optional    @include common-account
..


Iniciar sesión con Tarjeta Inteligente en Ubuntu Server (únicamente
loguearse)

El módulo pam_pkcs11 puede integrarse a la pila PAM de autenticación si
deseqamos usar la tajeta inteligente únicamente para el inicio de sesión
en el servidor, y no para el resto de las acciones. Para ello debemos
editar el archivo login e incluir el módulo pam_pkcs11. Lo haremos
ingresando:

sudo nano /etc/pam.d/login

..se abirá GNU Nano con el fichero login, al cual le incluimos el
siguiente contenido:

## Agregado peronista para loguearse al servidor
## con tarjeta inteligente
# usar soporte pkcs11
auth    sufficient    pam_pkcs11.so
## Fuerza un retraso mínimo en caso de falla (dado en milisegundos).
## Reemplaza la configuración FAIL_DELAY del archivo login.defs).
## Tenga presente que otros módulos podrían requerir un retraso mínimo
## distinto (por ejemplo, para desactivar la existencia de retrasos,
## debería agregar la opción nodelay al archivo pam_unix).
auth    optional    pam_faildelay.so delay=3000000

## Da salida a un fichero de situación /etc/issue antes de cada
## solicitud de inicio de sesión (reemplaza la opción ISSUE_FILE
## del fichero de configuración login.defs). Descomente si lo
## quiere usar.
# auth    required    pam_issue.so issue=/etc/issue
..
..

Una vez pegado este contenido, guardamos los cambios con en el archivo
con Ctrl+o y salimos del editor con Ctrl+x.

Al especificar "sufficient" en la línea de control, ta,bién podríamo
loguearnos usando el siguiente caso de PAM (normalmente contraseña) si
no tuviésemos la tarjeta inteligente encima o si la misma no funcionase.
Por este motivo, la tarjeta opera únicamente como comodidad.

Como os he dicho, esto permitirá un acceso "de Unidad Básica" a la
sesión gráfica, asumiendo una seguridad laxa ya que la tarjeta
inteligente ha sido emitida supuestamente por una autoridad controlada.
Usar tarjeta inteligente en Ubuntu Server para autenticación general
Otra política de seguridad digna del Comando Táctico del Justicialismo
podría requerir insertar la tarjeta de afiliado para dar inicio de
sesión en el servidor y a su vez para cualquier otro servicio que
utilice autenticación PAM. Muchos servicios PAM localizados en el
directorio /etc/pam.d/ hacen uso del fichero common-auth. En esta
política particular podríamos incluir al módulo pam_pkcs11 en este
fichero a fin de activar la autenticación por tarjeta para todos los
servicios que incluyan el uso de autenticación general.

Lo haríamos ingresando en la terminal:

sudo nano /etc/pam.d/common.auth

Y al abrirse el editor, en este caso incluiríamos el siguiente
contenido:

## Solicita el inicio de sesión con tarjeta inteligente
## con el módulo pkcs11
auth    [success=1 default=ignore]    pam_pkcs11.so
## A continuacińo plan B de retorno, por si el módulo gorilea
## y no tiene éxito
auth    requisite    pam_deny.so
## Ceba la pila PAM con un valor de retorno positivo en caso de
## no haber recibido uno ya; esto permite evitar que devuelva un error
## sólo porque ningún otro módulo devolvió código de éxito,
## en el caso que los módulos que figuraban previamente en la pila PAM
## hubiesen quedado como gorilas idiotas colgados de las palmeras.
auth    required    pam_permit.so
## Y hete aquí más módulos por paquetes (el bloque "adicional")
auth    optional    pam_cap.so
# final de la configuración de pam-auth-update.

La configuración anterior del sistema de autenticación obligará a
realizar la autenticación sólo con la tarjeta inteligente. Si el usuario
no puede autenticarse con la tarjeta, entonces el inicio de sesión
entero fracasará. Todos los servicios PAM incluidos en el directorio
/etc/pam.d incluidos en common-auth requerirán también la autenticación
por tarjeta. ¡Atención! Una configuración global como esta requere que
su y sudo también se autentiquen usando la tarjeta magnética.


Agregar la CN

Ahora que pam_pkcs11 y la pila PAM han sido configuradas para el inicio
de sesión con tarjeta inteligente siguiendo la política de seguridad que
hemos anhelado, existirá una acción más que tomar requerida para el uso
completo y final. El mapeador pwent requiere la CN en el certificado que
esté indicado en la línea gecos del usuario del archivo /etc/passwd. La
CN debe ser estraída desde el certificado contenido en la tarjeta
magnética.

Para ello seguimos los siguientes pasos:

Primero, obtenemos el identificador ID del certificado contenido en el
chip de la tarjeta inteligente. Esto lo haremos mediante el comando:

pkcs15-tool --list-certificates

..y nuestro sistema nos devolverá:

Using reader with a card: SCM Microsystems Inc. SCR 3310 [CCID Interface]
(53311646706297) 00 00
X.509 Certificate [Certificate for Card Authentication]
Object Flags: [0x0]
Authority: no
Path:
ID: 04
Encoded serial : 02 0A 5877782D0001000013BF

En este caso inventado, como vemos, el ID es "04".

Segundo, utilizamos este ID como llave para leer la información del
certificado de la tarjeta y la guardamos en un fichero local en la
carpeta temporal del sistema. Lo hacemos con el siguiente comando de
organización:

pkcs15-tool --read-certificate 04 > /tmp/sc-cert.crt

..el sistema devuelve:

Using reader with a card: SCM Microsystems Inc. SCR 3310 [CCID Interface]
(53311646706297) 00 00

También podríamos presentar en pantalla el enigmático contenido en ASCII
del certificado (que como vemos, es imposible de recordar para un ser
humano normal y corriente):

cat /tmp/sc-cert.crt

-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIKWHd4LQABAAATvzANBgkqhkiG9w0BAQsFADBbMRMwEQYK
CZImiZPyLGQBGRYDYGoRiLaS2dE9MiErDaPyLGQBGRYGcGl2a2V5MSwwKgYDVQQD
EyNQSVZLZXkgRViVaPeRoNCaRaJoZmljYXRlIEF1dGhvcml0eTAeFw0xNjEyMDYw
MDE4MTJaFw0yODEyMDMwMDE4MTJaMDIxMDAuBgNVBAMTJ1BJVktleSBCQTM2NkRG
RTM3MjJDNzQ0OU-VDOTA2QjkyNzRDOEJBQzCCASIwDQYJKoZIhvcNAQEBBQADggE
..
..
-----END CERTIFICATE-----

En tercer lugar utilizamos el programa openssl para extraer la CN desde
el fichero temporal almacenado que acabamos de crear.

openssl x509 -noout -subject -in /tmp/sc-cert.crt

..y entonces nuestro sistema devolvería algo como:

subject=CN = PIVKey BA3V6IDVFA37P2E7R4O9N96B9274C8BAC

En este caso la CN es "PIVKey BA3V6IDVFA37P2E7R4O9N96B9274C8BAC".
Sabiendo esto, editamos el archivo /etc/passwd para agregarle esta CN al
campo gecos del usuario al cual pertenece el certificado.

Supongamos que este certificado pertenece al nombre de usuario mengano
en el fichero /etc/passwd. En este caso ingresamos:

sudo nano /etc/passwd

Esto abrirá el editor con el archivo de contraseñas. Debemos buscar la
línea de mengano y editarla para que tenga la siguiente forma:

mengano:x:1001:1001:PIVKey BA3V6IDVFA37P2E7R4O9N96B9274C8BAC:/home/mengano:/bin/bash

Una vez que modifiquemos, guardemos con Ctrl+o y salgamos con Ctrl+x,
nuestro sistema operativo estará ahora lilsto y preparado para hacer un
logueo con tarjeta magnética para el usuario mengano.


Inicio de Sesión SSH usando tarjeta inteligente

Uno de los métodos contemplados en el protocolo Shecure Shell (SSH) es
la autenticación con par de clave privada y pública. Una copia de la
claves pública del usuario queda almacenada en el servidor SSH como
referencia, y se la considerará "autorizada". Quien posea la clave
privada podrá entonces loguearse a través de SSH al servidor.

Las credenciales PIV incluyen un certificado y un par de claves que
pueden ser utilizadas para el acceder mediante SSH. La clave pública
deberá ser extraída de la tarjeta inteligente y copiada en el servidor
SSH. Para ello debemos conectar el lector de tarjetas al cliente SSH (o
sea, nuestra terminal local). En ese momento el cliente SSH usará la
librería opensc-pksc11 para acceder a la tarjeta que insertamos, y
ralizará culaquiera de las operaciones de autenticación criptográfica
que le requiramos. Por lo tanto, no es necesario exponer la clave
privada. Configurar el Inicio de Sesión Secure Shell con Tarjeta
Magnética Tanto el servidor SSH como nuestro cliente SSH deberán ser
configurados para permitir el uso de autenticación por tarjeta
magnética.


Configurar el servidor SSH

El servidor SSH necesitará permitir autenticación de clave pública a
través de su fichero de configuración, y además necesitará la clave
pública del usuario.

Para permitir la autentificación de clave publica, ingresamos:

sudo nano /etc/ssh/sshd_config

En un archivo estándar de Ubuntu 18.04, la opción PubkeyAuthentication
está comentada y por lo tanto, desactivada. Sin embargo, la opción por
defecto está establecida con el valor "yes" ("si"). La descomentaremos
borrando el "#", de modo que quede así:

PubkeyAuthentication yes

Acto seguido, guardamos con Ctrl+o y salimos con Ctrl+x, y reiniciamos
el demonio del servidor SSH con el siguiente comando de organización:

sudo systemctl restart sshd


Copiar la clave pública de un usuario al servidor

Debemos extraer la clave pública del usuario desde la tarjeta para el
cliente SSH. Para ello usamos el programa ssh-keygen para que lea la
clave pública contenido en la tarjeta y lo convierta a un formato
legible para utilizar con Secure Shell:

ssh-keygen -D /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so > tarjeta.pub

Naturalmente, podríamos presentar en pantalla el contenido del
sertificado público tarjeta.pub con el comando cat, de la siguiente
forma:

cat tarjeta.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCuFupFpsXwFPz2INdEgr64tn6yQKT7Osj
cXoAzgJ7JW/qykPxIZxELpJkoHe45s/fiIhkWjgHWhxCWRNSM76wyc2j47egfRdkzl0Kj7U1k-
kpOmGIFU8GA9nxVVikVrAmrI+PzEfRdOmNhPaVqnXUcOJVQh4fe1H5S1mtzV5VzJxKg/61IrBSM-
I5JnWDKNr1dGLIqMqw7A55YMvesKurOUrRe3BBIWYhN9XHIrWVFtMBHmQtW8iphmXUqQLHeH-
Q7LKpvCvE4i5QttlRSITD1Tqefwdeflh6I1P7LAsnMDp42zHZ23O4Ewd7aqNogikox6aNcCGYkU-
PavMBWcge5ykgR

Acto seguido, copiamos esta clave pública al sistema criptográfico del
servidor SSH:

ssh-copy-id -f -i tarjeta.pub ubuntu@servidor

El servidor nos solicitará entonces la contraseña y copiará el
certificado tarjeta.pub dentro de la carpeta necesaria:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “tarjeta.pub”
ubuntu@servidor’s password:

Number of key(s) added: 1

Ahora podremos intentar iniciar sesión remotamente a través de SSH en la
máquina servidor, en el caso del ejemplo con

ssh ubuntu@servidor

..y comprobamos que sólo la clave que deseamos haya sido agregada y
surta efecto. Debemos estar seguros pues una vez configurado todo no
podremos acceder si no tenemos la tarjeta correcta y con un
funcionamiento adecuado.

Configurar el cliente SSH para tarjeta inteligente

Continuando ahora desde el lado del cliente SSH, necesitaremos
identificar nuestro librería proveedora PKCS#11. Existen tres formas de
hacer esto:

La más incómoda es hacerlo directamente antes de conectarnos con el
servidor SSH desde la línea de comandos, (con lo cual podremos hacerlo
desde cualquier computadora). Por ejemplo, con:

ssh -I /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so ubuntu@servidor

Esto permite especificar el uso de tarjeta toda vez que ingresamos este
largo comando, y en el resto de las ocasiones no se usará el acceso por
tarjeta inteligente.

Ahora bien, si deseamos implementar que nuestro cliente de conexión SSH
use tarjeta inteligente, debemos configurar el archivo ssh_config.
Ingresamos:

sudo nano /etc/ssh/ssh_config

..y nos aseguramos que la opción PKCS11Provider quede de la siguiente
manera:

PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

..y guardamos con Ctrl+o y salimos con Ctrl+x.

Esto forzará a todos los usuarios del sistema a utilizar tarjetas
magnéticas para usar SSH desde este cliente.


Configurar el uso de tarjeta inteligente para un Usuario

Para usar la opción de tarjeta inteligente para un sólo usuario del
sistema cliente, deberíamos agregar la opción anterior en el fichero
~/.ssh/config de cada usuario. Para ello se usaría:

nano /home/usuario/.ssh/conf

En este fichero, modificamos la línea correspondiente en el archivoi,
agregándole el ya conocido:

PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

Y guardando con Ctrl+o y saliendo de Nano con Ctrl+x, como en el caso
anterior.

De esta manera, sólo usuario tendría que utilizar la tarjeta inteligente
en el lector para iniciar sesión a través de SSH a un servidor remoto.

En resúmen, las tarjetas inteligentes son convenientes en el sentido que
permiten un almacenamiento de información de identidad a prueba de
agresiones. Pueden utilizarse para autenticar el acceso a sistemas
computados, redes de datos, información subscripta y privilegios. Ubuntu
puede configurarse en tal sentido utilizando módulos PAM ya disponibles
y utilidades libres para dar soporte a los logueos con tarjetas
magnéticas.