Cómo mantener actualizados los servidores Ubuntu 20.04

Introducción
En este tutorial, explorará algunas prácticas recomendadas para mantener actualizado su conjunto de servidores Ubuntu 20.04. Al igual que con el fortalecimiento de la seguridad de la red , existen muchos pasos que puede seguir para garantizar que sus servidores sigan funcionando de manera segura sin futuras intervenciones.
Hay una serie de herramientas y configuraciones que puedes aplicar a la mayoría de los servidores Ubuntu más allá de lo que viene configurado automáticamente. Si te encargas de la administración de tu propio servidor, puede resultar bastante molesto y propenso a errores aplicar parches a todos tus entornos de forma manual.
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 de kernel
Prerrequisitos
- Un servidor Ubuntu 20.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 20.04 .
Paso 1: seguir las mejores prácticas para la gestión de aplicaciones
Una parte fundamental de la configuración de su servidor para actualizaciones automáticas es asegurarse de que todas las aplicaciones que se ejecutan en el servidor puedan reiniciarse correctamente después de un tiempo de inactividad no planificado 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 implique ninguna sobrecarga adicional. A pesar de esto, una de las razones más comunes para no tener una buena estrategia de actualización implementada es la preocupación por cómo se comportará su servidor después de reiniciarse.
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 de Linux modernas, incluido Ubuntu, es systemd. Systemd proporciona el comando systemctl para interactuar con sus servicios en ejecución y reiniciarlos automáticamente según sea necesario. Prácticamente todo el software que se instala a través de su administrador de paquetes y está diseñado para ejecutarse en segundo plano debe proporcionar automáticamente un servicio systemd y un archivo de unidad de configuración como práctica recomendada.
Cuando ejecute su propio software o software implementado desde repositorios de Git, no es una mala idea escribir sus propios archivos de unidad para integrarlos con systemd. Como alternativa liviana, puede preferir usar una herramienta como supervisor . También puede usar el programador cron de su sistema con la @reboot
sintaxis.
Una vez que la configuración esté en su lugar, asegúrese de probarla mediante reinicios. Puede reiniciar ejecutando sudo shutdown now -r
, lo que detendrá limpiamente los procesos en ejecución y reiniciará de inmediato. También puede especificar una hora en hh:mm o una cantidad de minutos a partir de ahora, en lugar de now
para programar un reinicio en el futuro. Las implementaciones de producción generalmente no deberían requerir su atención después de interrupciones no planificadas, y todos los servicios y puntos finales necesarios deberían volver a funcionar 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 administrador de paquetes de Ubuntu, apt
, tiene un flujo de trabajo bien establecido para realizar una actualización completa del sistema. Primero, se ejecuta apt update
para actualizar las listas de paquetes y, luego, se ejecuta apt upgrade
sin especificar un paquete para actualizar todos los paquetes del sistema. Este flujo de trabajo puede ser ligeramente diferente si tiene algún conflicto de versiones con paquetes de terceros o si desea mantener algunos paquetes sin actualizar, pero los comandos principales son los mismos.
Ubuntu ofrece una herramienta exclusiva llamada unattended-upgrades
para 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 apt
comandos:
- sudo apt update
- sudo apt install unattended-upgrades
Después de la instalación, puede comprobar que el unattended-upgrades
servicio 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-upgrades
recuperará 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 está utilizando versiones anteriores de algunos paquetes para evitar cambios en el servidor, o si su servidor utiliza repositorios de paquetes de terceros además de los de Ubuntu, puede configurar aún más el unattended-upgrades
servicio.
Su configuración se almacena en formato /etc/apt/apt.conf.d/50unattended-upgrades
. Abra este archivo con nano
su editor de texto favorito:
- sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
El archivo está bien anotado y se pueden ver muchas líneas de comentarios de código (que comienzan con //
) que explican su funcionalidad. El primer bloque de configuración maneja qué paquetes se actualizarán automáticamente, coincidiendo con una plantilla para los nombres de repositorios de paquetes de Ubuntu. Los archivos en el repositorio principal y en el -security
repositorio se actualizarán de forma predeterminada, pero las líneas que contienen los repositorios -updates
, -proposed
y -backports
están comentadas de forma predeterminada.
Estos repositorios están deshabilitados de forma predeterminada porque es más probable que contengan cambios importantes en los paquetes instalados. Para habilitarlos manualmente para actualizaciones sin supervisión, puede eliminar los //
símbolos de comentarios 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 de configuración true
/ false
. Por ejemplo, hay un interruptor para reiniciar automáticamente después de la instalación de paquetes que necesitan un reinicio para que surtan efecto. Puede habilitar esta opción eliminando el //
símbolo de comentario y cambiando false
a true
. Sin embargo, al hacerlo, su servidor dejará de estar disponible en intervalos impredecibles. Si habilita esta opción, asegúrese de que sus aplicaciones o usuarios puedan tolerar el tiempo 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 cuando haya terminado de editarlo. Si está utilizando nano
, presione Ctrl+X
, luego cuando se le solicite Y
y luego Enter.
Si realizó cambios en la configuración, vuelva a cargar el unattended-upgrades
servicio para que surtan efecto:
- sudo systemctl reload unattended-upgrades.service
Ahora debería tener soluciones implementadas para garantizar que todos los paquetes de su servidor reciban actualizaciones de seguridad esenciales sin ninguna intervención adicional. En el último paso, aprenderá a mantener actualizado su núcleo y a manejar mejor los reinicios del servidor cuando sean necesarios.
Paso 3: actualización y aplicación de parches en vivo al kernel
Con menos frecuencia que otros paquetes, necesitará actualizar el núcleo de su sistema. El núcleo 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 núcleo generalmente solo son necesarias si existe una vulnerabilidad de alto perfil que solucionar, si necesita hacer uso de una nueva característica del núcleo que se haya publicado o si su núcleo se ha vuelto tan antiguo que existe un mayor riesgo de que se acumulen errores y vulnerabilidades de los que quizás no esté al tanto.
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 es imposible programar reinicios sin hacer suposiciones sobre el entorno. Se espera que muchos servidores brinden una disponibilidad lo más cercana posible a las 24 horas del día, los 7 días de la semana, y un reinicio puede demorar una cantidad de tiempo desconocida o requerir una intervención manual.
Si está dispuesto a tolerar algún tiempo de inactividad, actualizar su kernel es sencillo: sus apt
actualizaciones no supervisadas se pueden configurar para instalar y preparar nuevos kernels junto con otros paquetes y, después de 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 reinicios como este para garantizar la disponibilidad del servicio. Por ejemplo, puede usar un balanceador de carga para redirigir automáticamente el tráfico a servidores que pueden proporcionar una funcionalidad idéntica en una implementación de escala horizontal mientras se reinician individualmente en secuencia, para evitar cualquier tiempo de inactividad visible.
Cómo habilitar Livepatch para garantizar el funcionamiento del servidor durante las actualizaciones del kernel
Para evitar tiempos de inactividad durante las actualizaciones del kernel, puede utilizar una característica del kernel de Linux llamada parches en vivo. Esta característica permite implementar actualizaciones del kernel sin tener que reiniciar. Hay dos mantenedores principales de parches en vivo del kernel: Canonical, que proporciona su propio servicio Livepatch para Ubuntu, y KernelCare, que brinda soporte para Ubuntu además de la mayoría de las otras distribuciones principales 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 Livepatch en https://auth.livepatch.canonical.com/ . Después de registrarse, puede instalar el canonical-livepatch
paquete snap. Snap es otro administrador de paquetes de Ubuntu que se ejecuta junto con apt
.
- sudo snap install canonical-livepatch
Puedes habilitarlo canonical-livepatch
con 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 utilizando canonical-livepatch status
:
- sudo canonical-livepatch status
Outputlast check: 55 seconds agokernel: 5.4.0-26.30-genericserver check-in: succeededpatch state: ✓ all applicable livepatch modules insertedpatch version: 84.1tier: updates (Free usage; This machine beta tests new patches.)machine id: d56589e7fa994005a266d4caf9b9dcf7
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, exploró varias estrategias para mantener sus servidores Ubuntu actualizados automáticamente. También aprendió algunos de los matices de los repositorios de paquetes, las actualizaciones del kernel y el manejo de reinicios de servidores. Todos estos son conceptos fundamentales 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 aprender más sobre el formato de paquete Snap, visita nuestro tutorial Cómo empaquetar y publicar una aplicación Snap en Ubuntu 18.04 .
Deja una respuesta