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-u2f
esse cenário. Eles sempre começam com a criação das chaves, mas elas parecem ser gerenciadas neste systemd-homed
caso (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-auth
arquivo 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.so
mó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.so
nunca 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 required
uns.