PROMO DigitalOcean#
Antes de comenzar, quería contarles que hay una promoción en DigitalOcean donde te dan un crédito de USD 200.00 durante 60 días para que puedas probar los servicios que este Proveedor Cloud ofrece. Lo único que tienes que hacer es suscribirte a DigitalOcean con el siguiente botón:
O a través del siguiente enlace: https://bit.ly/digitalocean-itsm
Después de este breve espacio publicitario, vamos manos a la obra!
Introducción#
En esta guia vamos a configurar una llave física de seguridad Yubikey como segundo factor de autenticación (2FA) usando U2F en Fedora con KDE y SDDM. Con KDE como ambiente de escritorio podemos usar Yubikey para asegurar los siguientes tipos de inicio de sesión:
- Pantalla de inicio de sesión (both initial and lock screen)
- sudo
- su
- Ventanas emergentes de autenticación (policykit) cuando se abre una app en la GUI.
Hay varios modelos de Yubikey, la que tengo especificamente es el modelo Yubikey 5 NFC
Necesitaremos para ello digitar nuestra contraseña y además que el dispositivo Yubikey este conectado a nuestro equipo por un puerto USB, y una vez que sea requerido, pulsar el pequeño botón que tiene la llave para poder realizar la acción. Asi que, no podremos iniciar sesión o ejecutar comandos como sudo
sin nuestra llave física Yubikey.
Que no Cubre esta Guia#
No requerimos la llave física para SSH o cualquier forma de autenticación remota, solo aplica para los métodos de inicio de sesión antes mencionados. Además, no reemplaza el uso de autenticación usuario/contraseña. Eventualmente, este post puede ser modificado en un futuro, pero se escapa del propósito de esta guia.
Advertencia#
Seguir los pasos de este post bajo tu propio riesgo! Ni yo ni nada mas somos los responsables de ejecutar cualquiera de los pasos aqui descritos y perder el acceso a tu sistema.
Haz pruebas! Configura una maquina virtual o un computador por separado para confirmar si funciona de manera correcta, incluyendo después de un reinicio.
Recomiendo encarecidamente tener mínimo 2 Yubikey en caso de que una de ellas se rompa o dañe.
No sigas esta guia a menos que entiendas las implicaciones de que es lo que estas haciendo y prevenir que tu sistema quede inaccesible.
Tenga en cuenta que si no tienes encriptado tu disco duro, es posible evitar la necesidad de una Yubikey/2FA. También recomendaría proteger con contraseña su UEFI/BIOS junto con encriptar el disco, pero eso depende de ti.
Requisitos#
Entonces, para proseguir, necesitaríamos lo siguiente:
Una Yubikey (Solo la he probado con el modelo Yubikey 5 NFC pero puede servir con otros modelos)
Un puerto USB libre (Normal o Tipo C según el modelo de la llave)
Fedora con KDE instalado (Fedora 40 es el que tengo en este momento)
Paquetes Necesarios#
Necesitaremos solo dos paquetes a instalar pam-u2f
y pamu2fcfg
:
sudo dnf install pam-u2f pamu2fcfg -y
Configurando las Llaves/Mapeado#
En este paso creamos los archivos que nos permitirán mapear nuestras llaves para la cual se autentiquen. Lo podemos hacer de dos maneras: La primera es tener un único archivo para cada usuario en donde se puedan configurar y cambiar sus propias llaves cuando sea necesario y para que ninguna persona tenga acceso a todas las llaves en un solo lugar, facilitando un poco la configuración posterior de los archivos PAM (Método el cual usaré) La segunda opción es usando un único archivo de mapeo en /etc/u2f_mappings
.
Creando los Archivos de Mapeado de Llaves#
Necesitamos crear 1 archivo para cada usuario y 1 archivo para el usuario root
.
Cada Usuario (con sesión iniciada):
- Creamos la carpeta de configuración de la llave con el siguiente comando:
mkdir ~/.config/Yubico
- Ejecutamos el siguiente comando para guardar la llave:
pamu2fcfg > ~/.config/Yubico/u2f_keys
Cuando la Yubikey parpadee, presionamos el botoncito que tiene incorporado.
Si queremos agregar otra llave como respaldo, por ejemplo, ejecutamos el siguiente comando:
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
Tocamos el botón de la llave de respaldo y luego tocamos el botón de la llave principal para que quede guardada.
Usuario Root:
Nos cambiamos al usuario root con el comando
su -
. Nos pedirá la contraseña de root.Si no estamos en el directorio, nos cambiamos con
cd /root
Creamos la carpeta de configuración de la llave con el siguiente comando:
mkdir -p ~/.config/Yubico
- Ejecutamos el siguiente comando para guardar la llave:
pamu2fcfg > ~/.config/Yubico/u2f_keys
Si queremos agregar otra llave como respaldo, por ejemplo, ejecutamos el siguiente comando:
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
Después de haber completado este procedimiento, cada usuario tendrá el archivo ~/.config/Yubico/u2f_keys
en la carpeta /home/usuario (/root
para el usuario root) que contendrá las llaves para cada llave física Yubikey que hemos configurado.
Probando el Mapeo de Llaves#
Para asegurarnos que hemos seguido los pasos indicados con anterioridad, habilitando 2FA con sudo es la manera mas rápida y segura paa probar.
Siguiendo los pasos que te voy a indicar en el apartado de Sudo 2FA, podemos probar. Asegúrate de mantener la terminal abierta mientras haces los cambios, si la cierras muy probablemente no podrás iniciar sesión como sudo o bloquear el acceso.
Abre una segunda terminal y ejecuta sudo echo test
. Te pedirá la contraseña de sudo y toca el botón de la Yubikey después de ver el texto “test” en la salida. En caso que no pase nada, chequea de nuevo en la primera terminal y luego cierra y abre la segunda e intenta de nuevo.
Si funciona y aun asi no quieres 2FA con sudo, simplemente eliminamos o comentamos la lineas añadidas en el archivo /etc/pam.d/sudo
.
Implementando 2FA#
A partir de aqui es donde habilitamos el uso de la Yubikey como 2FA via U2F para cada inicio de sesión que deseemos. Todos los archivos a modificar se encuentran en /etc/pam.d
y se aplicará a todos los usuarios.
Sudo 2FA#
Para habilitar 2FA usando U2F con la Yubikey para sudo
, hacemos lo siguiente:
- Modificamos el archivo /etc/pam.d/sudo con nuestro editor de confianza:
sudo nano /etc/pam.d/sudo
Cambiamos la linea donde dice
auth include system-auth
paraauth substack system-auth
.Debajo de la linea
auth substack system-auth
agregamos lo siguiente:auth required pam_u2f.so cue
Para guardar los cambios pulsamos
CRTL+S
y para salir del editorCRTL+X
Quedaria más o menos así:
#%PAM-1.0
auth substack system-auth
auth required pam_u2f.so cue
account include system-auth
password include system-auth
session optional pam_keyinit.so revoke
session required pam_limits.so
session include system-auth
Con cue
al final de la linea añadida, nos aseguramos que en el prompt de la terminal nos muestre un mensaje que diga "Please touch the device"
para que toquemos el botoncito de la Yubikey y autorizar el comando indicado.
Asi, cuando usemos sudo
en la terminal, aparte de pedirnos la contraseña, nos pedirá que presionemos el botoncito de la Yubikey. Si la llave no está conectada o no presionamos el boton en un tiempo razonable, la autenticación fallará y el comando no se ejecutará.
SU 2FA#
Para habilitar 2FA usando U2F con tu Yubikey para root su
:
- Modificamos el archivo /etc/pam.d/su con nuestro editor de confianza:
sudo nano /etc/pam.d/su
Debajo de la linea
auth substack system-auth
agregamos lo siguiente:auth required pam_u2f.so cue
Para guardar los cambios pulsamos
CRTL+S
y para salir del editorCRTL+X
Quedaría más o menos así:
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth substack system-auth
auth required pam_u2f.so cue
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
Con cue
al final de la linea añadida, nos aseguramos que en el prompt de la terminal nos muestre un mensaje que diga "Please touch the device"
para que toquemos el botoncito de la Yubikey y autorizar el comando indicado.
Para que su
funcione con la Yubikey, cualquier usuario que intente cambiarse de usuario para root, necesite tener la llave asignada a el, es decir, el usuario necesitaria tener su llave registrada en el archivo u2f_keys
.
Asi, cuando usemos su
en la terminal, aparte de pedirnos la contraseña, nos pedirá que presionemos el botoncito de la Yubikey. Si la llave no está conectada o no presionamos el botón en un tiempo razonable, la autenticación fallará y no podremos cambiarnos al usuario root.
Inicio de Sesión en KDE con 2FA#
Para habilitar 2FA usando U2F con la Yubikey e iniciar sesión en KDE via SDDM, hacemos lo siguiente:
- Modificamos el archivo /etc/pam.d/sddm con nuestro editor de confianza:
sudo nano /etc/pam.d/sddm
Debajo de la linea
auth substack password-auth
agregamos lo siguiente:auth required pam_u2f.so
Para guardar los cambios pulsamos
CRTL+S
y para salir del editorCRTL+X
Quedaría más o menos así:
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth substack password-auth
auth required pam_u2f.so
-auth optional pam_gnome_keyring.so
-auth optional pam_kwallet5.so
-auth optional pam_kwallet.so
auth include postlogin
account required pam_nologin.so
account include password-auth
password include password-auth
session required pam_selinux.so close
session required pam_loginuid.so
-session optional pam_ck_connector.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session include password-auth
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start
-session optional pam_kwallet.so auto_start
session include postlogin
cue
no funciona en la pantalla de inicio de sesión como con sudo/su.
Cuando iniciamos sesión en la GUI, nos pedirá la contraseña. No nos mostrará ningún indicativo visual que debemos presionar el botón de la Yubikey, sin embargo, el botón comenzará a parpadear después de colocar la contraseña y presionar ENTER
por lo que es el momento de presionar el botón de la llave. si la llave no estuviera conectada o no se presiona el botón en un tiempo razonable, no se podrá autenticar y fallará el inicio de sesión.
Pantalla de Bloqueo de KDE con 2FA#
Para habilitar 2FA usando U2F con la Yubikey y desbloquear la pantalla en KDE via SDDM, requerimos que la llave esté conectada todo el tiempo que la pantalla esté bloqueada. Para lograrlo, haremos lo siguiente:
- Modificamos el archivo /etc/pam.d/kde con nuestro editor de confianza:
sudo nano /etc/pam.d/kde
Debajo de la linea
auth substack password-auth
agregamos lo siguiente:auth required pam_u2f.so
Para guardar los cambios pulsamos
CRTL+S
y para salir del editorCRTL+X
Quedaría más o menos así:
auth substack system-auth
auth required pam_u2f.so
auth include postlogin
account required pam_nologin.so
account include password-auth
password include password-auth
session required pam_selinux.so close
session required pam_loginuid.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session include password-auth
session include postlogin
cue
no funciona en la pantalla de desbloqueo como con sudo/su.
Cuando desbloqueamos la pantalla y nos relogueamos al sistema, nos pedirá la contraseña. No nos mostrará ningún indicativo visual que debemos presionar el botón de la Yubikey, sin embargo, el botón comenzará a parpadear después de colocar la contraseña y presionar ENTER
por lo que es el momento de presionar el botón de la llave. si la llave no estuviera conectada o no se presiona el botón en un tiempo razonable, no se podrá autenticar y fallará el inicio de sesión.
PolicyKit KDE Agent 2FA#
Para habilitar 2FA usando U2F con la Yubikey para autenticarnos con las ventanaz emergentes de ciertas aplicaciones en KDE que requieran credenciales (por ejemplo: la GUI del Firewall), haremos lo siguiente:
- En caso que no exista el archivo de configuración, lo creamos desde su archivo por defecto:
sudo cat /usr/lib/pam.d/polkit-1 > /etc/pam.d/polkit-1`
- Editamos el archivo:
sudo nano /etc/pam.d/polkit-1`
Debajo de la linea
auth include system-auth
añadimos lo siguiente:auth required pam_u2f.so
Para guardar los cambios pulsamos
CRTL+S
y para salir del editorCRTL+X
Quedaría más o menos así:
#%PAM-1.0
auth include system-auth
auth required pam_u2f.so
account include system-auth
password include system-auth
session include system-auth
cue
no funciona en la pantalla de desbloqueo como con sudo/su.
Cuando ejecutemos un programa con GUI que necesite autenticación, nos pedirá la contraseña. No nos mostrará ningún indicativo visual que debemos presionar el botón de la Yubikey, sin embargo, el botón comenzará a parpadear después de colocar la contraseña y presionar ENTER
por lo que es el momento de presionar el botón de la llave. si la llave no estuviera conectada o no se presiona el botón en un tiempo razonable, no se podrá autenticar y fallará la autenticación.
Referencias#
- Using YubiKeys with Fedora
- How Do I Setup Yubikey with Fedora 30 KDE/SDDM (and maybe LUKS v2)?
- Yubikey, KDE U2F, Will This Work On Other Distros?
- Red Hat Linux Login Guide - Challenge Response
- Ubuntu Linux Login Guide - U2F
- TREZOR/U2F Login into Your Linux Mint
Espero que te vaya gustado este artículo y ¡nos vemos en la próxima!