SSD Nodes Learn Hosting plans →
Guías Matt ConnorPor Matt Connor

Cómo actualizar FreeBSD y detectar paquetes vulnerables

Aprende a parchear el sistema base de FreeBSD con freebsd-update y a auditar paquetes con pkg audit. Son herramientas independientes y requieren consultar fuentes distintas.

Cómo gestiona FreeBSD las actualizaciones de seguridad

FreeBSD gestiona las actualizaciones de seguridad con dos herramientas independientes, porque un servidor FreeBSD consta de dos partes separadas. El sistema base, es decir, el kernel y el userland incluidos en la release, se actualiza con freebsd-update. Todo lo que instale por encima es un paquete, y los paquetes se actualizan con pkg. Si ejecuta una herramienta y omite la otra, la mitad del equipo queda sin actualizar y el sistema no se lo indicará.

SSD Nodes no ofrece imágenes de FreeBSD. Nuestros planes usan Linux. Este artículo se incluye de todos modos porque los lectores coinciden por completo: las personas que administran nuestros servidores Ubuntu y Debian también usan FreeBSD en un firewall o en el único equipo que heredaron. El modelo de actualización dividido es lo que suele sorprender a un administrador de Linux, por lo que conviene dejarlo documentado. Todos los comandos, formatos de avisos y fechas de soporte que aparecen a continuación se comprobaron con la página de seguridad de FreeBSD y las páginas del manual del proyecto en octubre de 2026.

Una nota antes de los comandos. FreeBSD no instala sudo en el sistema base. Todo lo indicado aquí requiere root. Use su - o instale primero sudo o doas desde los paquetes.

El sistema base y los paquetes son universos separados

En Ubuntu, apt administra toda la máquina. El kernel, openssl, nginx y sus propias herramientas llegan como archivos .deb desde una sola herramienta, y apt upgrade los actualiza todos juntos.

FreeBSD divide ese modelo en dos. En una instalación clásica, el sistema base llega como conjuntos de distribución y sólo freebsd-update aplica sus parches. freebsd-version -u muestra un único nivel de parches para el userland instalado, como 15.1-RELEASE-p3, que incluye la biblioteca C, sshd y la copia de OpenSSL ubicada en /usr/lib. El kernel tiene su propio nivel de parches, que muestra freebsd-version -k, por lo que los dos números pueden diferir. Nada de esto procede de pkg. Todo lo demás se encuentra bajo /usr/local, llega como un paquete binario compilado a partir del árbol de ports y tiene su propia versión.

El instalador de 15.x también ofrece una segunda opción. El capítulo de instalación del handbook incluye Distribution Sets, el método clásico, junto a Packages (Tech Preview), conocido a menudo como pkgbase. Esta opción instala el sistema base como un conjunto de paquetes individuales desde el repositorio FreeBSD-base, de modo que pkg upgrade pueda actualizar el sistema base y el software de terceros conjuntamente. El handbook prevé que pkgbase se convierta en la opción predeterminada en FreeBSD 16.0 y recomienda Distribution Sets para una ruta de actualización conservadora durante el ciclo de vida de 15.x, especialmente en producción. El resto de este artículo sigue el modelo Distribution Sets.

Por tanto, un mismo equipo puede contener dos copias de OpenSSL: la copia base en /usr/lib, cuyos parches sólo aplica freebsd-update, y la copia de paquetes en /usr/local/lib, cuyos parches sólo aplica pkg. La copia que usa un programa depende de aquella contra la que se enlazó. El software instalado desde paquetes normalmente se enlaza con la copia de paquetes. Aplicar parches a una no modifica la otra.

Tres comandos indican el estado actual:

freebsd-version -u
freebsd-version -k
uname -r

freebsd-version -u muestra el nivel de parches del userland instalado. freebsd-version -k muestra el nivel de parches del kernel instalado, y freebsd-version(1) explica explícitamente por qué no coincide necesariamente con uname: "si se ha instalado un kernel nuevo pero el sistema todavía no se ha reiniciado, freebsd-version mostrará la versión y el nivel de parches del kernel nuevo". uname -r muestra el kernel que se está ejecutando ahora. También existe freebsd-version -r, que muestra el kernel en ejecución, pero es "inmune a las variables de entorno". Esto es importante dentro de un jail, donde UNAME_r suele tener otro valor.

Avisos de seguridad y notas de erratas

El equipo de seguridad de FreeBSD publica dos tipos de avisos, los cuales tienen significados distintos.

