Lynis es una herramienta de auditoría de seguridad de código abierto desarrollada por CISOfy. Se ejecuta en el propio servidor, revisa cientos de puntos (SSH, kernel, usuarios, paquetes, firewall, registros) y devuelve una lista priorizada de avisos y sugerencias junto con un índice de endurecimiento de 0 a 100. En este tutorial instalarás Lynis en Ubuntu 24.04 desde el repositorio oficial, ejecutarás una auditoría completa, aprenderás a leer el informe, corregirás algunos hallazgos habituales y dejarás un escaneo semanal programado con systemd.
Lynis no es un escáner de red ni un antivirus: no ataca el servidor ni busca CVE concretas en cada paquete. Su función es detectar configuraciones débiles y darte una ruta clara para endurecer el sistema.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath. Los comandos sirven también en Debian 12.
- Un usuario no root con privilegios
sudo. - Acceso SSH al servidor y una sesión abierta de respaldo antes de cambiar la configuración de SSH.
Paso 1: Instalar Lynis desde el repositorio de CISOfy
Ubuntu incluye un paquete lynis en sus repositorios, pero suele ir varias versiones por detrás, y Lynis se actualiza con frecuencia para añadir pruebas nuevas. Por eso es preferible usar el repositorio oficial de CISOfy.
Instala las herramientas necesarias para descargar la clave del repositorio:
sudo apt update
sudo apt install ca-certificates curl gnupg
Descarga la clave pública de CISOfy y guárdala en /etc/apt/keyrings:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://packages.cisofy.com/keys/cisofy-software-public.key | sudo gpg --dearmor -o /etc/apt/keyrings/cisofy-lynis.gpg
Añade el repositorio indicando esa clave con signed-by:
echo "deb [signed-by=/etc/apt/keyrings/cisofy-lynis.gpg] https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
Actualiza el índice de paquetes e instala Lynis:
sudo apt update
sudo apt install lynis
Comprueba que apt ha tomado el paquete del repositorio de CISOfy y no del de Ubuntu:
apt policy lynis
La versión instalada debe aparecer asociada a packages.cisofy.com:
lynis:
Installed: 3.1.x
Candidate: 3.1.x
Version table:
*** 3.1.x 500
500 https://packages.cisofy.com/community/lynis/deb stable/main amd64 Packages
Verifica también la versión y si hay alguna más reciente publicada:
lynis show version
sudo lynis update info
Notasi prefieres no añadir repositorios externos,
sudo apt install lynisdesde los repositorios de Ubuntu también funciona. El resto del tutorial es igual, aunque tendrás menos pruebas disponibles.
Paso 2: Ejecutar la primera auditoría
La auditoría completa del sistema se lanza con audit system. Ejecútala con sudo: sin privilegios de root Lynis no puede leer archivos como /etc/shadow o la configuración de sudo y se salta muchas pruebas.
sudo lynis audit system
El escaneo tarda entre uno y tres minutos. Lynis muestra cada grupo de pruebas en pantalla con un resultado entre corchetes (OK, FOUND, NOT FOUND, WARNING, SUGGESTION...). Al final verás un resumen parecido a este:
Lynis security scan details:
Hardening index : 62 [############ ]
Tests performed : 262
Plugins enabled : 1
Components:
- Firewall [V]
- Malware scanner [X]
Files:
- Test and debug information : /var/log/lynis.log
- Report data : /var/log/lynis-report.dat
Si solo quieres el resumen, sin pausas ni colores, añade --quick (no espera a que pulses Intro entre secciones) o --quiet (solo muestra avisos):
sudo lynis audit system --quick
Paso 3: Interpretar el informe
Lynis deja dos archivos en /var/log:
| Archivo | Contenido |
|---|---|
/var/log/lynis.log | Registro detallado de cada prueba: qué comprobó y por qué dio ese resultado. |
/var/log/lynis-report.dat | Datos del informe en formato clave=valor, fácil de filtrar con grep. |
Ambos se sobrescriben en cada ejecución.
Avisos y sugerencias
Los avisos (warning[]) son problemas que conviene corregir cuanto antes. Las sugerencias (suggestion[]) son mejoras de endurecimiento. Filtra cada tipo desde el informe:
sudo grep '^warning\[\]' /var/log/lynis-report.dat
sudo grep '^suggestion\[\]' /var/log/lynis-report.dat
Cada línea incluye el identificador de la prueba, la descripción y, a veces, un detalle adicional:
suggestion[]=SSH-7408|Consider hardening SSH configuration|MaxAuthTries (6 --> 3)|-|
suggestion[]=KRNL-6000|One or more sysctl values differ from the scan profile and could be tweaked|-|-|
suggestion[]=PKGS-7346|Purge old/removed packages (4 found) with aptitude purge or dpkg --purge command. This will cleanup old configuration files, cron jobs and startup scripts.|-|-|
Para entender una prueba concreta, pide a Lynis su explicación y el fragmento de registro asociado:
sudo lynis show details SSH-7408
Índice de endurecimiento
El índice de endurecimiento resume el estado general. Extráelo del informe:
sudo grep '^hardening_index=' /var/log/lynis-report.dat
hardening_index=62
Una instalación limpia de Ubuntu suele rondar los 55-65 puntos. No persigas el 100: algunas sugerencias no tienen sentido para tu caso (por ejemplo, particiones separadas en un VPS). Úsalo para comparar tu servidor consigo mismo a lo largo del tiempo.
Paso 4: Corregir hallazgos habituales
Trabaja primero los avisos y después las sugerencias que afecten a servicios expuestos. Estos son algunos ejemplos frecuentes en Ubuntu 24.04.
Endurecer SSH (SSH-7408)
Lynis compara la configuración efectiva de sshd con un perfil más estricto. Crea un archivo de configuración adicional; en Ubuntu 24.04 los archivos de /etc/ssh/sshd_config.d/ se leen antes que el resto de sshd_config y el primer valor encontrado es el que se aplica:
sudo nano /etc/ssh/sshd_config.d/10-hardening.conf
PermitRootLogin no
MaxAuthTries 3
X11Forwarding no
AllowTcpForwarding no
ClientAliveCountMax 2
Importantesi usas túneles SSH o reenvío de puertos, no incluyas
AllowTcpForwarding no. Asegúrate también de que tienes otro usuario consudoantes de bloquear el acceso de root.
Valida la sintaxis y recarga el servicio sin cerrar tu sesión actual:
sudo sshd -t
sudo systemctl reload ssh
Si sshd -t no muestra nada, la configuración es válida. Abre una segunda sesión SSH para comprobar que sigues pudiendo entrar antes de cerrar la primera.
Instalar paquetes de apoyo recomendados
Lynis suele sugerir herramientas que ayudan a mantener el sistema: libpam-tmpdir (directorios temporales por usuario), debsums (verificación de archivos de paquetes), apt-show-versions (versiones instaladas) y needrestart (servicios que necesitan reinicio tras actualizar). Instálalas si Lynis las propone:
sudo apt install libpam-tmpdir debsums apt-show-versions needrestart
Purgar paquetes eliminados (PKGS-7346)
Los paquetes eliminados con apt remove dejan su configuración en el sistema. Lista los que están en estado rc y, si la lista no está vacía, púrgalos:
dpkg -l | awk '/^rc/ {print $2}'
sudo apt purge $(dpkg -l | awk '/^rc/ {print $2}')
Ajustar parámetros del kernel (KRNL-6000)
Revisa en /var/log/lynis.log qué valores de sysctl difieren del perfil:
sudo grep 'has a different value than expected' /var/log/lynis.log
Aplica solo los que entiendas en un archivo propio, por ejemplo /etc/sysctl.d/99-hardening.conf, y cárgalos con sudo sysctl --system. La guía de lista de verificación de auditoría de seguridad de esta misma sección incluye un bloque recomendado.
Volver a medir
Tras cada tanda de cambios, repite la auditoría y compara el índice:
sudo lynis audit system --quick > /dev/null
sudo grep '^hardening_index=' /var/log/lynis-report.dat
hardening_index=71
Paso 5: Excluir pruebas que no aplican
Algunas pruebas generarán sugerencias que has decidido no seguir. En lugar de ignorarlas cada vez, exclúyelas en un perfil personalizado. Lynis carga automáticamente /etc/lynis/custom.prf si existe, y no se sobrescribe al actualizar el paquete:
sudo nano /etc/lynis/custom.prf
# Particiones separadas no aplican en este VPS
skip-test=FILE-6310
# Sin escáner de malware en este servidor, decisión documentada
skip-test=HRDN-7230
Escribe un comentario con el motivo de cada exclusión para que quien revise la auditoría después sepa por qué se omitió. Comprueba que el perfil se carga:
sudo lynis show profiles
La salida debe incluir /etc/lynis/custom.prf además de /etc/lynis/default.prf.
También puedes ejecutar solo un grupo de pruebas, útil para verificar un cambio concreto sin repetir toda la auditoría. Lista los grupos disponibles y lanza uno:
lynis show groups
sudo lynis audit system --tests-from-group ssh
Paso 6: Programar auditorías semanales con systemd
Una auditoría puntual pierde valor en pocas semanas. Programa Lynis para que se ejecute cada semana y guarde una copia fechada del informe, de modo que puedas comparar resultados.
Crea el directorio donde se guardarán los informes:
sudo install -d -m 0700 /var/log/lynis-reports
Crea un script pequeño que ejecute la auditoría y copie el informe:
sudo nano /usr/local/sbin/lynis-weekly
#!/usr/bin/env bash
set -euo pipefail
report_dir="/var/log/lynis-reports"
stamp="$(date +%F)"
/usr/sbin/lynis audit system --cronjob > /dev/null
cp /var/log/lynis-report.dat "${report_dir}/lynis-report-${stamp}.dat"
grep '^hardening_index=' "${report_dir}/lynis-report-${stamp}.dat"
# Conservar solo las últimas 12 semanas
find "${report_dir}" -name 'lynis-report-*.dat' -mtime +84 -delete
La opción --cronjob desactiva colores y pausas para ejecuciones desatendidas. Haz el script ejecutable:
sudo chmod 0750 /usr/local/sbin/lynis-weekly
Crea la unidad de servicio:
sudo nano /etc/systemd/system/lynis-weekly.service
[Unit]
Description=Auditoría semanal de seguridad con Lynis
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/lynis-weekly
Y el temporizador que la lanza cada lunes a las 04:00:
sudo nano /etc/systemd/system/lynis-weekly.timer
[Unit]
Description=Ejecuta la auditoría de Lynis cada semana
[Timer]
OnCalendar=Mon *-*-* 04:00:00
RandomizedDelaySec=30min
Persistent=true
[Install]
WantedBy=timers.target
Recarga systemd, activa el temporizador y lanza una ejecución manual para probarlo:
sudo systemctl daemon-reload
sudo systemctl enable --now lynis-weekly.timer
sudo systemctl start lynis-weekly.service
Comprueba el resultado en el diario y la próxima ejecución programada:
sudo journalctl -u lynis-weekly.service -n 5 --no-pager
systemctl list-timers lynis-weekly.timer
lynis-weekly[2104]: hardening_index=71
Para comparar dos semanas, basta con un diff de las sugerencias:
sudo diff <(grep '^suggestion' /var/log/lynis-reports/lynis-report-2026-09-14.dat) <(grep '^suggestion' /var/log/lynis-reports/lynis-report-2026-09-21.dat)
Sustituye las fechas por las de tus informes.
Solución de problemas
Muchas pruebas aparecen como omitidas. Ejecutaste Lynis sin sudo. Vuelve a lanzarlo como root para que pueda leer la configuración protegida.
apt update devuelve NO_PUBKEY para packages.cisofy.com. La clave no se descargó bien o la ruta de signed-by no coincide. Repite la descarga de la clave del paso 1 y comprueba que el archivo /etc/apt/keyrings/cisofy-lynis.gpg existe y no está vacío.
Una sugerencia sigue apareciendo después de corregirla. Lynis evalúa la configuración efectiva. En el caso de SSH, comprueba el valor real con sudo sshd -T | grep -i maxauthtries; si otro archivo de /etc/ssh/sshd_config.d/ define el mismo parámetro antes que el tuyo, gana ese.
Conclusión
Has instalado Lynis desde el repositorio oficial, ejecutado una auditoría completa, interpretado avisos, sugerencias e índice de endurecimiento, corregido hallazgos habituales y programado auditorías semanales con informes fechados. Lo importante no es la cifra absoluta, sino que el índice suba y que cada sugerencia descartada tenga un motivo documentado.
Como siguientes pasos puedes:
- Revisar manualmente el resto de áreas con una lista de verificación de auditoría de seguridad.
- Reforzar el acceso con claves SSH y autenticación de dos factores.
- Instalar un sistema de detección de intrusiones como AIDE para vigilar cambios en archivos críticos.
