Login no Ambiente de Trabalho e Autenticação de Utilizadores Linux

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

active

inactive

inactive

active

inactive

inactive

active

Introdução

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, em vez disso, quiser utilizar a sua Nitrokey como método de início de sessão alternativo (palavra-passe OU Nitrokey), consulte Método de autenticação alternativo depois de concluir o guia 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.

Aviso

O seguinte guia pode potencialmente bloqueá-lo para fora do seu computador. Você deve estar ciente desses riscos, pois é recomendável usar primeiro as instruções abaixo em um computador secundário, ou após um backup completo.

Poderá perder o acesso aos seus dados após configurar ` módulosPAM <https://www.man7.org/linux/man-pages/man8/pam.8.html>`__.

Requisitos

  • Ubuntu 24.04 with Gnome Display Manager (GDM).

Instruções

  1. Criar um utilizador de reserva e dar-lhe privilégios de raiz*

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

    Caso prefira configurar o U2F para um único utilizador, e esteja bloqueado fora da sua sessão de utilizador, ainda poderá fazer o login com o <backup_user>, e prosseguir com a manutenção.

  2. Install* 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 pode construir libpam-u2f de Git.

    • Para verificar se a biblioteca está devidamente instalada, digite o seguinte comando:

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

    A Saída deve ser algo como o seguinte:

    /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. Gerar o ficheiro de configuração 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
    

    Note que esta saída não foi gerada diretamente por pamu2fcfg e não contém informação sensível. O seu objetivo é apenas mostrar o formato e o comprimento esperados da saída.

    Dica

    • The file must be named u2f_keys

    • Recomenda-se que comece por testar as instruções com um único utilizador. A configuração de outros utilizadores será acrescentada na secção 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 maior segurança, após a geração do ficheiro de configuração, vamos mover o ficheiro gerado ~/u2f_keys para /etc/Nitrokey/ e alterar as permissões de acesso utilizando estes comandos:

    $ sudo mkdir /etc/Nitrokey
    $ sudo mv ~/u2f_keys /etc/Nitrokey/
    $ sudo chmod 644 /etc/Nitrokey/u2f_keys
    
  6. Modificar o Módulo de Autenticação Pluggable PAM`

    Configure os arquivos do módulo PAM em /etc/pam.d/. Esta é uma fase de testes - o passo 8 aplicará a configuração assim que você confirmar que ela 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
    

    Dica

    • Estamos a utilizar suficiente para testar e mudaremos para necessário na etapa 8.

    • Como estamos usando o Mapeamento Central de Autenticação, precisamos dizer pam_u2f a localização do arquivo a ser usado com a opção 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

    Porquê a colocação inferior? O PAM processa os módulos de cima para baixo. Colocar a configuração U2F na parte inferior garante que a autenticação por senha seja verificada primeiro, criando um fluxo de trabalho de segundo fator (senha + U2F).

    Para opções de autenticação alternativas (palavra-passe OU Nitrokey) e explicações pormenorizadas sobre o modo como a posição da linha e as bandeiras de controlo afectam a autenticação, consulte Método de autenticação alternativo.

    Uma vez modificado o common-auth`, podemos salvar e sair do arquivo.

    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

    Depois de confirmar que a autenticação com a sua Nitrokey funcionou, pode configurar o ficheiro de configuração U2F para os outros utilizadores do seu sistema.

    Aviso

    Se não configurar todos os utilizadores no ficheiro de configuração U2F e continuar a aplicar a autenticação Nitrokey no passo 8, não será possível iniciar sessão com nenhum utilizador não 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 adicionar uma Nitrokey de cópia de segurança a este utilizador, ligue a sua Nitrokey de cópia de segurança e faça o mesmo que fez para o utilizador principal:

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

    Em seguida, repita este processo para todos os utilizadores do seu sistema.

  8. Enforcing Nitrokey second factor authentication

    Deves ter reparado que a autenticação com o Nitrokey ainda não foi imposta. Depois de confirmar que a autenticação com o Nitrokey funciona, podemos aplicá-la alterando a flag sufficient para required.

    Aviso

    Antes de prosseguir com este passo, certifique-se de que tem:

    • Testei que a autenticação com o Nitrokey funciona de facto, caso contrário pode perder o acesso ao computador.

    • Configura uma Nitrokey de reserva. Caso contrário, se perderes ou partires a tua Nitrokey, perderás o acesso ao teu computador!

    Proceder com cuidado!

    Para o fazer, é necessário editar o ficheiro de configuração PAM:

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

    Na linha que adicionou anteriormente, na parte inferior do ficheiro, altere a palavra sufficient para required. Deve ficar assim:

    #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 preferir utilizar a sua Nitrokey como alternativa à sua palavra-passe (password OR Nitrokey), pode configurá-la:

