Inicio de sesión en el escritorio y autenticación de usuarios de Linux

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

active

inactive

inactive

active

inactive

inactive

active

Introducción

This guide will walk you through the configuration of Linux to use FIDO Universal 2nd Factor, i.e. FIDO U2F with libpam-u2f and compatible Nitrokeys. You will set up your Nitrokey as a second factor for authentication. This means you will need your usual login method (likely your password) and your Nitrokey to login.

Si desea utilizar su Nitrokey como método de inicio de sesión alternativo (contraseña O Nitrokey), consulte Método de autenticación alternativo después de completar la guía principal.

If you want to login to you computer using Nitrokey Pro 2, Nitrokey Storage 2 and Nitrokey Start you can visit the instructions available here.

Advertencia

La siguiente guía puede potencialmente bloquear su ordenador. Debe ser consciente de estos riesgos, ya que se recomienda utilizar primero las instrucciones que aparecen a continuación en un ordenador secundario, o después de realizar una copia de seguridad completa.

Podría perder el acceso a sus datos después de configurar los módulos PAM.

Requisitos

  • Ubuntu 24.04 with Gnome Display Manager (GDM).

Instrucciones

  1. **Crea un usuario de copia de seguridad y dale privilegios de root.

    $ sudo adduser <backup_user>
    $ sudo usermod -aG sudo <backup_user>
    

    En caso de que prefiera configurar U2F para un solo usuario, y esté bloqueado en su sesión de usuario, aún podría iniciar sesión con el <backup_user>, y proceder al mantenimiento.

  2. Instalación libpam-u2f

    On Ubuntu 24.04 it is possible to download directly libpam-u2f from the official repos

    $ sudo apt install libpam-u2f
    

    Nota

    • Alternativamente puedes construir libpam-u2f desde Git.

    • Para verificar que la biblioteca está correctamente instalada, introduzca el siguiente comando:

    $ file /lib/x86_64-linux-gnu/security/pam_u2f.so
    

    El resultado debería ser algo parecido a lo siguiente

    /lib/x86_64-linux-gnu/security/pam_u2f.so: \ ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),\ dynamically linked, BuildID[sha1]=1d55e1b11a97be2038c6a139579f6c0d91caedb1, stripped
    
  3. **Generar el archivo de configuración U2F

    To generate the configuration file we will use the pamu2fcfg utility. First plug your Nitrokey (if you did not already), and enter the following command:

    $ pamu2fcfg > ~/u2f_keys
    

    Once you run the command above, you will need to touch the device while it flashes. Once done, pamu2fcfg will append its output the u2f_keys file in the format:

    <username>:KeyHandle,PublicKey,flags
    

    This will look something like the following:

    nitrouser:fS6vQ9uWa0VizcczyZ/bvk5kcQJkIJOC/21/e7dXFe/fnONSL705EkeiUpZpL/3seAWL/qW4/mqb0/WtiZoP/NOLTRM4EEAg1ANLsfYgSzRd/AjsW3z8kJwgckbvwDUyB90ByR09XtBhuE41vMsEk6J+9CS0+ZuPSB0KXRG7z2yZpQLldjE/ijsdIdd8Ct2oXSiZ/zTb/t5kRafNJVkp=,Oo4U9XvIhI9r0WNnvoMwG5/pbgwYd4GMCYEinhWcsI2hKUebYj92JOxDsSa3zd2A9OB0ofXgB16FD2naev3YmLch==,es256,+presence
    

    Tenga en cuenta que esta salida no fue generada directamente por pamu2fcfg y no contiene información sensible. Sólo pretende mostrar el formato y la longitud esperados de la salida.

    Truco

    • The file must be named u2f_keys

    • Se recomienda probar primero las instrucciones con un solo usuario. La configuración de otros usuarios se añadirá en la sección 7.

  4. Setting up a backup Nitrokey

    This step is optional, however it is advised to have a second Nitrokey as backup in the case of loss, theft or destruction of your primary Nitrokey.

    To set up a backup key, repeat the procedure above, and use pamu2fcfg -n like this:

    $ pamu2fcfg -n >> ~/u2f_keys
    

    This will omit the <username> field, and the output is appended to the line with your <username>, this will look something like this:

    <username>:Zx...mw,04...0a:xB...fw,es256,+presence:04...3f,es256,+presence
    
  5. Securing the config file

    Para mayor seguridad, después de generar el archivo de configuración, moveremos el archivo generado ~/u2f_keys a /etc/Nitrokey/ y cambiaremos los permisos de acceso usando estos comandos:

    $ sudo mkdir /etc/Nitrokey
    $ sudo mv ~/u2f_keys /etc/Nitrokey/
    $ sudo chmod 644 /etc/Nitrokey/u2f_keys
    
  6. Modificar el módulo de autenticación enchufable PAM

    Configure los archivos del módulo PAM en /etc/pam.d/. Esta es una fase de prueba - paso 8 se aplicará la configuración una vez que confirme que funciona.

    In this guide we will modify the common-auth file as it handles the authentication settings which are common to all services, other options are described in PAM Modules. You can modify the file with the following command:

    $ sudo editor /etc/pam.d/common-auth
    

    Add the following line at the bottom of the file:

    #Nitrokey config
    auth    sufficient pam_u2f.so authfile=/etc/Nitrokey/u2f_keys cue [cue_prompt=Please touch the device.] prompt
    

    Truco

    • Estamos utilizando suficiente para las pruebas y cambiaremos a necesario en el paso 8.

    • Como estamos utilizando el mapeo de autenticación central, tenemos que indicar a pam_u2f la ubicación del archivo a utilizar con la opción authfile.

    • If you often forget to insert the key, prompt option makes pam_u2f print Insert your U2F device, then press ENTER. and give you a chance to insert the Nitrokey.

    • If you would like to be prompted to touch the Nitrokey, cue option will make pam_u2f print Please touch the device. message. You can change the message in [cue_prompt=Please touch the device.].

    Nota

    ¿Por qué colocación inferior? PAM procesa los módulos de arriba a abajo. Colocar la configuración U2F en la parte inferior asegura que la autenticación por contraseña se comprueba primero, creando un flujo de trabajo de segundo factor (contraseña + U2F).

    Para opciones de autenticación alternativas (contraseña O Nitrokey) y explicaciones detalladas de cómo la posición de la línea y los indicadores de control afectan a la autenticación, consulte Método de autenticación alternativo.

    Una vez modificado el common-auth, podemos guardar y salir del archivo.

    You can test the configuration by typing sudo ls in the terminal. After typing in your password you should be prompted with the message Please touch the device. and have a similar output on the terminal:

    nitrouser@nitrouser:~$ sudo ls
    [sudo] password for nitrouser:  Please touch the device.
    

    You can also test your configuration by logging out of the user session and logging back. A similar screen should be displayed once you you unplug/replug yout Nitrokey and type your password:

    img6
  7. Setting up multiple users

    Después de confirmar que la autenticación con tu Nitrokey ha funcionado, puedes configurar el archivo de configuración U2F para los demás usuarios de tu sistema.

    Advertencia

    Si no configura todos los usuarios en el archivo de configuración U2F y continúa aplicando la autenticación Nitrokey en el paso 8, ¡no podrá iniciar sesión con ningún usuario no configurado!

    To configure u2f for multiple users, pamu2fcfg takes the -u <username> option, the output can be appended to the u2f_keys file like this:

    $ sudo pamu2fcfg -u <username> >> /etc/Nitrokey/u2f_keys
    

    Para añadir una Nitrokey de seguridad a este usuario, conecte su Nitrokey de seguridad y haga lo mismo que hizo para el usuario principal:

    $ sudo pamu2fcfg -n >> /etc/Nitrokey/u2f_keys
    

    A continuación, repita este proceso para todos los usuarios de su sistema.

  8. Enforcing Nitrokey second factor authentication

    Es posible que haya notado que la autenticación con la Nitrokey no se ha aplicado todavía. Después de confirmar que la autenticación usando la Nitrokey funciona, podemos aplicarla cambiando la bandera sufficient a required.

    Advertencia

    Antes de continuar con este paso, asegúrese de que tiene:

    • He comprobado que la autenticación con la Nitrokey funciona, de lo contrario puedes perder el acceso a tu ordenador.

    • Crea una copia de seguridad de tu Nitrokey. De lo contrario, si pierde o rompe su Nitrokey, ¡perderá el acceso a su ordenador!

    Proceda con cuidado.

    Para ello, debe editar el archivo de configuración PAM:

    $ sudo editor /etc/pam.d/common-auth
    

    En la línea que ha añadido antes, en la parte inferior del archivo, cambie la palabra sufficient por required. Debería quedar así:

    #Nitrokey config
    auth    required pam_u2f.so authfile=/etc/Nitrokey/u2f_keys cue [cue_prompt=Please touch the device.] prompt
    

