¿Cómo aplicar políticas de complejidad de contraseñas en Linux?

LinuxBeginner
Practicar Ahora

Introducción

Mantener políticas de contraseñas sólidas es crucial para asegurar los sistemas Linux. Este tutorial le guiará a través de la comprensión de los fundamentos de las políticas de contraseñas en Linux, la configuración de los requisitos de complejidad de las contraseñas y la aplicación de estas políticas para mejorar la seguridad general de su entorno Linux.

Comprensión de los Archivos de Políticas de Contraseñas en Linux

Los sistemas Linux utilizan varios archivos de configuración para gestionar las políticas de contraseñas. En este paso, exploraremos estos archivos y comprenderemos su propósito en la gestión de contraseñas.

Exploración de los Archivos de Configuración de Políticas de Contraseñas

Comencemos examinando los archivos de configuración clave que controlan las políticas de contraseñas en Ubuntu:

  1. Primero, abra una terminal haciendo clic en el icono de la terminal en el entorno de escritorio.

  2. Veamos el archivo /etc/login.defs, que contiene la configuración básica de las políticas de contraseñas:

    cat /etc/login.defs | grep "^PASS_"

    Debería ver una salida similar a esta:

    PASS_MAX_DAYS   99999
    PASS_MIN_DAYS   0
    PASS_WARN_AGE   7

    Esta configuración controla:

    • PASS_MAX_DAYS: Número máximo de días que una contraseña permanece válida
    • PASS_MIN_DAYS: Número mínimo de días requeridos entre cambios de contraseña
    • PASS_WARN_AGE: Número de días de advertencia antes de la expiración de la contraseña
  3. Otro archivo importante es /etc/pam.d/common-password, que gestiona la configuración de PAM (Módulos de Autenticación Enchufables - Pluggable Authentication Modules) para la autenticación de contraseñas:

    cat /etc/pam.d/common-password

    Este archivo contiene múltiples líneas que configuran cómo se gestionan las contraseñas, incluyendo los requisitos de complejidad.

  4. El sistema utiliza la biblioteca pwquality para aplicar la calidad de la contraseña. Comprobemos si está instalada:

    dpkg -l | grep libpwquality

    Si no está instalada, podemos instalarla:

    sudo apt update
    sudo apt install -y libpam-pwquality
  5. Ahora, examinemos el archivo de configuración de la calidad de la contraseña:

    cat /etc/security/pwquality.conf

    Este archivo podría tener la mayoría de las líneas comentadas con #, lo que significa que se están utilizando los valores predeterminados.

Comprensión de los Parámetros de la Política de Contraseñas

Aquí están los parámetros clave que puede configurar:

  • minlen: Longitud mínima de la contraseña
  • dcredit: Crédito por dígitos en la contraseña
  • ucredit: Crédito por caracteres en mayúsculas
  • lcredit: Crédito por caracteres en minúsculas
  • ocredit: Crédito por caracteres especiales
  • retry: Número de reintentos para ingresar una nueva contraseña
  • enforce_for_root: Si se deben aplicar estas políticas al usuario root
    Estos parámetros proporcionan un marco integral para controlar la complejidad y la seguridad de las contraseñas en su sistema Linux.

Configuración de Políticas de Contraseñas Básicas

En este paso, configuraremos políticas de contraseñas básicas modificando el archivo /etc/login.defs para establecer los requisitos de caducidad de las contraseñas.

Establecimiento de los Parámetros de Caducidad de Contraseñas

  1. Primero, hagamos una copia de seguridad del archivo original:

    sudo cp /etc/login.defs /etc/login.defs.backup
  2. Ahora, abra el archivo para editarlo usando nano:

    sudo nano /etc/login.defs
  3. En el editor, busque estos parámetros (use Ctrl+W para buscar):

    PASS_MAX_DAYS
    PASS_MIN_DAYS
    PASS_WARN_AGE
  4. Cambie estos valores para implementar una política de caducidad de contraseñas más segura:

    • Cambie PASS_MAX_DAYS de 99999 a 90 (las contraseñas caducan después de 90 días)
    • Cambie PASS_MIN_DAYS de 0 a 7 (mínimo 7 días entre cambios de contraseña)
    • Cambie PASS_WARN_AGE de 7 a 14 (advertir a los usuarios 14 días antes de la caducidad de la contraseña)
  5. Guarde el archivo presionando Ctrl+O, luego Enter, y salga con Ctrl+X.

  6. Verifique sus cambios:

    cat /etc/login.defs | grep "^PASS_"

    Debería ver:

    PASS_MAX_DAYS   90
    PASS_MIN_DAYS   7
    PASS_WARN_AGE   14

Prueba de la Política en un Nuevo Usuario

