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 tus
preferencias. Éstas sólo se recordarán para tus
próximas visitas si eres usuario registrado.

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

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...

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.htm...
(aunque tb está en castellano, mi recomendación es la versión en inglés)

Saludos

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...

portupgrade

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

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

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

Otro para enmarcar

Estupenda explicación. Muy agradecido.

cvsup is deprecated

Desde la version 6 existe csup que hace lo mismo.

More than deprecated

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

Opinar

Salvo circunstancias especiales LOS COMENTARIOS DE ESTE SITIO SERÁN MODERADOS.

Como norma general, en este sitio NO SE PUBLICARÁN aquellos comentarios que incluyan datos personales, ni direcciones de correo, ni ninguna otra forma de establecer contactos privados o comerciales. Tampoco los que no se ajusten al tema, a la netiqueta, la ortografía o la educación, así como los comentarios ofensivos o claramente publicitarios, los que no aporten nada a la discusión o los que pretendan suplantar a terceras personas.

En cualquier caso los comentarios publicados en este sitio expresan sólo la opinión de su autor, quien será el único responsable -incluso ante la Ley- de los mismos. La publicación de cualquier comentario no supone en absoluto la conformidad del responsable de este sitio con su contenido.

Para poder enviar tus comentarios no necesitas ningún registro, pero has de permitir las cookies del sitio. Sólo si deseas disponer de un alias permanente has de registrarte.

Si no aceptas estas condiciones, por favor, absténte de participar en los debates. Muchas gracias

Kriptópolis, 21 de noviembre de 2008.

  • Etiquetas HTML permitidas: <a> <em> <strong> <ul> <ol> <li> <p> <u> <br><strike> <blockquote> <div>

Más información sobre las opciones de formato...

CAPTCHA
Esta prueba busca evitar la entrada de mensajes basura automatizados. Muchas gracias por tu colaboración.
1 + 15 =
Resuelve esta sencilla operación e introduce el resultado.