TEPATCHE - OpenBSD automatic system patcher / Parchador Automático de sistema OpenBSD

Submitted by gwolf on Sun, 02/03/2008 - 12:57
Written in...: 
2003

RATIONALE

OpenBSD is a stable, robust and secure operating system. Systems administrators running OpenBSD tend to be also more security conscious than administrators running other operating systems. Nevertheless, patching an OpenBSD system can be a tedious process for many people. If a person manages multiple OpenBSD servers, patching each of them can be a long and repetitive task, ideal for automatization.

Tepatche will periodically check the FTP site we indicate it to, and if there is a new patch to be applied, downloads, applies, builds and installs it. Tepatche mantains a small status database to know in what is the status of each of the system's patches.

REQUIREMENTS

  • A full OpenBSD installation (including source code in /usr/src and kernel source in /usr/src/sys). This code was tested with OpenBSD release 3.1, but while designing it, patches for 2.9 and 3.0 were also studied and, as the format is the same, they should work. It is important to mention that version 2.9 and older releases ARE NO LONGER MANTAINED, no new patches will be issued for them. It is important to upgrade if you are running an older version.
  • Tepatche uses Perl's Net::FTP module. You can install it from ports (p5-libnet) or from the CPAN. Tepatche was developed and tested with p5-libnet-1.0901, the version in 3.1's ports.

NOTES

  • Tepatche is released under a BSD license - read the COPYING file.
  • This is EXPERIMENTAL code. It works for me. However, it is code intended to be run as root and to modify vital system binaries, and a programming error can have nasty consequences.
  • Tepatche assumes that the patches published in the specified ftphost is trustable. If the ftphost (typically ftp.openbsd.org or one of its mirrors) were to be comprimised, anything can happen. If Tepatche installed a compromised patch, you can revert it with patch's option -R (see man patch(1)). Note that tepatche will not run any command it finds in a patch, only what it can recognize... but there is still plenty of space there.
  • If applying a patch requires kernel compilation, the system administrator MUST DO SO MANUALLY. Tepatche will patch the sources, but building the kernel involves many steps that do require manual operator involvement.
  • Tepatche will ONLY patch the base system - If you use any extra ports, they WILL NOT be patched. Please refer to the note on ports and the security audit at http://www.openbsd.org/ports.html

USAGE

Tepatche consists of one program file (/usr/local/sbin/tepatche), a configuration file (/etc/tepatche.conf) and a data directory (/var/db/tepatche/). The configuration file has the following fields:

  • ftphost: Which FTP server to connect to (i.e. ftp.openbsd.org)
  • ftpdir: Which is the base FTP directory for the patches (i.e. /pub/OpenBSD/patches/3.1)
  • ftppasv: Whether passive FTP mode is required (1) or not (0)
  • ftplogin: username and password to log in (separated by comma, i.e. anonymous, gwolf@gwolf.cx)
  • archs: Comma-separated list of architectures to download (i.e. i386, common) Please remember to include common!
  • patchdir: Where are the patches stored in our computer (i.e. /var/db/tepatche)
  • statusfile: Where is the status file (i.e. /var/db/tepatche/statusfile)

With this file in place, Tepatche can be run simply with no arguments, just /usr/local/sbin/tepatche. I suggest you to run it from your crontab (see man crontab(5)). I suggest running it once a day, at most once an hour - please don't flood ftp.openbsd.org with requests every minute ;-)

STATUS FILE

Tepatche keeps the information it needs about the state of the system in the 'statusfile' (by default, located at /var/db/tepatche/statusfile). This is a plain-text file following the format:
<descriptor>::<status>
Where 'descriptor' is an alphanumeric string, and 'status' is a valid status number. Valid status numbers are:

  • 1: new - The patch has just been downloaded
  • 2: applied - The patch has been applied to the source tree
  • 3: built - The relevant binaries have been generated in the source tree
  • 4: installed - The binaries have been installed in their place. The patch is completely applied now.
  • 5: kernel - The patch requires the kernel to be recompiled. When tepatche reaches this stage, the patch has been applied, but not yet built.
  • 10: error - There was an error at some point in the patching process

The descriptor is usually in the form <arch>/<num>_<description>.patch - It states the architecture for which it was created, the consecutive patch number, a very short description on what it does, and the '.patch' suffix. This is the standard nomenclature followed by the OpenBSD team. a sample name would be:

common/001_sshafs.patch

This shows that the patch will be applied to all architectures (common), it is the first patch produced for this release (001), and it fixes a problem related to 'sshafs'.