Configuration Steps:

  1. Mova a linha de configuração do PAM para o topo **** de /etc/pam.d/common-auth (antes de outros módulos auth)

  2. Manter o sinal de controlo sufficient

Isto permite a autenticação apenas com um dos factores. Note-se que isto proporciona menos segurança do que a autenticação de segundo fator.

Compreender os modos de autenticação

A combinação da posição da linha e da bandeira de controlo determina o modo de autenticação:

Authentication Modes

Position

Control Flag

Authentication Mode

Use Case

Parte inferior (após pam_unix)

sufficient

Second factor (testing)

Fase de teste seguro

Parte inferior (após pam_unix)

required

Segundo fator (imposto)

Production security (main guide)

Topo (antes de pam_unix)

sufficient

Alternative factor

Convenience (password OR key)

Como funciona o PAM:

O PAM processa os módulos sequencialmente, de cima para baixo. O sinalizador de controlo determina a forma como o sucesso ou a falha afecta a autenticação global:

  • sufficient: O sucesso completa a autenticação; a falha é ignorada se outros módulos tiverem sucesso

  • required: O sucesso é obrigatório; a falha causa uma falha geral de autenticação

O que isto significa para si:

Autenticação alternativa (superior + suficiente):

  • Pode iniciar sessão com a sua palavra-passe OU apenas com a sua Nitrokey

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

  • Se a autenticação Nitrokey falhar ou for ignorada, a palavra-passe continuará a funcionar

  • É mais cómodo mas menos seguro do que a autenticação de segundo fator

Security implications:

  • Um atacante com a sua palavra-passe pode iniciar sessão sem a sua Nitrokey

  • Um atacante com acesso físico ao seu Nitrokey pode iniciar sessão sem a sua palavra-passe

  • Utilize-o apenas se a comodidade for mais importante do que a segurança máxima

Para obter explicações pormenorizadas sobre os sinais de controlo e respectivas implicações, consulte Sinais de controlo.

Módulos PAM

Existem vários arquivos de módulos PAM que podem ser modificados de acordo com suas necessidades:

  • 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

  • Alternativamente, podes apenas modificar o ficheiro /etc/pam.d/sudo se quiseres utilizar o FIDO U2F quando utilizares o comando sudo.

Bandeiras de controlo

O sinalizador de controlo determina como o módulo PAM se comporta quando a autenticação é bem sucedida ou falha. No passo 6 nós utilizamos a flag sufficient para testar, e depois mudamos para required para aplicar.

Os sinalizadores de controlo disponíveis são:

  • 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` contudo, no caso de um módulo específico retornar uma falha, o controle é diretamente retornado para a aplicação, ou para a pilha superior do PAM. Esta bandeira também pode bloqueá-lo para fora do seu computador se não tiver acesso à 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.

Aviso

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

  • Você perderá o acesso ao seu computador se você configurou mal o módulo PAM e usou o required ou requisite bandeiras.

  • Você também perderá a capacidade de usar sudo se você configurar o Mapeamento Central de Autenticação e usou a required ou `x id="125"></x> bandeiras.

  • Poderá também perder a capacidade de iniciar sessão utilizando o Gestor de Display Gnome se o início de sessão com smart card for imposto e se tiver utilizado as flags required ou requisite. Veja Solução de problemas para mais informações.

Resolução de problemas

Problemas ao iniciar sessão na conta de utilizador utilizando o GDM

Em alguns casos, por exemplo, se tiver o opencs-pkcs11 instalado, o Gnome Display Manager (GDM) pode impor o login com smart card assim que qualquer smart card (como o seu Nitrokey) for conectado, mesmo que nenhum smart card tenha sido configurado. Isso pode impedir que você faça o login na sua conta de usuário usando o u2f. Se você definiu a flag de controle sufficient, desconecte todos os smart cards e faça o login usando sua senha. Para desativar a imposição de smart cards, execute o seguinte 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