Configurar usuarios y contraseñas seguras en Linux es el primer paso para proteger tu sistema frente a accesos no autorizados. En esta guía práctica aprenderás cómo crear cuentas con privilegios mínimos, establecer contraseñas fuertes, activar 2FA, auditar accesos y aplicar técnicas de hardening como PAM y revisión de SSH. Todo explicado paso a paso.

¿Por qué es importante configurar usuarios y contraseñas seguras?

La configuración adecuada de usuarios y contraseñas es una de las primeras barreras de defensa contra accesos no autorizados a tu sistema. Asegurarte de que solo los usuarios necesarios tengan acceso y que sus contraseñas sean fuertes es esencial para proteger tu servidor Linux.

Pero no se trata solo de crear cuentas y asignarles claves aleatorias. Cada cuenta de usuario representa un posible punto de entrada, y si no se gestiona adecuadamente, puede convertirse en una puerta trasera para atacantes. Los sistemas mal configurados suelen incluir usuarios por defecto, accesos sin restricciones o contraseñas débiles que pueden ser descubiertas mediante ataques automatizados como el brute force o el credential stuffing.

Además, una mala gestión de usuarios puede provocar errores de auditoría, acceso no justificado a servicios críticos y dificultar el cumplimiento de normativas como el RGPD, PCI-DSS o ISO 27001.

Recomendaciones clave desde el inicio:

  • Eliminar cuentas innecesarias o inactivas
  • Evitar el uso de cuentas compartidas
  • Revisar los permisos del sistema de archivos
  • Asegurar que cada usuario tiene privilegios mínimos

Ejemplo de riesgo común:

Una cuenta olvidada sin contraseña fuerte, creada durante una instalación o prueba, puede ser aprovechada por scripts de escaneo automatizados para obtener acceso root en minutos. A menudo, los ataques no vienen de personas específicas, sino de bots que buscan configuraciones débiles en masa.

Relación con otras medidas de seguridad

Configurar usuarios y contraseñas de forma segura no sustituye a otras defensas como el firewall, el control de acceso a servicios o la monitorización, pero sí es el punto de partida esencial de cualquier estrategia de hardening.

Si estás empezando a proteger tu entorno, también puedes consultar nuestra guía básica de securización.


Creación de usuarios con privilegios mínimos

Una de las mejores prácticas de seguridad en Linux es aplicar el principio de privilegios mínimos: cada usuario debe tener únicamente los permisos necesarios para realizar su tarea y nada más. Esto reduce drásticamente el impacto potencial si esa cuenta se ve comprometida.

Crear un nuevo usuario

El comando recomendado para crear un nuevo usuario es:

sudo adduser nombre_de_usuario

Este comando crea:

  • Una entrada en los archivos /etc/passwd, /etc/shadow y /etc/group
  • El usuario
  • Su directorio personal (/home/nombre_de_usuario)
  • Una contraseña (que se te pedirá durante el proceso)

Asignar permisos administrativos solo si es necesario

Por defecto, este usuario no tendrá acceso a comandos con sudo. Solo si necesita ejecutar tareas administrativas, puedes añadirlo al grupo sudo:

sudo usermod -aG sudo nombre_de_usuario

Crear un usuario con acceso restringido (sin shell interactivo)

Si solo necesitas una cuenta para tareas automatizadas, puedes evitar que tenga acceso a la terminal:

sudo adduser --shell /usr/sbin/nologin usuario_limited

Esto evita que ese usuario inicie sesión, pero permite usarlo para ejecutar scripts o servicios.

Buenas prácticas adicionales

  • Usa nombres de usuario descriptivos pero cortos (evita espacios, acentos o símbolos)
  • Revisa los permisos del directorio /home/nombre_de_usuario para que no sea accesible por otros
  • Nunca uses la cuenta root directamente para tareas diarias

Establecer contraseñas seguras

Establecer contraseñas robustas es una defensa esencial contra accesos no autorizados. Una contraseña débil puede ser descubierta fácilmente mediante ataques de fuerza bruta o diccionario, sobre todo si el sistema está expuesto a internet mediante SSH u otros servicios.

Una contraseña fuerte debe tener al menos:

  • 12 caracteres
  • Letras mayúsculas y minúsculas
  • Números
  • Caracteres especiales