If you want to modify this file (of course, always AT YOUR VERY OWN RISK), you can follow this conventions to let Tepatche know the new status of the patch. For example, in the 3.1 release a very dangerous bug appeared in OpenSSH. The OpenBSD team advised to upgrade to OpenSSH 3.4, overwriting the /usr/src/usr.bin/ssh directory. Later, they published a patch (common/006_sshpreauth.patch) to fix the vulnerability for people who prefered not to upgrade. Many people already have the 3.4 tree installed, and the patch files to be applied. You should then edit /var/db/tepatche/statusfile and replace

common/006_sshpreauth.patch::10

by

  1. common/006_sshpreauth.patch::4</pre>
  2. <h3>TO DO</h3>
  3.  
  4. At least:
  5. <ul>
  6. <li>Make output more friendly (half-done)</li>
  7. <li>Handle error cases more reliably (half-done)</li>
  8. <li>Add a <i>non-paranoic</i> option (maybe?)</li>
  9. <li>Add some more levels to the statusfile, explaining the reasons for a failure</li>
  10. <li>Add a tool to easily edit the statusfile from the command line (maybe?)</li>
  11. <li>Add some extra accepted commands for the builder (checking them with regexes)</li>
  12. <li>Re-sync this page with the Spanish translation :)</li>
  13. <li>Handle different transfer protocols (i.e., CVS over SSH)</li>
  14. <li>Test, test,test</li>
  15. </ul>
  16. <h3>DOWNLOAD</h3>
  17.  
  18. You can get your Tepatche (currently at version 0.85) <a href="/files/tepatche-0.85.tar_.gz">right here.</a>
  19. If you are interested in reading the article I wrote on it for the <a href="http://www.samag.com/articles/2003/0312/">December 2003 issue of Sysadmin</a>, you can find it <a href="/files/tepatche_sysadmin.txt">here</a>.
  20.  
  21. <h3>WHY TEPATCHE?</h3>
  22.  
  23. Tepache is a popular, slightly alcoholic drink in Mexico, where I live and where this program was devised. Tepache is the result of fermenting pineapple in water. Quoting from <a href="http://www.fao.org/docrep/x0560e/x0560e09.htm" title="http://www.fao.org/docrep/x0560e/x0560e09.htm">http://www.fao.org/docrep/x0560e/x0560e09.htm</a> :
  24.  
  25. <cite>Tepache is a light, refreshing beverage prepared and consumed throughout Mexico. In the past, tepache was prepared from maize, but nowadays various fruits such as pineapple, apple and orange are used. The pulp and juice of the fruit are allowed to ferment for one or two days in water with some added brown sugar. The mixture is contained in a lidless wooden barrel called a &quot;tepachera&quot;, which is covered with cheese cloth. After a day or two, the tepache is a sweet and refreshing beverage. If fermentation is allowed to proceed longer, it turns into an alcoholic beverage and later into vinegar. The microorganisms associated with the product include Bacillus subtilis, B. graveolus and the yeasts, Torulopsis insconspicna, Saccharomyces cerevisiae and Candida queretana (Aidoo, 1986). </cite>
  26.  
  27. If you are curious, you can find recipes to prepare tepache (in Spanish) at <a href="http://www.chi.itesm.mx/chihuahua/arte_cultura/cocina/bebidas/tepache.html" title="http://www.chi.itesm.mx/chihuahua/arte_cultura/cocina/bebidas/tepache.html">http://www.chi.itesm.mx/chihuahua/arte_cultura/cocina/bebidas/tepache.html</a> and <a href="http://mexico.udg.mx/cocina/bebidas/tepache.html</p>
  28. <p>I" title="http://mexico.udg.mx/cocina/bebidas/tepache.html</p>
  29. <p>I">http://mexico.udg.mx/cocina/bebidas/tepache.html</p>
  30. <p>I</a> found a recipe in German (I cannot tell if it is right or not ;-) ) at: <a href="http://www.mexiko-lindo.de/rezepte/getraenke.htm</p>
  31. <p><h3>THANKS</h3></p>
  32. <p>First" title="http://www.mexiko-lindo.de/rezepte/getraenke.htm</p>
  33. <p><h3>THANKS</h3></p>
  34. <p>First">http://www.mexiko-lindo.de/rezepte/getraenke.htm</p>
  35. <p><h3>THANKS</h3></p>
  36. <p>First</a> and foremost, I want to thank the OpenBSD team for the incredible amount of work they have thrown into this great project.
  37.  
  38. On a smaller scale, Tepatche would not have been possible without the help of <a href="http://www.openbsd.org.mx/">OpenBSD México</a>.
  39. In this specific project, I recieved great help from <a href="http://www.openbsd.org.mx/%7Ealex/">Alex Juárez</a>, <a href="http://www.openbsd.org.mx/%7Ecesar/">César Yáñez</a> and <a href="http://www.openbsd.org.mx/%7Eheinz/">Karl Heinz Holtschmit</a>.
  40.  
  41. Of course, I want to thank my workplace, <a href="http://www.iztacala.unam.mx/"> UNAM FES Iztacala</a>, for granting me time to work in security and Free Software for already three years - and I expect many more.

