Que tu servidor se parchee solo
Básico
Los pasos marcados en azul cambian según tu sistema.
Cuando se publica una vulnerabilidad grave, empieza una carrera: en unas horas hay programas recorriendo internet en busca de servidores sin parchear. Si administras tu servidor tú solo, no siempre vas a estar delante para actualizar a tiempo. Ni de vacaciones, ni de madrugada, ni la semana que tienes otras cosas en la cabeza.
La solución es que el servidor instale solo las actualizaciones de seguridad. En las distribuciones estables es una apuesta segura: sus parches corrigen el fallo sin cambiar el comportamiento del programa, así que lo que funcionaba ayer sigue funcionando hoy. Lo que no se hace solo son los saltos de versión, que siguen siendo cosa tuya.
En este tutorial lo configurarás en tu sistema, con un reinicio programado para cuando el parche lo necesite, y verás qué queda fuera y sigue dependiendo de ti.
Lo que necesitas
Un servidor con un usuario con sudo. Si partes de cero, sigue antes los primeros pasos de un servidor Linux.
Paso 1: instalar
Ubuntu
Ubuntu Server ya trae unattended-upgrades instalado y activado. Compruébalo:
cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Si el archivo no existe o los valores son "0", instálalo y actívalo:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Responde que sí a la pregunta de si quieres descargar e instalar automáticamente las actualizaciones estables.
Debian
Instala unattended-upgrades y apt-listchanges, que resume lo que cambia en cada actualización:
sudo apt update
sudo apt install unattended-upgrades apt-listchanges
Actívalo:
sudo dpkg-reconfigure -plow unattended-upgrades
Responde que sí a la pregunta de si quieres descargar e instalar automáticamente las actualizaciones estables. Se crea el archivo /etc/apt/apt.conf.d/20auto-upgrades, con dos líneas: una para actualizar la lista de paquetes cada día y otra para instalar las actualizaciones.
AlmaLinux / Rocky
Instala dnf-automatic:
sudo dnf install dnf-automatic
Fedora
Instala el complemento de actualizaciones automáticas de dnf:
sudo dnf install dnf5-plugin-automatic
Paso 2: qué se instala y cuándo se reinicia
Ubuntu
Por defecto, unattended-upgrades instala solo las actualizaciones del repositorio de seguridad. La lista está en /etc/apt/apt.conf.d/50unattended-upgrades, un archivo largo y comentado que conviene leer, pero no edites: las actualizaciones del propio paquete querrán reemplazarlo. Tus ajustes van en un archivo aparte que se lee después y tiene la última palabra:
sudo nano /etc/apt/apt.conf.d/52unattended-upgrades-local
/etc/apt/apt.conf.d/52unattended-upgrades-local
// Limpiar los núcleos viejos y las dependencias que ya no usa nadie
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Si una actualización necesita reiniciar (un núcleo nuevo, por ejemplo), hacerlo de madrugada
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:30";
El reinicio solo se hace cuando una actualización lo pide, no cada noche. Si tu servidor no se puede reiniciar sin avisar, deja Automatic-Reboot en "false" y reinícialo tú cuando veas el aviso del paso 4.
Si el servidor puede mandar correo, añade también Unattended-Upgrade::Mail "tu@ejemplo.org"; y Unattended-Upgrade::MailReport "only-on-error"; para enterarte solo cuando algo falle.
Debian
Por defecto, unattended-upgrades instala solo las actualizaciones del repositorio de seguridad. La lista está en /etc/apt/apt.conf.d/50unattended-upgrades, un archivo largo y comentado que conviene leer, pero no edites: las actualizaciones del propio paquete querrán reemplazarlo. Tus ajustes van en un archivo aparte que se lee después y tiene la última palabra:
sudo nano /etc/apt/apt.conf.d/52unattended-upgrades-local
/etc/apt/apt.conf.d/52unattended-upgrades-local
// Limpiar los núcleos viejos y las dependencias que ya no usa nadie
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Si una actualización necesita reiniciar (un núcleo nuevo, por ejemplo), hacerlo de madrugada
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:30";
El reinicio solo se hace cuando una actualización lo pide, no cada noche. Si tu servidor no se puede reiniciar sin avisar, deja Automatic-Reboot en "false" y reinícialo tú cuando veas el aviso del paso 4.
Si el servidor puede mandar correo, añade también Unattended-Upgrade::Mail "tu@ejemplo.org"; y Unattended-Upgrade::MailReport "only-on-error"; para enterarte solo cuando algo falle.
AlmaLinux / Rocky
La configuración está en /etc/dnf/automatic.conf. Ábrelo y deja así la sección [commands]:
sudo nano /etc/dnf/automatic.conf
/etc/dnf/automatic.conf
[commands]
# Solo las actualizaciones con un aviso de seguridad
upgrade_type = security
# Descargarlas e instalarlas, no solo avisar
download_updates = yes
apply_updates = yes
# Reiniciar solo si una actualización lo necesita (un núcleo nuevo, por ejemplo)
reboot = when-needed
AlmaLinux y Rocky publican sus avisos de seguridad igual que Red Hat, así que upgrade_type = security funciona como se espera. Si tu servidor no se puede reiniciar sin avisar, deja reboot = never y reinícialo tú cuando veas el aviso del paso 4.
Fedora
Los valores por defecto están en /usr/share/dnf5/dnf5-plugins/automatic.conf. No toques ese archivo: tus ajustes van en /etc/dnf/automatic.conf, que solo necesita lo que quieras cambiar:
sudo nano /etc/dnf/automatic.conf
/etc/dnf/automatic.conf
[commands]
# Descargar e instalar, no solo avisar
apply_updates = yes
# Reiniciar solo si una actualización lo necesita (un núcleo nuevo, por ejemplo)
reboot = when-needed
Fedora no es una distribución estable como las demás: sus actualizaciones traen versiones nuevas, no solo parches, y no todas las correcciones llevan un aviso de seguridad. Por eso aquí se instala todo (upgrade_type = default, el valor de fábrica). Si prefieres limitarlo a los avisos de seguridad, añade upgrade_type = security.
Paso 3: ponerlo en marcha y probarlo
Ubuntu
unattended-upgrades funciona con dos temporizadores de systemd: uno actualiza la lista de paquetes y el otro instala. Comprueba cuándo les toca:
systemctl list-timers 'apt-daily*'
Y haz un ensayo, que te dirá qué instalaría sin instalar nada:
sudo unattended-upgrade --dry-run --debug
Al final de la salida verás los paquetes que se actualizarían, o que no hay ninguno pendiente. Si hay un error en tu archivo de ajustes, aparecerá aquí.
Debian
unattended-upgrades funciona con dos temporizadores de systemd: uno actualiza la lista de paquetes y el otro instala. Comprueba cuándo les toca:
systemctl list-timers 'apt-daily*'
Y haz un ensayo, que te dirá qué instalaría sin instalar nada:
sudo unattended-upgrade --dry-run --debug
Al final de la salida verás los paquetes que se actualizarían, o que no hay ninguno pendiente. Si hay un error en tu archivo de ajustes, aparecerá aquí.
AlmaLinux / Rocky
Activa el temporizador, que lanza la revisión cada mañana:
sudo systemctl enable --now dnf-automatic.timer
systemctl list-timers 'dnf-automatic*'
Para ver qué avisos de seguridad tienes pendientes ahora mismo:
sudo dnf updateinfo list --security
Fedora
Activa el temporizador, que lanza la revisión cada mañana:
sudo systemctl enable --now dnf5-automatic.timer
systemctl list-timers 'dnf5-automatic*'
Para ver qué avisos de seguridad tienes pendientes ahora mismo:
sudo dnf updateinfo list --security
Paso 4: saber qué ha hecho
Que algo se haga solo no significa que no tengas que mirarlo nunca. Repasa de vez en cuando lo que se ha instalado y si queda algún reinicio pendiente.
Ubuntu
El registro de cada ejecución está en /var/log/unattended-upgrades/unattended-upgrades.log:
sudo tail -n 30 /var/log/unattended-upgrades/unattended-upgrades.log
Cuando una actualización necesita reiniciar el servidor, aparece el archivo /var/run/reboot-required, y en /var/run/reboot-required.pkgs se ve qué paquete lo ha pedido. Además, Ubuntu te lo recuerda al entrar por SSH.
Hay actualizaciones que no piden reiniciar el servidor, pero sí los servicios que usan la biblioteca parcheada. needrestart (de serie en Ubuntu; en Debian, sudo apt install needrestart) te dice cuáles: lánzalo con sudo needrestart.
Debian
El registro de cada ejecución está en /var/log/unattended-upgrades/unattended-upgrades.log:
sudo tail -n 30 /var/log/unattended-upgrades/unattended-upgrades.log
Cuando una actualización necesita reiniciar el servidor, aparece el archivo /var/run/reboot-required, y en /var/run/reboot-required.pkgs se ve qué paquete lo ha pedido. Además, Ubuntu te lo recuerda al entrar por SSH.
Hay actualizaciones que no piden reiniciar el servidor, pero sí los servicios que usan la biblioteca parcheada. needrestart (de serie en Ubuntu; en Debian, sudo apt install needrestart) te dice cuáles: lánzalo con sudo needrestart.
AlmaLinux / Rocky
Lo que ha hecho cada ejecución queda en el diario de systemd:
journalctl -u dnf-automatic.service --since "1 week ago"
Para saber si hace falta reiniciar, y por qué paquete:
sudo dnf needs-restarting -r
Si dnf no reconoce la orden, instala antes dnf-plugins-core.
Fedora
Lo que ha hecho cada ejecución queda en el diario de systemd:
journalctl -u dnf5-automatic.service --since "1 week ago"
Para saber si hace falta reiniciar, y por qué paquete:
sudo dnf needs-restarting -r
Lo que no se actualiza solo
Las actualizaciones automáticas cubren los paquetes de tu distribución. Todo lo demás sigue siendo cosa tuya, y suele ser lo más expuesto:
- Los contenedores. Las imágenes de Docker no se actualizan con el sistema. Repasa la sección del día a día de Docker y Compose y hazlo con la misma regularidad.
- Las aplicaciones instaladas a mano: un WordPress con sus plugins, un Nextcloud, cualquier cosa que descargaste de una web. Muchas tienen su propio sistema de actualizaciones; actívalo o apúntate sus avisos.
- Los paquetes de lenguajes, como los de pip o npm que instalaste fuera de la distribución.
- Los saltos de versión de la distribución, como de Debian 12 a 13. Esos, con calma, con copia de seguridad y a mano.
Para enterarte de lo importante, suscríbete a los avisos de seguridad de tu distribución: los USN de Ubuntu, la lista debian-security-announce de Debian o los avisos de AlmaLinux y Rocky.
Listo
Tu servidor se parchea solo cada día y se reinicia de madrugada cuando hace falta. La próxima vez que salga una vulnerabilidad grave en algún paquete del sistema, lo más probable es que, cuando leas la noticia, tu servidor ya esté corregido.
