Como en el resto de Unices, en Solaris un parche se define como un grupo de
ficheros y directorios que reemplaza o actualiza ficheros y directorios
existentes en el sistema para tratar de garantizar la ejecución correcta del
software ([Mic98]); con la instalación de parches aumentamos -
al menos teóricamente - la seguridad y la disponibilidad de un sistema, y
es muy recomendable seguir una política de parcheado estricta, al
menos en cuanto a parches de seguridad se refiere.
Sun Microsystems distribuye entre sus clientes con contrato de mantenimiento
los parches para Solaris y el resto de sus productos vía CD-ROM cada pocas
semanas, pero - mucho más rápido -, también
los ofrece a través de Internet, desde http://sunsolve.sun.com/; aunque
el acceso a ciertos parches está restringido a clientes con contrato, los
relativos a la seguridad de los sistemas y los recomendados son completamente
públicos.
Desde Sun Microsystems, cada parche es referenciado mediante un dos números:
un `patch id', que es el realmente el identificador del parche, y un
número de revisión del parche, separados ambos por un guión; de esta
forma cuando descargamos un parche desde SunSolve y lo descomprimimos, o
cuando lo recibimos en un CD-ROM, dicho parche estará contenido en un
directorio cuyo nombre es justamente esa referencia:
anita:/var/tmp# ls 110899-01/
README.110899-01 SUNWcsu
anita:/var/tmp#
Dentro del directorio anterior encontraremos generalmente un fichero donde se
nos explica la utilidad del parche, los problemas que soluciona y la
forma de
aplicarlo; además, existirán una serie de subdirectorios cuyos nombres son
los paquetes de software a los que ese parche afecta directamente (es
decir, de los que sustituye o actualiza directorios o archivos). Como podemos
ver, en el ejemplo anterior sólo encontramos uno de estos subdirectorios, SUNWcsu, lo que indica que el parche sólo afectará a ficheros de ese
paquete. A su vez, dentro de cada uno de los directorios que diferencian
paquetes software encontramos más archivos y subdirectorios que
contienen realmente las versiones actualizadas de programas, así como
órdenes post-instalación, descripción del software actualizado,
información sobre archivos y directorios modificados, etc.
Desde Sun Microsystems se definen cinco modelos básicos de parches; los standard son parches que solucionan un problema software o hardware
específico, por lo que si ese problema no afecta a nuestros sistemas
no tenemos por qué instalarlos. Los parches recommended son aquellos que
Sun recomienda sea cual sea nuestro entorno para prevenir problemas en el
futuro, y los security son los que resuelven problemas de seguridad;
evidentemente ambos son de instalación casi obligatoria. Un cuarto tipo son
los parches Y2K, que como su nombre indica son los que aseguran el
cumplimiento con el año 2000 en todos los productos de Sun; a no ser que
trabajemos con versiones de software o hardware antiguo, rara vez
tendremos que instalar uno de estos parches, ya que los productos más o menos
nuevos no han de tener problemas con el año 2000. Finalmente, el quinto tipo
de parches son los patch clusters; no son realmente otro modelo, sino que
se trata de agrupaciones de los anteriores que se distribuyen en un único
archivo para descargarlos e instalarlos más cómodamente: incluyen un script denominado `install_cluster' que instala en el orden adecuado
todos los parches del grupo, lo que evita al administrador tener que hacerlo
uno a uno.
Para instalar un parche podemos utilizar la orden `patchadd' en Solaris
7 o superior, o
`installpatch' en la versión 2.6 o anteriores, en
ambos
casos evidentemente como root del sistema; suele ser recomendable, en
función del tipo de parche y su criticidad, situar a la máquina en modo
monousuario antes de aplicarlo, para evitar que actividades de los usuarios
puedan interferir con el proceso de parcheado. De esta forma, si queremos
aplicar el parche anterior (110899-01), los pasos a seguir serían los
siguientes:
anita:/var/tmp# who -r
. run-level S Jun 8 06:37 S 0 ?
anita:/var/tmp# unzip 110899-01.zip
anita:/var/tmp# patchadd 110899-01/
Checking installed patches...
Verifying sufficient filesystem capacity (dry run method)...
Installing patch packages...
Patch number 110899-01 has been successfully installed.
See /var/sadm/patch/110899-01/log for details
Patch packages installed:
SUNWcsu
anita:/var/tmp#
Muchos parches necesitan un reinicio del sistema para aplicarse correctamente,
en especial aquellos que modifican algún parámetro del núcleo de Solaris;
si instalamos bloques de parches más o menos grandes, como los Maintenance Updates o los Recommended and Security, el reinicio es casi
seguro.
Para comprobar qué parches para el operativo tenemos instalados en una
máquina podemos utilizar las órdenes `showrev -p' o `patchadd -p':
anita:/# showrev -p |grep 110899-01
Patch: 110899-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsu
anita:/#
Es importante resaltar lo de `para el operativo', ya que estas órdenes no
muestran en ningún caso los parches aplicados a la OBP; además, hemos
de tener presente que si un parche necesita que se reinicie el
sistema, `showrev' nos dirá que está instalado, pero aunque la
orden no muestre ningún mensaje de error, el parche no tendrá efecto hasta
el siguiente reinicio de la máquina. Siguiendo con nuestro ejemplo para
ver la información que se nos muestra de cada parche, podemos ver que el
parche que hemos instalado afecta al paquete SUNWcsu (algo que ya
sabíamos), no deja obsoletas a versiones anteriores, no
necesita que esté aplicado otro parche para poder instalarse, y tampoco tiene
incompatibilidades.
Si por cualquier motivo deseamos eliminar del sistema un parche que hemos
instalado con anterioridad podemos usar la orden `patchrm' en
Solaris 7 o superior, o `backoutpatch' si utilizamos versiones más
antiguas. Esto restaurará el estado que poseía el sistema - en cuanto a
ficheros y directorios - antes de aplicar el parche:
anita:/# who -r
. run-level S Jun 8 06:37 S 0 ?
anita:/# patchadd -p|grep 110899-01
Patch: 110899-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsu
anita:/# patchrm 110899-01
Checking installed patches...
Backing out patch 110899-01...
Patch 110899-01 has been backed out.
anita:/# patchadd -p|grep 110899-01
anita:/#
El hecho de poder desinstalar un parche con tanta facilidad es debido a que,
si no indicamos lo contrario, cuando utilizamos `patchadd' para añadirlo
esta orden hace una copia de seguridad de los ficheros y directorios
que van a modificar o actualizar, y la guarda en /var/; podemos utilizar
la opción `-d' del comando si no queremos esta copia se genere, pero si
lo hacemos hemos de tener presente que no podremos desinstalar el parche
aplicado: por tanto esto sólo es recomendable en los casos en los que el
espacio libre en /var/ sea muy limitado y no tengamos opción de
aumentarlo (por ejemplo, ampliando el filesystem o simplemente borrando o
comprimiendo archivos).
Sun Microsystems distribuye entre sus clientes con contrato la utilidad PatchDiag, una herramienta realmente útil para mantener al día nuestro
nivel de parcheado (y con él, nuestra seguridad); la principal función de
este software es determinar el nivel de parcheado de una máquina y
compararlo con la lista de parches Recommended and Security de Sun. Esta
lista contiene los parches cuya instalación es básica de cara a garantizar
la seguridad o el correcto funcionamiento de los sistemas Solaris, y
representa los parches que obligatoriamente deben estar instalados en
sistemas críticos, como los cortafuegos, si queremos que sean seguros.
PatchDiag no aplica estos parches en ningún momento, sino que se
limita únicamente a indicar cuáles son necesarios en la máquina donde se
ejecuta.
© 2002 Antonio Villalón Huerta