Resumen: 

RAZONES

OpenBSD es un sistema operativo estable, robusto y seguro. Los administradores de sistemas que corren OpenBSD tienden a ser mas conscientes de la seguridad que los administradores corriendo otros sistemas operativos. En ocasiones, parchar un sistema OpenBSD puede volverse un proceso tedioso para muchas personas. Si una persona se encarga de muchos servidores OpenBSD, el parchar cada uno de ellos puede ser una tarea larga y repetitiva, ideal para automatizarla.
Tepatche revisará periódicamente el sitio FTP que se le indique, y si hay un nuevo parche que pueda ser aplicado, lo descarga, aplica, compila e instala. Tepatche mantiene una pequeña base de datos de estado para saber en que estado se encuentra cada uno de los parches del sistema.

REQUISITOS

  • Una instalación completa de OpenBSD (incluyendo el código fuente en /usr/src y los fuentes del kernel en /usr/src/sys). Tepatche fue probado con OpenBSD versión 3.1, pero mientras se diseñaba, los parches para el 2.9 y 3.0 también fueron estudiados y, como el formato es el mismo, deben de funcionar. Es importante mencionar que la versión 2.9 y versiones mas viejas ya NO SON MANTENIDAS, no hay nuevos parches que sean liberados para ellos. Es importante que se haga una actualización en caso de que estes corriendo una versión vieja.
  • Tepatche usa el módulo de Perl Net::FTP. Puedes instalarlo desde los ports (p5-libnet) ó desde CPAN. Tepatche fue diseñado y probado con p5-libnet-1.0901, la versión de los puertos 3.1.

NOTAS

  • Tepatche esta liberado bajo la licencia BSD - Leer el archivo COPYING
  • Este es código EXPERIMENTAL. A mi me funciona. Sin embargo, es código hecho para ser corrido como root y para modificar binarios vitales del sistema, y un error de programación puede llevar a consecuencias desastrosas.
  • Tepatche asume que los parches publicados en el ftphost especificado son confiables. Si el ftphost (normalmente ftp.openbsd.org o uno de sus espejos) fueran comprometidos, cualquier cosa pudiera pasar. Si Tepatche instala un parche comprometido, puees revertirlo con la opción de parche -R (ver man patch(1)). Hay que notar que Tepatche no correrá cualquier comando que encuentre en un parche, solo los que reconozca... pero hay mucho espacio ahí.
  • Si el aplicar un parche requiere una compilación del kernel, el administrador del sistema DEBE HACERLO MANUALMENTE. Tepatche parchará los fuentes, pero compilar el kernel involucra muchos pasos que requieren que se opere manualmente.
  • Tepatche SOLAMENTE parchará el sistema base - Si usas ports extra, estos NO serán parchados. Por favor véase las notas referentes a los ports y a la auditoría de seguridad en: http://www.openbsd.org/ports.html

USO

Tepatche consiste en un archivo de programa (/usr/local/sbin/tepatche), un archivo de configuración (/etc/tepatche.conf) y un directorio de datos (/var/db/tepatche). El archivo de configuración contiene los siguientes campos:

  • ftphost: Servidor FTP a conectarse (ej: ftp.openbsd.org)
  • ftpdir: La base del directorio FTP para los parches (ej: /pub/OpenBSD/patches/3.1)
  • ftppasv: Donde el modo pasivo FTP es requerido (1) o no (0)
  • ftplogin: usuario y password para ingresar (separado por una coma, ej: anonymous, gwolf@gwolf.cx)
  • archs: Lista separada por comas de arquitecturas a descargar (ej: i386, common) Por favor, recuerda incluir common!
  • patchdir: Donde los parches serán almacenados en nuestra computadora (ej: /var/db/tepatche)
  • statusfile: Localización del archivo de estado (ej: /var/db/tepatche/statusfile)

Con este archivo en su lugar, Tepatche corre simplemente sin argumentos, solo /usr/local/sbin/tepatche. Sugiero que lo corras desde tu crontab (ver man crontab(5)). Sugiero correrlo una vez al día, cuando mucho una vez por cada hora - por favor no inundes ftp.openbsd.org con peticiones cada minuto ;-)

