Accesso al desktop e autenticazione degli utenti Linux

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

active

inactive

inactive

active

inactive

inactive

active

Introduzione

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.

Se invece si desidera utilizzare Nitrokey come metodo di accesso alternativo (password O Nitrokey), consultare Metodo di autenticazione alternativo dopo aver completato la guida principale.

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.

Avvertimento

La seguente guida può potenzialmente bloccarvi fuori dal vostro computer. Dovresti essere consapevole di questi rischi, in quanto si raccomanda di utilizzare prima le istruzioni che seguono su un computer secondario, o dopo un backup completo.

Si potrebbe perdere l’accesso ai dati dopo aver configurato i moduli PAM.

Requisiti

  • Ubuntu 24.04 with Gnome Display Manager (GDM).

Istruzioni

  1. Creare un utente di backup e dargli i privilegi di root.

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

    Nel caso in cui si preferisca impostare U2F per un singolo utente, e si è bloccati dalla propria sessione utente, si sarebbe ancora in grado di accedere con il <backup_user>, e procedere con la manutenzione.

  2. Installazione libpam-u2f

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

    $ sudo apt install libpam-u2f
    

    Nota

    • In alternativa potete costruire libpam-u2f da Git.

    • Per verificare che la libreria sia correttamente installata, digitate il seguente comando:

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

    L’output dovrebbe essere qualcosa come il seguente:

    /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. Generare il file di configurazione 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
    

    Si noti che questo output non è stato generato direttamente da pamu2fcfg e non contiene informazioni sensibili. Ha il solo scopo di mostrare il formato e la lunghezza previsti dell’output.

    Suggerimento

    • The file must be named u2f_keys

    • Si consiglia di testare le istruzioni con un solo utente. La configurazione di altri utenti verrà aggiunta nella sezione 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

    Per una maggiore sicurezza, dopo aver generato il file di configurazione, si sposterà il file generato ~/u2f_keys in /etc/Nitrokey/ e si modificheranno i permessi di accesso usando questi comandi:

    $ sudo mkdir /etc/Nitrokey
    $ sudo mv ~/u2f_keys /etc/Nitrokey/
    $ sudo chmod 644 /etc/Nitrokey/u2f_keys
    
  6. Modificare il modulo di autenticazione collegabile PAM

    Configurare i file del modulo PAM in /etc/pam.d/. Questa è una fase di test: il passo 8 imporrà la configurazione una volta confermato il suo funzionamento.

    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
    

    Suggerimento

    • Stiamo usando sufficient per i test e passeremo a required nel passaggio 8.

    • Dato che stiamo usando il Central Authentication Mapping, dobbiamo dire a pam_u2f la posizione del file da usare con l’opzione 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

    Perché il posizionamento dal basso? PAM elabora i moduli dall’alto verso il basso. Posizionando la configurazione U2F in basso, si garantisce che l’autenticazione tramite password venga verificata per prima, creando un flusso di lavoro a secondo fattore (password + U2F).

    Per le opzioni di autenticazione alternative (password O Nitrokey) e le spiegazioni dettagliate di come la posizione della riga e i flag di controllo influiscono sull’autenticazione, vedere Metodo di autenticazione alternativo.

    Una volta modificato il common-auth, possiamo salvare e uscire dal file.

    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

    Dopo aver confermato che l’autenticazione con Nitrokey ha funzionato, è possibile impostare il file di configurazione U2F per gli altri utenti del sistema.

    Avvertimento

    Se non si configurano tutti gli utenti nel file di configurazione U2F e si continua a imporre l’autenticazione Nitrokey al punto 8, non sarà possibile accedere con nessun utente non configurato!

    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
    

    Per aggiungere una Nitrokey di backup a questo utente, collegare la Nitrokey di backup e procedere come per l’utente principale:

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

    Ripetere quindi la procedura per tutti gli utenti del sistema.

  8. Enforcing Nitrokey second factor authentication

    Si sarà notato che l’autenticazione con Nitrokey non è ancora stata applicata. Dopo aver confermato che l’autenticazione con Nitrokey funziona, possiamo imporla cambiando il flag sufficient in required.

    Avvertimento

    Prima di proseguire con questo passaggio, assicuratevi di avere:

    • Ho verificato che l’autenticazione con Nitrokey funziona, altrimenti si può perdere l’accesso al computer.

    • Impostare una Nitrokey di backup. Altrimenti, se si perde o si rompe la Nitrokey, si perde l’accesso al computer!

    Procedere con cautela!

    Per farlo, è necessario modificare il file di configurazione PAM:

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

    Nella riga aggiunta in precedenza, in fondo al file, cambiate la parola sufficient in required. L’aspetto dovrebbe essere questo:

    #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

