Skip to Content

Senhas e 2FA

Políticas de senha fortes e autenticação de dois fatores (2FA) são duas linhas de defesa críticas para proteger contas de usuários. Este artigo explica como configurar políticas de senha e habilitar a autenticação de dois fatores no Ubuntu 26.04.

Políticas de senhas fortes

Instalando ferramentas de verificação de qualidade de senha

sudo apt install libpam-pwquality

Configurando políticas de senha

Edite o arquivo de configuração de qualidade de senha:

sudo nano /etc/security/pwquality.conf

Opções de configuração comuns:

# Minimum password length minlen = 12 # Minimum number of character classes (uppercase, lowercase, digits, special characters) minclass = 3 # Minimum number of uppercase letters ucredit = -1 # Minimum number of lowercase letters lcredit = -1 # Minimum number of digits dcredit = -1 # Minimum number of special characters ocredit = -1 # Number of characters that must differ from the old password difok = 5 # Prevent using the username as part of the password usercheck = 1 # Limit consecutive identical characters maxrepeat = 3 # Limit consecutive characters of the same class maxclassrepeat = 4 # Reject palindrome passwords palindrome = 1 # Reject common dictionary words dictcheck = 1

Configurando políticas de expiração de senha

# Edit global settings sudo nano /etc/login.defs
# Maximum password age (days) PASS_MAX_DAYS 90 # Minimum password age (days) PASS_MIN_DAYS 7 # Password expiration warning days PASS_WARN_AGE 14 # Minimum password length PASS_MIN_LEN 12

Configurando políticas de senha para usuários específicos

# Set maximum password age to 90 days sudo chage -M 90 username # Set minimum password age to 7 days sudo chage -m 7 username # Set 14-day expiration warning sudo chage -W 14 username # Immediately require password change sudo chage -d 0 username # View user password policy sudo chage -l username

Histórico de senhas (evitando a reutilização de senhas antigas)

Edite a configuração do PAM:

sudo nano /etc/pam.d/common-password

Encontre a linha que contém pam_unix.so e adicione o parâmetro remember:

password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt remember=12

Isso evita que os usuários reutilizem qualquer uma das últimas 12 senhas.

Ferramentas de gerenciamento de senhas

Gerenciador de senhas de linha de comando: passar

# Install sudo apt install pass # Initialize (requires a GPG key) gpg --gen-key pass init "your-gpg-id" # Add a password pass insert email/gmail pass insert -m server/production # multi-line mode # View a password pass email/gmail # Generate a random password pass generate web/newsite 20 # List all passwords pass ls # Search pass find gmail

Usando KeePassXC

# Install sudo apt install keepassxc # Or use snap sudo snap install keepassxc

KeePassXC é um gerenciador de senhas gráfico rico em recursos que oferece suporte a:

  • Armazenamento de banco de dados de senha criptografada
  • Preencher senhas automaticamente
  • Autenticação de dois fatores TOTP
  • Integração do navegador
  • SSH Integração do agente

Autenticador Google (TOTP 2FA)

Instalação e inicialização

# Install the PAM module sudo apt install libpam-google-authenticator # Run initialization as a regular user google-authenticator

Opções recomendadas durante a inicialização:

Do you want authentication tokens to be time-based (y/n) y # Choose y for time-based tokens (TOTP) # A QR code will be displayed -- scan it with an authenticator app # Recommended apps: Google Authenticator, Authy, Microsoft Authenticator, FreeOTP Do you want me to update your "/home/user/.google_authenticator" file? (y/n) y Do you want to disallow multiple uses of the same authentication token? (y/n) y # Choose y to prevent token replay By default, a new token is generated every 30 seconds. Do you want to change the size of the time skew window? (y/n) n Do you want to enable rate-limiting? (y/n) y # Choose y to limit attempt frequency

Certifique-se de salvar os códigos de backup de emergência exibidos.

Habilitando 2FA para login local

sudo nano /etc/pam.d/common-auth

Adicione no final do arquivo:

auth required pam_google_authenticator.so nullok

O parâmetro nullok permite que usuários que não configuraram 2FA façam login normalmente. Remova-o assim que todos os usuários estiverem configurados.