ARCHIVO DE ESTADO

Tepatche mantiene la información que necesita acerca del estado del sistema en el 'statusfile' (por default, en /var/db/tepatche/statusfile). Este es un archivo de texto plano con el siguiente formato:
&lt;descriptor&gt;::&lt;status&gt;
Donde 'descriptor' es una cadena alfanumérica, y 'status' es un número de estado válido. Los números válidos son:

  • 1: nuevo - El parche acaba de ser bajado.
  • 2: aplicado - El parche ya fue aplicado al árbol de fuentes
  • 3: construído - Los binarios relevantes ya fueron generados en el árbol fuente
  • 4: instalado - Los binarios fueron ya instalados en su lugar. El parche ya fue completamente instalado.
  • 5: kernel - El parche requiere recompilar el kernel. Cuando tepatche llega a este estado, el parche fue aplicado, pero aún no ha sido construído..
  • 10: error - Ocurrió un error en algún punto del proceso de parche

El descriptor usualmente llevará el formato <arch>/<num>_<description>.patch - Indica la arquitectura para la cual fue creado, el número consecutivo de parche, una muy corta descripción acerca de su función, y el sufijo '.patch'. Esta es la nomenclatura estándar que sigue el equipo de Open:BSD. Un nombre ejemplo podría ser:
common/001_sshafs.patch
Esto indica que el parche será aplicado a todas las arquitecturas (common), que es el primer parche producido para esta versión del sistema (001), y que corrige problemas relacionados con 'sshafs'.
Si quieres modificar este archivo (claro está, BAJO TU PROPIO RIESGO), puedes seguir estas convenciones para indicar a Tepatche el nuevo estado del parche. Por ejemplo, en la versión 3.1 de OpenBSD apareció un bug muy peligroso en OpenSSH. El equipo de OpenBSD sugirió actualizar de inmediato a OpenSSH 3.4. Posteriormente, para la gente que no actualizó, publicaron un parche (common/006_sshpreauth.patch). Mucha gente ya instaló el árbol de 3.4, con lo que modificaron manualmente el directorio /usr/src/usr.bin/ssh lo cual hace necesario editar /var/db/tepatche/statusfile y reemplazar
common/006_sshpreauth.patch::10
por
common/006_sshpreauth.patch::4

POR HACER

Al menos:

  • Hacer la salida mas amigable (a medio-hacer)
  • Manejo mas confiable de errores (a medio-hacer)
  • (tal vez) incluir un mecanismo de compilación del kernel
  • Probar, probar, probar

DESCARGAS

Puedes obtener Tepatche (actualmente version 0.85) Justo aqui.
Si te interesa leer el artículo publicado en la edición de diciembre del 2003 de SysAdmin, aquí lo tienes.

¿POR QUE TEPATCHE?

Tepatche es una bebida ligeramente alcohólica en México, en donde yo vivo y donde el programa fué concebido. Tepache es el resultado de
fermentar piña en agua. Tomado de http://www.fao.org/docrep/x0560e/x0560e09.htm :
Tepache es una bebida ligera, refrescante preparada y consumida en todo México. En el pasado, el tepache era preparado con maíz, pero en la actualidad varias frutas como la piña, manzana y naranja son usados. La pulpa y el jugo de la fruta son puestos a fermentar por uno o dos días en agua con algo de azucar morena. La mezcla es puesta en barriles de madera sin tapa llamados "tepacheras", que se cubren con trapos queseros. Después de uno o dos días, el tepache es una dulce y refrescante bebida. Si se deja fermentar por mas tiempo, se convierte en una bebida alcohólica y después en vinagre. Los microorganismos asociados con el producto incluyen al Bacilo Sutbtilis, Torulopsis insconspicna, Saccharomyces cerevisiae y Candida queretana (Aidoo, 1986).
Si eres curioso, puedes encontrar recetas de como preparar tepache (en español) en http://www.chi.itesm.mx/chihuahua/arte_cultura/cocina/bebidas/tepache.html o http://mexico.udg.mx/cocina/bebidas/tepache.html

AGRADECIMIENTOS

Primero y sobre todo, quiero agradecer al equipo de OpenBSD por la increíble cantidad de trabajo que hay puesto en este proyecto.
En menor escala, Tepatche no hubiera sido posible sin la ayuda de OpenBSD México. En este proyecto específico, recibí una gran ayuda de Alex Juárez, César Yáñez y Karl Heinz Holtschmit.
Por supuesto, quiero agradecer a mi lugar de trabajo, UNAM FES Iztacala, por permitirme en trabajar en seguridad y software libre por casi 3 años - Y espero sean muchos mas.