Skip to Content

Contraseñas y 2FA

Las políticas de contraseñas sólidas y la autenticación de dos factores (2FA) son dos líneas de defensa fundamentales para proteger las cuentas de los usuarios. Este artículo explica cómo configurar políticas de contraseña y habilitar la autenticación de dos factores en Ubuntu 26.04.

Políticas de contraseñas seguras

Instalación de herramientas de control de calidad de contraseñas

sudo apt install libpam-pwquality

Configurar políticas de contraseña

Edite el archivo de configuración de calidad de la contraseña:

sudo nano /etc/security/pwquality.conf

Opciones de configuración comunes:

# 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

Configuración de políticas de caducidad de contraseñas

# 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

Configuración de políticas de contraseña para usuarios 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

Historial de contraseñas (evitar la reutilización de contraseñas antiguas)

Edite la configuración de PAM:

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

Busque la línea que contiene pam_unix.so y agregue el parámetro remember:

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

Esto evita que los usuarios reutilicen cualquiera de sus últimas 12 contraseñas.

Herramientas de administración de contraseñas

Administrador de contraseñas de línea de comandos: pasar

# 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 es un administrador de contraseñas gráfico rico en funciones que admite:

  • Almacenamiento de base de datos de contraseñas cifradas
  • Autocompletar contraseñas
  • Autenticación TOTP de dos factores
  • Integración del navegador
  • SSH Integración del agente

Autenticador de Google (TOTP 2FA)

Instalación e inicialización

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

Opciones recomendadas durante la inicialización:

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

Asegúrese de guardar los códigos de respaldo de emergencia que se muestran.

Habilitación de 2FA para inicio de sesión local

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

Agregue al final del archivo:

auth required pam_google_authenticator.so nullok

El parámetro nullok permite a los usuarios que no han configurado 2FA iniciar sesión normalmente. Elimínelo una vez que todos los usuarios estén configurados.

Habilitación de 2FA para el inicio de sesión SSH

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

Agregar:

auth required pam_google_authenticator.so

Edite la configuración del 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

Agregar después de @include common-auth:

auth required pam_google_authenticator.so

Esto requiere un código de verificación cada vez que se usa sudo.

Claves de seguridad de hardware (FIDO2/U2F)

Dispositivos compatibles

Ubuntu 26.04 admite claves de seguridad FIDO2/U2F, como:

  • Serie YubiKey 5
  • Clave de seguridad de Google Titán
  • Feitian ePass FIDO
  • Solo teclas

Instalación y configuración

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

Registro de una clave de seguridad

# 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

Habilitación de la clave de seguridad para sudo

sudo nano /etc/pam.d/sudo

Agregar antes de @include common-auth:

auth sufficient pam_u2f.so

Habilitación de la clave de seguridad para iniciar sesión

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

Agregar:

auth required pam_u2f.so

Habilitación de la clave de seguridad para SSH

OpenSSH 8.2+ admite de forma nativa claves 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

Configuración del flujo de autenticación PAM

Comprensión de los indicadores de control de PAM

BanderaDescripción
requiredDebe tener éxito; continúa revisando otros módulos en caso de falla
requisiteDebe tener éxito; regresa inmediatamente en caso de falla
sufficientPasa inmediatamente después del éxito; continúa comprobando el fallo
optionalEl éxito o el fracaso no afecta el resultado final

Ejemplos de combinación de autenticación multifactor

Contraseña + TOTP:

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

Contraseña + Clave de seguridad (clave de seguridad opcional):

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

Política de bloqueo de cuenta

Configuración del bloqueo de inicio de sesión fallido

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

Agregue al principio del archivo:

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

Agregar:

account required pam_faillock.so

Descripciones de parámetros:

  • deny=5: Bloqueo después de 5 fallas
  • unlock_time=900: Bloqueo durante 900 segundos (15 minutos)

Administrar el estado de bloqueo

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

Mejores prácticas

  1. Utilice contraseñas de 12 caracteres o más, incluidas mayúsculas, minúsculas, dígitos y caracteres especiales.
  2. Utilice una contraseña diferente para cada servicio y utilice un administrador de contraseñas.
  3. Habilite 2FA en todos los servicios que lo admitan.
  4. Guarde códigos de respaldo y claves de recuperación de forma segura.
  5. Registre varias claves de seguridad como copias de seguridad.
  6. Cambie las contraseñas periódicamente, pero no con demasiada frecuencia (cada 90 días es suficiente).
  7. Supervise los registros de inicio de sesión fallidos para detectar temprano ataques de fuerza bruta.