Puedes generarlas desde sitios como Password Generator o directamente en Linux con:

openssl rand -base64 16

Endurecer políticas de contraseñas con pam_pwquality

Linux permite controlar los requisitos mínimos de contraseñas mediante el módulo PAM pam_pwquality. Para configurarlo:

1. Instala el módulo (si no está instalado)

sudo apt install libpam-pwquality

2. Edita el archivo de configuración:

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

Busca esta línea (o similar):

password requisite pam_pwquality.so retry=3

Y cámbiala por algo como:

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

Esto exige:

  • minlen=12: longitud mínima
  • ucredit=-1: al menos una mayúscula
  • lcredit=-1: al menos una minúscula
  • dcredit=-1: al menos un número
  • ocredit=-1: al menos un carácter especial

Forzar caducidad de contraseñas

Para evitar contraseñas eternas, puedes establecer una política de expiración:

sudo chage -M 90 nombre_de_usuario

Esto obliga al usuario a cambiar su contraseña cada 90 días. Puedes verificar la configuración con:

chage -l nombre_de_usuario

Buenas prácticas recomendadas

  • Cambia las contraseñas predeterminadas tras instalar el sistema
  • Evita reusar contraseñas entre servicios
  • No almacenes contraseñas en texto plano (ni en scripts)

Habilitar la autenticación en dos factores (2FA)

Para mejorar aún más la seguridad de tu sistema, puedes habilitar la autenticación en dos factores (2FA) en los servicios que lo soporten, como SSH. Este método añade una segunda capa de verificación: algo que sabes (tu contraseña) y algo que tienes (un código temporal).

Una de las herramientas más utilizadas para implementar 2FA en Linux es Google Authenticator. Permite generar códigos TOTP (contraseña de un solo uso basada en tiempo) que puedes verificar desde tu smartphone o aplicación compatible.

Para instalarlo, ejecuta:

sudo apt install libpam-google-authenticator

Luego, ejecuta el siguiente comando con el usuario con el que quieres usar 2FA:

google-authenticator

Se generará un código QR para escanear con una app como Google Authenticator o FreeOTP, además de claves secretas y códigos de emergencia. Asegúrate de guardarlos en un lugar seguro.

Configurar PAM y SSH para usar 2FA

1. Edita el archivo de configuración de PAM para SSH:

sudo nano /etc/pam.d/sshd

Y añade al final o verifica que exista esta línea:

auth required pam_google_authenticator.so

2. Luego edita la configuración de SSH:

sudo nano /etc/ssh/sshd_config

Asegúrate de tener activadas estas opciones:

ChallengeResponseAuthentication yes
UsePAM yes

Finalmente, reinicia el servicio SSH para aplicar los cambios:

sudo systemctl restart ssh

A partir de ahora, al iniciar sesión por SSH se te pedirá primero la contraseña y luego un código de 6 dígitos generado en tu app de autenticación.

Alternativa: Generar códigos desde el terminal con OATH

Si no deseas depender de una app móvil, puedes generar códigos TOTP directamente desde el terminal utilizando oathtool:

sudo apt install oathtool

Una vez instalado, puedes generar un código con:

oathtool --totp -b TU_CLAVE_SECRETA

También puedes ver cómo aplicar 2FA dentro de una estrategia más completa de alertas y monitorización de accesos.


Uso de SSH con claves en lugar de contraseñas

Una medida de seguridad altamente recomendada es deshabilitar el acceso SSH con contraseñas y utilizar autenticación basada en claves. Este método no solo evita el uso de contraseñas débiles, sino que también bloquea eficazmente ataques automatizados por fuerza bruta.

1. Generar un par de claves SSH

Desde tu equipo local (cliente), genera un par de claves con:

ssh-keygen -t rsa -b 4096 -C "tu_correo@dominio.com"