Un Aviso de seguridad (Security Advisory) cubre una vulnerabilidad de seguridad en el sistema base. El identificador tiene el formato FreeBSD-SA-26:55.elf: las letras SA, el año de dos dígitos, un número correlativo dentro de ese año y el componente afectado. FreeBSD-SA-26:52.if_wg y FreeBSD-SA-26:50.kqueue fueron publicados el 2026-07-29. La lista completa se encuentra en la página de avisos de FreeBSD.

Una Nota de errata (Errata Notice) cubre un problema de corrección o estabilidad que merece ser incluido en una rama de lanzamiento, sin impacto en la seguridad. Tiene el mismo formato, pero con EN en lugar de SA: FreeBSD-EN-26:19.zfs, FreeBSD-EN-26:18.tzdata. Una actualización de datos de zona horaria es el ejemplo clásico. Nadie puede atacarle por tener datos de zona horaria obsoletos, pero sus marcas de tiempo serán incorrectas hasta que aplique la corrección. Las erratas se listan en la página de notas de erratas de FreeBSD.

Ambos tipos están firmados con la clave PGP (pretty good privacy) del responsable de seguridad y se archivan en security.FreeBSD.org; además, ambos se entregan en su máquina mediante freebsd-update.

Aquí es donde los administradores de Linux suelen confundirse. Ninguno de los dos tipos cubre paquetes. La página de seguridad lo indica claramente: los problemas en la FreeBSD Ports Collection "se tratan por separado en el documento VuXML de FreeBSD". Un agujero de seguridad remoto en el paquete nginx nunca recibirá un número de SA. Si el feed de avisos es lo único que supervisa, nunca se enterará de ello.

¿Cómo me entero de una actualización de seguridad de FreeBSD?

La lista a la que debe unirse es freebsd-security-notifications. Está moderada, tiene un volumen bajo y en ella se publican los avisos y las notas de erratas. Suscríbase en lists.freebsd.org.

freebsd-announce también está moderada y publica avisos junto con los anuncios de versiones, por lo que es útil si prefiere una sola lista para todo. freebsd-security es la lista de discusión. Es una lectura recomendable, pero no es el lugar donde se le notificará que debe aplicar un parche.

Todas estas listas contienen únicamente noticias sobre el sistema base. Las vulnerabilidades de los paquetes nunca se envían por correo electrónico. Para encontrarlas, debe ejecutar un comando.

pkg audit y la base de datos que utiliza

VuXML, Vulnerabilities and Exposures Markup Language, es el registro del proyecto FreeBSD sobre problemas de seguridad en ports y paquetes. Cada entrada indica el paquete afectado, los rangos de versiones vulnerables, los identificadores CVE (common vulnerabilities and exposures) y una descripción breve. El conjunto completo se puede consultar en el índice de VuXML, ordenado por paquete, CVE o fecha.

pkg audit es la herramienta que lo lee:

pkg audit -F

-F descarga una copia actualizada de la base de datos antes de comprobarla. Úselo siempre. Sin -F, la comparación se hace con la copia que ya tiene el equipo, que puede estar desactualizada desde hace meses. Por tanto, un resultado limpio no significa nada. El comando compara la versión de cada paquete instalado con todas las entradas de VuXML, muestra cada coincidencia con sus números CVE y un enlace a la página de VuXML y termina con una línea de recuento que indica cuántos problemas se encontraron en cuántos paquetes instalados.

Conviene conocer otras dos opciones de pkg-audit(8). pkg audit -r también «muestra los paquetes que dependen de paquetes vulnerables y, por tanto, también pueden ser vulnerables». Así puede saber que una biblioteca vulnerable es importante porque seis elementos instalados la enlazan. pkg audit -R muestra el mismo resultado como JSON u otro formato para máquinas. Ese es el formato que se proporciona a una comprobación de monitorización.

El paquete pkg instala un script periódico en /usr/local/etc/periodic/security/410.pkg-audit. Se ejecuta como parte de la comprobación de seguridad diaria y envía el resultado por correo a root. El script se activa de forma predeterminada. Para establecerlo explícitamente, añada una línea a /etc/periodic.conf:

security_status_pkgaudit_enable="YES"

Ese correo diario es lo más parecido que ofrece FreeBSD al mantenimiento desatendido de actualizaciones en Ubuntu, y la diferencia es precisamente lo importante: unattended-upgrades instala la corrección mientras usted duerme, mientras que pkg audit sólo informa de que hace falta una corrección. pkg audit informa. Nunca aplica parches. En un sistema FreeBSD estándar, nada instala una actualización de seguridad sin que usted lo haga.

Corrección de un paquete vulnerable

pkg update
pkg upgrade

