SecuryBlack LogoSecuryBlack
← Blog/Seguridad

Unattended-upgrades: actualizaciones de seguridad automáticas en Ubuntu y Debian sin sustos

·7 min de lectura
Unattended-upgrades: actualizaciones de seguridad automáticas en Ubuntu y Debian sin sustos

Buena parte de los servidores comprometidos no caen por un exploit sofisticado, sino por una vulnerabilidad conocida desde hace meses que nadie parcheó. Mantener el sistema operativo actualizado es una de las medidas más rentables dentro de cualquier plan de hardening de VPS, y en Ubuntu/Debian se puede automatizar por completo con unattended-upgrades.

En esta guía lo configuramos para que instale parches de seguridad automáticamente, sin sorpresas ni actualizaciones mayores que puedan romper tu aplicación.


1. Instalación

sudo apt update
sudo apt install unattended-upgrades apt-listchanges

apt-listchanges es opcional pero recomendable: te muestra (o te envía por correo) el changelog de cada paquete antes o después de actualizarlo, así sabes exactamente qué cambió.


2. Activar el servicio

sudo dpkg-reconfigure --priority=low unattended-upgrades

Esto crea /etc/apt/apt.conf.d/20auto-upgrades con el siguiente contenido, que habilita las comprobaciones diarias:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

3. Elegir qué se actualiza automáticamente

El archivo clave es /etc/apt/apt.conf.d/50unattended-upgrades. Por defecto suele incluir solo el repositorio de seguridad:

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};

Es intencionadamente conservador: solo parches de seguridad, no todo el repositorio estándar. Añadir ${distro_codename}-updates traería también correcciones de bugs no relacionadas con seguridad, con más riesgo de romper algo.


4. Evitar reinicios inesperados

Algunas actualizaciones (típicamente del kernel) requieren reiniciar el servidor para aplicarse del todo. Puedes decidir tú cómo se gestiona esto en el mismo archivo:

// Reiniciar automáticamente si hace falta
Unattended-Upgrade::Automatic-Reboot "false";

// Si prefieres reinicio automático, fija una hora de bajo tráfico
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

Si dejas Automatic-Reboot en false, el sistema seguirá funcionando con el kernel antiguo cargado en memoria hasta que reinicies manualmente, lo cual es un riesgo si el parche pendiente es crítico. Para producción sin ventanas de mantenimiento definidas, suele ser más seguro fijar una hora de reinicio automático en horario de bajo tráfico.


5. Recibir notificación de lo que se instaló

Añade tu correo para que cada ejecución te informe de los paquetes actualizados y de cualquier error:

Unattended-Upgrade::Mail "tu@email.com";
Unattended-Upgrade::MailOnlyOnError "false";

6. Comprobar que está funcionando

Para forzar una ejecución de prueba y ver el proceso en detalle sin esperar al temporizador diario:

sudo unattended-upgrade --debug --dry-run

Y para revisar el historial real de ejecuciones:

cat /var/log/unattended-upgrades/unattended-upgrades.log

7. La automatización no sustituye a la supervisión

Unattended-upgrades reduce la ventana de exposición ante CVEs conocidos, pero no te dice si un servicio dejó de responder tras un reinicio, ni si una actualización dejó un contenedor sin arrancar. Ese es precisamente el tipo de fallo silencioso que comentábamos en nuestro artículo sobre cronjobs que fallan sin avisar: un proceso automático que un día simplemente deja de funcionar y nadie se entera hasta que es tarde.

Con SecuryBlack y los heartbeats de monitorización, puedes vigilar que tus tareas automáticas —incluidas las actualizaciones nocturnas— se sigan ejecutando con éxito, y recibir una alerta inmediata en caso contrario.