Actualizar software vulnerable en FreeBSD

 

 

FreeBSD dispone de dos formas básicas de instalar paquetes: desde "paquetes" precompilados, o a partir "ports" conteniendo fuentes e instrucciones. Para eliminar de nuestro sistema los paquetes vulnerables y poder sustituirlos por las últimas versiones disponibles, haremos uso de ambas.

Comenzaremos por bajarnos la colección de ports y extraerlos en nuestro sistema mediante:

# portsnap fetch
# portsnap extract

Al finalizar este proceso tendremos el esqueleto de nuestra colección de ports en /usr/ports.

A continuación detectaremos los paquetes vulnerables que tenemos en nuestro sistema con la siguiente orden:

# /usr/local/sbin/portaudit -Fda

Tras una instalación de FreeBSD 7.0 puede haber una decena de paquetes marcados como vulnerables y deberemos ir sustituyéndolos uno por uno. Al ejecutar el comando anterior tras cada actualización iremos comprobando cómo se va reduciendo la lista de paquetes vulnerables...

 

Un ejemplo

Como ejemplo, veremos cómo actualizar el paquete vulnerable Ghostscript GPL 8.60 a la versión 8.62 no vulnerable.

En primer lugar, eliminamos nuestro Ghostscript vulnerable mediante:

# pkg_delete -f ghostscript-gpl-8.60

(el nombre y número de versión del programa a actualizar los obtenemos a partir de la salida del comando portaudit visto antes).

Ahora, para localizar ghostscript en nuestra colección de ports, tecleamos:

# whereis ghostscript-gpl

La respuesta del sistema es la siguiente:

ghostscript-gpl: /usr/ports/print/ghostscript-gpl

Debemos ir a ese directorio:

# cd /usr/ports/print/ghostscript-gpl

y teclear:

# make install clean

En un par de minutos se compilará nuestra nueva versión de Ghostscript a partir del código fuente descargado automáticamente de Internet y las intrucciones de configuración y compilación contenidas en nuestro árbol de ports.

Podemos comprobar que todo ha ido bien tecleando:

# pkg_info | grep -i ghostscript-gpl

siendo la respuesta:

ghostscript-gpl-8.62_2 GPL Postscript interpreter

lo que demuestra que ya tenemos instalada la versión 8.62, no vulnerable.

 

Pero no todo el monte es orégano...

Otros paquetes de software no son tan fáciles de instalar. Por ejemplo el paso de Firefox 2.0.0.12 a Firefox 2.0.0.14 requiere la actualización previa de glib y otras bibliotecas, por lo que el proceso anteriormente explicado ha de repetirse para diferentes paquetes. Eso sí: a excepción de la necesidad de actualizar glib (descubierta por el autor tras "googlear" un rato sobre la base del mensaje de error obtenido en la compilación), el resto de actualizaciones se nos indican perfectamente a lo largo del proceso (en pura lengua de Shakespeare, claro, como es de suponer).

Nuestro objetivo final es que el comando portaudit que presentamos al inicio nos acabe devolviendo una lista vacía, indicando que ya no queda ningún software en nuestro sistema con vulnerabilidades conocidas.

También hemos de preocuparnos de mantener actualizada nuestra colección de ports, sobre todo antes de instalar cualquier programa, para lo que basta con un simple:

# portsnap update

Por último, indicar que hay múltiples formas de realizar estas actualizaciones, por lo que me he limitado a la que yo, como primerizo, empleo. Otras sugerencias serán por supuesto bienvenidas.

 

Referencias:

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).
anónimo's picture

Eso es lo que no me gusta de FreeBSD


Ese sistema para instalar y actualizar paquetes es lo que me hizo que tras una breve estancia abandonase FreeBSD para decantarme por Debian el pasar de hacer esas actualizaciones paquete por paquete a mano y también de cumplir con las dependencias frente al apt-get update y apt-get upgrade de Debian es algo muy a tener en cuenta.

Seguramente existe alguna herramienta que facilite todo el proceso pero yo no la encontré en los manuales de FreeBSD. Creo que hoy por hoy el sistema de manejar los paquetes es la mayor pega de FreeBSD

admin's picture

Más fácil en DesktopBSD


Es uno de los aciertos de DesktopBSD.

No voy a decir que su gestor de actualizaciones sea tan bueno como el de Debian, pero no está nada mal, a excepción de que las descargas resultan muy leeeeeentas...

anónimo's picture

Sobre los ports


El sistema de ports de FreeBSD tiene una serie de ventajas, al menos desde el punto de vista de S.O. para servidores (nunca lo he usado como sistema de escritorio pero sí he administrado múltiples entornos de servidores en varias plataformas). Personalmente prefiero los ports a los packages.

- Los ports de FreeBSD se compilan en local, con las consiguientes ganancias en rendimiento si ajustamos los parámetros de la compilación a nuestro sistema en el make.conf o similar. Y el proceso de instalación sigue siendo escribir apenas 1 linea.

- Se compilan a partir de las fuentes mainstream con el mínimo de parches para garantizar la estabilidad y compatibilidad, con lo que suelen estar prácticamente a la par con las releases del software en cuestión. De esta manera podemos mantenernos a la última cuando nos interesen nuevas funcionalidades. Para las actualizaciones se utiliza portmaster o portupgrade.

- Pese al contratiempo de admin con firefox, nunca se me ha dado un problema similar ya que los ports siempre me han gestionado correctamente todas las dependencias.

- Si no nos hiciera falta estar a la última en cuanto a funcionalidad (bastante habitual), sólo necesitamos actualizar el software con vulnerabilidades conocidas. Para detectarlo se utiliza portaudit como dice admin.

