Connexion au bureau et authentification de l’utilisateur Linux

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

active

inactive

inactive

active

inactive

inactive

active

Introduction

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 vous souhaitez plutôt utiliser votre Nitrokey comme méthode de connexion alternative (mot de passe OU Nitrokey), voir Méthode d’authentification alternative après avoir terminé le guide 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.

Avertissement

Le guide suivant peut potentiellement vous bloquer l’accès à votre ordinateur. Vous devez être conscient de ces risques, car il est recommandé d’utiliser les instructions ci-dessous d’abord sur un ordinateur secondaire, ou après une sauvegarde complète.

Vous pourriez perdre l’accès à vos données après avoir configuré les modules PAM.

Exigences

  • Ubuntu 24.04 with Gnome Display Manager (GDM).

Instructions

  1. Créer un utilisateur de sauvegarde et lui donner les privilèges root.

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

    Dans le cas où vous préférez configurer l’U2F pour un seul utilisateur, et que vous êtes bloqué dans votre session utilisateur, vous pourrez toujours vous connecter avec le <backup_user>, et procéder à la maintenance.

  2. Installation libpam-u2f

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

    $ sudo apt install libpam-u2f
    

    Note

    • Vous pouvez également construire libpam-u2f à partir de Git.

    • Pour vérifier que la bibliothèque est correctement installée, entrez la commande suivante :

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

    Le résultat devrait ressembler à ce qui suit :

    /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. Générer le fichier de configuration 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
    

    Notez que cette sortie n’a pas été générée directement par pamu2fcfg et ne contient aucune information sensible. Elle a pour seul but de montrer le format et la longueur attendus de la sortie.

    Astuce

    • The file must be named u2f_keys

    • Il est recommandé de tester d’abord les instructions avec un seul utilisateur. La configuration des autres utilisateurs sera ajoutée à la section 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

    Pour une meilleure sécurité, après la génération du fichier de configuration, nous déplacerons le fichier généré ~/u2f_keys vers /etc/Nitrokey/ et changerons les permissions d’accès à l’aide de ces commandes :

    $ sudo mkdir /etc/Nitrokey
    $ sudo mv ~/u2f_keys /etc/Nitrokey/
    $ sudo chmod 644 /etc/Nitrokey/u2f_keys
    
  6. Modifier le Module d’Authentification Pluggable PAM.

    Configurez les fichiers du module PAM sous /etc/pam.d/. Il s’agit d’une phase de test - l’étape 8 appliquera la configuration une fois que vous aurez confirmé qu’elle fonctionne.

    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
    

    Astuce

    • Nous utilisons sufficient pour les tests et passerons à required à l’étape 8.

    • Comme nous utilisons le Central Authentication Mapping, nous devons indiquer à pam_u2f l’emplacement du fichier à utiliser avec l’option 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.].

    Note

    Pourquoi un placement par le bas ? PAM traite les modules de haut en bas. En plaçant la configuration U2F en bas, l’authentification par mot de passe est vérifiée en premier, ce qui crée un flux de travail à deuxième facteur (mot de passe + U2F).

    Pour d’autres options d’authentification (mot de passe OU Nitrokey) et des explications détaillées sur la manière dont la position de la ligne et les drapeaux de contrôle affectent l’authentification, voir Méthode d’authentification alternative.

    Une fois que nous avons modifié le common-auth, nous pouvons sauvegarder et quitter le fichier.

    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

    Après avoir confirmé que l’authentification à l’aide de votre Nitrokey a bien fonctionné, vous pouvez configurer le fichier de configuration U2F pour les autres utilisateurs de votre système.

    Avertissement

    Si vous ne configurez pas tous les utilisateurs dans le fichier de configuration U2F et que vous continuez à appliquer l’authentification Nitrokey à l’étape 8, vous ne pourrez pas vous connecter avec un utilisateur non configuré !

    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
    

    Pour ajouter une Nitrokey de secours à cet utilisateur, branchez votre Nitrokey de secours et procédez de la même manière que pour l’utilisateur principal :

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

    Répétez ensuite ce processus pour tous les utilisateurs de votre système.

  8. Enforcing Nitrokey second factor authentication

    Vous avez peut-être remarqué que l’authentification avec la Nitrokey n’était pas encore appliquée. Après avoir confirmé que l’authentification à l’aide de la Nitrokey fonctionne, nous pouvons l’imposer en remplaçant le drapeau sufficient par required.

    Avertissement

    Avant de poursuivre cette étape, assurez-vous que vous disposez des informations nécessaires :

    • Testé que l’authentification avec la Nitrokey fonctionne bien, sinon vous pouvez perdre l’accès à votre ordinateur.

    • Préparez une Nitrokey de secours. Sinon, si vous perdez ou cassez votre Nitrokey, vous n’aurez plus accès à votre ordinateur !

    Procédez avec prudence !

    Pour ce faire, vous devez modifier le fichier de configuration PAM :

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

    Dans la ligne que vous avez ajoutée plus tôt au bas du fichier, remplacez le mot sufficient par required. Cela devrait ressembler à ceci :

    #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 vous préférez utiliser votre Nitrokey à la place de votre mot de passe (mot de passe OU Nitrokey), vous pouvez configurer ceci à la place :

