MentorCruise

Defendiendo la disponibilidad de un servicio con iptables

La famosa sigla CID define el trípode en el cual se sustenta la seguridad informática: Confidencialidad, Integridad, Disposnibilidad.

Es decir, al interrumpir la disponibilidad de un servicio se quiebra la seguridad de uno o más servicios.

El famoso ataque de denegación de servicio puede colgar aplicaciones de un servidor o inundarlos de tráfico afectando seriamente el rendimiento. Muchas veces ese tipo de ataque proviene de direcciones IP falsificadas y desde más de un origen. Existen variantes de este tipo de agresiones que pueden incluso aprovechar vulnerabilidades de los dispositivos víctima, de manera tal que los atacantes pueden por ejemplo hacer reemplazar el firmware original por otro malicioso.

El módulo xt_recent

Como vimos, bloquear o limitar el tráfico de una lista estática de direcciones IP no es conveniente. Exige en cambio adoptar una defensa dinámica y proactiva.

El módulo de iptables xt_recent es una de las opciones a las que podemos recurrir en estos casos. Fue creado por Stephen Frost en 2003^1   y lo mantiene actualmente el equipo de iptables.^2

El presente artículo intenta mostrar de manera sencilla y clara el funcionamiento del módulo, no es un curso de iptables ni una receta para diseñar una política de firewall. El propósito es mostrar como el propio kernel posee instrumentos para defenderse contra un (D)DOS.

Como funciona y usos

El modulo xt_recent o más comúnmente conocido recent crea una conjunto de direcciones IPs de acuerdo a ciertos criterios que queramos establecer. Por ejemplo podríamos crear un regla que coincida con paquetes de tipo icmp pertenecientes a conexiones nuevas.

Es cierto, tal vez no podamos hablar estrictamente de conexiones nuevas para este tipo de protocolo. Pero recordemos que iptables es un firewall de estado es decir, no solamente analiza y/o filtra paquetes de manera aislada. Sino que además puede examinar su historial: saber si un paquete pertenece a una conexión nueva (NEW), establecida (ESTABLISHED), relacionada (RELATED) o no válida (INVALID).

Por ejemplo al realizar un echo-request con ping y recibir desde el otro host un echo-reply, iptables, o mejor dicho, netfilter considera que se estableció una conexión.

Si queremos contrarrestar un icmp-flood de manera efectiva lo correcto es limitar las paquetes nuevos.

Reglas sencillas para probarlo

Las siguientes reglas permiten aplicar un límite de un paquete nuevo icmp por minuto (es un ejemplo extremo, pero útil para explicar el funcionamiento del módulo)

iptables -A INPUT -p icmp -m state –state NEW -m recent –update –seconds 60 –hitcount 1 –name icmpflood -j DROP
iptables -A INPUT -p icmp -m state –state NEW -m recent –set –name icmpflood

Como siempre es importante el orden de las reglas, podríamos invertirlas pero en la documentación de primera mano^1 está en ese orden (y las cosas cambiarían, podés probarlo vos el resultado).

Pero veamos las cosas tal como están. Supongamos que no han llegado paquetes nuevos icmp: Al arribar uno, no coincidirá con la primer regla. Explicaremos la razón:

El parámetro –seconds– indica el intervalo de tiempo que examinaremos, mientras que –hitcount evalúa la cantidad de paquetes de este tipo desde la misma dirección. Es importante entender que esta regla no incrementa el contador. Solamente examina cantidad de paquetes por unidad de tiempo. Como hasta ahora el contador está en 0, el paquete podrá ingresar (asumimos que la política predeterminada es ACCEPT, lo cual puede – en principio – ser inseguro, pero nuestro propósito es explicar el funcionamiento de recent, de manera que el lector está advertido). Insistimos: esta regla NO penaliza, es decir no incrementa el contador. ¿Quedó claro?

Vayamos a la segunda regla: esta regla crea un conjunto llamado icmpflood e incrementa el contador para los paquetes que cumplan con los requisitos estipulados, es decir: con protocolo icmp y estado NEW. De manera que al llegar el primer paquete se agrega la dirección IP al set icmpflood y el número de hits es ahora 1.

Recién al llegar el segundo paquete en menos de 60 segundos se habrán cumplidos los requisitos de la primer regla y por lo tanto el paquete será descartado.

Método sencillo para testear las reglas

Lo podemos probar sencillamente con los siguientes comandos desde otro host:

pingwait(){ ping -q -c1 $1 & sleep 31; }
IP=192.168.80.148
pingwait $IP; pingwait $IP; ping -q -c1 192.168.80.148

Es decir lo que hacemos es enviar dos paquetes nuevos icmp cada 31 segundos.

El resultado en el host de destino es:

Every 2,0s: iptables -L INPUT -vn  

