El forkbomb accidental: cómo un script * nix sale mal

Uno de los primeros trabajos que tuve en la industria fue con un pequeño ISP regional. En aquel entonces, los módems de 56k eran brillantes y nuevos. Tuvimos algunas docenas de PoP (puntos de presencia) donde establecimos bancos de módems y envió los datos a nuestra oficina principal a través de una serie de fraccionario T1 líneas.

Brindamos una gran cantidad de servicios típicos: correo electrónico, noticias de Internet y acceso general a Internet. Por supuesto, para proporcionar estos servicios necesitábamos nuestros propios servidores. La solución fue establecer un grupo de OCS Unix sistemas Sí, *este* OCS. Ha pasado mucho tiempo, pero una configuración de clúster como esta es difícil de olvidar. Los servidores se configuraron para depender unos de otros. Si alguno de ellos fallaba, no colapsaba todo, pero hacer una copia de seguridad de ese servidor generalmente requería reiniciar todo.

La configuración general era que los NFS de los servidores se montaban uno sobre otro al inicio. Esto, por supuesto, provoca una condición de carrera en el arranque. Los ingenieros habían escrito un documento detallado que explicaba los pasos necesarios para que todo el clúster funcione después de una falla. Todo el proceso solía durar entre 30 y 45 minutos.

En ese momento, yo era un miembro modesto del soporte técnico y dedicaba la mayor parte de mi tiempo a ayudar a los nuevos clientes a través del proceso de instalación del software necesario para conectarse. Era relativamente nuevo en el mundo de Unix y las redes de banda ancha y absorbí la mayor cantidad de conocimiento posible.

Una de las personas con las que trabajé, Brett, me enseñó mucho. Anotó el sistema de monitoreo de red que usamos y dividió su tiempo entre eso y mantener la red en funcionamiento. También era un bromista a veces.

Al final de un día bastante típico, estaba en el clúster de Unix. De repente, mi conexión falló y se reinició en mi sistema operativo local. Fue un poco extraño, pero sucedía de vez en cuando, así que me volví a conectar. En cuestión de segundos se reinicia.

Empecé a hacer un poco de depuración, tratando de averiguar qué estaba pasando. No puedo recordar todo lo que hice, pero sí recuerdo crear algunos scripts rápidos para iniciar sesión, verificar varios procesos e intentar averiguar qué estaba pasando. En un momento, determiné que otro usuario, Brett, me estaba sacando del sistema.

Una vez que me di cuenta de lo que estaba pasando, tuve que luchar. Así que comencé a jugar con scripts de shell, tratando de descubrir cómo identificar el PID de su shell para poder iniciarlo sin conexión. Fue de ida y vuelta por un tiempo, cada uno de nosotros intensificando los ataques. Empezamos a usar otros servicios para recuperar el acceso, lanzar ataques, etc.

Finalmente, lancé lo que pensé que era el ataque DEFINITIVO. Escribí un pequeño script de shell que buscaría su id, identificaría el shell y luego eliminaría su acceso. Bastante simple, pero agregué el toque final. Después de ejecutar el script, ejecutó una copia de sí mismo. AUGE. No hay forma de que pueda superarlo ahora.

Y funcionó ! Brett perdió su acceso y simplemente no pudo establecer un punto de apoyo durante los siguientes cinco minutos. Y, por supuesto, había programado la tarea para poder interactuar con la consola y verificar que había sido golpeada. Habia ganado. Había demostrado que podía vencer al ingeniero superior y, maldita sea, me sentía bien.

Hasta...

ksh: bifurcación: recurso temporalmente no disponible

El principio del fin

Nunca antes había visto un error así. ¿Que era? ¿Por qué el sistema estaba haciendo esto? ¿Y por qué se reproducía en toda mi consola y me impedía hacer algo?

Le tomó unos momentos, pero Brett también notó el problema. Salió a ver qué había pasado. Le expliqué mi brillante estrategia y él solo suspiró, sonrió y me dijo que tenía que encargarme de reiniciar y resincronizar los servidores. Y luego se tomó el tiempo de explicarme lo que había hecho mal. Este es el día que aprendí"el Ejecutivo"y lo importante que es.

Lamentablemente, Brett falleció aproximadamente una década después. Fue un gran amigo, un gran mentor, y lo extraño.

Artículos de interés

Subir