Seguro que te ha pasado alguna vez: estás tranquilamente revisando los logs de tu servidor, o quizás simplemente curioseando por las tripas de un repositorio de Ubuntu, y te topas con una lista interminable de archivos con nombres raros. Algo como unattended-upgrades_1.1ubuntu1.18.04.14_all.deb. A primera vista, parece el inventario de una ferretería digital, algo seco y sin alma. Pero, si me acompañas un momento y te terminas ese café —yo me acabo de poner el tercero de la mañana, un «asiático» como Dios manda, que para algo estamos en Cartagena—, verás que detrás de esos nombres crípticos se esconde una de las herramientas más infravaloradas y vitales para que internet no se caiga a pedazos cada martes.
La verdad es que el directorio /ubuntu/pool/main/u/unattended-upgrades/ es como el cuarto de máquinas de un barco. Nadie baja allí a hacerse fotos para Instagram, pero si los motores se paran, te quedas a la deriva en mitad del Mediterráneo. Vamos a destripar qué significan esos archivos, por qué hay tantas versiones acumuladas desde 2014 y cómo esta pequeña utilidad nos ahorra a los que trabajamos en tecnología más de un dolor de cabeza (y alguna que otra noche en vela).
Antes de entrar en harina con las actualizaciones automáticas, conviene entender dónde estamos parados. En el ecosistema de Ubuntu, el «pool» es el almacén central. Imagínate una nave industrial gigante en el Polígono de Santa Ana donde se guarda absolutamente todo el software oficial. No está organizado por versiones de la distribución (como Trusty, Xenial o Bionic), sino por el nombre del paquete. Es una forma eficiente de no duplicar archivos: si tres versiones distintas de Ubuntu usan el mismo paquete, solo se guarda una vez aquí.
Lo que vemos en la fuente de información es la subcarpeta dedicada a unattended-upgrades. Y ojo, que el nombre ya nos da una pista de su filosofía: «actualizaciones sin asistencia». Es el mayordomo digital que se encarga de instalar los parches de seguridad mientras tú estás durmiendo o, si tienes suerte, disfrutando de unas marineras en una terraza del puerto.
En esa lista de archivos que mencionábamos al principio, vemos extensiones como .dsc, .tar.xz y .deb. Para los que no estéis familiarizados con el empaquetado de Debian (la madre de Ubuntu), aquí va el desglose rápido:
- .dsc: Es el archivo de control. Básicamente, un papelito que dice «este paquete contiene esto, lo ha hecho fulanito y tiene esta firma digital para que sepas que nadie lo ha manipulado».
- .tar.xz: El código fuente comprimido. Es la receta del plato antes de cocinarlo.
- .deb: El plato ya cocinado y listo para servir. Es lo que instalas con un
apt install.
La evolución de la pereza inteligente: De la versión 0.82 a la 1.1
Si echamos un ojo a las fechas de los archivos en el repositorio, vemos un viaje en el tiempo que arranca por abril de 2014. Por aquel entonces, la versión 0.82.1ubuntu2 era la reina. Si mal no recuerdo, coincidía con el lanzamiento de Ubuntu 14.04 LTS (Trusty Tahr). En esos días, la preocupación por la ciberseguridad ya existía, pero no era el bombardeo constante de hoy en día.
Vaya, que en 2014 podías permitirte el lujo de actualizar tu servidor una vez al mes y no pasaba nada. Hoy, si dejas un servicio expuesto sin parches de seguridad durante 48 horas, es muy probable que algún bot ruso o chino ya le haya echado el ojo. Por eso, la evolución que vemos en estos archivos (pasando por la 0.90 en 2016 hasta llegar a las variantes de la 1.1 en 2020 y 2021) no es solo un cambio de numerito. Es una respuesta a un entorno cada vez más hostil.
La versión 1.1, que vemos asociada a Ubuntu 18.04 (Bionic Beaver), introdujo mejoras críticas en la gestión de errores. Porque, seamos sinceros, lo que más miedo nos da de las actualizaciones automáticas es que el sistema decida actualizar algo, se rompa una dependencia y, de repente, tu web deje de funcionar. «Si funciona, no lo toques», dicen muchos. Pero en seguridad, esa frase es una trampa mortal.
¿Por qué hay tantas versiones «parcheadas»?
Si te fijas en la lista, verás cosas como 0.82.1ubuntu2.3 y luego 0.82.1ubuntu2.5. Esos decimales al final son como las cicatrices de guerra. Indican que se encontró un fallo en la propia herramienta de actualización o una vulnerabilidad que necesitaba un arreglo urgente. Es curioso, ¿verdad? Una herramienta diseñada para arreglar otros programas también necesita que la arreglen a ella. Es el «quién vigila al vigilante» versión Linux.
Configuración de unattended-upgrades: El miedo al desastre
Mucha gente instala Ubuntu y ni siquiera sabe que esto está ahí, funcionando en segundo plano. Pero si eres de los que prefiere tener el control (o si gestionas los servidores de una PYME aquí en la Región y no quieres que te llamen un domingo por la mañana), configurar esto bien es fundamental.
El archivo principal de configuración suele estar en /etc/apt/apt.conf.d/50unattended-upgrades. Y aquí es donde la cosa se pone interesante. No es un simple interruptor de «encendido/apagado». Puedes ser tan específico como quieras.
// Ejemplo de configuración básica (y prudente)
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates"; // Esto a veces es jugar con fuego
};
La clave aquí, y lo que siempre recomiendo a los colegas de la UPCT cuando hablamos de administración de sistemas, es centrarse en el origen -security. Las actualizaciones de seguridad suelen ser quirúrgicas: arreglan el agujero sin cambiar la versión principal del programa. Las de -updates, en cambio, pueden traer nuevas funcionalidades que, a veces, cambian archivos de configuración y te dejan el servicio «colgado».
El truco del almendruco: Listas negras
Imagina que tienes una base de datos MySQL que has tuneado a mano durante semanas para que aguante el tráfico de tu tienda online. Lo último que quieres es que unattended-upgrades decida que hoy es un buen día para actualizar MySQL y te sobrescriba el archivo de configuración o cambie el formato de las tablas.
Para eso existe la sección Package-Blacklist. Es, literalmente, una lista de «prohibido tocar».
Unattended-Upgrade::Package-Blacklist {
"mysql-server";
"nginx";
"mi-paquete-critico-que-no-quiero-que-explote";
};
Es una forma de decir: «Vale, actualízame todo lo demás, mantén el sistema seguro, pero con estos tres juguetes no te metas, que ya me encargo yo manualmente». Es el equilibrio perfecto entre la automatización y el toque humano.
¿Realmente necesitamos esto en la era de la IA?
Ahora que todo el mundo habla de Inteligencia Artificial hasta para hacer el café, podrías pensar que un script que mira si hay versiones nuevas en un repositorio es algo anticuado. La verdad es que es todo lo contrario. La automatización básica es el cimiento sobre el que se construye todo lo demás.
En empresas tecnológicas de aquí, de España, desde startups en Madrid hasta consultoras en el Parque Tecnológico de Fuente Álamo, la tendencia es ir hacia la «infraestructura como código». Pero al final del día, alguien tiene que gestionar el parcheo de las máquinas virtuales o de los contenedores. unattended-upgrades sigue siendo la herramienta de referencia porque es sencilla, predecible y no consume apenas recursos.
Ojo, que no todo es perfecto. He visto casos donde una actualización automática del kernel (el núcleo del sistema) ha hecho que ciertos drivers de red dejen de funcionar. Te levantas por la mañana y el servidor está encendido, pero es como si estuviera en una isla desierta: no puede hablar con nadie. Por eso, otra opción muy útil que verás en las versiones más recientes (como la 1.1 que aparece en nuestro repositorio) es la de Automatic-Reboot.
Si el sistema necesita reiniciarse para aplicar un parche del kernel, puedes programarlo para que lo haga a las 4 de la mañana. Para que nos entendamos: es mejor un corte de servicio de 2 minutos de forma controlada que un servidor vulnerable durante tres semanas porque no querías reiniciar.
Un vistazo a los archivos: ¿Por qué pesan tan poco?
Si te fijas en la lista de la fuente, los archivos .deb apenas pesan 37k o 53k. ¡Es poquísimo! En un mundo donde cualquier aplicación de móvil ocupa 200MB, que una herramienta tan crítica ocupe menos que una foto de baja resolución de las Golas de La Manga parece increíble.
Esto se debe a que unattended-upgrades es, en esencia, un script de Python muy bien parido que hace de puente entre el sistema y la herramienta apt. No necesita grandes librerías gráficas ni florituras. Su fuerza reside en su lógica: saber cuándo descargar, cómo verificar la firma y cómo informar al administrador si algo sale mal.
Y hablando de informar, esa es otra de las joyas ocultas. Puedes configurar la herramienta para que te envíe un correo electrónico cada vez que haga algo. La verdad es que da mucha tranquilidad desayunar viendo un correo que dice: «Anoche actualicé 3 paquetes de seguridad y todo ha ido bien». Es como tener un vigilante nocturno que te deja una nota antes de irse.
La realidad del mercado local y la ciberseguridad
A veces pecamos de pensar que estas cosas solo importan a gigantes como Google o Amazon. Pero aquí en España, el tejido empresarial está lleno de PYMES que tienen su propio servidor para el ERP, para la web o para el correo. Y a menudo, ese servidor lo mantiene «el que sabe de ordenadores» de la oficina, que ya tiene bastante con que funcionen las impresoras.
Para este perfil, entender qué hay en /ubuntu/pool/main/u/unattended/ es vital. No se trata de ser un experto en sistemas, sino de entender que la seguridad no es un producto que compras, sino un proceso que automatizas. Usar estas versiones estables y probadas que vemos en el repositorio oficial es la diferencia entre tener un negocio resiliente o uno que cierra tres días porque un ransomware les ha bloqueado hasta los albaranes.
En Cartagena, por ejemplo, tenemos un ecosistema industrial potente. Imagina una empresa de logística en el Valle de Escombreras. Sus sistemas no pueden parar. Si usan Ubuntu, lo más probable es que esos archivos .deb que hemos listado estén trabajando en silencio en sus racks. Es tecnología invisible, pero fundamental.
¿Cómo verificar qué versión tienes tú?
Si después de leer esto te ha picado la curiosidad y quieres saber si estás usando la versión 0.90, la 1.1 o una más moderna, es tan fácil como abrir la terminal y escribir:
apt policy unattended-upgrades
Ahí verás la versión instalada y la que tienes disponible en los repositorios. Si ves que estás en una versión muy antigua (como la 0.82), probablemente estés en un sistema que necesita una actualización general de la distribución (un do-release-upgrade), porque ese sistema operativo ya tiene unos cuantos años encima.
La conclusión que saco de todo esto es que, a veces, lo más importante en informática no es lo más nuevo o lo que más brilla, sino lo que más tiempo lleva funcionando sin dar ruido. Esos archivos con fecha de 2015 que siguen ahí en el repositorio son testimonio de un software que ha madurado, que ha sido parcheado mil veces y que, a día de hoy, sigue siendo la primera línea de defensa para millones de usuarios.
Así que, la próxima vez que veas una lista de archivos aburrida en un servidor, recuerda: ahí dentro está el trabajo de cientos de desarrolladores que decidieron que actualizar un sistema no debería ser una tortura manual, sino un proceso elegante y, sobre todo, desatendido. Y ahora, si me disculpáis, voy a por otro café, que este ya se ha quedado frío de tanto hablar de repositorios.
Deja una respuesta