Como posso exigir o MFA somente quando ele estiver configurado?

Como posso exigir o MFA somente quando ele estiver configurado?

Gostaria de exigir que todos os usuários usassem MFA com o Google Authenticator. Cada vez que adiciono um novo usuário, desejo permitir que ele faça login usando sua chave SSH apenas uma vez e, após o login, exija que ele crie uma chave secreta executando a configuração do GAuth em seu arquivo .bash_login. Isso será criado ~/.google_authenticatorem seu diretório inicial. eu seguiestas instruções(Ctrl+F "Outro método para forçar a criação") para configurar meu sshd_confige pam.d. Aqui estão eles, com comentários removidos:

/etc/ssh/sshd_config

X11Forwarding yes
PrintMotd no

AcceptEnv LANG LC_*

Subsystem   sftp    /usr/lib/openssh/sftp-server

AllowUsers me him
PermitRootLogin no
MaxStartups 15
UsePAM yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive

/etc/pam.d/sshd

# Standard Un*x authentication.
#@include common-auth

account    required     pam_nologin.so

# Standard Un*x authorization.
@include common-account

session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so close

session    required     pam_loginuid.so

session    optional     pam_keyinit.so force revoke

@include common-session

session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

session    optional     pam_mail.so standard noenv # [1]

session    required     pam_limits.so

session    required     pam_env.so # [1]

session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale

session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so open

# Standard Un*x password updating.
@include common-password

auth required pam_google_authenticator.so nullok

Pelo que entendi, o "nullok" na última linha significa que, se nenhuma chave secreta tiver sido configurada, nada será necessário para satisfazer esse requisito de autenticação. Mas quando tento fazer login com um usuário que não possui nenhuma chave secreta configurada, recebo algo como o seguinte:

$ ssh him@my_device
[email protected]: Permission denied (keyboard-interactive).

Depois que o .google_authenticatorarquivo for criado, o login deverá prosseguir sem problemas. Como posso permitir esse tipo de login enquanto .google_authenticatornão estiver presente?

A propósito, este é o Ubuntu 18.04 LTS.

Responder1

Notei uma atualização no README do projeto adicionando informações sobre a nullokopção.

PAM requires at least one `SUCCESS` answer from a module, and `nullok`
causes this module to say `IGNORE`. This means that if this option is
used at least one other module must have said `SUCCESS`. One way to do
this is to add `auth required pam_permit.so` to the end of the PAM
config.

de: https://github.com/google/google-authenticator-libpam/commit/5e804ec11104a1ab17ce02d0681130ded037f39b

informação relacionada