After completing the setup, it is recommended to reboot your computer and unplug/replug the Nitrokey.

Alternative Authentication Method

Si prefiere utilizar su Nitrokey como alternativa a su contraseña (contraseña O Nitrokey), puede configurar esto en su lugar:

Configuration Steps:

  1. Mueva la línea de configuración PAM a la parte superior **** de /etc/pam.d/common-auth (antes de otros módulos auth)

  2. Mantenga el sufficient bandera de control

Esto permite la autenticación con cualquiera de los dos factores. Tenga en cuenta que esto proporciona menos seguridad que la autenticación de segundo factor.

Comprender los modos de autenticación

La combinación de la posición de la línea y la bandera de control determina su modo de autenticación:

Authentication Modes

Position

Control Flag

Authentication Mode

Use Case

Fondo (después de pam_unix)

sufficient

Second factor (testing)

Fase de pruebas seguras

Fondo (después de pam_unix)

required

Segundo factor (aplicado)

Production security (main guide)

Top (antes de pam_unix)

sufficient

Alternative factor

Convenience (password OR key)

Cómo funciona la APM:

PAM procesa los módulos secuencialmente de arriba a abajo. El indicador de control determina cómo afecta el éxito o el fracaso a la autenticación global:

  • sufficient El éxito completa la autenticación; el fracaso se ignora si otros módulos tienen éxito

  • required: El éxito es obligatorio; el fracaso provoca un fallo general de autenticación

