Cómo mantener actualizados los servidores Ubuntu 22.04

Introducción

En este tutorial, explorarás algunas prácticas recomendadas para mantener tu servidor Ubuntu 22.04 actualizado. Al igual que con el fortalecimiento de la seguridad de la red , existen diversas medidas que puedes tomar para garantizar que tus servidores sigan funcionando de forma segura sin necesidad de intervención futura.

Hay varias herramientas y configuraciones que puedes aplicar a la mayoría de los servidores Ubuntu, además de las que vienen configuradas automáticamente. Si administras tu propio servidor, parchear todos tus entornos manualmente puede ser bastante problemático y propenso a errores.

Este tutorial cubrirá:

  • Probar reinicios elegantes siguiendo las mejores prácticas para la gestión de aplicaciones, para minimizar cualquier complicación derivada de las actualizaciones de mantenimiento
  • Configurar actualizaciones automáticas para la mayoría de los paquetes y bibliotecas que se ejecutan en su máquina
  • Aplicación de parches de kernel en vivo y otras prácticas recomendadas en torno a las actualizaciones del kernel

Prerrequisitos

  • Un servidor Ubuntu 22.04 y un usuario no root con privilegios sudo. Puede obtener más información sobre cómo configurar un usuario con estos privilegios en nuestra guía “Configuración inicial del servidor con Ubuntu 22.04” .

Paso 1: Seguir las mejores prácticas para la gestión de aplicaciones

Un aspecto fundamental de la configuración de su servidor para actualizaciones automáticas es garantizar que todas las aplicaciones que se ejecutan en él puedan reiniciarse correctamente tras una inactividad imprevista o un reinicio. Los administradores de paquetes de Linux están diseñados para ejecutarse sin interrupciones en segundo plano, de modo que el mantenimiento necesario no genere sobrecarga adicional. A pesar de ello, una de las razones más comunes para no contar con una buena estrategia de actualización es la preocupación por el comportamiento del servidor tras el reinicio.

Siempre que sea posible, las aplicaciones de su pila deben ser administradas por el sistema de inicio de su servidor, que en la mayoría de las distribuciones modernas de Linux, incluyendo Ubuntu, es systemd. Systemd proporciona el comando systemctl para interactuar con los servicios en ejecución y reiniciarlos automáticamente cuando sea necesario. Prácticamente todo el software instalado a través de su gestor de paquetes y diseñado para ejecutarse en segundo plano debería proporcionar automáticamente un servicio systemd y un archivo de unidad de configuración como práctica recomendada.

Al ejecutar su propio software, o software implementado desde repositorios de Git, es recomendable escribir sus propios archivos de unidad para integrarlos con systemd. Como alternativa ligera, puede preferir usar una herramienta como supervisor . También puede usar el programador cron de su sistema con la @rebootsintaxis.

Una vez establecida la configuración, asegúrese de probarla reiniciando el sistema. Puede reiniciar ejecutando sudo shutdown now -r, lo que detendrá automáticamente los procesos en ejecución y reiniciará el sistema inmediatamente. También puede especificar una hora en hh:mm o en minutos, en lugar de nowpara programar un reinicio futuro. Las implementaciones de producción generalmente no deberían requerir su atención después de interrupciones imprevistas, y todos los servicios y endpoints necesarios deberían volver a estar operativos automáticamente.

Ahora que se ha asegurado de que su entorno no tendrá problemas para persistir durante los reinicios de mantenimiento, en el siguiente paso aprenderá a programar actualizaciones automáticas.

Paso 2: Configuración de actualizaciones no supervisadas

El gestor de paquetes de Ubuntu, apt, cuenta con un flujo de trabajo bien establecido para realizar una actualización completa del sistema. Primero, se ejecuta apt updatepara actualizar la lista de paquetes y, a continuación, se ejecuta apt upgradesin especificar ningún paquete para actualizar todos los paquetes del sistema. Este flujo de trabajo puede variar ligeramente si existen conflictos de versiones con paquetes de terceros o si se mantienen algunos paquetes sin actualizar intencionalmente, pero los comandos principales son los mismos.

