martes, 30 de abril de 2013

Ponencia: Afinando sistemas. Primeras conclusiones

Ayer he ido a presenciar una ponencia sobre el ajuste (afinamiento, tuning) de sistemas. Impartida por Fernando Ruiz-Tapiador (uno de los pocos "Arquitectos Certificados Red Hat" de España), en el Centro de Novas Tecnoloxías de Galicia (CNTG); naturalmente se centraba en los sistemas Red Hat, si bien como es de esperar el 99% de lo dicho es aplicable a cualquier sistema GNU/Linux.

Una ponencia de cuatro horas sobre este tema es, reconozcámoslo de entrada, bastante dura. Ni siquiera la pericia (o experiencia) de Fernando puede evitar esto. Aunque, como es de esperar, fue una ponencia en la que se pudieron aprender algunas cosas, y como es habitual en las clases impartidas por Fernando, algún truquillo tan útil como muchas veces desconocido.


No voy a hacer una entrada exhaustiva sobre la ponencia. Fernando se comprometió a colgar el pdf de la presentación independientemente de que el CNTG hiciese lo propio. Si para entonces tengo tiempo y ánimo, intentaré hacer un resumen de cosas útiles. Hoy sólo quiero dejar aquí un par de cosillas interesantes.

En primer lugar, GNU/Linux es un sistema muy maduro, basado en otro sistema también muy maduro: tiene muchos desarrolladores y muchísima gente que lo utiliza, por lo que está muy bien afinado per se. Eso implica que, salvo en casos muy concretos, para afinar una cosa hay que desafinar otra. Por otra parte, debe tenerse en cuenta que cualquier cambio que se haga puede tener consecuencias imprevistas.

La primera recomendación es la obvia: deshabilita (incluso desinstala) cualquier cosa que no uses. Otra buena recomendación es estimar si realmente necesitas afinar el sistema.

¡Vaya!! ¿es malo que un procesador tenga una carga de trabajo del 90%? ¡Pues para eso lo compraste!! También es importante ver la relación esfuerzo/impacto del afinamiento que queramos realizar. Un ejemplo sencillo es el arranque de los sistemas servidores de producción: son sistemas pensados para ser arrancados muy pocas veces, por lo que una demora de 10 o 20 segundos en su arranque no suele merecer mucho esfuerzo por parte de sus administradores.

En segundo lugar, para saber si es preciso (o incluso posible) el ajuste del sistema, se deben de utilizar datos fiables, no suposiciones. Esto incluye que normalmente el usuario tiene una impresión del rendimiento del sistema muy ligada a la interactividad del mismo. Sí, el usuario tiende a creer que un sistema es más rápido si le responde rápidamente a él, independientemente de cuánto tiempo real tarden las cosas en realizarse.

Por supuesto, para estudiar el rendimiento real de un sistema deberemos hacerlo en función de las tareas reales a realizarse con él. Y también es cierto que eso suele llevar tiempo. Y otro factor importante es que realizar tales mediciones tenderá a influir en el rendimiento real del sistema, con lo que deberá discriminarse la parte de sobrecarga debida a nuestro estudio.

Es frecuente encontrar "reglas" para "afinar" un sistema o para mejorar el rendimiento del mismo. La lectora avisada habrá pensado que, en el mejor de los casos, que tales ajustes sirvan de algo es algo posible, pero no demasiado probable. No es fácil.

Un ejemplo de documentación sobre este tema puede ser la System Analysis and Tuning Guide (en este caso, para openSUSE, que es mi Sistema Operativo principal). Y si bien es cierto que sí hay unas cuantas reglas generales que se pueden utilizar, también es cierto que el usuario debe cerciorarse completamente de que ese cambio no va a producir consecuencias imprevistas, como he dicho antes. Piénsese que si un cambio pudiese ser útil siempre, con seguridad el sistema ya vendría con él incorporado.

Salud y feliz computación!!

lunes, 15 de abril de 2013

Linux y el Virus

No importa cuántas veces se demuestre la falsedad de una información; siempre habrá un porcentaje de gente dispuesta a creer que es verdad.

Esa cita es la que justifica que cada cierto tiempo se repitan cierta clase de aseveraciones. Muchas de estas aseveraciones tienen que ver con rebuscadas teorías conspiratorias, otras para cuestionar cierto conocimiento científico reciente...

 El caso que ocupa esta entrada, es consecuencia de la tradicional afirmación que se hace en blogs y foros según la cual una de las ventajas de GNU/Linux sobre Windows es que el usuario no debe preocuparse por los virus que asedian el mundo de los sistemas operativos Windows.