Lo que esto significa para usted:

Autenticación alternativa (arriba + suficiente):

  • Puedes conectarte con tu contraseña O solo con tu Nitrokey

  • If authentication with the Nitrokey succeeds, no password is required

  • Si la autenticación Nitrokey falla o se omite, la contraseña seguirá funcionando

  • Es más cómodo pero menos seguro que la autenticación de segundo factor.

Security implications:

  • Un atacante con su contraseña puede iniciar sesión sin su Nitrokey

  • Un atacante con acceso físico a su Nitrokey puede iniciar sesión sin su contraseña

  • Utilícelo sólo si la comodidad es más importante que la máxima seguridad.

Para obtener explicaciones detalladas sobre los indicadores de control y sus implicaciones, consulte Indicadores de control.

Módulos PAM

Hay varios archivos de módulos PAM que pueden ser modificados de acuerdo a sus necesidades:

  • By modifying /etc/pam.d/common-auth file, you will be able to use you Nitrokey for 2nd factor authentication for graphic login and sudo.

  • If you wish to use FIDO U2F authentication solely for Gnome’s graphic login, you might prefer to modify the /etc/pam.d/gdm-password

  • También puede modificar el archivo /etc/pam.d/sudo si desea utilizar FIDO U2F cuando utilice el comando sudo.

Banderas de control

La bandera de control determina cómo se comporta el módulo PAM cuando la autenticación tiene éxito o falla. En el paso 6 utilizamos la bandera sufficient para las pruebas, luego cambiamos a required para el cumplimiento.

Las banderas de control disponibles son:

  • required: The module result must be successful for authentication to continue. This is the most critical flag and can lock you out of your computer if you do not have access to the Nitrokey.

  • requisite: Similar a required sin embargo, en el caso de que un módulo específico devuelva un fallo, el control se devuelve directamente a la aplicación, o a la pila PAM superior. Esta bandera también puede bloquear el equipo si no tiene acceso a la Nitrokey.

  • sufficient: The module result is ignored if it fails. In case of success, control is directly returned to the application, or to the superior PAM stack. This means no other PAM modules will be executed. The sufficient flag is considered safe for testing purposes.

  • optional: The success or failure of this module is only important if it is the only module in the stack associated with this service+type. The optional flag is considered safe to use for testing purposes.

Advertencia

  • If required or requisite is set, the failure of U2F authentication will cause a failure of the overall authentication. Failure will occur when the configured Nitrokey is not plugged, lost or destroyed.

  • Perderás el acceso a tu ordenador si configuraste mal el módulo PAM y utilizaste las banderas required o requisite.

  • También perderá la posibilidad de utilizar sudo si configura el mapeo de autenticación central y utilizó los indicadores required o requisite.

  • También puede perder la posibilidad de iniciar sesión con el gestor de pantalla de Gnome si se aplica el inicio de sesión con tarjeta inteligente y ha utilizado los indicadores required o requisite. Consulte Solución de problemas para obtener más información.

Solución de problemas

Problemas para acceder a la cuenta de usuario mediante GDM

En algunos casos, por ejemplo si tienes opencs-pkcs11 instalado, Gnome Display Manager (GDM) puede imponer por defecto el inicio de sesión con tarjeta inteligente tan pronto como cualquier tarjeta inteligente (como tu Nitrokey) esté conectada, incluso si nunca se ha configurado una tarjeta inteligente. Esto puede impedir que inicie sesión en su cuenta de usuario utilizando u2f. Si ha configurado el indicador de control sufficient, desconecte todas las tarjetas inteligentes e inicie sesión utilizando su contraseña. Para desactivar el control de tarjetas inteligentes ejecute el siguiente comando:

$ sudo -u gdm env -u XDG_RUNTIME_DIR -u DISPLAY DCONF_PROFILE=gdm dbus-run-session gsettings set org.gnome.login-screen enable-smartcard-authentication false