No existe un repositorio exclusivo de seguridad en los repositorios de paquetes de FreeBSD. Ubuntu puede obtener actualizaciones únicamente de noble-security y dejar el resto de los paquetes intactos. FreeBSD no tiene un equivalente, por lo que corregir un paquete vulnerable implica instalar la versión que el repositorio ofrece actualmente, junto con cualquier dependencia que se haya actualizado con él. Planifique la aplicación de parches en paquetes como un cambio programado, no como una tarea de fondo.

La rama del repositorio en la que se encuentre determina la rapidez con la que recibe una corrección. La rama predeterminada es la trimestral (quarterly), que el manual describe como una opción que ofrece "una experiencia más predecible y estable" al aceptar solo actualizaciones que no añaden funciones. La rama latest obtiene la versión más reciente de todo. Por lo tanto, cuando pkg audit -F informa que un paquete es vulnerable y pkg upgrade indica que no hay nada que hacer, la corrección aún no ha llegado a su rama, y ese es el mecanismo que causa la confusión.

Para cambiar una máquina a la rama latest, copie el archivo de repositorio que viene con el sistema y edite la copia:

mkdir -p /usr/local/etc/pkg/repos
cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf

Cambie quarterly por latest en la línea url de la copia y, a continuación, ejecute pkg update -f para descargar el nuevo catálogo. Copie el archivo en lugar de escribir el nombre del repositorio de memoria: el nombre dentro de /etc/pkg/FreeBSD.conf es el que su sistema utiliza realmente, y un archivo bajo /usr/local/etc/pkg/repos solo sobrescribe un repositorio cuyo nombre coincida exactamente.

Aplicación de parches al sistema base

freebsd-update fetch
freebsd-update install

fetch descarga los parches para su versión actual y muestra la lista de archivos que se modificarán. Cuando no hay tareas pendientes, imprime No updates needed to update system to 15.1-RELEASE-p3. y finaliza. Cuando hay cambios, indica al terminar que debe ejecutar el comando de instalación. No se aplica nada hasta que ejecute freebsd-update install, por lo que fetch es seguro de ejecutar en cualquier momento.

freebsd-update(8) proporciona actualizaciones binarias para versiones ALPHA, BETA, RC y RELEASE, pero no para PRERELEASE, STABLE o CURRENT. Si sigue stable/15, usted compila desde el código fuente y esta herramienta no le será de utilidad.

Automatice la descarga y mantenga la instalación manual. La línea del manual para /etc/crontab es:

@daily                                  root    freebsd-update cron

freebsd-update cron espera un tiempo aleatorio entre 1 y 3600 segundos, luego descarga las actualizaciones exactamente igual que fetch y envía un correo a root cuando hay algo pendiente. La espera aleatoria existe para que todas las máquinas FreeBSD en internet no accedan a los espejos de actualización en el mismo segundo.

Dos aspectos de la salida confunden a los usuarios. src component not installed, skipped es normal en un servidor sin árbol de fuentes y no es un error. El conjunto de componentes está controlado por una línea Components en /etc/freebsd-update.conf, y las opciones son src, world y kernel.

Si una instalación falla, freebsd-update rollback desinstala las actualizaciones instaladas más recientemente. En una raíz ZFS puede hacer algo mejor y crear un entorno de arranque primero:

bectl create pre-patch
freebsd-update fetch install

Si el sistema parcheado no arranca, seleccione el entorno de arranque antiguo desde el menú del cargador y volverá al estado inicial. Esa vía de escape es una de las razones prácticas para usar ZFS como sistema de archivos raíz, y casi no consume espacio en disco hasta que los dos entornos divergen.

¿Mi release de FreeBSD sigue teniendo soporte?

Cada release tiene soporte durante un periodo fijo, publicado como una tabla de ramas en la página de seguridad. Al 25 de octubre de 2026, la tabla indica lo siguiente:

  • releng/15.1, que corresponde a 15.1-RELEASE, hasta el 31 de marzo de 2027
  • releng/14.5, que corresponde a 14.5-RELEASE, hasta el 30 de junio de 2027
  • releng/14.4, que corresponde a 14.4-RELEASE, hasta el 31 de diciembre de 2026
  • stable/15 hasta el 31 de diciembre de 2029
  • stable/14 hasta el 30 de noviembre de 2028

Las point releases tienen periodos cortos de soporte. 15.0-RELEASE ya no aparece en la tabla. En agosto de 2026 figuraba con soporte hasta el 30 de septiembre de 2026, algo más de tres meses después de que 15.1 se publicara el 16 de junio de 2026. 14.4-RELEASE será la siguiente en quedar fuera, a finales de diciembre de 2026. Las ramas stable duran años y son ramas de código fuente que freebsd-update no sirve.