Chain INPUT (policy ACCEPT 63 packets, 3612 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   168 DROP       icmp —  *      *       0.0.0.0/0            0.0.0.0/0            state NEW recent: UPDATE seconds:
 60 hit_count: 1 name: icmpflood side: source mask: 255.255.255.255
    1    84            icmp —  *      *       0.0.0.0/0            0.0.0.0/0            state NEW recent: SET name: icmpflood side: source mask: 255.255.255.255

Explicación amigable de rcheck y update

No explicamos en absoluto el significado de UPDATE (–update) hasta ahora y la diferencia con CHECK (–rcheck). No es sorpresa que la mejor explicación esté en la documentación original. Muchos de los sitios que intentan explicarlo en mi modesta opinión no lo hacen de la manera más clara. Así que trataré de hacerme entender, ya que son dos parámetros claves. Pero antes de hacerlo y sin querer eludir la explicación, mostraré el resultado al cambiar UPDATE por CHECK:

iptables -F && iptables -X && iptables -Z
iptables -A INPUT -p icmp -m state –state NEW -m recent –rcheck –seconds 60 –hitcount 1 –name icmpflood -j DROP
iptables -A INPUT -p icmp -m state –state NEW -m recent –set –name icmpflood
Every 2,0s: iptables -L INPUT -vn                                                                       Thu Jan  7 16:49:41 2016

Chain INPUT (policy ACCEPT 57 packets, 3250 bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    84 DROP       icmp —  *      *       0.0.0.0/0            0.0.0.0/0            state NEW recent: CHECK seconds:
60 hit_count: 1 name: icmpflood side: source mask: 255.255.255.255
    2   168            icmp —  *      *       0.0.0.0/0            0.0.0.0/0            state NEW recent: SET name: icmpf
lood side: source mask: 255.255.255.255

Supongamos que tenés una bolsa con 10 caramelos y un nene te pide que se los des. Aceptás con una condición, solamente podrá comer 2 por hora. Entonces, podrías adoptar dos políticas con el pequeño:

Laxa (–rcheck)

  • Hora 15:00 Viene el nene por primera vez y te pide 2 caramelos. Le das un caramelo.
  • Hora 15:15: ¡Regresa el niño en busca de más caramelos! Está ok, le regalás el dulce, pero le decís que es el último durante esa hora.
  • Hora 15:30: Otra vez el simpático nene te pido caramelos, le explicás que ya comió los dos caramelos que corresponden a esa hora, recién a las 16:00 se lo darás.
  • Hora 16:00: Ahora sí tal lo prometido le podrás dar 1 o 2 caramelos durante las 16:00 hasta las 16:59.

Rígida (–update)

  • Hora 15:00 Viene el nene por primera vez y te pide 2 caramelos. Le das un caramelo.
  • Hora 15:15: ¡Regresa el niño en busca de más caramelos! Está ok, le regalás el dulce, pero le decís que es el último durante esa hora.
  • Hora 15:30: Otra vez el simpático nene te pido caramelos, le explicás que ya comió los dos caramelos que corresponden a esa hora… Pero que durante una hora a partir de ahora no le podrás dar más caramelos.
  • Hora 15:45: El chico insiste quiere más caramelos. Como disciplina le decís que por no esperás volvés a extender el tiempo de espera. De manera que tendrá que esperar hasta las 16.45 para recibir otro caramelo.
  • Hora 16:00 El pobre nene insiste, entonces extendés la penalidad una hora más. Y el nino recién ahí comprende la indicación y espera una hora.
  • Hora 17:00: Ahora sí tal lo prometido le podrás dar 1 o 2 caramelos durante los siguientes 60 minutos.

Así que esas son las diferencias entre –rcheck, –update, cuanto menos respete el atacante el tiempo estipulado en –seconds peor será le penalidad. En el ejemplo que estuvimos viendo –update significa que el otro host deberá esperar sí o sí 1 minuto entre ping y ping. En cambio –rcheck es más permisivo, por cada nuevo minuto nuevo que comience podrá enviar la cantidad estipulada en –hitcounts que en nuestro ejemplo fue 1 paquete.

Archivos de listas en /proc/net/xt_recent

root@raspberrypi:~#  cat  /proc/net/xt_recent/icmpflood src=192.168.80.250 ttl: 64 last_seen: 29694939 oldest_pkt: 3 29688739, 29691839, 29694939

Hay un archivo por lista (set). Vemos en el archivo /proc/net/xt_recent/icmpflood la dirección de origen del paquete y además la última vez que fue vista usando la unidad de tiempo jiffies.

Parámetros del kernel

Además se le pueden pasar parámetros al módulo

ip_list_tot: Número de direcciones IPs que puede recordar por lista
ip_pkt_list_tot: Número de paquetes que puede recordar por IP (el máximo es 255)

Conclusión

Como vemos si bien existen otros métodos para mitigar un DDOS o DOS, este tiene la ventaja de usar directamente netfilter, sin la necesidad de instalar una herramienta adicional.

 

Instalar Linux desde un archivo ISO

En el artículo anterior habíamos visto el potencial de la shell de GRUB 2. Allí habíamos visto que podíamos arrancar directamente desde una imagen ISO sin necesidad de tener que grabarlo en un disco óptico ni copiarlo a una unidad USB.

Ahora bien, ¿podríamos además instalar un sistema operativo utilizando ese método? La respuesta es sí. En este caso puntual veremos como instalar Fedora 23.

Aquí, tendremos que tener en cuenta los dos software involucrados principalmente para poder realizar esta tarea. Estos programas son GRUB 2 (naturalmente) y dracut.

Recordemos que en el momento del arranque se utiliza un sistema de archivos temporal en memoria hasta que se pueda realizar el montaje del definitivo sistema de archivos raiz.

dracut es tanto una infraestructura de initramfs manejada por eventos como así también una herramienta que se usa para crear una imagen de disco en memoria.  El comando dracut copiar herramientas y archivos de un sistema instalado y lo combina con el framework dracut.

Estos archivos se pueden ver en fedora en el directorio /usr/lib/dracut/modules.d:

 


[sergio@hope ~]$ ls /usr/lib/dracut/modules.d
00bash               30convertfs  90dm                      90qemu-net    95fstab-sys     95zfcp            99base
00systemd            40network    90dmraid                  91crypt-gpg   95iscsi         95zfcp_rules      99fs-lib
00systemd-bootchart  45ifcfg      90dmsquash-live           91crypt-loop  95nbd           95znet            99img-lib
01systemd-initrd     45url-lib    90kernel-modules          95cifs        95nfs           97biosdevname     99kdumpbase
02systemd-networkd   50drm        90kernel-network-modules  95dasd        95resume        98dracut-systemd  99shutdown
03modsign            50plymouth   90livenet                 95dasd_mod    95rootfs-block  98ecryptfs        99uefi-lib
03rescue             80cms        90lvm                     95dasd_rules  95ssh-client    98pollcdrom
04watchdog           90bcache     90mdraid                  95debug       95terminfo      98selinux
05busybox            90btrfs      90multipath               95fcoe        95udev-rules    98syslog
10i18n               90crypt      90qemu                    95fcoe-uefi   95virtfs        98usrmount

Por lo tanto aquí la clave es pasar los parámetros del kernel y opciones para dracut correctas. Y para agregar la entrada al menú de grub utilizamos el archivo /etc/grub.d/40_custom.

 exec tail -n +3 $0
 # This file provides an easy way to add custom menu entries. Simply type the
 # menu entries you want to add after this comment. Be careful not to change
 # the ‘exec tail’ line above.

menuentry “Live Fedora 23″ –class fedora {
 set isofile=”/Fedora-Live-KDE-x86_64-23-10.iso”
 loopback loop (hd0,gpt8)$isofile
 linuxefi (loop)/isolinux/vmlinuz0 iso-scan/filename=${isofile} root=live:CDLABEL=Fedora-Live-KDE-x86_64-23-10 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
 initrdefi (loop)/isolinux/initrd0.img
 }

Aquí los comandos y opciones claves son respectivamente loopback e iso-scan.

El comando loopback sirve para especificar la ruta a un archivo ISO para que sea tomado como un dispositivo de bloques. Mientras tanto el parámetro iso-scan sirve para montar el dispositivo de loopback y pasarle los parámetros de kernel y dracut apropiadas.

¿Cómo sabemos las opciones y parámetros correctos? Las podemos averiguar montando el archivo ISO e inspeccionando el archivo isolinux.cfg:


[root@hope sergio]# mount -o loop /usr/Fedora-Live-KDE-x86_64-23-10.iso /media
mount: /dev/loop0 está protegido contra escritura; se monta como sólo lectura
[root@hope sergio]# grep -m1 append  /media/isolinux/isolinux.cfg 
  append initrd=initrd0.img root=live:CDLABEL=Fedora-Live-KDE-x86_64-23-10 rootfstype=auto ro rd.live.image quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0

Sencillamente debemos copiar lo que está a continuación de append initrd=initrd0.img.

Además, se pueden apreciar los comandos linuxefi e initrdefi que son equivalente de manera respectiva a las ordenes linux e initrd al utilizar un sistema con UEFI.

Finalmente, debemos ejecutar el comando para generar el nuevo archivo de GRUB 2:

[root@hope sergio]# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Reiniciamos, elegimos la opción Live Fedora 23 y luego podremos instalar el sistema operativo.

Instalar desde un archivo ISO

La partición importa

La partición en la que está ubicado el archivo ISO importa. Existe un bug en el módulo de python para la configuración de almacenamiento del sistema llamado blivet que impide la instalación del sistema operativo si la ISO está en alguna partición marcada en el editor de particiones, más allá de que esta se formatee o no. Como solución provisoria, se puede emplear una partición sin que el instalador la tenga en cuenta. De hecho, hice eso mismo. Luego, posterior a la instalación usé dicha partición para el directorio /usr, usando rysnc, editando el archivo /etc/fstab y borrando el /usr original.

Conclusión

Una vez más, podemos apreciar el potencial de GRUB 2 y como podemos prescindir de otros medios para instalar sistemas operativos. De hecho, dado el gran tamaño de los discos en la actualidad, podríamos tener una partición específicamente para tener ISOS.

 

La poderosa shell de GRUB 2

En el artículo anterior hemos visto que la línea de comandos de GRUB nos permitía reparar el cargador de arranque sin necesidad de recurrir a un cargador de arranque.

GRUB2 como es de suponer también permite hacerlo:

grub> set root=(hd0,1)
grub> linux /vmlinuz-3.16.0 root=/dev/mapper/centos-root ro
grub> initrd /initramfs-3.16.0.img
grub> boot

Como vemos cambian algunos comandos, sintaxis y la nomenclatura de particiones pero la idea es la misma.

Desde ya contamos con la tecla TAB​ para autocompletar rutas de archivo y el comando cat:

Comando cat en GRUB2
Arrancar directo desde un archivo ISO

Bajamos una distro y no queremos ni tenemos tiempo para grabarla en un CD/DVD. Perfecto, GRUB2 en la mayoría de los casos puede arrancar también una imagen ISO:

 

 

grub> set isofile=/TinyCore.iso 
grub> loopback loop (hd0,1)/$isofile vmlinuz 
grub> linux (loop)/boot/vmlinuz cde loglevel=3 
grub> initrd (loop)/boot/core.gz

Tener acceso a un archivo de un LVM

Sí, estimados, GRUB2 puede también leer un volumen lógico, ¿Cómo? Así:

LVM y GRUB2

Algo más

¿Más? Sí, mas todavía, por ejemplo listar dispositivos en el bus PCI:

Comando lspci en GRUB2

Como se puede apreciar GRUB es bastante más que un boot loader y su shell lo suficientemente potente como para prescindir de un LiveCD (al menos en soporte físico) en más de una ocasión.

Información complementaria

Reparar GRUB Legacy sin LiveCD

Se borró el boot loader del MBR, o se editó mal el MBR se puede en muchos casos reparar GRUB y/o arrancar desde la la misma shell del boot loader. ¡Sin necesidad de ningún LiveCD!

Primero vamos a ver como se hace con GRUB Legacy (distribuciones como CentOS 5 y 6 están hasta la fecha soportadas y lo usan).
En el arranque grub debería permitirnos ingresar a la shell de GRUB presionando la tecla, entonces veremos el prompt correspondiente:

grub>

Una de las cosas sumamente útiles que podemos hacer allí es buscar los archivos de arranque, por ejemplo, las imágenes compiladas del kernel, initramdisks, etc.
El comándo mágico es find:​

grub> find /

Si /boot está en una partición separada del directorio raíz, lo hacemos como se muestra arriba, sino la ruta en ese caso sería /boot. Cualquier sea el caso, luego presionamos la tecla [fac_icontext icon="indent" text="TAB" shape_type="square" shape_bg="#046c43" icon_color="#ffffff"]

Entonces veremos el contenido del directorio /boot:

El comando find en la shell e grub

Ok, pero sigamos con tema que nos convoca, ahora vamos a definir la raíz de grub:

 

grub> root (hd0,0)

 

Le decimos donde están el kernel y el initrd:

grub> kernel /vmlinuz-2.6.32-504.el.x86_64 ro root=/dev/mapper/vg_centos66-lv_root
grub> kernel /initramfs-2.6.32-504.el.x86_64

No es necesario saber los nombres completos de los archivos, recordemos que la tecla TAB​ es nuestra amiga.

Además, contamos con el fabuloso comando (sí, ¿No es fabuloso contar con esta herramienta en este escenario?) cat para poder consultar el archivo de configuración de grub para ver el dispositivo que está montado sobre el directorio raíz.

Listo, luego ejecutamos el comando boot:

grub> boot

Y podremos loguearnos en el sistema e instalarlo mediante el comandogrub-install

.

​:“`

Usando mutt con Vmail

VMail es una alternativa a GMail. Este servicio de webmail está hosteado en Francia.

El servicio se autodefine como:

The simple and secure email service which respects your privacy.

Su política de privacidad1 es la siguiente (traducción no oficial):

  • Registro de cuenta sin proporcionar ninguna información personal.
  • Sin publicidad.
  • Eliminación de cuenta.
  • Almacenamiento de datos cifrado (cifrado de disco LUKS)
  • Logs mínimos de server (cumplen con la European Data Retention Directive2)
  • Se eliminan de los encabezados de los emails las direcciones IP y los agentes de usuario
  • No se usan software de código fuente cerrado, los servicios de terceros o librerías hosteadas.

El software utilizado es roundcube, el framework web de PHP Symphony2 y Arch Linux.

Además, tiene soporte para usar IMAP y SMTP con SSL/TLS. De manera que lo podemos usar con un cliente de correo. Y si bien Thunderbird es estupendo, ¿por qué no utilizarlo con mutt?

Mutt es un extraordinario cliente de correo que no necesita un servidor de ventanas (una interfaz gráfica) para poder usarlo y es ideal para entornos minimalistas.

Debajo incluyo el archivo de configuración correspondiente:

~# cat .muttrc
set folder=”imaps://vmail.me/”
set locale=”es_AR.UTF-8″
set imap_user=username@vmail.me
set imap_pass=tupassword
set spoolfile=”imaps://$imap_user:$imap_pass@vmail.me/INBOX”
#mailboxes =+INBOX
set header_cache=~/.cache/mutt
set message_cachedir=”~/.cache/mutt”
set postponed=”+INBOX.Drafts”
unset imap_passive
set imap_keepalive=300
set mail_check=120
set my_pass=$imap_pass
set realname=’Nombre Apellido’
set from=username@vmail.me
set use_from=yes
set smtp_url=smtps://$imap_user:$imap_pass@vmail.me:465
set editor=vim
set beep_new=yes
bind index <f5> imap-fetch-mail
set sort = reverse-date-received
set net_inc=5
set record = “+INBOX.Sent”

¡Qué lo disfruten!


  1. https://www.vmail.me/en/privacy
  2. Artículo en Wikipedia: http://bit.ly/1EbKlVv

Transferir archivos desde Android a Linux

Recientemente estaba lidiando con el hub usb de mi notebook. Quería copiar archivos desde el celular a un disco conectado a un equipo de arquitectura MIPS.

El hub de la portatil se trata de el xHCI Host Controller que viene integrado con el equipo.

La información de la motherboard es:

 

Machine:   System: Dell product: Inspiron 5423 serial: 2L87MW1
           Mobo: Dell model: 0F45CW v: A13 serial: .2L87MW1.CN7620638N008Z. Bios: Dell v: A13 date: 05/18/2013

Al conectar celuares el comportamiento del controlador USB es errático. Al parecer hay unos cuantos hubs que tienen problemas por carecer de suficiente suministro de energía, de manera que el sistema arroja errores tales como

kernel: usb 1-1: device descriptor read/64, error -7

Ese problema existe también en Windows, de manera que decidí optar por una solución alternativa y en cierta manera más moderna. En lugar de andar conectando cables ¿Por qué no hacerlo mediante Wi-Fi?

Existen muchas opciones para transferir archivos, muchas de ellas gratuitas, aunque closed source. Muchas de ellas no hacían exactamente lo que quería. Lo que estaba buscando era nada más ni nada menos poder copiar fotos mediante drag ‘n drop desde Dolphin. Existe KDE Connect, pero lamentablemente no funciona con Plasma 5.

Hasta que encontré a FTP Server (swiftp), una aplicación libre para Android que me permite acceder mediante Dolphin.

(Error loading gallery)

No obstante, había un escollo más por superar, al ser archivos remotos no se veían desde el gestor de archivos. La solución estaba yendo a Preferencias​>Configurar Dolphin…

Allí hay que ir a la sección de abajo a la izquierda, General y en la solapa general subir el límite en el cuadro inferior correspondiente a Omitir vistas previas de archivos remotos de más de:

[caption id="attachment_750" align="aligncenter" width="910"]Vistas Previas en Dolphin Vistas Previas en Dolphin[/caption]

Una vez realizado esto felizmente se puede copiar desde el smartphone hasta la ubicación deseada.

[caption id="attachment_753" align="aligncenter" width="640"]Accediendo a los archivos del smartphone sin cables Accediendo a los archivos del smartphone sin cables[/caption]

Skype en la bandeja de sistema de Plasma 5.0

Skype proporciona versiones de 32-bit para Linux. Al usarla en una arquitectura x86_64 tenemos un problema al cerrar la ventana de la aplicación… desaparece. Esto es porque Plasma 5.0 no soporta más el protocolo XEmbed. Una de las posibles soluciones es instalar el paquete sni-qt para 32 bit:

 

sudo dnf install sni-qt.i686

Y ¡Listo!

[caption id="attachment_743" align="aligncenter" width="640"]Panel Plasma skype icon en Bande del systema[/caption]

Necesitamos conocer una historia diferente de la tecnología

El relato épico de la gran visión y el esfuerzo personal

Hace unas semanas tuve el agrado de leer una nota del diario La Nación intitulado “El mito del nacimiento en el garaje suele ser demasiado bueno para ser cierto” con autoría de Tom C. Avendaño.

El artículo desarticula la leyenda situada en ese espacio doméstico tan común a las fábulas tecnológicas: el garaje. De acuerdo al mito estadounidense y que muchos han comprado por estas latitudes, cada tanto surgen visionarios, quienes en un momento de inspiración y por medio del honesto esfuerzo individual conquistan el éxito, trayendo al mercado un software, una red social, un smartphone, etc.

Tras tan enjundiosa lectura pensé si podría mostrar relatos alternativos. O más bien historias que tal vez sean completamente nuevas para muchos. Es importante aclarar que estas historias no están desconectadas de los meros mortales. No necesitás ser programador, trabajar en sistemas o estudiar carreras relacionadas con el tema para entenderlas o que te resulten cercanas.

Estamos hablando de Linux. El sistema operativo Android está basado en Linux y es el que viene en la mayoría de los smartphones que se usan en la actualidad. Otros sistemas basados en Linux se encuentran en routers, SmartTV’s, consolas de videojuegos, etc. Nos referiremos a su creador, Linus Torvalds.

LinuxCon Europe Linus Torvalds 03

By Krd (Own work) [CC BY-SA 3.0 or CC BY-SA 4.0], via Wikimedia Commons

Bill Gates, Steve Jobs, ¡uf! ¿No hay nadie más ahí? ¡Sí! Linus Torvalds.

Invariablemente los medios de comunicación han conseguido implantar en el imaginario social que Bill Gates es un genio científico casi a la altura de Einstein. Su enorme habilidad para los negocios ha conseguido fijar esa percepción. Además, luego de haber consolidado un imperio corporativo es fácil para cualquiera erigirse como un filántropo.

Sino tenemos ahí a Steve Jobs, considerado por poco una especie de Leonardo Da Vinci contemporáneo. De este último no voy a dudar de su talento, pero no fue alguien que se haya destacado precisamente por sus cualidades éticas.

En este caso hablaré de Linus Torvalds, pero no es mi intención idealizarlo. Sino más bien mostrar que existen personas y maneras distintas de hacer software y tecnología.
Dicho de manera simplificada, Linus Torvalds es el creador del núcleo del sistema operativo que hoy conocemos como Linux o GNU/Linux.

Hay vida más allá de Estados Unidos

Linus Torvalds nació en 1969, en Helsinki, capital de Finlandia hijo de padres que por esos años eran activistas de izquierda.

Precisamente ese año se crea ARPANET el antepasado de Internet.

Linus (como lo fue el músico del período romántico Jean Sibelius), pertenece a la minoría de habla sueca de Finlandia, la cual es considerada aun como la alta sociedad, sin embargo la mayoría son granjeros y pescadores.

Vivió su niñez en la casa de su madre y abuelos. Sus ídolos eran Einstein, Newton y Gauss.

El pequeño Torvalds fue notablemente influenciado por su abuelo materno Leo Törnqvist (profesor de estadística y creador del índice de precios que lleva su apellido), quien le compró una Commodore VIC-20 alrededor de 1981 y le inspiró sus primeras experiencias en programación.

Según dicen sus padres demostraba desinterés en cualquier cosa, excepto en computación y matemática.

Los secretos que esconde Finlandia

Un interrogante que me resulta apasionante y más aun cuando uno se pone investigar al respecto es: ¿En qué tipo de contexto se gestó Linux y se desarrolló Linus Torvalds?

A diferencia de las mitologías de sus países vecinos, en los cuales sobresalen los guerreros poderosos, los dioses de los mitos finlandeses se caracterizan por su capacidad para almacenar y adquirir conocimientos. Porque es eso, más que la fuerza, lo que se necesita para afrontar los crudos inviernos de esa nación.

Por esas latitudes prevalece la idea de mejorar lo que ya existe, en lugar de crear cosas nuevas. Y que la supervivencia es más probable cuando se comparte la información.

Apenas un año y medio después de que el teléfono fuera patentado en Estados Unidos, Finlandia (que se encontraba bajo el dominio ruso) ya contaba con su primera línea telefónica. Los finlandeses se convirtieron expertos en comunicaciones. De hecho, en la actualidad Finlandia ocupa el lugar más alto en el NRI (índice que mide el rendimiento del uso de las tecnologías para mejorar la competitividad y el bienestar).

El surgimiento de Linux

Tanto sus amigos de la adolescencia, como sus familiares directos e incluso el mismo dicen que Linus era una persona muy tímida que apenas se animaba a levantar la mano en clase.

No obstante, ya se destacaba como alumno y tenía una mente especialmente preparada para las matemáticas.

Durante un año interrumpe sus estudios universitarios para incorporarse al servicio militar obligatorio. Allí alcanza el rango de subteniente con el rol de oficial de cálculo balístico. En 1990 retoma sus estudios universitarios y se encuentra por primera vez al sistema operativo UNIX por.

Más tardes, disconforme con los sistemas que tenía disponible en aquel momento decide crear el mismo uno nuevo, pero basándose en conceptos y herramientas existentes de los sistemas Minix (del cual no tenía acceso al código fuente) y GNU.

Ari Lemmke fue quien convenció a Linus de subirlo a la red y bautizarlo con el nombre de Linux.

Es así como en el año 1991 publica en una red de comunicación que precedió al correo electrónico de la actualidad, la Usenet. Dicho aviso, tomado aislado parece una carta luterana clavada en las puertas de Wittemberg. No obstante, si bien Linus Torvalds fue la mente central en estos acontecimientos, hubiera sido imposible que lo hiciera el solo. El contexto, los desarrollos de software existentes, la incipiente Internet de esos días, y también la ayuda de la universidad pública de Helsinki resultaron casi imprescindibles para el crecimiento de Linux.

El histórico anuncio

El famoso mensaje de Linus Torvalds fue:

Hola a todos aquellos que usan Minix -


Estoy haciendo un sistema operativo
(gratuito) (solamente un pasatiempo,
no será grande ni profesional como el
GNU) para clones 386(486) AT. Este ha
estado gestándose desde abril, y está
comenzando a estar listo. Me gustaría
recibir cualquier comentario sobre las cosas
que gustan/disgustan en minix, ya que mi SO
(Sistema Operativo) se le parece un poco
(la misma disposición física del sistema
de archivos, debido a motivos prácticos,
entre otras cosas).


Actualmente he portado bash(1.08)
y gcc(1.40), y las cosas parecen
funcionar. Esto implica que conseguiré
algo práctico dentro de unos meses, y
me gustaría saber qué características
quiere la mayoría de la gente. Cualquier
sugerencia es bienvenida, pero no prometeré
que las pondré en práctica :-)


Linus Benedict Torvalds
(torvalds@kruuna.helsinki.fi)


PD. Sí – es libre de cualquier código
de minix, y tiene un sistema de archivos
multi-hilo. NO es portable (usa 386 una
conmutación de tarea etc.), y probablemente
nunca será soportada por nada más que los
discos rígidos AT, porque es todo lo que
tengo :-(.

Al poco tiempo, decenas, cientos y finalmente millones de personas alrededor del mundo comenzaron a colaborar con el sistema. Por si no quedó claro aun, Internet fue fundamental para el crecimiento geométrico de Linux.

En marzo de 1992 Owen Le Blanc crea la primera versión de Linux instalable en el Manchester Computing Centre. Pocos meses después, aparece la primer distribución que podríamos llamar completa de Linux llamada SLS.
En esa edad temprana de Linux recibe apoyo de la empresa (ya extinta y adquirida por Compaq) DEC.

En abril de 1995 Linux consigue su primer conferencia comercial, Linux Expo, creada por Donnie Barnes en la Universidad Estatal de Carolina del Norte.

En 1997 escribe su tesis para la Maestría en Ciencias llamada “Linux: Un Sistema Operativo Portable”.

El factor disruptivo

En 1996 Torvalds había viajado a Estados Unidos invitado por la misteriosa compañía Transmeta. Trabajaría en esa empresa hasta el año 2003, sin descuidar la coordinación del proyecto Linux.

En 1997, un año después de la versión 2.0 del kernel Linux, el sistema operativo contaba ya con 3 millones de computadoras usándolo.

Luego Linus trabajaría en Open Source Development Labs y posteriormente en Linux Foundation (la fusión de OSDL y Free Standard Group) hasta la actualidad.

De acuerdo a la historia oficial, el soporte corporativo de los gigantes comenzó en 1998. Por ejemplo en 1999 Red Hat le dio a Torvalds alrededor de un millón de dólares en acciones. Fue el mismo año que Linux comenzó a venderse preinstalado en notebooks además de haberse instalado ya por aquel tiempo en 7 millones de computadoras alrededor del mundo.

En el año 2000 sucede un evento que podría haber cambiado la historia: Steve Jobs le ofrece a Linus ir a trabajar a Apple, pero con la condición de abandonar el desarrollo de Linux. Linus Benedict Torvalds declina dicha invitación.

Reconocimientos

A lo largo de su carrera Linus Torvalds recibió muchos reconocimientos, algunos de ellos son:

  • Mejores Managers Bloomberg Businessweek 01/2005

  • Ubicado en la lista de l00 inventores más influyentes de todos los tiempos de acuerdo a la Encyclopædia Britannica.

  • En 2012 ganó el Millennium Technology Prize y un cheque por 600000 euros de parte de la Academia de Tecnología de Finlandia.

¿Por qué es distinto Linus Torvalds? O bien: ¿Por qué tiene produce mucho menos ruido mediático?

Su liderazgo se caracteriza por exhibir una mezcla de arrogancia con capacidad para reconocer que está equivocado si es necesario. Desde luego, y como el lo ha repetido hasta el cansancio, el no es una especie de Gandhi. El mismo dice que su naturaleza es egoísta, que no ha creado Linux para mejorar el mundo.

Salvando las enormes diferencias, creo que en eso también tiene que ver con esa elocuencia que ha ganado, no exenta de ironía y sarcasmo. Eso que ha ido construyendo también sobre esa timidez de la infancia para resguardarse y poder ser el Benevolent Dictator for Life de una de las comunidades de software libre más exitosas y con ya más de 23 años funcionando.

Si Linus Torvalds recibió no pocos premios, cabe preguntarse ¿por qué de todas maneras es menos conocido que Bill Gates y Steve Jobs?

Hay razones un poco obvias que en este caso prefiero omitir, sino más bien ir a las más sutiles tal vez.

Bien, creo que LT es menos conocido porque su personalidad, su trayectoria significa pisar el castillo de arena de la fábula lejana a la realidad de los emprendedores, los visionarios y las maneras tradicionales de llevar adelante proyectos.

La historia de Linux, si bien podría decirse tuvo hitos disruptivos (su arribo a Estados Unidos), su crecimiento tiene más que ver con desarrollo en general gradual.

Su madre afirma que era introvertido, reacio a hablar en público. Con poca motivación propia. De alguna manera su propia (co)creación lo transformó para siempre. O es que algo estaba latente allí. Y lo que tenía escondido se fue descubriendo y retroalimentando con su proyecto.

Linus mismo asegura que no se trata de tener la gran idea que intente cambiar el mundo, sino más bien, una que tenga raíces fuertes. Y luego, mejoras incrementales una encima de la otra. De hecho tiene que ver con la cita que el ama tanto: “Si he sido capaz de ver más lejos fue solamente porque me paré sobre los hombros de los gigantes”.

Además, Torvalds lleva una vida en cierto sentido tal vez poco rimbombante para los escándalos que le agradan a la prensa, se casó en 1993 antes de viajar a Estados Unidos, tiene 3 hijos, si bien es millonario, su fortuna no llega a los niveles de obscenidad de otros pseudo-inventores que hacen tanto ruido con su beneficencia.

La madre de Linus, Anna, cuenta que la gran virtud de su hijo es su curiosidad sincera y un deseo de conquistar las dificultades que se le presentan. Por otro lado tuvo una educación formal en la que se destacó, es decir ni siquiera fue aquel alumno desaliñado en el que imaginamos un Einstein.

De hecho el mismo no se cree un visionario, repite una y otra vez que no creó Linux con la idea de lograr que se convirtiera en el núcleo del sistema operativo libre más popular y usado. No había cronogramas, gantts, gestión de riesgos. Sí hubo esa mezcla de pasión científica y artística, un contexto familiar y socio-económico favorable, una acumulación de pequeños progresos, ladrillo sobre ladrillo. Y claro está el aporte de millones de usuarios de todo el mundo.

Una de las grandes diferencias de Linus Torvalds con otras personas idolatradas del mundo de la tecnología como Steve Jobs o Bill Gates, es que el nunca quiso fundar una empresa. El es de alguna manera un científico apoyado por mecenas, (se supone que recibe unos 10 millones de dólares al año. Es decir, desde luego, alejado de la bohemia e inmerso en pleno mundo capitalista.)

No puedo evitar añadirle un tinte localista, argentino a este artículo. Hay elementos que muchos inventores de la pólvora autóctonos han despreciado en la década de los ‘90 tales como la educación pública o el esfuerzo personal combinado con el colectivo.

Escribir esto me ha llevado a simplificar bastantes cosas, a sacar datos tal vez útiles, e incurrir en omisiones, pero la investigación me llevado a descubrir aspectos fascinantes sobre la tierra natal de Linus Torvalds. Por ejemplo, descubrir que existe el tango como una de sus estilos de música característicos. En la ciudad de Seinäjoki se lleva a cabo todos los años un festival de tango que se considera el segundo en importancia luego del de Buenos Aires.

Tampoco soy ingenuo (por que no lo he omitido, de hecho) que Linus Torvalds es un aporte que viene del hemisferio norte y sin caer en un anticolonialismo barato, eso indudablemente tiene un impacto. No sabemos que hubiera pasado si el nunca hubiera viajado a Estados Unidos. Pero aun así representa otra historia para ser contada por los medios y en las instituciones educativas.

Linux mostrando el escritorio con Compiz

Apéndice

El código fuente es *la receta* del programa.

El software libre

El software no se vende, sino que se licencia

La Free Software Foundation considera que un programa es libre si una persona tiene estas 4 libertades:

  • La libertad de ejecutar el programa como se desea, con cualquier propósito (libertad 0).
  • La libertad de estudiar cómo funciona el programa, y cambiarlo para que haga lo que usted quiera (libertad 1). El acceso al código fuente es una condición necesaria para ello.
  • La libertad de redistribuir copias para ayudar a su prójimo (libertad 2).
  • La libertad de distribuir copias de sus versiones modificadas a terceros (libertad 3). Esto le permite ofrecer a toda la comunidad la oportunidad de beneficiarse de las modificaciones. El acceso al código fuente es una condición necesaria para ello.
Linux es software libre

Fuentes de consulta

El génesis del hombre

  1. En el principio el hombre vio cuan bueno es Dios y todo lo que él había hecho por él. Y dijo el hombre: “Hagamos algo que nos haga merecedores del amor de Dios”. Que solamente puedan llegar a Dios, los valientes y entendidos. Y creó el hombre un sistema religioso. Y el hombre se sintió digno.
  2. Al segundo día el Hombre dijo: “Hagamos una estructura firme sobre la cual basar nuestra vida”. Y el hombre convirtió la palabra de Dios en algo estático y taxativo. Y el hombre se sintió seguro.
  3. Al tercer día dijo el hombre: “Con lo que hicimos, vemos que la vida ahora es muy compleja. Creemos una realidad paralela que nos refugie” y creó el hombre las instituciones religiosas. Y vio el hombre que podía evadirse de la realidad. Y que ahora había un adentro y un afuera. Un nosotros y un ellos.
  4. Llegó el cuarto día y el hombre dijo: “Depositemos el poder en personas más valerosas y sabias que nosotros: Y vio el hombre que podía delegar su capacidad de pensar y decidir en aquellas personas, y que de ellas dependía su felicidad y su desventura.
  5. Y llegó el quinto día y dijo el hombre: “Reemplacemos el amor, la compasión y el humor, y pongamos en su lugar el culto al trabajo, la disciplina y el orden”. Y encontró el hombre una manera de justificar la opresión y la injusticia.
  6. Y al sexto día el hombre dijo: “Solamente podemos ser felices si intermedia el Dinero entre nosotros y Dios, y entre cada ser humano”. Y puso el hombre a cada cosa y cada ser su precio. Y también a Dios. Y vio al final de ese día el hombre que era mucha la violencia en la tierra. Y era grande su angustia y su vacío. Pero aun así, se sentía fuerte.
  7. Al séptimo día vio Dios que el hombre estaba sumido en la miseria y en la tristeza, y lo llamó, con amor de Padre y con amor de Madre, y con amistad de amigo verdadero. Y descansó el hombre junto a Dios de todas sus obras.

DSC02206

¿Proceso ininterrumpible?

Todo aquel que tenga un conocimiento decente de Linux sabrá que un proceso cuando está en estado “D” significa que está “durmiendo ininterrumpidamente”.

Bueno, les comento que no es tan así, sino me creen miren:

[root@mpinode02 Distros]# time find / -mmin +10 > /dev/null & [1] 15592

[root@mpinode02 Distros]# ps -C find -ostat,comm,wchan STAT COMMAND WCHAN D find sleep_on_buffer

[root@mpinode02 Distros]# kill 15592

[root@mpinode02 Distros]# ps -C find -ostat,comm,wchan STAT COMMAND WCHAN D find sleep_on_buffer [1]+ Terminado time find / -mmin +10 > /dev/null

Como ven un proceso en estado “D” sí se puede matar. Evidentemente hay algo más detrás, seguramente volveremos a tocar este tema.