Buenas,
Una vez más, aprovecho para felicitaros este 2007 recién estrenado. Sigo de vacaciones, pero ya iba siendo hora de continuar con nuestro pequeño curso.
Hoy vamos a tocar un capítulo importante, y lo es por dos motivos: el primero son los riesgos que entraña la presencia de compiladores en una máquina de producción real, y el segundo, la dificultad que tiene su localización, ya que en estos temas, cada sistema es de su padre y su madre: no hay patrones claros para su localización. Por si esto fuera poco, hay que añadir el factor factibilidad de ejecución como tercera variable, ya que una máquina con 100 compiladores en la que no hay licencia o permisos para compilar es igual de segura que una máquina sin compiladores.
El porqué de la existencia de herramientas de compilación en un entorno de producción responde principalmente a dos factores. El primero es que muchos sistemas integran en la instalación por defecto estas herramientas, ya que le son necesarias. El segundo es que al disponerse de éstos útiles en el sistema de producción real, es factible la aplicación de un parche corrector al vuelo sin pasar por los entornos de QA y pruebas. Esto no debería ser así, pero ante ciertos incidentes de alto impacto puede ser necesario compilar directamente en producción, como medida extrema para la recuperación ante un incidente.
Por suerte, los sistemas más tradicionales y abundantes tienen ciertos patrones de localización. Es el caso de Sun Solaris, el cual utilizaremos como ejemplo. En Solaris lo normal es que las herramientas de compilación se suministren en forma de Sun Workshop, y dentro del Workshop es más o menos fácil dar con las herramientas de compilación buscando los patrones SPRO y SUNW.
Ejemplo práctico
Ejecutamos nuestro pequeño script de localización. Hoy recurriremos a Python (con lo fácil que es un grep, pero bueno), momento en el que tengo que agradecer a Julio Canto su inestimable colaboración, ya que en Python soy un completo inútil. Suerte que Julio está bastante empollado y me orientó sobre algo tan básico como lo que os muestro :)
#!/usr/local/bin/python
# PyLocalizador 1.0bimport sys
import stringcadena = raw_input(‘Cadena a buscar:\n ‘)
destino = raw_input(‘Fichero a rastrear:\n ‘)print «Buscando coincidiencias para», cadena, «\n»
fileHandle = open ( destino, «r» )
fileList = fileHandle.readlines()
for fileLine in fileList:
if cadena in fileLine:
print fileLineprint «Fin del programa»
En nuestro caso aparecen los siguientes compiladores:
application SPROdmake Sun WorkShop 6 update 1 TeamWare Distributed Make
application SPROf77 Sun WorkShop 6 update 1 Compiler FORTRAN 77
application SPROf90 Sun WorkShop 6 update 1 Compiler Fortran 90
application SPROflmrg Sun WorkShop 6 update 1 TeamWare File Diffs & Merging
application SPROfrzpt Sun WorkShop 6 update 1 Freezepoint
application SPROftool Sun WorkShop 6 update 1 Compiler FORTRAN 77 Tools
application SPROgc Sun WorkShop 6 update 1 Memory Monitor Libraries for C++
application SPROglyph Sun WorkShop 6 update 1 Icons and Glyphs
application SPROhlpws Sun WorkShop 6 update 1 WorkShop Volume
application SPROhtbas Sun WorkShop 6 update 1 Copyright and Images
application SPROhtftn Sun WorkShop 6 update 1 Compiler FORT 77/95
application SPROhtins Sun WorkShop 6 update 1 Installation Docs
application SPROhtpl Sun WorkShop 6 update 1 Sun Performance Library Docs
application SPROhttw Sun WorkShop 6 update 1 TeamWare Docs
application SPROhtvis Sun WorkShop 6 update 1 Visual Documentation
application SPROhtws Sun WorkShop 6 update 1 Document Collection
application SPROild Sun WorkShop 6 update 1 Incremental Linker
application SPROl77s Sun WorkShop 6 update 1 FORTRAN 77 Dynamic Libraries
application SPROl77sx Sun WorkShop 6 update 1 FORTRAN 77 64-bit Dynamic Libraries
application SPROl77x Sun WorkShop 6 update 1 FORTRAN 77 64-bit Static Libraries
application SPROl90 Sun WorkShop 6 update 1 Fortran 95 Static Libraries
application SPROl90x Sun WorkShop 6 update 1 Fortran 95 64-bit Static Libraries
application SPROlang Sun WorkShop 6 update 1 Compilers Common Components
application SPROlangx Sun WorkShop 6 update 1 Common 64-bit Components
application SPROlcxs Sun WorkShop 6 update 1 Unbundled Shared libcx
application SPROlgc Sun WorkShop 6 update 1 Memory Monitor Library 1.0 for C++
application SPROlibms Sun WorkShop 6 update 1 Unbundled shared libm
application SPROlklnt Sun WorkShop 6 update 1 LockLint
application SPROm9xpx Sun WorkShop 6 update 1 C9X Math Library 64-bit (profiled)
application SPROm9xs Sun WorkShop 6 update 1 C9X Math Library
application SPROmrcc Sun WorkShop 6 update 1 Man Pages/Online Info for C
application SPROmrcom Sun WorkShop Common Compiler Man Pages/Online Info
application SPROmrcpl Sun WorkShop 6 update 1 Man Pages/Online Info for C++
application SPROmrdbx Sun WorkShop 6 update 1 Man Pages/Online Info for dbx
application SPROmrmp Sun WorkShop 6 update 1 Man Pages/Online Info for MT Tools
application SPROmrpan Sun WorkShop 6 update 1 Man Pages/Online Info for Perf Analyzer
application SPROmrpl Sun WorkShop 6 update 1 Man Pages for Sun Perf Library
application SPROmrsbe Sun WorkShop 6 update 1 Man Pages/Online Info for Source Browser
application SPROmrstd Sun WorkShop 6 update 1 Standard Class Library Man Pages for C++
application SPROmrws Sun WorkShop 6 update 1 Man Pages/Online Info for workshop
application SPROnedit Sun WorkShop 6 update 1 NEdit Editor v 5.1
application SPROpl Sun WorkShop 6 update 1 PerfLib 32-bit (Archive)
application SPROplg Sun WorkShop 6 update 1 PerfLib Common Components
application SPROplmsx Sun WorkShop 6 update 1 PerfLib 64-bit (Shared/MT)
application SPROplmx Sun WorkShop 6 update 1 PerfLib 64-bit (Archive/MT)
application SPROpls Sun WorkShop 6 update 1 PerfLib 32-bit (Shared)
application SPROplsx Sun WorkShop 6 update 1 PerfLib 64-bit (Shared)
application SPROsbe Sun WorkShop 6 update 1 Source Browser
application SPROsbfsf Sun WorkShop 6 update 1 sbtags
application SPROsbld Sun WorkShop 6 update 1 Linker Stab Library
application SPROsbldx Sun WorkShop 6 update 1 Linker Stab Library
application SPROscl Sun WorkShop 6 update 1 Standard Class Library for C++
application SPROsclx Sun WorkShop 6 update 1 Standard 64-bit Class Library for C++
application SPROsmpx Sun WorkShop 6 update 1 libsunmath 64-bit (Shared/Profiled)
application SPROsmsx Sun WorkShop 6 update 1 libsunmath 64-bit (Shared)
application SPROsunms Sun WorkShop 6 update 1 Unbundled Shared libsunmath
application SPROtl7x Sun WorkShop 6 update 1 Tools.h++ 7.1 64-bit Class Library for C++
application SPROutool Sun WorkShop 6 update 1 Common Tools
application SPROvertl Sun WorkShop 6 update 1 TeamWare Version Tool
En nuestro ejemplo, no existen ni permisos ni licencia para compilar, luego la presencia de estas herramientas no es preocupante. Presupondremos para nuestro ejemplo que tampoco hemos hallado otros compiladores ajenos al Workshop, si bien esta verificación hay que hacerla.
Resumen
La auditoría de herramientas de compilación debe proporcionar la información suficiente para determinar si, caso de existir dichos útiles de compilación, suponen un peligro para la integridad de los sistemas y los aplicativos que sobre él corren.
El problema de fondo no es la existencia de compiladores, sino la factibilidad de ejecutar compilaciones en un entorno de producción real.
Ojo al compilador de C!
No se seguro en SUN, pero al menos en HPUX el compilador de C es clave para cualquier recompilación de kernel, por lo que no lo puedes obviar.
Por otra parte, además de los compiladores hay que tener cuidado con los «runtimes» de lenguajes interpretados, tipo perl, phyton, php, etc..
Saludos y buen año!
Antonio
Me leeré las 6 partes a ver si aprendo algo. Por cierto algun bot te ha llenado el blog de spam en algunas entradas. :-/
Ah, feliz año. :-)
Corsaria,
Sip, se coló en Akismet, y estas semanas navideñas he usado bastante poco el ordenador, con lo que no he podido corregir el tema hasta ahora mismo :)
Un saludo, y nada, Feliz Año para tí también :)