Compruebe la suya con freebsd-version -u y compárela con la tabla. freebsd-update también muestra una advertencia. Cuando se acerca la fecha, fetch muestra:

WARNING: FreeBSD 14.4-RELEASE is approaching its End-of-Life date.
It is strongly recommended that you upgrade to a newer
release within the next 2 months.

Cuando pasa la fecha, la advertencia se convierte en WARNING: FreeBSD 14.4-RELEASE HAS PASSED ITS END-OF-LIFE DATE.. Una release sin soporte sigue funcionando. Deja de recibir avisos de seguridad, lo que significa que la próxima vulnerabilidad del sistema base quedará sin corregir de forma permanente.

Las instrucciones de actualización de FreeBSD 15.1 inician una actualización de release con freebsd-update fetch y freebsd-update install para aplicar los parches pendientes. Después se ejecuta freebsd-update upgrade -r 15.1-RELEASE, luego freebsd-update install, después se reinicia el sistema con el nuevo kernel y finalmente se vuelve a ejecutar freebsd-update install para actualizar el userland. En ese momento, freebsd-update puede pedirle que recompile o reinstale el software de terceros porque han cambiado las bibliotecas del sistema. La página de actualización indica que debe seguir esas instrucciones cuando sea necesario. Para un cambio de versión principal, como pasar de 14.x a 15.1, el procedimiento general del handbook utiliza pkg-static upgrade -f. Un freebsd-update install final elimina los archivos obsoletos del sistema base. El handbook indica que puede haber sólo dos fases de instalación en lugar de tres, según si se incrementaron los números de versión de alguna biblioteca. Un sistema pkgbase sigue un procedimiento pkg independiente en la misma página. Ambos métodos terminan actualizando el boot loader. Programe una ventana de mantenimiento y lea la guía de configuración de un servidor FreeBSD 15 antes de empezar.

¿Reiniciar o basta con reiniciar el servicio?

FreeBSD responde a esto con una comparación:

freebsd-version -k
uname -r

freebsd-version -k es el kernel en el disco. uname -r es el kernel en memoria. Si las cadenas son distintas, significa que se ha instalado un kernel nuevo y no lo está ejecutando, por lo que debe reiniciar. Si las cadenas coinciden, el parche no afectó al kernel y reiniciar no aporta ninguna ventaja.

Para un parche de espacio de usuario, reinicie cualquier elemento que utilice el código parcheado. Una corrección en la versión base de OpenSSL en /usr/lib no tiene efecto en un sshd que se inició hace tres semanas y que aún mantiene la biblioteca antigua asignada en su espacio de direcciones. El archivo en el disco es nuevo. El proceso en ejecución no lo es.

service sshd restart

La misma regla se aplica a los paquetes. pkg upgrade reemplaza el binario en el disco mientras el proceso en ejecución mantiene el antiguo abierto, por lo que service nginx restart es el paso que hace efectiva la corrección.

El sistema base no tiene un equivalente al needrestart de Debian, por lo que nada le notificará ni mantendrá una lista. Debe realizar un seguimiento de qué servicios enlazan con qué biblioteca parcheada o reiniciar después de cualquier parche que afecte a las bibliotecas base. En un servidor con su configuración bajo control de versiones, un reinicio es una operación rutinaria y resulta mucho menos costoso que creer que está protegido cuando no lo está.

Actualización de una máquina que ejecuta jails

Una jail comparte el kernel del host, por lo que un aviso de seguridad del kernel es un problema del host y todas las jails en el equipo lo heredan. Actualice el host y reinicie; la parte del kernel quedará resuelta para todas ellas. El espacio de usuario (userland) dentro de cada jail es una instalación independiente con su propio nivel de parches, y freebsd-version -j <jail> lo reporta desde el host. Los paquetes dentro de una jail también son independientes, y pkg -j <jail> audit -F los audita sin necesidad de entrar en la jail. Esa división entre kernel compartido y espacio de usuario independiente es la misma diferencia estructural que define cómo se comparan las jails con los contenedores Docker.

La traducción a Ubuntu