Creemos un usuario de prueba para ver cómo se aplican estas políticas:

  1. Cree un nuevo usuario:

    sudo useradd -m testuser
  2. Establezca una contraseña para el nuevo usuario:

    sudo passwd testuser

    Ingrese una contraseña simple cuando se le solicite (la fortaleceremos en pasos posteriores).

  3. Verifique la información de caducidad de la contraseña para el nuevo usuario:

    sudo chage -l testuser

    Debería ver que las políticas de contraseñas se han aplicado a este nuevo usuario, mostrando la fecha de caducidad basada en su configuración.

Tenga en cuenta que estos cambios solo se aplican a las nuevas cuentas o cuando se cambia una contraseña. Las cuentas existentes mantienen su configuración anterior hasta que las actualice manualmente.

Configuración de los Requisitos de Complejidad de Contraseñas

En este paso, configuraremos reglas de complejidad de contraseñas para aplicar contraseñas seguras en nuestro sistema.

Configuración de las Reglas de Complejidad de Contraseñas

  1. Primero, hagamos una copia de seguridad del archivo de configuración de PAM:

    sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup
  2. Ahora, abra el archivo para editarlo:

    sudo nano /etc/pam.d/common-password
  3. Busque una línea que contenga pam_pwquality.so. Podría verse así:

    password        requisite                       pam_pwquality.so retry=3
  4. Modifique esta línea para agregar requisitos de complejidad. Reemplácela con:

    password        requisite                       pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root

    Esta configuración significa:

    • minlen=12: La longitud mínima de la contraseña es de 12 caracteres
    • dcredit=-1: Se requiere al menos 1 dígito
    • ucredit=-1: Se requiere al menos 1 letra mayúscula
    • lcredit=-1: Se requiere al menos 1 letra minúscula
    • ocredit=-1: Se requiere al menos 1 carácter especial
    • enforce_for_root: Aplica estas políticas también al usuario root
  5. Guarde el archivo presionando Ctrl+O, luego Enter, y salga con Ctrl+X.

