Post

Tutorial Completo de Autenticação Multifatorial (MFA) em Linux

Guia completo para implementação de Autenticação Multifatorial (MFA) em sistemas Linux, incluindo configuração com PAM, Google Authenticator, U2F/FIDO2, integração com LDAP e automação com Ansible.

Tutorial Completo de Autenticação Multifatorial (MFA) em Linux

Introdução

Com o aumento das ameaças cibernéticas, proteger o acesso a sistemas críticos é uma prioridade em ambientes de TI. A Autenticação Multifatorial (MFA) é uma das ferramentas de segurança mais eficazes para proteger sistemas, adicionando uma camada extra de verificação além da senha, que ajuda a mitigar riscos como ataques de phishing, roubo de credenciais e força bruta.

Este tutorial aborda, em detalhes, como implementar MFA em sistemas Linux utilizando várias opções, incluindo Google Authenticator, FreeOTP, chaves de segurança U2F/FIDO2, SSSD com LDAP e integrações com Active Directory e FreeIPA para cenários corporativos e híbridos. Além disso, apresenta uma seção completa sobre automação de configuração de MFA usando Ansible, que facilita a aplicação em larga escala, garantindo padronização e segurança em ambientes com múltiplos servidores.

A estrutura foi projetada para que você possa configurar MFA de forma incremental e adaptável, independente da complexidade do seu ambiente. A integração com ferramentas como PAM, SSH e Ansible torna possível adaptar o MFA às necessidades específicas de segurança, desde configurações locais até autenticação centralizada em redes corporativas. Ao final do tutorial, você estará apto a aplicar, gerenciar e automatizar MFA em sistemas Linux, oferecendo uma segurança robusta para proteger seus recursos e dados.


Índice


1. Introdução à Autenticação Multifatorial (MFA)

Objetivo

Entender o conceito de MFA, sua importância para a segurança em sistemas Linux e os benefícios práticos em diferentes ambientes, como servidores corporativos e estações de trabalho.

O Que é Autenticação Multifatorial?

A Autenticação Multifatorial (MFA) é um método de proteção que requer duas ou mais etapas de autenticação para verificar a identidade de um usuário. Diferente da autenticação tradicional de único fator, como senhas, o MFA adiciona camadas extras de segurança, tornando muito mais difícil que um invasor consiga acesso, mesmo que obtenha um dos fatores de autenticação.

Os Três Fatores de Autenticação

Os métodos de MFA normalmente se baseiam em combinar fatores de autenticação, classificados em três categorias principais:

  1. Algo que você sabe: como uma senha ou um PIN.
  2. Algo que você tem: como um token, um dispositivo móvel, ou uma chave física U2F.
  3. Algo que você é: como impressões digitais, reconhecimento facial, ou outra forma de biometria.
Tipo de Fator Exemplo Benefícios
Conhecimento Senha, PIN Fácil implementação, mas vulnerável a roubo de senha
Posse Token, chave U2F, smartphone Adiciona uma barreira física, mais seguro
Biometria Impressão digital, face Alta segurança, único por indivíduo

Benefícios do MFA em Ambientes Corporativos e de Alta Segurança

  • Maior Resiliência contra Ataques de Phishing e Engenharia Social: Mesmo que um invasor obtenha a senha do usuário, o segundo fator impede o acesso não autorizado.
  • Conformidade e Regulamentação: Muitos regulamentos de segurança, como PCI-DSS e GDPR, recomendam ou exigem MFA para proteger dados sensíveis.
  • Proteção de Acessos Remotos e Servidores Críticos: Em servidores Linux, onde o acesso remoto geralmente é feito por SSH, a configuração de MFA protege contra acessos indevidos.

2. Configuração Básica de Autenticação Multifatorial com PAM no Linux

Objetivo

Aprender a configurar o MFA no Linux usando o PAM (Pluggable Authentication Modules), entendendo sua estrutura modular e os ajustes de configuração para permitir o uso de fatores adicionais de autenticação.

O Que é PAM e Como Ele Funciona?

PAM (Módulos de Autenticação Plugáveis) é um sistema de gerenciamento de autenticação usado no Linux que permite configurar e controlar como os usuários são autenticados em vários serviços e aplicações. Com o PAM, o Linux pode ser configurado para exigir autenticação multifatorial (MFA) de forma flexível, definindo regras específicas para cada serviço de autenticação (como SSH, login no sistema e sudo).

  • Arquivos de Configuração: O PAM utiliza arquivos de configuração específicos localizados em /etc/pam.d/, onde cada serviço tem seu próprio arquivo (por exemplo, /etc/pam.d/sshd para SSH e /etc/pam.d/sudo para comandos sudo).
  • Sintaxe do PAM: As configurações do PAM seguem a sintaxe type control module_path arguments, onde:
    • type: Tipo de função (e.g., auth, account, password, session).
    • control: Comportamento em caso de falha (required, requisite, sufficient, optional).
    • module_path: Caminho para o módulo PAM (e.g., /lib/security/pam_google_authenticator.so).
    • arguments: Parâmetros específicos para cada módulo.

Configurando o MFA Usando PAM

Abaixo está um exemplo básico de como configurar o MFA usando o PAM para adicionar um segundo fator ao processo de login no Linux. Neste exemplo, usaremos o módulo pam_google_authenticator, mas o mesmo conceito pode ser adaptado para outras soluções.

Passo a Passo
  1. Instale o Módulo PAM do Google Authenticator:

    No caso do Google Authenticator, é necessário instalar o módulo PAM específico. Execute:

    1
    2
    
    sudo apt update
    sudo apt install libpam-google-authenticator
    

    Nota: Para distribuições baseadas em RHEL (Red Hat/CentOS), use o comando sudo yum install google-authenticator.

  2. Configure o Google Authenticator para Cada Usuário:

    Cada usuário precisa configurar seu MFA individualmente. Com a conta do usuário, execute:

    1
    
    google-authenticator
    

    Este comando gera um QR code para configuração no aplicativo de autenticação (Google Authenticator, FreeOTP, ou similar). Também fornece uma chave secreta e códigos de backup em caso de perda do dispositivo.

    Exemplo de Perguntas Durante a Configuração:

    • “Deseja que tokens de autenticação sejam temporais (Time-based)?”
      • Responda com “y” para configurar tokens temporais TOTP.
    • “Deseja atualizar o arquivo .google_authenticator (guardar configurações)?”
      • Responda “y” para salvar as configurações.
    • “Deseja configurar limites de taxa de login para proteger contra ataques de força bruta?”
      • Responder “y” é recomendado para segurança adicional.
  3. Configure o PAM para Utilizar o Módulo do Google Authenticator:

    Agora, edite o arquivo de configuração de PAM do serviço que deseja proteger. Como exemplo, para proteger o login SSH:

    1
    
    sudo nano /etc/pam.d/sshd
    

    Adicione a seguinte linha antes da linha que menciona pam_unix.so:

    1
    
    auth required pam_google_authenticator.so
    

    Isso faz com que o PAM exija autenticação do Google Authenticator para acessos SSH.

  4. Configuração do SSH para Exigir MFA:

    Modifique o arquivo de configuração do SSH para habilitar a autenticação com MFA. Edite o arquivo /etc/ssh/sshd_config:

    1
    
    sudo nano /etc/ssh/sshd_config
    

    Altere as seguintes linhas para garantir que a autenticação com senha e o uso de MFA estão habilitados:

    1
    2
    
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,password publickey,keyboard-interactive
    
    • ChallengeResponseAuthentication: Ativado para que o SSH solicite o MFA.
    • AuthenticationMethods: Esta linha configura o SSH para exigir senha + MFA ou apenas MFA.
  5. Reinicie o Serviço SSH:

    Para aplicar as configurações:

    1
    
    sudo systemctl restart sshd
    

    Atenção: Teste a nova configuração em uma sessão separada para evitar ser bloqueado do sistema. Isso permite verificar se o MFA está funcionando corretamente antes de encerrar a sessão atual.

Exemplo Prático e Tabela de Configuração PAM

