!!! CUIDADO !!!

!!! CUIDADO !!!

Recentemente, experimentei o systemd-homed e registrei meu Yubikey como dispositivo FIDO2. Quando tento autenticar na casa criada através homectl authenticate <user>dele ativa corretamente o Yubikey, pede o PIN e aguarda um toque, seguido da solicitação de senha usual.

Mas quando eu vou em frente e faço login nessa conta a partir de um tty, só é solicitada a senha, o U2F é completamente omitido. No entanto, a casa anteriormente trancada é descriptografada e aberta, mesmo que o Yubikey seja desconectado.

Como posso fazer com que o U2F seja usado para qualquer autenticação? Estou ciente pam-u2f, mas se for relevante aqui, não sei como. Não consigo comparar os recursos para proteger o login de usuário 'tradicional' com pam-u2fesse cenário. Eles sempre começam com a criação das chaves, mas elas parecem ser gerenciadas neste systemd-homedcaso (não consegui encontrar informações definitivas sobre isso).

Responder1

Eu descobri e gostaria de compartilhar minhas descobertas com você, caso alguém se depare com o mesmo problema.

Tudo tem a ver com a configuração do PAM. O que pude perceber a partir de diferentes descobertas na web é que isso depende muito da distribuição Linux usada. No meu caso, no Arch Linux, o system-autharquivo padrão, responsável pela autenticação do usuário, era o seguinte:

$ cat /etc/pam.d/system-auth

#%PAM-1.0

auth       required                    pam_faillock.so      preauth
auth       [success=2 default=ignore]  pam_unix.so          try_first_pass nullok
-auth      [success=1 default=ignore]  pam_systemd_home.so
auth       [default=die]               pam_faillock.so      authfail
auth       optional                    pam_permit.so
auth       required                    pam_env.so
auth       required                    pam_faillock.so      authsucc
# ...

Isso significa que o pam_unix.somódulo (faz autenticação por senha) é executado primeiro e pula os dois módulos seguintes em caso de sucesso. Portanto se a senha estiver correta, pam_systemd_home.sonunca será executado, portanto não consultará o U2F. Como a senha da conta está inscrita como chave LUKS, é suficiente desbloquear o contêiner da partição inicial.

!!! CUIDADO !!!

Como sempre, ao mexer na configuração do PAM, sempre mantenha um shell de root aberto o tempo todo até que você tenha verificado suas alterações com sucesso, ou você pode ficar fora do seu PC!

Eu queria obter autenticação apenas com meu dispositivo FIDO2, então fiz o seguinte:

cat /etc/pam.d/system-auth
#%PAM-1.0

auth       required                    pam_faillock.so      preauth
-auth      [success=2 default=ignore]  pam_systemd_home.so
auth       [success=1 default=ignore]  pam_unix.so          try_first_pass nullok
auth       [default=die]               pam_faillock.so      authfail
auth       optional                    pam_permit.so
auth       required                    pam_env.so
auth       required                    pam_faillock.so      authsucc

Agora pam_systemd_home.soé executado primeiro e irá ignorar o prompt de senha padrão em caso de sucesso. Para o LUKS, isso também é suficiente, pois o dispositivo FIDO2 está registrado como um token lá.

Se você gostaria de ter um 2FA 'real', tudo que você precisa fazer é alterar as configurações [success=2 default=ignore]e [success=1...para requireduns.

informação relacionada