Configuración de Parámetros Adicionales en pwquality.conf

  1. Ahora, modifiquemos el archivo de configuración pwquality para controles adicionales:

    sudo cp /etc/security/pwquality.conf /etc/security/pwquality.conf.backup
    sudo nano /etc/security/pwquality.conf
  2. Descomente (elimine el ## al principio) y modifique estas líneas, o agréguelas si no existen:

    minlen = 12
    dcredit = -1
    ucredit = -1
    lcredit = -1
    ocredit = -1
    difok = 4
    enforce_for_root = 1

    El parámetro difok = 4 requiere que al menos 4 caracteres sean diferentes de la contraseña anterior.

  3. Guarde el archivo presionando Ctrl+O, luego Enter, y salga con Ctrl+X.

Prueba de la Nueva Política de Complejidad de Contraseñas

  1. Probemos nuestra nueva política cambiando la contraseña de nuestro usuario de prueba:

    sudo passwd testuser
  2. Intente ingresar una contraseña simple como password123. El sistema debería rechazarla por no cumplir con los requisitos de complejidad.

  3. Ahora intente una contraseña compleja que cumpla con todos los requisitos, como Secure@Password123.

    Si ha configurado todo correctamente, el sistema debería aceptar esta contraseña.

Los requisitos de complejidad aseguran que los usuarios creen contraseñas seguras, lo que dificulta que los atacantes las adivinen o descifren.

Implementación de Controles de Historial de Contraseñas

En este paso, configuraremos los controles de historial de contraseñas para evitar que los usuarios reutilicen sus contraseñas recientes.

Configuración del Historial de Contraseñas

  1. Primero, hagamos una copia de seguridad del archivo de configuración de PAM si aún no lo ha hecho:

    sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup2
  2. Abra el archivo para editarlo:

    sudo nano /etc/pam.d/common-password
  3. Busque una línea que contenga pam_unix.so. Podría verse así:

    password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
  4. Modifique esta línea para agregar el parámetro remember. Agregue remember=5 al final de la línea:

    password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512 remember=5

    Esto evitará que los usuarios reutilicen cualquiera de sus 5 contraseñas más recientes.

  5. Guarde el archivo presionando Ctrl+O, luego Enter, y salga con Ctrl+X.

Comprender Cómo Funciona el Historial de Contraseñas

El parámetro remember=5 indica al sistema que almacene los hashes de las últimas 5 contraseñas para cada usuario. Cuando un usuario intenta cambiar su contraseña, el sistema compara la nueva contraseña con estos hashes almacenados para asegurarse de que no se esté reutilizando.

El historial de contraseñas se almacena en el archivo /etc/security/opasswd. Comprobemos si este archivo existe:

ls -la /etc/security/opasswd

Si no existe, se creará automáticamente cuando el primer usuario cambie su contraseña con la nueva política en vigor.

Prueba del Historial de Contraseñas

  1. Intentemos cambiar la contraseña del usuario de prueba varias veces para ver el mecanismo de historial en acción:

    sudo passwd testuser
  2. Establezca una contraseña compleja como Complex@Password1.

  3. Ahora intente cambiarla de nuevo inmediatamente:

    sudo passwd testuser
  4. Intente establecer la misma contraseña de nuevo. El sistema debería rechazarla debido a la política de historial.

  5. Intente esto algunas veces más con diferentes contraseñas, luego intente reutilizar una contraseña anterior. Debería encontrar que no puede reutilizar ninguna de sus 5 contraseñas más recientes.

Este mecanismo de historial de contraseñas agrega otra capa de seguridad al evitar la reutilización de contraseñas, lo cual es una debilidad de seguridad común.

Aplicación de Políticas de Contraseñas a Usuarios Existentes

En este paso final, aprenderemos cómo aplicar nuestras nuevas políticas de contraseñas a los usuarios existentes y administrar la información de contraseñas de los usuarios.

Comprensión de la Gestión de la Expiración de Contraseñas

Cuando cambia las políticas de contraseñas en /etc/login.defs, la nueva configuración solo se aplica a los usuarios recién creados o cuando actualiza manualmente a los usuarios existentes. Veamos cómo administrar a los usuarios existentes:

  1. Primero, verifique el estado actual de una cuenta de usuario:

    sudo chage -l labex

    Esto muestra la información de envejecimiento de la contraseña para el usuario actual.

  2. Para obligar a un usuario a cambiar su contraseña en el próximo inicio de sesión:

    sudo chage -d 0 testuser

    Esto establece la fecha del último cambio de contraseña en 0, forzando un cambio de contraseña en el próximo inicio de sesión.

  3. Para establecer manualmente la fecha de expiración de la contraseña:

    sudo chage -E $(date -d "90 days" +%Y-%m-%d) testuser

    Esto establece la fecha de expiración de la cuenta en 90 días a partir de hoy.

Establecimiento de la Antigüedad Máxima de Contraseña para Usuarios Existentes

Para aplicar la política de antigüedad máxima de contraseña a un usuario existente:

sudo chage -M 90 testuser

Esto establece la antigüedad máxima de la contraseña en 90 días para el usuario.

Establecimiento de la Antigüedad Mínima de Contraseña para Usuarios Existentes

Para aplicar la política de antigüedad mínima de contraseña a un usuario existente:

sudo chage -m 7 testuser

Esto establece la antigüedad mínima de la contraseña en 7 días para el usuario.

Establecimiento de la Advertencia de Expiración de Contraseña para Usuarios Existentes

Para aplicar la política de advertencia de expiración de contraseña a un usuario existente:

sudo chage -W 14 testuser

Esto establece el período de advertencia de expiración de la contraseña en 14 días para el usuario.

Visualización de la Información de Contraseña del Usuario

Puede verificar la información de la contraseña de un usuario utilizando varios comandos:

  1. Ver todas las cuentas de usuario locales:

    cat /etc/passwd
  2. Verifique el estado de la contraseña para un usuario específico:

    sudo passwd -S testuser
  3. Enumere los usuarios con una configuración de contraseña específica:

    awk -F: '($3 >= 1000) {print $1}' /etc/passwd

    Esto enumera todos los usuarios regulares en el sistema (UID >= 1000).

Aplicación de Políticas a Todos los Usuarios

Para aplicar las nuevas políticas de contraseñas a todos los usuarios regulares del sistema, podría usar un script simple. Aquí hay un ejemplo:

for user in $(awk -F: '($3 >= 1000) && ($3 < 60000) {print $1}' /etc/passwd); do
  echo "Actualizando la política de contraseñas para el usuario: $user"
  sudo chage -M 90 -m 7 -W 14 $user
done

Este script actualiza a todos los usuarios regulares con nuestras nuevas políticas de envejecimiento de contraseñas.

Al aplicar estas políticas a los usuarios existentes, asegura una seguridad de contraseña consistente en todo su sistema.

Resumen

En este laboratorio, ha aprendido a configurar y aplicar políticas de contraseñas robustas en Linux. Ha:

  1. Explorado los archivos de configuración clave que controlan las políticas de contraseñas.
  2. Configurado políticas básicas de envejecimiento de contraseñas para asegurar actualizaciones regulares de contraseñas.
  3. Implementado requisitos de complejidad de contraseñas fuertes para aplicar contraseñas seguras.
  4. Configurado controles de historial de contraseñas para evitar la reutilización de contraseñas.
  5. Aprendido a aplicar políticas de contraseñas a usuarios existentes.

Estas configuraciones de políticas de contraseñas son esenciales para mantener un entorno Linux seguro. Al implementar requisitos de contraseñas fuertes, rotación regular de contraseñas y evitar la reutilización de contraseñas, ha mejorado significativamente la postura de seguridad de su sistema contra el acceso no autorizado y posibles brechas.

Recuerde que las políticas de contraseñas efectivas son solo un aspecto de una estrategia de seguridad integral. Deben combinarse con otras medidas de seguridad, como actualizaciones regulares del sistema, gestión adecuada de usuarios y monitoreo continuo de la seguridad.