Habilitando 2FA para login SSH

# Edit PAM SSH configuration sudo nano /etc/pam.d/sshd

Adicionar:

auth required pam_google_authenticator.so

Edite a configuração do servidor SSH:

sudo nano /etc/ssh/sshd_config
# Enable keyboard-interactive authentication KbdInteractiveAuthentication yes # Require key + TOTP dual authentication AuthenticationMethods publickey,keyboard-interactive

Reinicie SSH:

sudo systemctl restart ssh

Habilitando 2FA para sudo

sudo nano /etc/pam.d/sudo

Adicione após @include common-auth:

auth required pam_google_authenticator.so

Isso requer um código de verificação sempre que o sudo for usado.

Chaves de segurança de hardware (FIDO2/U2F)

Dispositivos Suportados

Ubuntu 26.04 suporta chaves de segurança FIDO2/U2F, como:

  • Série YubiKey 5
  • Chave de segurança Titan do Google
  • Feitian ePass FIDO
  • SoloKeys

Instalação e configuração

# Install the PAM U2F module sudo apt install libpam-u2f # Install management tools sudo apt install pamu2fcfg

Registrando uma chave de segurança

# Create configuration directory mkdir -p ~/.config/Yubico # Register the first key (insert the security key and touch it) pamu2fcfg > ~/.config/Yubico/u2f_keys # Register a backup key (append mode) pamu2fcfg -n >> ~/.config/Yubico/u2f_keys

Habilitando chave de segurança para sudo

sudo nano /etc/pam.d/sudo

Adicione antes de @include common-auth:

auth sufficient pam_u2f.so

Habilitando chave de segurança para login

sudo nano /etc/pam.d/gdm-password

Adicionar:

auth required pam_u2f.so

Habilitando chave de segurança para SSH

OpenSSH 8.2+ suporta nativamente chaves FIDO2:

# Generate a FIDO2 SSH key ssh-keygen -t ed25519-sk -C "your_email@example.com" # Or use a resident key (does not require the corresponding hardware key for the public key in .ssh/authorized_keys on the server) ssh-keygen -t ed25519-sk -O resident -C "your_email@example.com" # Deploy the public key to the server ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@server

Configuração do fluxo de autenticação PAM

Compreendendo os sinalizadores de controle PAM

BandeiraDescrição
requiredDeve ter sucesso; continua verificando outros módulos em caso de falha
requisiteDeve ter sucesso; retorna imediatamente em caso de falha
sufficientPassa imediatamente em caso de sucesso; continua verificando falhas
optionalSucesso ou fracasso não afeta o resultado final

Exemplos de combinação de autenticação multifator

Senha + TOTP:

# /etc/pam.d/common-auth auth required pam_unix.so auth required pam_google_authenticator.so

Senha + Chave de segurança (chave de segurança opcional):

auth required pam_unix.so auth sufficient pam_u2f.so auth required pam_google_authenticator.so

Política de bloqueio de conta

Configurando bloqueio de login com falha

sudo nano /etc/pam.d/common-auth

Adicione no início do arquivo:

auth required pam_faillock.so preauth silent deny=5 unlock_time=900 auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900
sudo nano /etc/pam.d/common-account

Adicionar:

account required pam_faillock.so

Descrições dos parâmetros:

  • deny=5: Bloqueio após 5 falhas
  • unlock_time=900: Bloqueio por 900 segundos (15 minutos)

Gerenciando status de bloqueio

# View a user's failed attempts sudo faillock --user username # Unlock a user sudo faillock --user username --reset # View all locked users sudo faillock

Melhores práticas

  1. Use senhas de 12 caracteres ou mais, incluindo letras maiúsculas, minúsculas, dígitos e caracteres especiais.
  2. Use uma senha diferente para cada serviço e use um gerenciador de senhas.
  3. Ative 2FA em todos os serviços que o suportam.
  4. Salve códigos de backup e chaves de recuperação com segurança.
  5. Registre várias chaves de segurança como backups.
  6. Altere as senhas periodicamente, mas não com muita frequência (a cada 90 dias é suficiente).
  7. Monitore registros de login com falha para detectar ataques de força bruta antecipadamente.