Ubuntu ofrece una herramienta única llamada ” unattended-upgradespara recuperar e instalar automáticamente parches de seguridad y otras actualizaciones esenciales para su servidor”. La mayoría de los servidores Ubuntu vienen con esta herramienta instalada y configurada automáticamente, pero puede instalarla con los siguientes aptcomandos:

sudo apt update
sudo apt install unattended-upgrades

Después de la instalación, puede comprobar que el unattended-upgradesservicio se está ejecutando mediante systemctl:

sudo systemctl status unattended-upgrades.service

Output● unattended-upgrades.service - Unattended Upgrades Shutdown
     Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-02-14 17:51:49 UTC; 3h 4min ago
       Docs: man:unattended-upgrade(8)
   Main PID: 829 (unattended-upgr)
      Tasks: 2 (limit: 1137)
     Memory: 10.6M
     CGroup: /system.slice/unattended-upgrades.service

La configuración predeterminada de unattended-upgradesrecuperará automáticamente las correcciones de errores y las actualizaciones de seguridad para la mayoría de los paquetes incluidos en los repositorios de Ubuntu. Sin embargo, si utiliza versiones anteriores de algunos paquetes para evitar cambios originales, o si su servidor utiliza repositorios de paquetes de terceros además de los de Ubuntu, puede configurar el unattended-upgradesservicio con más detalle.

Su configuración se almacena en /etc/apt/apt.conf.d/50unattended-upgrades. Abra este archivo con nanosu editor de texto favorito:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

