CLI & Operação

2FA trancou você fora do admin do Magento? Resolve pela CLI

O módulo TwoFactorAuth traz três comandos justamente para esse dia. Nenhum deles pede acesso ao banco, e nenhum deles deixa a loja sem segundo fator depois.

Por Roger Takemiya · Publicado em · 4 min de leitura

Cenário de sempre: o dono da loja trocou de celular, restaurou o backup, e o Google Authenticator veio sem as contas. O admin pede o código de seis dígitos, ninguém tem o código, e a loja está com pedido preso esperando alguém entrar.

A internet vai te mandar apagar linha do banco ou desligar o módulo. As duas saídas funcionam e as duas deixam sujeira. O Magento tem comando pronto para isso desde que o 2FA virou obrigatório, no 2.4.0.

Primeiro, o código do provider

O comando de reset pede o usuário e o código do provider, não o nome bonito que aparece na tela. Para listar:

bin/magento security:tfa:providers

A saída traz os quatro que vêm no módulo:

CódigoNa tela
googleGoogle Authenticator
duo_securityDuo Security
authyAuthy
u2fkeyU2F Devices

Errar aqui é comum: muita gente digita duo e leva um erro de provider desconhecido. É duo_security, com underline.

O comando que resolve

Um usuário, um provider:

bin/magento security:tfa:reset roger google

A resposta é Provider Google Authenticator has been reset for user roger. O que aconteceu por dentro: o Magento zerou a configuração daquele provider para aquele usuário, e só dele. Os outros administradores continuam com o 2FA deles intacto, e os outros providers desse mesmo usuário também.

No próximo login o admin mostra a tela de configuração de novo, com QR code novo. Nenhum passo extra, nenhum cache para limpar.

Se você nem lembra o nome de usuário, ele sai do banco em uma linha:

SELECT username, email FROM admin_user WHERE is_active = 1;

Quando não dá para ler o QR code

Acontece em servidor de homologação, em pipeline de teste ou quando você precisa deixar o mesmo segredo em várias máquinas. Existe um terceiro comando que grava o segredo direto:

bin/magento security:tfa:google:set-secret roger JBSWY3DPEHPK3PXP

O segredo tem que estar em base32, que é o formato que o Google Authenticator entende. O comando grava e já marca o provider como ativo para aquele usuário, então ele nem passa pela tela de configuração — vai direto para a pergunta do código.

Vale o aviso: segredo que passa pela linha de comando fica no histórico do shell. Em produção, prefira o reset e o QR code.

O que eu não faria

Apagar linha em tfa_user_config. Funciona, mas a tabela guarda em encoded_providers e encoded_config tudo que o usuário tinha registrado, criptografado com a crypt key da loja. Você joga fora mais do que precisava, e num servidor onde nem sempre há acesso ao MySQL. O comando faz o mesmo serviço, por provider.

Rodar module:disable Magento_TwoFactorAuth. É a resposta mais comum em fórum e a pior de todas: derruba o segundo fator da loja inteira, não só do seu usuário, e quase sempre alguém esquece de religar. Painel de admin exposto é a porta de entrada favorita de ataque de força bruta.

Um caso diferente merece outra solução: se o problema é que o admin foi configurado só com Duo ou Authy e o serviço externo caiu, o que trava não é o usuário, é a política. Aí o conserto é trocar o provider aceito:

bin/magento config:set twofactorauth/general/force_providers google
bin/magento cache:clean config

Depois de entrar, revise a política com calma. O que vale ligar num admin exposto está no guia de segurança e hardening do Magento 2.

Perguntas rápidas

Preciso de acesso ao banco para rodar esses comandos?

Não. Basta SSH no servidor e permissão para rodar o bin/magento com o usuário dono dos arquivos. O comando acessa o banco pelas credenciais que já estão no app/etc/env.php.

O reset derruba o 2FA dos outros administradores?

Não. O comando recebe um nome de usuário e um código de provider, e só mexe nessa combinação. Os demais usuários continuam exatamente como estavam.

Esses comandos existem no Magento Open Source ou só no Adobe Commerce?

Existem nos dois. Eles vêm no módulo Magento_TwoFactorAuth, que faz parte do security-package instalado por padrão desde o 2.4.0.

Pra conferir na fonte

  1. TfaReset.php — comando security:tfa:reset — GitHub
  2. GoogleSecret.php — comando security:tfa:google:set-secret — GitHub
  3. TwoFactorAuth etc/di.xml — lista de providers — GitHub
  4. Two-Factor Authentication — configuração — Adobe Experience League

2fa admin cli

Precisa de um orçamento? Ficarei feliz em ajudar. Clique Aqui