Esto creará dos archivos en ~/.ssh/:

  • id_rsa (clave privada, guárdala con seguridad)
  • id_rsa.pub (clave pública, que se puede compartir)
  • 2. Copiar la clave pública al servidor

    Para autorizar tu clave en el servidor, ejecuta:

    ssh-copy-id usuario@ip_del_servidor

    Esto añadirá automáticamente tu clave pública al archivo ~/.ssh/authorized_keys del servidor remoto.

    3. Desactivar el acceso con contraseña

    Una vez confirmes que puedes conectarte con la clave SSH, desactiva el acceso por contraseña para reforzar la seguridad:

    sudo nano /etc/ssh/sshd_config

    Busca y cambia las siguientes líneas:

    PermitRootLogin no
    PasswordAuthentication no
    PubkeyAuthentication yes
    

    Guarda el archivo y reinicia el servicio SSH:

    sudo systemctl restart ssh

    4. Opcional: usar un puerto no estándar

    Para reducir intentos automatizados de conexión, puedes cambiar el puerto por defecto (22) por uno alternativo:

    Port 2222

    No olvides abrir el nuevo puerto en el firewall y reiniciar SSH. Ten en cuenta que esto no reemplaza medidas reales de seguridad, pero añade una capa de disuasión.

    Esta es una de las recomendaciones más importantes que también tratamos en el artículo sobre securización avanzada de servicios.


    Auditoría de cuentas y accesos

    Una parte clave en la protección de tu sistema Linux es revisar de forma periódica qué cuentas existen, cuáles tienen acceso interactivo y cuándo fue su último inicio de sesión. Esto te permite detectar cuentas inactivas, mal configuradas o potencialmente peligrosas.

    1. Ver todos los usuarios del sistema

    Puedes listar todos los usuarios registrados en el sistema con:

    cut -d: -f1 /etc/passwd

    Esto mostrará todos los nombres de usuario definidos, incluyendo usuarios del sistema. Para ver solo los que tienen acceso de terminal, puedes filtrar por shell válido:

    grep -vE '/nologin|/false' /etc/passwd

    2. Ver el último acceso de los usuarios

    Para revisar cuándo se conectó por última vez cada usuario, puedes usar:

    lastlog

    Esto te mostrará una tabla con todos los usuarios y la última fecha en que iniciaron sesión. Si ves cuentas que llevan mucho tiempo sin usarse o que nunca se han usado, considera deshabilitarlas temporalmente o eliminarlas si no son necesarias.

    3. Detectar cuentas con privilegios elevados

    Es importante controlar qué usuarios tienen permisos administrativos. Para ver quién pertenece al grupo sudo puedes ejecutar:

    getent group sudo

    Verifica que solo los usuarios estrictamente necesarios tengan este privilegio.

    También puedes consultar nuestras buenas prácticas de revisión de configuraciones para fortalecer tu entorno.


    Gestión de caducidad y bloqueo de cuentas

    Controlar la vigencia de las cuentas de usuario es esencial en entornos multiusuario o auditables. Linux permite definir fechas de caducidad, bloquear cuentas temporalmente y forzar cambios de contraseña, lo que reduce el riesgo de accesos no deseados a largo plazo.

    1. Establecer una fecha de expiración para una cuenta

    Si deseas que una cuenta expire en una fecha determinada (por ejemplo, para un usuario temporal o externo), usa el siguiente comando:

    sudo usermod -e 2025-12-31 nombre_de_usuario

    Para comprobar la configuración de expiración de una cuenta:

    chage -l nombre_de_usuario

    2. Forzar el cambio de contraseña en el próximo inicio

    Es útil para cuentas recién creadas o recuperadas. Puedes forzar el cambio de contraseña con:

    sudo chage -d 0 nombre_de_usuario

    3. Bloquear o desbloquear cuentas de usuario

    Para bloquear una cuenta temporalmente (sin eliminarla):

    sudo usermod -L nombre_de_usuario

    Y para desbloquearla:

    sudo usermod -U nombre_de_usuario

    Si estás configurando un entorno más complejo, también puedes consultar nuestra guía de securización avanzada.


    Endurecimiento con PAM (mínimo introductorio)

    El sistema PAM (Pluggable Authentication Modules) permite definir cómo se gestionan las políticas de autenticación en Linux. A través de PAM puedes endurecer las condiciones para el uso de contraseñas, controlar intentos de acceso y aplicar requisitos de seguridad avanzados.

    Una de las formas más comunes de aplicar políticas seguras es usando el módulo pam_pwquality, que define la complejidad mínima de las contraseñas nuevas.

    1. Verificar que el módulo esté instalado

    Primero asegúrate de que el paquete esté instalado:

    sudo apt install libpam-pwquality

    2. Configurar requisitos de contraseña

    Edita el archivo de configuración de contraseñas comunes con:

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

    Y asegúrate de tener una línea como esta (puede variar según la distribución):

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

    Este endurecimiento se aplicará cada vez que un usuario cree o cambie su contraseña.

    Para una estrategia más automatizada frente a intrusiones, considera integrar UFW con Fail2ban.


    Revisión de configuración SSH

    SSH es una de las puertas de entrada más utilizadas (y atacadas) en sistemas Linux conectados a internet. Por eso, además de usar claves SSH y deshabilitar las contraseñas, es fundamental revisar y ajustar la configuración del servicio SSH para reducir riesgos.

    1. Editar la configuración principal

    El archivo de configuración del servicio SSH es:

    sudo nano /etc/ssh/sshd_config

    Asegúrate de revisar y ajustar los siguientes parámetros:

    PermitRootLogin no
    PasswordAuthentication no
    PubkeyAuthentication yes
    ChallengeResponseAuthentication no
    UsePAM yes
    Port 22
    LoginGraceTime 30
    MaxAuthTries 3
    AllowUsers tu_usuario_admin

    2. Reiniciar el servicio SSH

    Tras aplicar cambios en el archivo de configuración, reinicia el servicio para que entren en vigor:

    sudo systemctl restart ssh

    Recuerda probar la nueva configuración en una segunda sesión antes de cerrar la actual, para evitar quedarte bloqueado si hay errores.

    Si quieres reforzar esta capa de seguridad, considera complementar la protección del cortafuegos con herramientas como Auditd o OpenSCAP.


    Errores comunes al configurar usuarios y contraseñas

    Incluso con buenas intenciones, es fácil cometer errores al gestionar usuarios en Linux. Estas malas prácticas pueden dejar tu sistema vulnerable a accesos no autorizados o dificultar la auditoría posterior. A continuación, repasamos los fallos más frecuentes y cómo evitarlos.

    • Usar contraseñas débiles o previsibles: Evita claves como 123456, admin o password. Usa combinaciones largas, aleatorias y difíciles de adivinar.
    • Reutilizar la misma contraseña en varias cuentas: Si una se ve comprometida, todas están en riesgo. Cada cuenta debe tener su propia contraseña segura.
    • Dejar el acceso SSH abierto con contraseña: Esto facilita ataques por fuerza bruta. Usa claves SSH y desactiva el inicio de sesión por contraseña.
    • Conceder privilegios sudo innecesarios: Solo los usuarios que realmente lo requieran deben estar en el grupo sudo. El exceso de privilegios aumenta el riesgo.
    • No activar 2FA en servicios críticos: Siempre que sea posible, añade autenticación en dos factores para proteger accesos sensibles como SSH.
    • No auditar cuentas inactivas: Las cuentas que no se usan deben desactivarse o eliminarse para evitar que se conviertan en un punto de entrada no controlado.
    • No revisar la configuración de expiración: Dejar contraseñas permanentes o cuentas sin fecha de caducidad puede dar lugar a accesos prolongados sin control.

    Resumen

    Configurar correctamente los usuarios y las contraseñas en Linux es uno de los pilares fundamentales de cualquier estrategia de seguridad. Aplicar el principio de privilegios mínimos, establecer contraseñas fuertes, auditar regularmente las cuentas y reforzar el acceso mediante 2FA o claves SSH reduce drásticamente el riesgo de intrusiones.

    Además, endurecer las políticas de autenticación con PAM, revisar la configuración de SSH y gestionar adecuadamente la caducidad de cuentas te permitirá construir un entorno mucho más sólido, preparado para resistir ataques automatizados o accesos indebidos.

    Estas prácticas no son opcionales: forman parte de los requisitos básicos de securización en cualquier sistema que vaya a operar en red, especialmente si es accesible desde el exterior.

    DEJA UNA RESPUESTA

    Por favor ingrese su comentario!
    Por favor ingrese su nombre aquí