Cada hábito de FreeBSD tiene su equivalente, por lo que puede trasladar la rutina en ambas direcciones.

  • Parches del sistema base: freebsd-update fetch y luego freebsd-update install. En Ubuntu, apt update && apt upgrade, que cubre el sistema base y todo lo demás a la vez.
  • Software de terceros: pkg update && pkg upgrade en FreeBSD. En Ubuntu, nuevamente apt.
  • Comprobación de vulnerabilidades conocidas: pkg audit -F en FreeBSD. En Ubuntu 24.04 el comando más cercano es pro security-status, que muestra las actualizaciones de seguridad para los paquetes instalados, incluido el contenido de Expanded Security Maintenance.
  • Instalación automática: unattended-upgrades en Ubuntu aplica las actualizaciones de seguridad por usted. FreeBSD no incluye nada equivalente, por lo que freebsd-update cron descarga y envía por correo las notificaciones mientras usted realiza la instalación manualmente.
  • Fuente de avisos: freebsd-security-notifications contiene los elementos FreeBSD-SA y FreeBSD-EN. ubuntu-security-announce contiene los Ubuntu Security Notices.
  • Base de datos de vulnerabilidades: VuXML para los ports y paquetes de FreeBSD. El rastreador de CVE de Ubuntu para los paquetes de Ubuntu.
  • Comprobación de reinicio: freebsd-version -k frente a uname -r en FreeBSD. La presencia de /var/run/reboot-required en Ubuntu.
  • Ventana de soporte: la tabla de ramas en la página de seguridad de FreeBSD. El calendario de lanzamientos y pro security-status en Ubuntu.

La rutina subyacente es idéntica en ambos sistemas: suscribirse a la fuente, ejecutar la auditoría según un calendario y luego decidir qué instalar y cuándo reiniciar. FreeBSD simplemente le obliga a realizar la segunda parte de forma explícita, ya que no lo hará por usted. La comparativa más amplia entre Linux y FreeBSD como plataforma de servidor cubre qué otros aspectos cambian al trasladar una carga de trabajo entre ambos.

FAQ

¿freebsd-update también corrige mis paquetes?

No. freebsd-update sólo cubre el sistema base, es decir, el kernel y el userland incluidos en la release. El software instalado en /usr/local procede de paquetes y se corrige con pkg upgrade. Ejecute pkg audit -F para saber qué paquetes instalados tienen vulnerabilidades conocidas, porque los avisos del sistema base nunca las mencionan y las listas de correo de seguridad nunca las anuncian.

¿Cómo sé si una actualización de FreeBSD requiere reiniciar?

Compare freebsd-version -k con uname -r. El primero muestra el kernel instalado en disco, incluido uno que se acaba de escribir pero todavía no se ha iniciado. El segundo muestra el kernel en ejecución. Si las cadenas son diferentes, debe reiniciar. Si coinciden, la corrección sólo afectó al userland, por lo que debe reiniciar los servicios afectados, por ejemplo service sshd restart, porque un proceso en ejecución mantiene la biblioteca antigua asignada hasta que se reinicia.

¿Cuál es la diferencia entre un Security Advisory y un Errata Notice?

Un Security Advisory, como FreeBSD-SA-26:55.elf, corrige una vulnerabilidad de seguridad en el sistema base. Un Errata Notice, como FreeBSD-EN-26:18.tzdata, corrige un problema de funcionamiento o estabilidad sin impacto de seguridad, como datos de zona horaria desactualizados. Ambos usan el patrón año, dos puntos, número de secuencia y componente. Ambos están firmados por el Security Officer y se distribuyen mediante freebsd-update, y ninguno cubre software instalado desde ports o paquetes.

¿Existe un equivalente de unattended-upgrades para FreeBSD?

No en el sistema base. freebsd-update cron descarga las correcciones pendientes del sistema base y envía un correo a root, pero nunca las instala. El script periodic que instala pkg ejecuta pkg audit a diario y envía el resultado por correo, pero nunca actualiza nada. La instalación desatendida tendría que configurarla usted mediante una tarea de cron y, como una actualización de paquetes de FreeBSD instala la versión más reciente en lugar de un backport que sólo incluya correcciones de seguridad, la mayoría de los administradores leen el correo e instalan las actualizaciones manualmente.

¿Cómo compruebo que mi release de FreeBSD todavía tiene soporte?

Ejecute freebsd-version -u para consultar la versión de su userland y compárela con la tabla de branches con soporte de la página de seguridad de FreeBSD. Las point releases tienen periodos de soporte breves: a fecha de 25 October 2026, 14.4-RELEASE termina el 31 December 2026, mientras que 15.1-RELEASE continúa hasta el 31 March 2027, y 15.0-RELEASE ya no aparece en la tabla. freebsd-update fetch le avisa cuando se acerca la fecha y, una vez superada, muestra una línea que indica que la release HAS PASSED ITS END-OF-LIFE DATE. A partir de ese momento, ya no se aplican más avisos de seguridad a su sistema.

#freebsd#security#patching#advisories#pkg