Se si preferisce utilizzare Nitrokey in alternativa alla password (password O Nitrokey), è possibile configurare questa opzione:

Configuration Steps:

  1. Spostare la linea di configurazione di PAM nella parte superiore di **** di /etc/pam.d/common-auth (prima di altri moduli di autenticazione)

  2. Mantenere il flag di controllo ``sufficient`

Questo permette l’autenticazione con uno dei due fattori da solo. Si noti che questa soluzione offre una sicurezza inferiore rispetto all’autenticazione a secondo fattore.

Conoscere le modalità di autenticazione

La combinazione di posizione della linea e flag di controllo determina la modalità di autenticazione:

Authentication Modes

Position

Control Flag

Authentication Mode

Use Case

In basso (dopo pam_unix)

sufficient

Second factor (testing)

Fase di test sicura

In basso (dopo pam_unix)

required

Secondo fattore (applicato)

Production security (main guide)

Top (prima di pam_unix)

sufficient

Alternative factor

Convenience (password OR key)

Come funziona PAM:

PAM elabora i moduli in modo sequenziale dall’alto verso il basso. Il flag di controllo determina il modo in cui il successo o il fallimento influiscono sull’autenticazione complessiva:

  • sufficient: Il successo completa l’autenticazione; il fallimento è ignorato se altri moduli hanno successo

  • required: Il successo è obbligatorio; il fallimento causa un fallimento generale dell’autenticazione.

Cosa significa per voi:

Autenticazione alternativa (superiore + sufficiente):

  • È possibile accedere con la propria password OPPURE la propria Nitrokey da sola.

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

  • Se l’autenticazione Nitrokey fallisce o viene saltata, la password funzionerà comunque.

  • Questa soluzione è più comoda ma meno sicura dell’autenticazione a secondo fattore.

Security implications:

  • Un utente malintenzionato in possesso della password può accedere senza Nitrokey.

  • Un aggressore che abbia accesso fisico al Nitrokey può accedere senza la password.

  • Utilizzatelo solo se la convenienza è più importante della massima sicurezza.

Per una spiegazione dettagliata dei flag di controllo e delle loro implicazioni, vedere Control Flags.

Moduli PAM

Ci sono diversi file di moduli PAM che possono essere modificati secondo le vostre esigenze:

  • 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

  • In alternativa puoi semplicemente modificare il file /etc/pam.d/sudo se vuoi usare FIDO U2F quando usi il comando sudo.

Bandiere di controllo

Il flag di controllo determina il comportamento del modulo PAM quando l’autenticazione ha successo o fallisce. Nel passo 6 abbiamo usato il flag sufficient per i test, poi abbiamo cambiato con required per l’applicazione.

I flag di controllo disponibili sono:

  • 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: Simile a required tuttavia, nel caso in cui un modulo specifico restituisca un fallimento, il controllo viene restituito direttamente all’applicazione, o allo stack PAM superiore. Questo flag può anche bloccarvi fuori dal vostro computer se non avete accesso alla 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.

Avvertimento

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

  • Perderai l’accesso al tuo computer se hai configurato male il modulo PAM e hai usato i flag required o requisite.

  • Perderai anche la capacità di usare sudo se hai impostato la Mappatura dell’autenticazione centrale e hai usato i flag required o requisite.

  • Si potrebbe anche perdere la possibilità di accedere con Gnome Display manager se il login con la smart card è applicato e si sono usati i flag required o requisite. Vedere Risoluzione dei problemi per ulteriori informazioni.

Risoluzione dei problemi

Problemi di accesso all’account utente tramite GDM

In alcuni casi, ad esempio se è installato opencs-pkcs11, Gnome Display Manager (GDM) può imporre il login tramite smart card non appena viene inserita una smart card (come Nitrokey), anche se non è mai stata configurata. Questo può impedire l’accesso al proprio account utente tramite u2f. Se è stato impostato il flag di controllo sufficient, scollegare tutte le smart card e accedere usando la propria password. Per disattivare il controllo delle smart card, eseguire il seguente 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