Configuration Steps:

  1. Déplacer la ligne de configuration PAM vers le haut de **** de /etc/pam.d/common-auth (avant les autres modules d’authentification).

  2. Conserver le drapeau de contrôle sufficient.

Cela permet de s’authentifier avec l’un ou l’autre des deux facteurs. Il est à noter que cette méthode offre moins de sécurité que l’authentification à deuxième facteur.

Comprendre les modes d’authentification

La combinaison de la position de la ligne et du drapeau de contrôle détermine votre mode d’authentification :

Authentication Modes

Position

Control Flag

Authentication Mode

Use Case

Bas (après pam_unix)

sufficient

Second factor (testing)

Phase d’essai en toute sécurité

Bas (après pam_unix)

required

Deuxième facteur (appliqué)

Production security (main guide)

Top (avant pam_unix)

sufficient

Alternative factor

Convenience (password OR key)

Comment fonctionne PAM :

PAM traite les modules de manière séquentielle, de haut en bas. L’indicateur de contrôle détermine comment le succès ou l’échec affecte l’authentification globale :

  • sufficient : Le succès complète l’authentification ; l’échec est ignoré si d’autres modules réussissent.

  • required : La réussite est obligatoire ; l’échec entraîne un échec global de l’authentification.

Ce que cela signifie pour vous :

Authentification alternative (haut + suffisant) :

  • Vous pouvez vous connecter avec votre mot de passe OU votre Nitrokey seul.

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

  • Si l’authentification Nitrokey échoue ou est ignorée, le mot de passe fonctionnera quand même.

  • Cette méthode est plus pratique mais moins sûre que l’authentification à deuxième facteur.

Security implications:

  • Un pirate disposant de votre mot de passe peut se connecter sans votre Nitrokey

  • Un pirate ayant un accès physique à votre Nitrokey peut se connecter sans votre mot de passe

  • N’utilisez cette option que si la commodité est plus importante que la sécurité maximale.

Pour des explications détaillées sur les drapeaux de contrôle et leurs implications, voir Drapeaux de contrôle.

Modules PAM

Il existe plusieurs fichiers de modules PAM qui peuvent être modifiés en fonction de vos besoins :

  • 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

  • Vous pouvez également modifier le fichier /etc/pam.d/sudo si vous souhaitez utiliser FIDO U2F lorsque vous utilisez la commande sudo.

Drapeaux de contrôle

L’indicateur de contrôle détermine comment le module PAM se comporte lorsque l’authentification réussit ou échoue. À l’étape 6, nous avons utilisé l’indicateur sufficient pour les tests, puis nous sommes passés à required pour la mise en application.

Les drapeaux de contrôle disponibles sont les suivants :

  • 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 : Similaire à ``required`”, cependant, dans le cas où un module spécifique renvoie un échec, le contrôle est directement renvoyé à l’application, ou à la pile PAM supérieure. Cet indicateur peut également vous bloquer l’accès à votre ordinateur si vous n’avez pas accès à 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.

Avertissement

  • 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.

  • Vous perdrez l’accès à votre ordinateur si vous avez mal configuré le module PAM et utilisé les drapeaux « requis » ou « requis ».

  • Vous perdrez également la possibilité d’utiliser sudo si vous avez configuré le mappage de l’authentification centrale et utilisé les drapeaux required ou requisite.

  • Vous pouvez également perdre la possibilité de vous connecter à l’aide du gestionnaire d’affichage Gnome si la connexion par carte à puce est appliquée et que vous avez utilisé les drapeaux required ou requisite. Voir la section Dépannage pour plus d’informations.

Dépannage

Problèmes de connexion au compte d’utilisateur à l’aide de GDM

Dans certains cas, par exemple si vous avez installé opencs-pkcs11, Gnome Display Manager (GDM) peut imposer par défaut la connexion par carte à puce dès qu’une carte à puce (comme votre Nitrokey) est branchée, même si aucune carte à puce n’a jamais été configurée. Cela peut vous empêcher de vous connecter à votre compte utilisateur en utilisant u2f. Si vous avez défini le drapeau de contrôle sufficient, débranchez toutes les cartes à puce et connectez-vous en utilisant votre mot de passe. Pour désactiver le contrôle des cartes à puce, exécutez la commande suivante :

$ 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