- Si no ejecutamos el make clean inmediatamente después del install, tenemos a nuestra disposición las fuentes del software parcheadas. También tenemos make fetch que nos baja las fuentes y los parches por si les queremos echar un vistazo o meter mano. En realidad, la linea "make install clean" es el resumen de:
make fetch (descarga)
make (compilacion)
make install (instalacion)
make clean (limpieza)

- El equivalente a 'apt-cache search php' sería 'make search name=php' o 'make search key=php' ejecutados desde /usr/ports (o una de las subcategorías: net, lang, ..). Pruébalos admin, te gustarán.

- Los comandos 'make' se ejecutan recursivamente para todos los ports que cuelguen de la ubicación en la que los ejecutamos.

De nuevo, el handbook de FreeBSD es la documentación:
http://www.freebsd.org/doc/en/books/handbook/ports-using.html
(aunque tb está en castellano, mi recomendación es la versión en inglés)

Saludos

admin's picture

Excelentes reflexiones


Muchas gracias por compartir tu experiencia!

P.D: ¿Por qué también yo prefiero el hanbkook en inglés? No sé, pero tengo la sensación de que la traducción es incompleta...

DarwinSoft's picture

portupgrade


Me molesta que se hagan jucios de valor sin haber buscado las soluciones (que normalmente existen) en este caso portupgrade es la solucion.

Discutir con desconocidos por internet es un ejercicio de imbeciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

- Neal Stephenson "Snowcrash"

FedeTheGreat's picture

Es lo que me gusta de Arch


Es lo que me gusta de Arch:
pacman -S paquete y ya
y para actualizar:
pacman -Syu y listo todo al dia...

Simple y efectivo.. En mandriva por ej con urpme no sacas las dependencias y lo que lei que hacen muchos es anotan las dependencias que se instalan al momento de instalar el paquete necesitado y luego cuando ya no se lo quiere mas se hace urpme paquete dependencia1 dependencia2 etc un empelote...

Me gustan las cosas simples, por eso uso volvi a Arch!
Linux User #404818

Me gustan las cosas simples, por eso volvi a Arch!
Linux User #404818

anónimo's picture

FreeBSD way


Portaudit es una maravilla de FreeBSD, una de las cosas que me encantaron, FreeBSD mantienen una DB [1] sobre todas las vulnerabilidades y un link a sitios de seguridad informática donde podemos ver mas detalles de la vulnerabilidad así también como patches y expoits para los lammers :P

Su uso es bastante fácil, el admin ya explico su uso.

Con respecto a el sistema de actualizaciones de FreeBSD les cuento que es extremadamente fácil comparable con distros de gnu/linux fáciles como debian y su sistema APT.

Antes de explicarles como usar portupgrade les explico brevemente otra forma de mantener al día nuestros ports, fuentes y sistema (/etc) con cvsup:

Instalación
-----------

        % cd /usr/ports/net/cvsup-without-gui 
	% make install clean

-Actualizar Ports

% cp /usr/share/examples/cvsup/ports-supfile  /usr/local/etc/ports-supfile

editamos este fichero a nuestro gusto:
donde dice CHANGE_THIS.FreeBSD.org deben poner un mirror cvs mas cercano a posible, sino saben que poner pongan cvsup.freebsd.org.

para actualizar:

% cvsup -g -L 2 /usr/local/etc/ports-supfile

esto solo actualizara los ports, nada de actualizar los paquetes instalados, eso viene después.

si no les gusta esta forma pueden hacer lo mismo pero mas corto:

editamos o creamos el fichero /etc/make.conf y agregamos:

SUP_UPDATE= yes
	   SUP= /usr/local/bin/cvsup
	   SUPFLAGS= -g -L 2
	   SUPHOST= cvsup.FreeBSD.org
	   PORTSSUPFILE= /usr/local/etc/ports-supfile

de esta forma al poner

%  make update 

desde /usr/ports se actualizaran los ports

-Actualizar las Fuentes
lo dejaremos para mas adelante si alguien lo pide e interesa, se hace de forma parecida al anterior.

-Actualizar el sistema (/etc)
primero hacemos un backup

% cp -pr /etc /root

Actualizamos:

% mergemaster

nos pedira confirmación para sobreescribir cada fichero, lean bien y cualquier cosa tienen un backup, en caso de no tener mergemaster, busquenlo en los ports ($ whereis mergemaster ) e instalenlo.

Ahora la herramienta PortUpgrade:

instalamos portupgrade desde los ports o paquetes, ya admin ha explicado como, no explicaremos siempre como hacer para instalar, a esta altura ya lo saben.

-Actualizar todos paquetes instalados en nuestro sistema

% portupgrade -va

-Actualizar solo uno

% portupgrade -v paquete

si se desea actualizar también las dependencias de los paquetes añadiremos la flag -r

de ves en cuando necesitamos actualizar la DB que usa portupgrade, que entre otras cosas contiene que paquete depende de tal etc, no daré detalles, solo les digo que de vez en cuando hagan:

% pkgdb -F

antes de actualizar con portupgrade

para mas información de todo $ man
recomiendo una leida del man de portupgrade, ya que es muy importante.

Limpiar ficheros residuales de los paquetes:

% portsclean -CD

borrara los directorios de trabajo 'work' y tarballs de versiones antiguas en (/usr/ports/distfiles).

[1] http://www.vuxml.org/freebsd/

cya

admin's picture

Otro para enmarcar


Estupenda explicación. Muy agradecido.

DarwinSoft's picture

cvsup is deprecated


Desde la version 6 existe csup que hace lo mismo.

Discutir con desconocidos por internet es un ejercicio de imbeciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

- Neal Stephenson "Snowcrash"

anónimo's picture

More than deprecated


A partir de 6.3 el modo recomendado de actualizar los ports es portsnap como ha contado admin