Parâmetro do PAM Descrição Exemplo
auth Verifica a identidade do usuário auth required pam_google_authenticator.so
required Exige que o módulo passe para prosseguir auth required pam_google_authenticator.so
/lib/security/*.so Caminho para os módulos de segurança PAM /lib/security/pam_google_authenticator.so
pam_google_authenticator.so Módulo específico para TOTP/MFA com Google Authenticator auth required pam_google_authenticator.so

Considerações Finais

Com essa configuração, você configurou uma camada básica de MFA para acessos SSH no Linux usando PAM. Esse mesmo método pode ser aplicado para qualquer outro serviço que utilize o PAM (como o sudo), bastando editar o arquivo correspondente em /etc/pam.d/.


3. MFA com Google Authenticator no Linux

Objetivo

Demonstrar como configurar o MFA no Linux usando o Google Authenticator, abordando desde a instalação até configurações avançadas como backup e recuperação de códigos TOTP.

Visão Geral do Google Authenticator

Google Authenticator é uma ferramenta popular para gerar códigos TOTP (Time-based One-Time Passwords) usados em MFA. Ao configurar o Google Authenticator no Linux, ele trabalha em conjunto com o módulo libpam-google-authenticator do PAM, permitindo que o sistema exija um segundo fator (código temporário) além da senha do usuário.

Passo a Passo de Configuração do Google Authenticator

1. Instale o Módulo PAM do Google Authenticator

Para começar, é necessário instalar o módulo PAM do Google Authenticator:

1
2
   sudo apt update
   sudo apt install libpam-google-authenticator

Em distribuições baseadas em Red Hat, você pode instalar com:

1
   sudo yum install google-authenticator
2. Configuração do Google Authenticator para o Usuário

Cada usuário precisa configurar o Google Authenticator em sua conta para gerar os códigos TOTP individuais. Com a conta do usuário, execute:

1
   google-authenticator

Durante a execução, o Google Authenticator guiará o usuário por uma série de perguntas. Abaixo estão as respostas recomendadas para maior segurança:

  • Criar Tokens Baseados em Tempo?: Responda com y para configurar tokens temporais (TOTP).
  • Atualizar Arquivo .google_authenticator?: Responda y para salvar a configuração.
  • Limitar a Taxa de Login para Proteger Contra Ataques de Força Bruta?: Responder y é recomendado para limitar tentativas de autenticação e aumentar a segurança.

Nota: Ao final da configuração, o Google Authenticator exibirá um QR code. Esse código pode ser escaneado com um aplicativo autenticador (Google Authenticator, FreeOTP, ou Authenticator) em dispositivos móveis para gerar códigos de acesso.

3. Configuração do PAM para Usar o Google Authenticator

Para adicionar o Google Authenticator como segundo fator em um serviço, edite o arquivo de configuração PAM do serviço desejado, como SSH:

1
   sudo nano /etc/pam.d/sshd

Adicione a linha abaixo antes da linha pam_unix.so:

1
   auth required pam_google_authenticator.so

Isso fará com que o PAM exija o código MFA do Google Authenticator em cada autenticação SSH.

4. Ajuste de Configuração do SSH

Modifique o arquivo de configuração do SSH para exigir o Google Authenticator como segundo fator:

1
   sudo nano /etc/ssh/sshd_config

Edite as seguintes configurações:

1
2
   ChallengeResponseAuthentication yes
   AuthenticationMethods publickey,password publickey,keyboard-interactive
  • ChallengeResponseAuthentication: Habilita a autenticação interativa, permitindo que o SSH solicite o código do Google Authenticator.
  • AuthenticationMethods: Configura o SSH para exigir senha e MFA (código TOTP).

Em seguida, reinicie o serviço SSH para aplicar as mudanças:

1
   sudo systemctl restart sshd

Importante: Teste essa configuração em uma nova sessão para garantir que a autenticação MFA funcione antes de fechar a sessão atual.

Backup e Recuperação dos Códigos MFA

  1. Códigos de Backup: Durante a configuração inicial, o Google Authenticator fornece uma lista de códigos de backup. Esses códigos podem ser usados em caso de perda do dispositivo de autenticação. É recomendável que o usuário anote e armazene esses códigos em um local seguro, como um gerenciador de senhas.

  2. Exportação e Restauração de Configurações: O arquivo de configuração do Google Authenticator (~/.google_authenticator) contém as chaves secretas e configurações do usuário. Em caso de troca de dispositivo, é possível:
    • Fazer um backup seguro deste arquivo.
    • Transferi-lo para outro dispositivo, mantendo as mesmas configurações de MFA.
  3. Alternativa de Backup com Aplicativos de Autenticação Multipla: Aplicativos como o Authy permitem backups criptografados de chaves TOTP, facilitando a recuperação em caso de perda do dispositivo principal.

Exemplo Prático de Configuração Completa

Parâmetro Configuração Descrição
auth required pam_google_authenticator.so Configura o PAM para exigir Google Authenticator em logins SSH
SSH ChallengeResponseAuthentication yes Permite autenticação interativa para MFA
SSH AuthenticationMethods publickey,password publickey,keyboard-interactive Configura métodos de autenticação SSH com senha + TOTP

Considerações de Segurança

  • Revogação e Rotação de Tokens: Caso um dispositivo de autenticação seja comprometido, o usuário deve revogar o acesso e reconfigurar o Google Authenticator com uma nova chave secreta.
  • Armazenamento Seguro do Arquivo .google_authenticator: Esse arquivo contém informações sensíveis; garanta permissões restritas (chmod 600 ~/.google_authenticator) para evitar acessos não autorizados.

Com esta configuração, o sistema está preparado para autenticação multifatorial com Google Authenticator, fornecendo uma camada extra de segurança para acessos SSH e outras áreas protegidas por PAM.


4. Configuração de MFA com Chaves de Segurança U2F/FIDO2 no Linux

Objetivo

Demonstrar como configurar a autenticação multifatorial usando chaves de segurança U2F/FIDO2, abordando desde a configuração básica até considerações de segurança e recuperação de acesso.

O Que é U2F/FIDO2?

U2F (Universal 2nd Factor) e FIDO2 são padrões de autenticação desenvolvidos pela FIDO Alliance e amplamente adotados para MFA. Diferente dos métodos baseados em senhas e códigos TOTP, as chaves de segurança U2F/FIDO2 utilizam criptografia assimétrica e um dispositivo físico para autenticação. Essa abordagem reduz a dependência de senhas e elimina riscos associados a ataques de phishing.

  • Chaves Físicas: Dispositivos USB, NFC ou Bluetooth (e.g., YubiKey, SoloKey), que fornecem autenticação segura ao serem conectados ao computador e acionados pelo usuário.
  • Benefícios: Oferece alta resistência contra phishing, já que a autenticação depende de uma interação física com o dispositivo.

Passo a Passo de Configuração de MFA com U2F/FIDO2 no Linux

1. Instalar o Módulo PAM para U2F

O módulo pam-u2f permite que o Linux utilize chaves U2F como um segundo fator de autenticação. Primeiro, instale o módulo:

1
2
   sudo apt update
   sudo apt install libpam-u2f

Para distribuições baseadas em RHEL, use sudo yum install pam-u2f.

2. Configurar e Registrar a Chave de Segurança U2F

Antes de configurar o PAM para exigir autenticação U2F, registre a chave de segurança U2F para o usuário.

  1. Crie o Arquivo de Configuração U2F:

    O arquivo .config/Yubico/u2f_keys no diretório home do usuário armazena informações das chaves de segurança registradas. Para configurar, use o comando:

    1
    
    pamu2fcfg > ~/.config/Yubico/u2f_keys
    

    Esse comando registra a chave U2F associada ao usuário atual. Você será solicitado a inserir a chave no dispositivo USB e tocar ou pressionar o botão na chave para concluir o processo.

  2. Permissões do Arquivo:

    Garanta que apenas o usuário possa acessar o arquivo de configuração:

    1
    
    chmod 600 ~/.config/Yubico/u2f_keys
    
3. Configurar o PAM para Exigir U2F em Acessos SSH

Para adicionar a autenticação U2F como um requisito para login SSH, edite o arquivo PAM do SSH:

1
   sudo nano /etc/pam.d/sshd

Adicione a linha abaixo antes de pam_unix.so para exigir a chave de segurança:

1
   auth required pam_u2f.so
4. Ajuste de Configuração do SSH

Em seguida, configure o SSH para aceitar autenticação baseada em MFA. Abra o arquivo de configuração do SSH:

1
   sudo nano /etc/ssh/sshd_config

Modifique as seguintes configurações para habilitar a autenticação MFA com U2F:

1
2
   ChallengeResponseAuthentication yes
   AuthenticationMethods publickey,password publickey,keyboard-interactive

Em seguida, reinicie o serviço SSH para que as mudanças entrem em vigor:

1
   sudo systemctl restart sshd

Importante: Sempre teste a nova configuração em uma nova sessão antes de sair da sessão atual, para garantir que a autenticação U2F funciona corretamente e evitar o risco de ser bloqueado do sistema.

5. Configuração Opcional: Permitir Múltiplas Chaves por Usuário

Para usuários que desejam registrar mais de uma chave (por exemplo, uma chave de backup), basta adicionar as novas entradas no arquivo u2f_keys. Execute pamu2fcfg com a chave adicional e acrescente o output ao arquivo ~/.config/Yubico/u2f_keys.

Considerações de Segurança e Recuperação

  1. Chaves de Backup: Recomenda-se registrar uma segunda chave como backup. Se a chave principal for perdida, a chave de backup pode ser usada para acessar o sistema.
  2. Segurança Física da Chave: Como a chave é um dispositivo físico, ela precisa ser mantida em local seguro. Em ambientes corporativos, considere uma política de recuperação de dispositivos em caso de perda.
  3. Proteção Contra Remoção: Altere as permissões do arquivo u2f_keys para chmod 400 e mantenha backups seguros fora do servidor principal.

Exemplo Prático de Configuração Completa para SSH com U2F

Parâmetro Configuração Descrição
auth required pam_u2f.so Configura o PAM para exigir autenticação U2F
SSH ChallengeResponseAuthentication yes Permite autenticação interativa
SSH AuthenticationMethods publickey,password publickey,keyboard-interactive Exige senha e U2F

Resumo: Benefícios da Configuração U2F/FIDO2

  • Segurança Avançada: Protege contra ataques de phishing e força bruta.
  • Facilidade de Uso: O usuário só precisa conectar a chave e pressionar um botão.
  • Versatilidade: Compatível com outras plataformas e serviços além do Linux, o que facilita o uso em ambientes híbridos.

Com esta configuração, o sistema Linux agora usa MFA com chaves de segurança U2F/FIDO2, garantindo uma camada extra de segurança para acessos SSH e protegendo contra ataques remotos.


5. MFA com Autenticação via Código por E-mail ou SMS (OTPs)

Objetivo

Demonstrar como configurar a autenticação multifatorial baseada em OTPs (One-Time Passwords) enviados via e-mail ou SMS, abordando a criação de scripts personalizados para enviar códigos temporários e configurá-los no PAM.

Visão Geral

OTP por e-mail ou SMS permite que o usuário receba códigos temporários diretamente em seu dispositivo móvel ou e-mail, sem necessidade de aplicativos autenticadores ou chaves físicas. Essa abordagem pode ser uma solução viável para usuários que não têm acesso a dispositivos compatíveis com TOTP ou U2F.

  • Limitações: O envio de códigos OTP via e-mail ou SMS é menos seguro, pois mensagens podem ser interceptadas ou acessadas por terceiros. No entanto, é uma opção prática em ambientes que priorizam a conveniência sobre segurança de alto nível.
  • Pré-requisitos: A configuração requer um servidor SMTP (para e-mails) ou uma API de envio de SMS (como Twilio ou AWS SNS).

Passo a Passo para Configuração de MFA com OTP por E-mail

1. Instalar Dependências Necessárias

Para enviar e-mails a partir de scripts no Linux, você pode usar o mailutils (para e-mails SMTP) ou bibliotecas Python que permitem integrar APIs de e-mail ou SMS.

1
2
sudo apt update
sudo apt install mailutils
2. Configuração do Script de Envio de OTPs

Crie um script em Bash que gere um código OTP e o envie por e-mail. O exemplo abaixo cria um código temporário e o envia para o e-mail do usuário.

  1. Criação do Script OTP:

    1
    
    sudo nano /usr/local/bin/send_otp.sh
    

    Insira o seguinte conteúdo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    #!/bin/bash
    
    # Parâmetros de configuração
    EMAIL="usuario@example.com"  # Substitua pelo endereço de e-mail do usuário
    OTP=$(shuf -i 100000-999999 -n 1)  # Gera um código OTP aleatório de 6 dígitos
    EXPIRE_TIME=300  # Tempo de expiração do OTP em segundos (5 minutos)
    
    # Salva o OTP e o tempo de expiração em um arquivo temporário
    echo "$OTP" > /tmp/otp_code
    echo $(( $(date +%s) + EXPIRE_TIME )) > /tmp/otp_expire_time
    
    # Envia o OTP por e-mail
    echo "Seu código OTP é: $OTP. Ele expirará em 5 minutos." | mail -s "Seu código de autenticação" $EMAIL
    

    Nota: Substitua usuario@example.com pelo e-mail do usuário e configure o SMTP para seu domínio, caso necessário.

  2. Configurar Permissões no Script:

    Dê permissões de execução ao script:

    1
    
    sudo chmod +x /usr/local/bin/send_otp.sh
    
3. Configuração do PAM para Exigir OTP

Modifique o arquivo PAM para o serviço desejado (por exemplo, SSH) para incluir a verificação de OTP.

  1. Edite o Arquivo PAM do SSH:

    1
    
    sudo nano /etc/pam.d/sshd
    
  2. Adicione o Seguinte Bloco de Código:

    1
    
    auth required pam_exec.so /usr/local/bin/validate_otp.sh
    

    Esse comando usa pam_exec.so para chamar um script que valida o OTP. Vamos criar o script de validação a seguir.

4. Criação do Script de Validação de OTP

Crie o script que verifica se o código OTP inserido pelo usuário é válido.

  1. Criação do Script de Validação:

    1
    
    sudo nano /usr/local/bin/validate_otp.sh
    

    Insira o seguinte conteúdo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    #!/bin/bash
    
    # Lê o OTP armazenado e o tempo de expiração
    OTP=$(cat /tmp/otp_code)
    EXPIRE_TIME=$(cat /tmp/otp_expire_time)
    
    # Lê o OTP fornecido pelo usuário
    read -p "Digite o código OTP enviado para o seu e-mail: " USER_OTP
    
    # Verifica se o código expirou
    CURRENT_TIME=$(date +%s)
    if [[ $CURRENT_TIME -gt $EXPIRE_TIME ]]; then
        echo "Código OTP expirado."
        exit 1
    fi
    
    # Verifica se o OTP é válido
    if [[ "$USER_OTP" == "$OTP" ]]; then
        echo "Código OTP válido."
        exit 0
    else
        echo "Código OTP inválido."
        exit 1
    fi
    
  2. Configurar Permissões no Script:

    Dê permissões de execução ao script:

    1
    
    sudo chmod +x /usr/local/bin/validate_otp.sh
    
5. Configuração do SSH para Ativar Challenge-Response Authentication

No arquivo /etc/ssh/sshd_config, certifique-se de que a autenticação interativa está habilitada:

1
ChallengeResponseAuthentication yes

Reinicie o serviço SSH para aplicar as alterações:

1
sudo systemctl restart sshd

Nota: É importante testar o MFA em uma nova sessão SSH para garantir que a configuração está correta antes de encerrar a sessão atual.

Exemplo Prático de Configuração Completa

Parâmetro Configuração Descrição
pam_exec.so auth required pam_exec.so /usr/local/bin/validate_otp.sh Chama o script de validação de OTP
SSH ChallengeResponseAuthentication yes Habilita autenticação interativa

Considerações de Segurança

  • Validade e Expiração do Código: O tempo de expiração do código é essencial para evitar que o OTP seja usado repetidamente. Ajuste o tempo conforme a necessidade de segurança.
  • Armazenamento Temporário do OTP: Os arquivos /tmp/otp_code e /tmp/otp_expire_time contêm dados sensíveis e devem ser protegidos. Considere criptografar essas informações ou armazená-las em um local seguro.
  • Alternativas de API para SMS: Para enviar OTPs por SMS, considere usar um serviço de API, como Twilio ou AWS SNS, para garantir a confiabilidade e segurança do envio.

Conclusão

Com esta configuração, o sistema Linux agora está pronto para enviar OTPs via e-mail ou SMS como uma camada extra de segurança para MFA. Essa abordagem é particularmente útil para usuários que precisam de flexibilidade na autenticação sem aplicativos específicos ou chaves U2F.


6. Alternativas de Código Aberto para MFA: FreeOTP e Authenticator

Objetivo

Apresentar as alternativas FreeOTP e Authenticator como opções de código aberto para geração de códigos de autenticação multifatorial, comparando suas funcionalidades com o Google Authenticator e destacando as vantagens de cada um para ambientes Linux.

Visão Geral do FreeOTP e do Authenticator

FreeOTP e Authenticator são aplicativos de autenticação de código aberto que suportam TOTP (Time-based One-Time Password) e HOTP (HMAC-based One-Time Password). Desenvolvidos como alternativas ao Google Authenticator, eles oferecem maior controle de dados, sem a dependência de uma empresa específica e com suporte ao armazenamento seguro dos dados de autenticação.

  • FreeOTP: Um aplicativo mantido pela Red Hat, disponível para Android e iOS. Ele é leve, confiável, e suporta os métodos TOTP e HOTP.
  • Authenticator: Um aplicativo de código aberto mais versátil, disponível para Linux, Android e iOS, com funcionalidades adicionais como backups criptografados e sincronização de tokens.

Vantagens do Uso de FreeOTP e Authenticator

Característica FreeOTP Authenticator
Código Aberto Sim Sim
Suporte TOTP e HOTP Sim Sim
Backup Criptografado Não Sim
Compatibilidade de Plataforma Android, iOS Android, iOS, Linux Desktop
Sincronização entre Dispositivos Não Sim
QR Code Scan Sim Sim
  • Privacidade e Controle: Sendo soluções de código aberto, os usuários têm mais transparência sobre o armazenamento e gerenciamento de seus dados.
  • Backup Criptografado (somente Authenticator): Permite salvar tokens de autenticação de forma segura, facilitando a recuperação de contas em caso de perda de dispositivo.

Comparação com Google Authenticator

O Google Authenticator é amplamente utilizado, mas não oferece backup criptografado ou sincronização entre dispositivos, tornando o FreeOTP e o Authenticator opções mais versáteis para usuários que desejam funcionalidades adicionais e controle dos dados.

Passo a Passo de Configuração com FreeOTP e Authenticator no Linux

Nesta seção, configuraremos o MFA usando o FreeOTP e o Authenticator, integrando-os ao PAM para proteger sessões de login e SSH.

1. Instalar o Módulo PAM para MFA

Assim como na configuração do Google Authenticator, precisamos do módulo libpam-google-authenticator para utilizar TOTP com PAM:

1
2
sudo apt update
sudo apt install libpam-google-authenticator

Para distribuições Red Hat, utilize sudo yum install google-authenticator.

2. Configurar FreeOTP e Authenticator para o Usuário

Cada usuário deve configurar o FreeOTP ou Authenticator para gerar códigos temporários.

  1. Gerar a Chave Secreta para TOTP:

    Para começar, o usuário precisa configurar uma chave secreta única para gerar os códigos temporários. Com a conta do usuário, execute:

    1
    
    google-authenticator
    

    Durante o processo, será gerado um QR code. Esse QR pode ser escaneado com o FreeOTP ou Authenticator para registrar a conta.

  2. Configurações Recomendadas para o Google Authenticator:

    Responda y para as opções a seguir para melhorar a segurança:

    • Tokens Baseados em Tempo: y para tokens TOTP.
    • Limitar Taxa de Login: y para proteger contra ataques de força bruta.
    • Atualizar Arquivo .google_authenticator: y para salvar as configurações.
3. Configuração do PAM para Integrar FreeOTP e Authenticator

Para configurar o PAM, edite o arquivo de configuração de PAM para o serviço desejado, como SSH:

1
sudo nano /etc/pam.d/sshd

Adicione a linha abaixo antes de pam_unix.so para exigir o TOTP:

1
auth required pam_google_authenticator.so

Essa configuração fará com que o SSH solicite o código TOTP, que pode ser gerado tanto pelo FreeOTP quanto pelo Authenticator.

4. Ajuste de Configuração do SSH para Ativar MFA

No arquivo /etc/ssh/sshd_config, habilite a autenticação interativa e configure os métodos de autenticação para suportar MFA:

1
2
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,password publickey,keyboard-interactive

Reinicie o serviço SSH para aplicar as configurações:

1
sudo systemctl restart sshd

Importante: Teste a configuração MFA em uma nova sessão SSH para garantir que o sistema está funcionando corretamente e evitar bloqueios.

Backup e Restauração com Authenticator

  1. Backup Criptografado: O Authenticator permite que o usuário crie um backup seguro de suas chaves TOTP em uma nuvem criptografada ou localmente, o que facilita a restauração em novos dispositivos.
  2. Sincronização entre Dispositivos: Em dispositivos que suportam Authenticator, o usuário pode sincronizar tokens para facilitar o acesso, mantendo a segurança com backups criptografados.

Exemplo Prático de Configuração Completa

Parâmetro Configuração Descrição
auth required pam_google_authenticator.so Configura o PAM para exigir TOTP
SSH ChallengeResponseAuthentication yes Habilita autenticação interativa
SSH AuthenticationMethods publickey,password publickey,keyboard-interactive Configura autenticação SSH para senha + TOTP

Considerações sobre Segurança

  • Proteção do Arquivo .google_authenticator: Como no Google Authenticator, o arquivo ~/.google_authenticator contém informações sensíveis e deve ter permissões restritas (chmod 600 ~/.google_authenticator).
  • Segurança no Backup de Chaves: Para backups de chaves com Authenticator, garanta que o arquivo de backup criptografado esteja em local seguro, com acesso restrito.

Conclusão

Com FreeOTP e Authenticator, o sistema Linux agora possui uma solução de MFA flexível, segura e de código aberto. Essas ferramentas oferecem controle sobre as chaves de autenticação e, no caso do Authenticator, uma facilidade adicional com backup criptografado e sincronização.


7. Configuração de MFA Usando FreeOTP e Authenticator

Objetivo

Configurar o MFA no Linux usando FreeOTP e Authenticator como aplicativos geradores de códigos temporários. Esta seção abrange a integração desses aplicativos ao PAM para proteger sessões SSH e login local, oferecendo maior segurança ao sistema.

Passo a Passo para Configurar FreeOTP e Authenticator com PAM

Esta configuração permitirá que usuários façam login em sessões SSH e locais no Linux utilizando FreeOTP ou Authenticator para gerar códigos TOTP.

1. Instale o Módulo PAM para TOTP

Para usar códigos TOTP com PAM, instale o módulo libpam-google-authenticator, que é compatível com FreeOTP e Authenticator:

1
2
sudo apt update
sudo apt install libpam-google-authenticator

No CentOS/RHEL, use sudo yum install google-authenticator.

2. Configuração do Google Authenticator para o Usuário

Cada usuário que quiser habilitar MFA com FreeOTP ou Authenticator precisa gerar uma chave secreta para o TOTP. Esse processo é feito executando o comando google-authenticator na conta do usuário.

  1. Execute o Google Authenticator:

    Com a conta do usuário, execute o seguinte comando para iniciar o processo de configuração:

    1
    
    google-authenticator
    

    Este comando exibe um QR code que pode ser escaneado com FreeOTP ou Authenticator, permitindo que o aplicativo gere códigos TOTP para esse usuário.

  2. Opções de Configuração:

    • Criar Tokens Baseados em Tempo?: Responda y para gerar códigos TOTP.
    • Atualizar Arquivo .google_authenticator?: Responda y para salvar as configurações.
    • Limitar a Taxa de Login?: Responda y para ativar uma limitação de tentativas de login, ajudando a proteger contra ataques de força bruta.

    Após o processo, o arquivo ~/.google_authenticator será criado no diretório home do usuário, contendo a chave secreta e configurações.

3. Configuração do PAM para Integração com FreeOTP e Authenticator

Para proteger o SSH e o login local com MFA, edite os arquivos de configuração do PAM correspondentes:

  1. Protegendo o Login SSH com MFA:

    Edite o arquivo de configuração PAM do SSH:

    1
    
    sudo nano /etc/pam.d/sshd
    

    Adicione a linha abaixo antes da linha pam_unix.so:

    1
    
    auth required pam_google_authenticator.so
    

    Isso fará com que o SSH exija um código TOTP gerado pelo FreeOTP ou Authenticator ao fazer login.

  2. Protegendo o Login Local com MFA:

    Para exigir MFA no login local, edite o arquivo de configuração de PAM de login:

    1
    
    sudo nano /etc/pam.d/login
    

    Adicione a mesma linha para exigir o TOTP:

    1
    
    auth required pam_google_authenticator.so
    

    Isso garante que ao acessar o sistema localmente, o usuário será solicitado a inserir o código TOTP além da senha.

4. Configuração do SSH para Habilitar Challenge-Response Authentication

Habilite a autenticação interativa no SSH para que o PAM solicite o código TOTP ao conectar-se via SSH:

  1. Edite o Arquivo de Configuração do SSH:

    1
    
    sudo nano /etc/ssh/sshd_config
    
  2. Habilite a Autenticação Interativa e Configure Métodos de Autenticação:

    Altere as seguintes configurações:

    1
    2
    
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,password publickey,keyboard-interactive
    

    Com estas configurações, o SSH exigirá senha + TOTP para autenticação.

  3. Reinicie o SSH:

    Para aplicar as mudanças, reinicie o serviço SSH:

    1
    
    sudo systemctl restart sshd
    

    Importante: Sempre teste a nova configuração MFA em uma nova sessão SSH para garantir que está funcionando corretamente antes de encerrar a sessão atual.

Uso do Authenticator para Geração de Códigos TOTP/HOTP

O Authenticator, disponível para Linux, Android e iOS, permite a geração e o backup de códigos TOTP e HOTP, tornando o MFA mais conveniente para usuários que desejam sincronizar e proteger tokens de autenticação.

  1. Configuração do Authenticator:

    • Baixe o aplicativo Authenticator no dispositivo desejado.
    • Escaneie o QR code gerado no comando google-authenticator.
    • O aplicativo agora exibirá códigos TOTP que podem ser usados no login SSH ou local.
  2. Backup e Sincronização com Authenticator:

    O Authenticator permite backup criptografado de chaves TOTP/HOTP, garantindo recuperação dos tokens em caso de troca de dispositivo. Para configurar o backup:

    • No aplicativo Authenticator, configure um backup criptografado e seguro.
    • Mantenha a senha de backup em local seguro para garantir acesso aos tokens quando necessário.

Considerações para Backup e Restauração

  1. Proteção do Arquivo .google_authenticator: Esse arquivo contém a chave TOTP e deve ter permissões restritas para evitar acessos indevidos. Use o comando:

    1
    
    chmod 600 ~/.google_authenticator
    
  2. Backups Criptografados com Authenticator: Authenticator permite exportar backups criptografados dos tokens, garantindo uma recuperação fácil e segura em caso de perda do dispositivo.

Exemplo de Configuração Completa para Login SSH e Local

Parâmetro Configuração Descrição
auth required pam_google_authenticator.so Exige TOTP no login SSH e local
SSH ChallengeResponseAuthentication yes Habilita autenticação interativa no SSH
SSH AuthenticationMethods publickey,password publickey,keyboard-interactive Exige senha + TOTP em autenticação SSH

Dicas de Segurança

  • Rotação de Tokens: Em caso de suspeita de comprometimento, execute google-authenticator novamente para gerar uma nova chave secreta.
  • Limitação de Tentativas: A configuração de limitação de tentativas no PAM ajuda a evitar ataques de força bruta, adicionando uma camada de segurança adicional ao MFA.
  • Backups Regulares: Para contas críticas, mantenha backups regulares das chaves TOTP em um local seguro.

Conclusão

Com FreeOTP e Authenticator, você agora tem uma solução de MFA segura, baseada em TOTP/HOTP, e de código aberto para proteger logins locais e SSH no Linux. Com funcionalidades como backups criptografados (no caso do Authenticator) e suporte para várias plataformas, esses aplicativos são opções robustas e flexíveis para usuários que buscam segurança e controle dos dados de autenticação.


8. Integração de MFA com SSSD e LDAP para Autenticação Centralizada

Objetivo

Demonstrar como integrar a autenticação multifatorial (MFA) com o SSSD (System Security Services Daemon) e LDAP para implementar uma solução de autenticação centralizada. Este método permite exigir MFA para todos os usuários autenticados no domínio, facilitando o gerenciamento centralizado de contas e o aumento da segurança de rede.

Visão Geral da Integração SSSD, LDAP e MFA

O SSSD é um daemon que permite autenticação e gerenciamento de identidade centralizado, utilizando fontes externas, como LDAP, Kerberos e Active Directory. Com o SSSD, é possível integrar o PAM para exigir MFA em conjunto com LDAP, garantindo que qualquer autenticação seja submetida ao fator adicional.

Benefícios:

  • Autenticação Centralizada: Simplifica o gerenciamento de usuários, com um único ponto de autenticação para diversos servidores.
  • Compatibilidade com PAM: Permite configurar MFA para usuários LDAP utilizando os módulos PAM.
  • Gerenciamento Corporativo de Contas: Ideal para grandes redes que utilizam LDAP ou AD, permitindo políticas de segurança consistentes e centralizadas.

Requisitos

Para configurar o SSSD com MFA, você precisará de:

  • Um servidor LDAP configurado e operacional.
  • O SSSD instalado em cada máquina cliente Linux.
  • libpam-google-authenticator ou outro módulo PAM de TOTP para gerar os códigos de autenticação.

Passo a Passo para Configuração de SSSD com LDAP e MFA

1. Instalar o SSSD e o Módulo PAM

Em cada cliente Linux que vai se autenticar contra o LDAP e exigir MFA, instale o SSSD e o módulo PAM para TOTP:

1
2
sudo apt update
sudo apt install sssd libpam-google-authenticator
2. Configurar o SSSD para Integrar-se ao Servidor LDAP
  1. Edite o Arquivo de Configuração do SSSD:

    O arquivo de configuração do SSSD está localizado em /etc/sssd/sssd.conf. Edite-o para incluir os detalhes do servidor LDAP:

    1
    
    sudo nano /etc/sssd/sssd.conf
    
  2. Exemplo de Configuração para Autenticação LDAP:

    Abaixo está uma configuração básica para integração do SSSD com um servidor LDAP:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    [sssd]
    config_file_version = 2
    services = nss, pam
    domains = EXEMPLO
    
    [domain/EXEMPLO]
    id_provider = ldap
    auth_provider = ldap
    chpass_provider = ldap
    ldap_uri = ldap://ldap.exemplo.com
    ldap_search_base = dc=exemplo,dc=com
    ldap_tls_reqcert = allow
    
    • ldap_uri: Endereço do servidor LDAP.
    • ldap_search_base: Base de pesquisa LDAP (por exemplo, dc=exemplo,dc=com).
    • ldap_tls_reqcert: Define se a conexão exige certificado TLS (defina como demand para exigir TLS).
  3. Ajuste as Permissões:

    Certifique-se de que o arquivo /etc/sssd/sssd.conf esteja protegido, pois contém credenciais sensíveis:

    1
    
    sudo chmod 600 /etc/sssd/sssd.conf
    
  4. Reinicie o SSSD:

    Após configurar o arquivo, reinicie o serviço SSSD para aplicar as configurações:

    1
    
    sudo systemctl restart sssd
    
3. Configurar PAM para Exigir MFA em Conexões LDAP

Agora, vamos editar os arquivos PAM para exigir o segundo fator de autenticação em sessões LDAP.

  1. Edite o Arquivo de Configuração PAM:

    Para autenticação local e SSH, configure o PAM para usar o Google Authenticator, editando os arquivos correspondentes:

    1
    
    sudo nano /etc/pam.d/sshd
    

    Adicione a linha abaixo antes de pam_unix.so para que o PAM solicite o código TOTP de MFA:

    1
    
    auth required pam_google_authenticator.so
    
  2. Repita a Configuração para Login Local:

    Edite o arquivo /etc/pam.d/login da mesma maneira para exigir MFA no login local:

    1
    
    auth required pam_google_authenticator.so
    

    Essas configurações garantirão que qualquer login LDAP, seja via SSH ou login local, exija um código TOTP além da senha LDAP.

4. Configuração do SSH para Challenge-Response Authentication

Para permitir MFA via SSH, habilite a autenticação interativa e configure métodos de autenticação compatíveis com PAM.

  1. Edite o Arquivo de Configuração SSH:

    1
    
    sudo nano /etc/ssh/sshd_config
    
  2. Habilite Challenge-Response e Defina Métodos de Autenticação:

    Configure as seguintes opções:

    1
    2
    
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,password publickey,keyboard-interactive
    

    Em seguida, reinicie o serviço SSH:

    1
    
    sudo systemctl restart sshd
    

Importante: Teste as configurações em uma nova sessão SSH para garantir que o acesso está funcionando corretamente e que o segundo fator é solicitado.

Exemplo Completo de Configuração

Parâmetro Configuração Descrição
SSSD [sssd] ... [domain/EXEMPLO] Configura o SSSD para autenticação LDAP
PAM auth required pam_google_authenticator.so Exige TOTP no login LDAP
SSH ChallengeResponseAuthentication yes Habilita autenticação interativa no SSH
SSH AuthenticationMethods publickey,password publickey,keyboard-interactive Exige senha + TOTP no SSH

Considerações sobre Segurança

  1. Cópia de Segurança do Arquivo .google_authenticator:
    • Armazene o arquivo .google_authenticator em um local seguro e faça backups regulares para usuários LDAP, garantindo que a recuperação seja fácil em caso de perda do dispositivo.
  2. Gerenciamento de Acesso:
    • Para gerenciar o acesso LDAP e MFA centralmente, implemente políticas no servidor LDAP, como exigência de senha forte, expiração de senha e rotação periódica de tokens TOTP.
  3. Proteção de Dados Sensíveis:
    • Garanta que o arquivo /etc/sssd/sssd.conf esteja protegido (chmod 600) para evitar exposição de configurações sensíveis.

Conclusão

Com esta configuração, o ambiente Linux agora autentica usuários LDAP com um segundo fator de autenticação TOTP, tornando o sistema mais seguro e gerenciável. O uso do SSSD com LDAP e MFA é uma solução poderosa para redes corporativas, onde a segurança e o gerenciamento centralizado de identidades são prioridades.


9. Configuração de MFA para Acesso SSH no Linux

Objetivo

Explicar como configurar o MFA especificamente para proteger conexões SSH em servidores Linux, utilizando o Google Authenticator ou chaves de segurança U2F/FIDO2 como segundo fator de autenticação. Vamos abordar a configuração detalhada para que o SSH exija um código TOTP ou uma chave física como complemento à senha ou chave SSH.

Visão Geral do Processo

Para implementar MFA no SSH, usaremos módulos PAM, como pam_google_authenticator.so ou pam_u2f.so, para exigir um fator adicional além da senha ou chave SSH. Com essa configuração, os usuários precisarão:

  • Senha + Código TOTP (Google Authenticator, FreeOTP, Authenticator)
  • Ou Senha + Chave Física (U2F/FIDO2)

Essas combinações tornam o acesso remoto mais seguro e menos vulnerável a ataques de força bruta e phishing.

Passo a Passo para Configuração de MFA com SSH

1. Instalar o Módulo PAM Necessário

Para configurar o MFA com códigos TOTP, instale o módulo PAM do Google Authenticator:

1
2
sudo apt update
sudo apt install libpam-google-authenticator

Para usar chaves de segurança U2F/FIDO2, instale o módulo pam-u2f:

1
sudo apt install libpam-u2f

Para distribuições baseadas em RHEL, use yum install com os pacotes correspondentes.

2. Configurar o MFA TOTP com Google Authenticator

Cada usuário que desejar autenticar via SSH com TOTP precisa configurar o Google Authenticator:

  1. Execute o Google Authenticator para Cada Usuário:

    Com a conta do usuário, execute:

    1
    
    google-authenticator
    

    O comando irá gerar um QR code e uma chave secreta, que podem ser escaneados e registrados no aplicativo Google Authenticator, FreeOTP, ou Authenticator.

  2. Configurações Sugeridas para Maior Segurança:

    Durante a configuração, responda y às seguintes opções:

    • Criar tokens baseados em tempo.
    • Limitar a taxa de login (ajuda a prevenir ataques de força bruta).
    • Salvar as configurações no arquivo .google_authenticator no diretório home do usuário.
3. Configuração do PAM para Integrar o MFA TOTP com SSH

Para habilitar o MFA com TOTP no SSH, edite o arquivo de configuração PAM do SSH:

1
sudo nano /etc/pam.d/sshd

Adicione a seguinte linha antes de pam_unix.so:

1
auth required pam_google_authenticator.so

Isso garantirá que o SSH solicite o código TOTP ao autenticar.

4. Configuração do SSH para Challenge-Response Authentication

Para que o SSH solicite o segundo fator de autenticação, habilite a autenticação interativa.

  1. Edite o Arquivo de Configuração SSH:

    1
    
    sudo nano /etc/ssh/sshd_config
    
  2. Ative Challenge-Response e Configure AuthenticationMethods:

    Altere as seguintes configurações:

    1
    2
    
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,password publickey,keyboard-interactive
    

    Essa configuração exigirá senha e código TOTP ou senha e chave U2F, dependendo do método configurado.

  3. Reinicie o Serviço SSH:

    Para aplicar as mudanças, reinicie o SSH:

    1
    
    sudo systemctl restart sshd
    

    Dica: Sempre teste as novas configurações em uma sessão SSH separada para garantir que o acesso está funcionando corretamente antes de encerrar a sessão atual.

5. Configuração Alternativa para Chaves de Segurança U2F/FIDO2

Para configurar o SSH para autenticação com U2F/FIDO2, siga as etapas abaixo.

  1. Registro da Chave U2F:

    Cada usuário precisa registrar sua chave U2F no arquivo .config/Yubico/u2f_keys:

    1
    2
    
    mkdir -p ~/.config/Yubico
    pamu2fcfg > ~/.config/Yubico/u2f_keys
    

    O comando solicitará que o usuário conecte e ative a chave de segurança.

  2. Configuração do PAM para Integrar U2F com SSH:

    Adicione o módulo pam_u2f.so ao arquivo de configuração PAM do SSH:

    1
    
    sudo nano /etc/pam.d/sshd
    

    Adicione a linha:

    1
    
    auth required pam_u2f.so
    
  3. Ajuste o SSH para Challenge-Response Authentication:

    Assim como na configuração TOTP, edite o arquivo /etc/ssh/sshd_config e habilite ChallengeResponseAuthentication:

    1
    2
    
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,password publickey,keyboard-interactive
    

    Reinicie o serviço SSH para aplicar as configurações:

    1
    
    sudo systemctl restart sshd
    

Resumo da Configuração de MFA com SSH

Método de MFA Módulo PAM SSH Configuration
TOTP (Google Authenticator) auth required pam_google_authenticator.so ChallengeResponseAuthentication yes e AuthenticationMethods
U2F/FIDO2 (Chave Física) auth required pam_u2f.so ChallengeResponseAuthentication yes e AuthenticationMethods

Dicas de Segurança para Configuração SSH com MFA

  • Configuração de Backups: Para contas críticas, é recomendável que o usuário tenha um segundo fator de autenticação, como uma chave de backup U2F ou códigos de recuperação TOTP, para evitar bloqueios.
  • Limitar Tentativas de Login: Configure a opção de limitação de taxa do Google Authenticator para restringir o número de tentativas de login falhas e mitigar riscos de ataques de força bruta.
  • Gerenciamento de Chaves U2F: No caso de chaves U2F, registre mais de uma chave por usuário para backup, especialmente em ambientes onde a chave é o único segundo fator.

Conclusão

Com o SSH configurado para exigir MFA, o servidor Linux se torna muito mais seguro para acessos remotos, protegendo contra ataques de força bruta e phishing. A flexibilidade de escolher entre TOTP e U2F permite que as organizações implementem a solução que melhor se adapta à sua necessidade de segurança e conveniência.


10. MFA em Ambientes Híbridos: Integração com Active Directory e FreeIPA

Objetivo

Demonstrar como integrar o MFA com sistemas de identidade centralizados, como Active Directory (AD) e FreeIPA, para criar uma autenticação segura e centralizada em ambientes híbridos que incluem servidores e estações de trabalho Linux. Essa abordagem permite uma experiência de login unificada e mais segura, especialmente em empresas que utilizam uma combinação de Linux e Windows.

Visão Geral de Integração com AD e FreeIPA

Active Directory e FreeIPA são plataformas de gerenciamento de identidade que permitem gerenciar centralmente os usuários e autenticar máquinas Linux e Windows na rede. Com a integração do MFA, podemos exigir um segundo fator de autenticação em adição à senha AD/FreeIPA para sessões SSH e logins locais.

  • Active Directory (AD): Serviço da Microsoft amplamente utilizado para autenticação de usuários e gerenciamento de políticas de grupo.
  • FreeIPA: Solução de código aberto que combina funcionalidades de LDAP, Kerberos e gerenciamento de certificados, ideal para redes Linux e ambientes mistos.

Passo a Passo para Configuração de MFA com AD e FreeIPA

1. Instale o SSSD e o Módulo PAM

Primeiro, cada cliente Linux que deseja autenticar com AD ou FreeIPA e exigir MFA precisa do SSSD e do módulo PAM do Google Authenticator.

1
2
sudo apt update
sudo apt install sssd libpam-google-authenticator
2. Configuração do SSSD para Conectar com Active Directory ou FreeIPA
  1. Configurar SSSD para Active Directory (AD):

    Em ambientes com AD, utilize o Realmd para associar a máquina ao domínio AD e configurar o SSSD automaticamente.

    1
    2
    
    sudo apt install realmd
    sudo realm join domain.com -U admin_user
    

    O comando acima associa a máquina ao domínio domain.com com a conta de administrador admin_user.

  2. Configuração do SSSD Manual para FreeIPA:

    Em redes com FreeIPA, edite o arquivo de configuração do SSSD em /etc/sssd/sssd.conf:

    1
    
    sudo nano /etc/sssd/sssd.conf
    

    Adicione o seguinte conteúdo, substituindo os valores de domínio:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    [sssd]
    config_file_version = 2
    services = nss, pam
    domains = EXEMPLO
    
    [domain/EXEMPLO]
    id_provider = ipa
    auth_provider = ipa
    ipa_server = _srv_
    ipa_domain = exemplo.com
    
  3. Ajustar Permissões:

    O arquivo de configuração do SSSD deve ter permissões restritas:

    1
    
    sudo chmod 600 /etc/sssd/sssd.conf
    
  4. Reinicie o SSSD:

    Reinicie o serviço SSSD para que as novas configurações entrem em vigor:

    1
    
    sudo systemctl restart sssd
    
3. Configuração do PAM para Exigir MFA com TOTP

Para habilitar o MFA em contas AD ou FreeIPA, configure o PAM para exigir o código TOTP. Edite os arquivos de configuração do PAM, como o SSH e o login local.

  1. Configuração do PAM para Login SSH:

    Edite o arquivo PAM do SSH:

    1
    
    sudo nano /etc/pam.d/sshd
    

    Adicione a linha abaixo para exigir o código TOTP no login SSH:

    1
    
    auth required pam_google_authenticator.so
    
  2. Configuração do PAM para Login Local:

    Edite o arquivo de login local:

    1
    
    sudo nano /etc/pam.d/login
    

    Adicione a mesma linha:

    1
    
    auth required pam_google_authenticator.so
    
  3. Configuração Adicional para Ativar Challenge-Response Authentication no SSH:

    Para garantir que o SSH exigirá o segundo fator, edite o arquivo de configuração SSH:

    1
    
    sudo nano /etc/ssh/sshd_config
    

    Ative ChallengeResponseAuthentication e defina os métodos de autenticação:

    1
    2
    
    ChallengeResponseAuthentication yes
    AuthenticationMethods publickey,password publickey,keyboard-interactive
    

    Em seguida, reinicie o serviço SSH para aplicar as alterações:

    1
    
    sudo systemctl restart sshd
    
4. Configurar MFA TOTP para Cada Usuário do AD ou FreeIPA

Cada usuário que deseja utilizar o MFA precisa configurar o Google Authenticator, FreeOTP ou Authenticator para gerar códigos TOTP. Com a conta de usuário, execute o comando google-authenticator para gerar a chave secreta e o QR code.

Passos para Configuração do Google Authenticator:

  1. Execute google-authenticator.
  2. Escaneie o QR code exibido para registrar o TOTP no aplicativo autenticador.
  3. Responda y às perguntas sobre tokens baseados em tempo e limitação de taxa de login.

O arquivo .google_authenticator será criado no diretório home do usuário, contendo a chave secreta e configurações para o MFA.

5. Considerações para Sincronização de Políticas e Segurança
  • Sincronização de Políticas de Senha: Tanto no Active Directory quanto no FreeIPA, defina políticas de senha fortes e sincronize essas políticas com o SSSD para manter uma segurança consistente.
  • Rotação e Backup de Códigos MFA: Em ambientes corporativos, defina procedimentos de rotação de MFA para troca de dispositivos e registre chaves de backup para administradores.
  • Gerenciamento de Contas AD e FreeIPA: Com o SSSD, os administradores podem definir permissões e bloquear contas rapidamente em caso de necessidade.

Exemplo Completo de Configuração

Componente Configuração Descrição
SSSD [sssd] ... [domain/EXEMPLO] Configura o SSSD para autenticação AD/FreeIPA
PAM (SSH) auth required pam_google_authenticator.so Exige TOTP no login SSH
PAM (Login Local) auth required pam_google_authenticator.so Exige TOTP no login local
SSH ChallengeResponseAuthentication yes Habilita autenticação interativa
SSH AuthenticationMethods publickey,password publickey,keyboard-interactive Exige senha + TOTP no SSH

Benefícios e Práticas Recomendadas

  • Centralização do Gerenciamento de Identidade: Com AD ou FreeIPA, o gerenciamento de identidades é unificado, facilitando o controle de permissões, políticas de acesso e MFA.
  • Backups e Redundância de MFA: Para administradores e contas críticas, configure um segundo fator de backup para minimizar o risco de perda de acesso.
  • Monitoramento e Auditoria: Em grandes redes, ative logs de autenticação para monitorar acessos e manter auditoria de uso, essencial para segurança e conformidade.

Conclusão

Com esta configuração, seu ambiente Linux está integrado a sistemas de identidade centralizados, com a segurança adicional do MFA. Isso proporciona uma autenticação robusta e centralizada em ambientes híbridos, permitindo às empresas gerenciar o acesso de forma eficiente e segura.


11. Troubleshooting e Solução de Problemas em Configurações MFA

Objetivo

Oferecer orientações sobre como resolver problemas comuns nas configurações de MFA e manter o sistema seguro e funcional, incluindo logs de diagnóstico, comandos úteis e práticas para gerenciar as configurações do PAM e dos módulos de MFA.

Principais Problemas e Soluções em Configurações de MFA

  1. MFA Não Solicita o Segundo Fator no SSH
    • Verifique as Configurações do SSH: Certifique-se de que o sshd_config possui as seguintes configurações:

      1
      2
      
      ChallengeResponseAuthentication yes
      AuthenticationMethods publickey,password publickey,keyboard-interactive
      
    • Teste o PAM: Confirme que o módulo pam_google_authenticator.so ou pam_u2f.so foi adicionado no arquivo /etc/pam.d/sshd antes da linha pam_unix.so.

    • Reinicie o SSH: Após alterar o sshd_config, reinicie o SSH:

      1
      
      sudo systemctl restart sshd
      
  2. Falhas de Autenticação com Google Authenticator (TOTP)
    • Sincronização de Tempo: Códigos TOTP dependem de uma sincronização precisa de tempo entre o servidor e o dispositivo do usuário. Verifique se o servidor está sincronizado com um servidor de tempo NTP:

      1
      
      sudo timedatectl set-ntp true
      
    • Verifique o Arquivo .google_authenticator: Confirme que o arquivo .google_authenticator no diretório home do usuário existe e possui as permissões corretas:

      1
      
      chmod 600 ~/.google_authenticator
      
  3. Erros ao Utilizar Chaves U2F/FIDO2
    • Arquivo de Chaves U2F: Certifique-se de que o arquivo u2f_keys está no local correto (~/.config/Yubico/u2f_keys) e que contém as chaves registradas corretamente.
    • Compatibilidade da Chave U2F: Alguns sistemas ou versões de U2F requerem atualizações. Teste a chave com o comando pamu2fcfg para confirmar sua compatibilidade.
  4. Falhas em Logins com LDAP ou SSSD
    • Logs de Erros do SSSD: Verifique os logs do SSSD para identificar falhas de autenticação:

      1
      
      sudo tail -f /var/log/sssd/sssd_EXEMPLO.log
      
    • Testar Conexão com LDAP/FreeIPA: Verifique se o cliente Linux está corretamente associado ao domínio LDAP ou FreeIPA, e se a conectividade com o servidor está ativa. Use realm list para confirmar a associação com o domínio.

Ferramentas e Comandos Úteis para Diagnóstico de MFA

Comando Descrição
google-authenticator Configura TOTP no Google Authenticator, FreeOTP, ou Authenticator.
pamu2fcfg Registra e testa chaves U2F para o módulo pam-u2f.
tail -f /var/log/auth.log Verifica logs de autenticação e diagnósticos de erro de PAM.
systemctl status sshd Confirma o status do SSH e verifica se está ativo após alterações.
realm list Exibe os domínios associados no Realmd para AD ou FreeIPA.

12. Práticas Recomendadas para Configuração e Manutenção de MFA no Linux

Dicas de Segurança e Manutenção

  1. Rotação e Backup de Códigos e Dispositivos de MFA
    • Rotação de Códigos: Configure uma política de rotação regular dos fatores de autenticação para contas críticas. Usuários podem gerar novos códigos TOTP executando google-authenticator novamente, criando um novo QR code.
    • Dispositivos de Backup: Incentive o uso de chaves de segurança de backup e mantenha cópias seguras dos códigos de recuperação.
  2. Gerenciamento de Permissões do Arquivo .google_authenticator
    • Permissões Restringidas: Garanta que o arquivo .google_authenticator tenha permissões chmod 600 para evitar acessos não autorizados.
    • Backups Seguros: Para usuários que trocam dispositivos, mantenha backups criptografados do arquivo .google_authenticator.
  3. Configurações de Limitação de Taxa para Google Authenticator
    • No Google Authenticator, habilite a limitação de taxa para evitar tentativas excessivas de autenticação, configurando-a como y durante a configuração inicial.
  4. Logs de Auditoria e Monitoramento Contínuo
    • Habilite a auditoria para monitorar as tentativas de login e eventos de autenticação com MFA. Revise os logs regularmente para identificar tentativas de login suspeitas ou falhas de autenticação.
  5. Documentação e Treinamento para Usuários
    • Instruções de Uso de MFA: Forneça aos usuários orientações sobre como utilizar o MFA corretamente, configurar backups e usar o dispositivo autenticador. Isso reduz o risco de erros e evita chamados de suporte.
    • Procedimentos de Emergência: Documente processos de recuperação para casos de perda de dispositivo ou falhas no segundo fator. Inclua orientações para redefinir MFA com segurança.
  6. Teste Regular de Configurações de MFA
    • Periodicamente, teste as configurações de MFA para garantir que tudo está funcionando corretamente. Simule um login com MFA e revise os logs para identificar falhas ou áreas de melhoria.

Checklist Final para Implementação de MFA em Linux

Item Status Descrição
Instalação do Módulo PAM Instale libpam-google-authenticator ou pam-u2f para MFA
Configuração SSH Ative ChallengeResponseAuthentication e AuthenticationMethods
Configuração PAM Completa Adicione auth required pam_google_authenticator.so no PAM
Sincronização de Tempo (TOTP) Ative NTP para sincronização de tempo para MFA com TOTP
Permissões de Segurança Configure chmod 600 para arquivos .google_authenticator
Documentação e Backups Instruções de uso e backups de chaves e códigos

Conclusão

Seguindo essas práticas e orientações de solução de problemas, sua configuração de MFA no Linux estará mais segura e eficaz. Além de proteger o acesso, as verificações de segurança, auditoria e treinamentos contínuos ajudam a prevenir falhas de autenticação e garantem um uso seguro e confiável do MFA em toda a rede.


13. Automatizando a Configuração de MFA com Ansible

Objetivo

Automatizar a configuração de autenticação multifatorial (MFA) em sistemas Linux usando Ansible, permitindo que administradores configurem MFA em várias máquinas de forma rápida e eficiente. O exemplo a seguir foca na instalação e configuração do Google Authenticator como o segundo fator de autenticação, mas pode ser adaptado para outros métodos como U2F/FIDO2.

Pré-Requisitos

  1. Ambiente Ansible Configurado: Certifique-se de que você possui um ambiente Ansible funcional com acesso SSH aos servidores de destino.
  2. Inventário de Hosts: Crie um inventário de hosts para listar as máquinas onde deseja configurar o MFA.
  3. Permissões de Root/Sudo: As tarefas precisam de permissões elevadas para modificar arquivos de configuração PAM e SSH, portanto, certifique-se de que o usuário Ansible possui privilégios de sudo.

Estrutura do Playbook de Ansible para Configurar MFA

Abaixo está um exemplo de playbook Ansible para automatizar a instalação do Google Authenticator, configurar o módulo PAM e ajustar as configurações do SSH para exigir MFA.

1. Inventário de Hosts (hosts.ini)

Primeiro, configure o arquivo de inventário com a lista dos servidores onde deseja aplicar a configuração:

1
2
3
[servidores_mfa]
server1 ansible_host=192.168.1.10
server2 ansible_host=192.168.1.11
2. Playbook para Configuração do MFA (mfa.yml)

Abaixo está um exemplo de playbook chamado mfa.yml, que:

  • Instala o módulo libpam-google-authenticator.
  • Configura o SSH para exigir MFA.
  • Edita os arquivos PAM para integrar o Google Authenticator.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
---
- name: Configuração de MFA com Google Authenticator
  hosts: servidores_mfa
  become: yes
  tasks:
  
    - name: Instalar libpam-google-authenticator
      ansible.builtin.package:
        name: libpam-google-authenticator
        state: present
    
    - name: Configurar o SSH para Challenge-Response Authentication
      ansible.builtin.lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^ChallengeResponseAuthentication'
        line: 'ChallengeResponseAuthentication yes'
        state: present

    - name: Configurar AuthenticationMethods para exigir senha e TOTP
      ansible.builtin.lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^AuthenticationMethods'
        line: 'AuthenticationMethods publickey,password publickey,keyboard-interactive'
        state: present

    - name: Reiniciar o serviço SSH para aplicar alterações
      ansible.builtin.service:
        name: sshd
        state: restarted

    - name: Configurar PAM para usar o Google Authenticator no SSH
      ansible.builtin.lineinfile:
        path: /etc/pam.d/sshd
        insertafter: 'auth       substack     password-auth'
        line: 'auth required pam_google_authenticator.so'
        state: present

    - name: Configurar PAM para exigir MFA no login local
      ansible.builtin.lineinfile:
        path: /etc/pam.d/login
        insertafter: 'auth       substack     password-auth'
        line: 'auth required pam_google_authenticator.so'
        state: present

    - name: Criar configuração inicial do Google Authenticator para cada usuário
      ansible.builtin.user:
        name: "{{ item }}"
        generate_otp: yes
      with_items:
        - usuario1
        - usuario2

    - name: Aplicar permissões restritas no arquivo .google_authenticator de cada usuário
      ansible.builtin.file:
        path: "/home/{{ item }}/.google_authenticator"
        owner: "{{ item }}"
        group: "{{ item }}"
        mode: '0600'
      with_items:
        - usuario1
        - usuario2
3. Explicação do Playbook
  • Instalação do Google Authenticator: O módulo libpam-google-authenticator é instalado em cada servidor para fornecer a funcionalidade TOTP.
  • Configuração SSH: As configurações ChallengeResponseAuthentication e AuthenticationMethods são ajustadas para que o SSH exija um segundo fator de autenticação.
  • Configuração PAM: Adiciona o módulo pam_google_authenticator.so aos arquivos /etc/pam.d/sshd e /etc/pam.d/login para proteger o login SSH e local com MFA.
  • Configuração de Arquivo para Usuários: O arquivo .google_authenticator é configurado para cada usuário especificado e protegido com permissões restritas (0600), garantindo segurança dos tokens MFA.
4. Executar o Playbook

Execute o playbook para aplicar as configurações de MFA em todos os servidores listados no inventário:

1
ansible-playbook -i hosts.ini mfa.yml

Automatizando Configuração de U2F/FIDO2 com Ansible

Para configurar MFA com chaves U2F, o playbook Ansible precisaria instalar o módulo pam-u2f e configurar o arquivo .config/Yubico/u2f_keys para cada usuário. Veja um exemplo para adicionar suporte a U2F:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- name: Instalar pam-u2f
  ansible.builtin.package:
    name: libpam-u2f
    state: present

- name: Configurar PAM para usar o U2F no SSH
  ansible.builtin.lineinfile:
    path: /etc/pam.d/sshd
    line: 'auth required pam_u2f.so'
    state: present

- name: Criar diretório de configuração U2F para usuários e configurar permissões
  ansible.builtin.file:
    path: "/home/{{ item }}/.config/Yubico"
    state: directory
    mode: '0700'
    owner: "{{ item }}"
    group: "{{ item }}"
  with_items:
    - usuario1
    - usuario2

Dicas para Manutenção e Gerenciamento

  • Gerenciamento de Usuários: Atualize os usuários na seção with_items para incluir novos usuários de forma automática.
  • Logs e Auditoria: Revise os logs do Ansible após cada execução para verificar o sucesso das configurações. O Ansible registrará os hosts onde as configurações foram aplicadas com sucesso e onde houve erros.
  • Testes Regulares: Execute o playbook em um ambiente de testes antes de aplicar em produção para garantir que as configurações de MFA funcionem conforme o esperado.

Conclusão

Implementar e automatizar a Autenticação Multifatorial (MFA) em sistemas Linux é uma medida fundamental para proteger o acesso a dados e servidores, especialmente em ambientes corporativos que demandam alta segurança. Ao longo deste tutorial, você explorou diferentes métodos de MFA, desde configurações com aplicativos autenticadores como Google Authenticator e FreeOTP até o uso de chaves físicas U2F/FIDO2 e integrações avançadas com sistemas de identidade como LDAP, FreeIPA e Active Directory. Cada um desses métodos oferece uma camada adicional de proteção contra ameaças externas e internas.

A última seção, dedicada à automação com Ansible, traz uma solução prática e eficiente para aplicar configurações de MFA de maneira consistente e rápida em múltiplos servidores, minimizando a chance de erros manuais e garantindo a padronização das políticas de segurança. Esse nível de automação permite que a equipe de TI mantenha uma infraestrutura escalável e segura, com menor esforço de manutenção.

A implementação de MFA em Linux não é apenas uma tendência de segurança; é uma necessidade para proteger contra ataques cada vez mais sofisticados e frequentes. Com os conhecimentos e práticas adquiridos neste guia, você está preparado para configurar e manter um ambiente Linux seguro e resiliente, pronto para atender aos desafios de segurança da era digital.


This post is licensed under CC BY 4.0 by the author.