El archivo está bien anotado y se pueden ver numerosas líneas de comentarios de código (que empiezan por //) que explican su funcionalidad. El primer bloque de configuración gestiona qué paquetes se actualizarán automáticamente, siguiendo una plantilla para los nombres de los repositorios de paquetes de Ubuntu. Los archivos del repositorio principal y del -securityrepositorio se actualizarán por defecto, pero las líneas que contienen los repositorios -updates, -proposedy -backportsestán comentadas por defecto.

Estos repositorios están deshabilitados por defecto porque es más probable que contengan cambios importantes en los paquetes instalados. Para habilitarlos manualmente para actualizaciones automáticas, puede eliminar los //símbolos de comentario de estas líneas. /etc/apt/apt.conf.d/50actualizaciones-unattendidas

// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};
…

Más abajo en el archivo, hay varias opciones con interruptores truede falseconfiguración. Por ejemplo, hay un interruptor para reiniciar automáticamente tras la instalación de paquetes que requieren reinicio para que surtan efecto. Puede habilitar esta opción eliminando el //símbolo de comentario y cambiándolo falsepor true. Sin embargo, al hacerlo, su servidor dejará de estar disponible a intervalos impredecibles. Si habilita esta opción, asegúrese de que sus aplicaciones o usuarios puedan tolerar tiempos de inactividad. /etc/apt/apt.conf.d/50actualizaciones-unattendidas

// Automatically reboot *WITHOUT CONFIRMATION* if
//  the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

Guarde y cierre el archivo al terminar de editarlo. Si usa nano, presione Ctrl+X, luego, cuando se le solicite, Yy luego Enter.

Si realizó cambios en la configuración, reinicie el unattended-upgradesservicio para que surtan efecto:

sudo systemctl restart unattended-upgrades.service

Ahora debería contar con soluciones para garantizar que todos los paquetes de su servidor reciban actualizaciones de seguridad esenciales sin necesidad de intervención adicional. En el último paso, aprenderá a mantener su kernel actualizado y a gestionar mejor los reinicios del servidor cuando sean necesarios.

Paso 3: Actualización y parcheo en vivo del kernel

Con menos frecuencia que otros paquetes, necesitará actualizar el kernel de su sistema. El kernel de Linux contiene (casi) todos los controladores de hardware en ejecución y es responsable de la mayoría de las interacciones de bajo nivel del sistema. Las actualizaciones del kernel generalmente solo son necesarias si existe una vulnerabilidad importante que abordar, si necesita usar una nueva característica del kernel ya conocida o si su kernel es tan antiguo que existe un mayor riesgo de acumular errores y vulnerabilidades que quizás desconozca.

No existe un método universal para programar automáticamente las actualizaciones del kernel de Linux. Esto se debe a que, históricamente, las actualizaciones del kernel han requerido un reinicio completo del sistema, y ​​programar reinicios es imposible sin hacer suposiciones sobre el entorno. Se espera que muchos servidores proporcionen una disponibilidad lo más cercana posible a las 24 horas, los 7 días de la semana, y un reinicio puede tardar un tiempo indeterminado o requerir intervención manual.

Si está dispuesto a tolerar algún tiempo de inactividad, actualizar su kernel es sencillo: aptpuede configurar las actualizaciones automáticas para instalar y preparar nuevos kernels junto con otros paquetes, y tras reiniciar, su servidor debería usar automáticamente el nuevo kernel. La mayoría de las implementaciones de producción requieren una complejidad adicional en torno a este tipo de reinicios para garantizar la disponibilidad del servicio. Por ejemplo, podría usar un balanceador de carga para redirigir automáticamente el tráfico a servidores que puedan ofrecer la misma funcionalidad en una implementación de escala horizontal mientras se reinician individualmente en secuencia, para evitar cualquier tiempo de inactividad visible.

Habilitar Livepatch para garantizar el tiempo de actividad del servidor durante las actualizaciones del kernel

Para evitar tiempos de inactividad durante las actualizaciones del kernel, puede usar una función del kernel de Linux llamada parches en vivo. Esta función permite implementar actualizaciones del kernel sin reiniciar. Hay dos proveedores principales de parches en vivo del kernel: Canonical, que ofrece su propio servicio Livepatch para Ubuntu, y KernelCare, que ofrece soporte para Ubuntu, además de la mayoría de las principales distribuciones de Linux. Ambos requieren registro para su uso, y solo el servicio de Canonical es gratuito para uso individual.

Puede registrarse para obtener una clave de Livepatch en https://auth.livepatch.canonical.com/ . Después de registrarse, puede instalar el canonical-livepatchpaquete snap. Snap es otro gestor de paquetes de Ubuntu que se ejecuta junto con apt.

sudo snap install canonical-livepatch

Puedes habilitarlo canonical-livepatchcon un comando de una línea usando la clave de su sitio web:

sudo canonical-livepatch enable your-key

La salida debe contener el mensaje Successfully enabled device.El servicio debe ejecutarse en segundo plano a partir de ahora sin ninguna intervención adicional y puede verificar su estado mediante canonical-livepatch status:

sudo canonical-livepatch status

Outputlast check: 50 seconds ago
kernel: 5.15.0-25-generic
server check-in: succeeded
patch state: ✓ all applicable livepatch modules inserted
patch version: 84.1
tier: updates (Free usage; This machine beta tests new patches.)
machine id: 2565a9e7fc9f4405a167e4caf9b9dcf3

Ahora ha configurado actualizaciones automáticas del kernel para su servidor, lo que significa que ya no debería ser necesario reiniciar para mantener un entorno seguro y actualizado.

Conclusión

En este tutorial, exploraste diversas estrategias para mantener tus servidores Ubuntu actualizados automáticamente. También aprendiste algunos detalles sobre los repositorios de paquetes, las actualizaciones del kernel y la gestión de reinicios del servidor. Estos son fundamentos importantes de DevOps y del trabajo con servidores en general, y casi todas las configuraciones de producción se basan en estos conceptos básicos.

A continuación, puede que quieras aprender más sobre la gestión de paquetes en Ubuntu . Si quieres saber más sobre el formato de paquetes Snap, visita nuestro tutorial ” Cómo empaquetar y publicar una aplicación Snap” .

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post