Como en cualquier bulo, lo primero que se toma son algunos elementos reales, aderezados del desconocimiento del público general de determinados tecnicismos que son los que permitirían captar determinados matices en ausencia de los cuales la teoría adquiere tintes realistas. Cómo se cuela este debate a veces en foros técnicos es un misterio (de fácil solución si uno es un poco mal pensado ;) ).

Un viejo principio de la seguridad informática dice que "no se puede considerar que un sistema es completamente seguro si está conectado a una red". Esto tiene dos vertientes: no se puede confiar completamente en las personas que utilizan un sistema, y no se puede confiar completamente en el software de dicho sistema que, al fin y al cabo, fue desarrollado por personas.

La persona que usa un sistema puede, por ejemplo, no llevar a cabo las tareas mínimas de seguridad (uso de claves adecuadas y renovadas con cierta frecuencia, no usar software no confiable, lo que incluye ¡ay! a todo el software pirata y otra serie de comportamientos). En cuanto al sistema en sí,  a medida que crece su complejidad se hace más difícil garantizar que no hay errores que puedan ser utilizados por otras aplicaciones con fines no deseados.


Hasta aquí no es muy espectacular, y cualquiera que haya leído algunos de los artículos sobre informática de este blog debería considerarlo como una obviedad, así como su natural consecuencia: es relativamente fácil construir programas que exploten estas debilidades.

Tal software se denomina comúnmente malware. En el artículo de la wikipedia se citan varios tipos principales: virus, gusanos, puertas de atrás, programas espía y páginas web que los instalan, y troyanos, entre otros. La definición de virus, como la de cualquier tipo de malware, es técnica, y debe incluir la habilidad de "infectar" un sistema: bien una zona de memoria, el sector de arranque del disco duro, etc.

Y aquí llega la confusión. Se han desarrollado virus para sistemas GNU/Linux, cierto. Pero sólo como propósito ilustrativo. En general, existen muchas causas para que un virus no pueda prosperar mucho, aunque destacan dos: no todos los usuarios usan las mismas versiones de programas, ni siquiera del núcleo del sistema operativo; y existen sistemas de permisos de acceso a ficheros y dispositivos no existentes en otros sistemas operativos.

Alentados por la posibilidad técnica para desarrollar un virus, algunos afirman ritualmente que la única razón para que en el ecosistema GNU/Linux no haya tantos virus como en el ecosistema Windows es la diferencia radical en el número de usuarios; y como corolario, de haber más usuarios también habría más virus, ya que sería un ecosistema más apetecible para los desarrolladores de virus.

He señalado la dificultad para desarrollar un virus realmente efectivo. Tal dificultad es el primer motivo por el que es poco probable que el número de virus fuese comparable al existente en Windows por mucho que aumentase el número de usuarios: la dificultad de desarrollar un virus en un entorno en el que encontrar varios usuarios que usen similar software, al mismo tiempo que se desarrolla código para evitar los distintos mecanismos de seguridad propios de los sistemas GNU/Linux.

Pero también está la contrapartida. En el bulo se hace hincapié en la diferencia en el número de usuarios. En el artículo anterior del blog he dado a entender que lo que se entiende por usuario no es necesariamente lo mismo coloquial que técnicamente. Desde el punto de vista coloquial, yo soy un usuario, tú eres otro usuario, etc. Sin embargo, desde el punto de vista técnico, esto no es tan trivial.

Veamos. Yo tengo cuenta en Facebook y en Google Plus al igual que millones de otras personas. Tanto Facebook como Google se ejecutan en muchas máquinas (lo que ellos llaman granjas de servidores) que utilizan GNU/Linux o alguna versión de éste. La mayoría de servidores de Internet usan LAMP (que obviamente se ejecuta sobre GNU/Linux); muchos routers también usan GNU/Linux... en general, Internet descansa sobre una red de equipos que usan GNU/Linux. Desde ese punto de vista, prácticamente todos somos usuarios de GNU/Linux, usemos un escritorio Windows, GNU/Linux o cualquier otro. Y si lo que quieres es infectar muchos equipos, no infectes cada equipo, infecta la red, a tales sistemas GNU/Linux: es algo así como envenenar el sistema de abastecimiento de agua.

A lo mejor piensas que esto es exagerado. Pero de hecho, la mayoría de ataques de otro tipo (no víricos) son precisamente a algunos nodos importantes de la red. Es como suplantar a un banco si lo que quieres es robar dinero de una tarjeta de crédito, en lugar de atacar el computador del usuario (humano) de turno.


Así que no es cierto que GNU/Linux tenga menos virus porque es menos usado: hay menos virus para Linux porque es mucho menos vulnerable. Y no te preocupes: ya tienes bastante con que no descubran tu contraseña de usuario. Porque la tienes ¿no? ;)