GNU/Linux >> Linux Esercitazione >  >> Linux

La bomba accidentale:come uno script *nix va male

Uno dei primi lavori nel settore che ho avuto è stato presso un piccolo ISP regionale. All'epoca, i modem 56k erano nuovi e brillanti. Avevamo un paio di dozzine di PoP (punti di presenza) in cui abbiamo installato banche di modem e inviato i dati alla nostra sede principale tramite una serie di linee T1 complete e frazionarie.

Abbiamo fornito la tipica serie di servizi:e-mail, notizie in rete e accesso a Internet in generale. Naturalmente, per fornire questi servizi, avevamo bisogno di server nostri. La soluzione era configurare un cluster di sistemi SCO Unix. Sì, *quello* SCO. È passato un bel po' di tempo, ma una configurazione di cluster come questa è difficile da dimenticare. I server sono stati impostati in modo tale da dipendere l'uno dall'altro. Se uno falliva, non causava l'arresto anomalo di tutto, ma il backup di un server in genere richiedeva il riavvio di tutto.

La configurazione generale prevedeva che l'NFS dei server si montasse a vicenda all'avvio. Questo, ovviamente, provoca una race condition durante l'avvio. Gli ingegneri avevano scritto un documento dettagliato che spiegava i passaggi necessari per ripristinare l'intero cluster dopo un guasto. L'intero processo richiedeva solitamente 30-45 minuti.

A quel tempo, ero un umile membro del supporto tecnico, trascorrendo la maggior parte del mio tempo a tenere per mano nuovi clienti attraverso il processo di installazione del software necessario per collegarmi online. Ero relativamente nuovo nel mondo di Unix e delle reti ad alta velocità e assorbivo quanta più conoscenza possibile.

[ Potrebbe piacerti anche: Elementi salienti del terminale Linux:andare oltre il cowsay ]

Una delle persone con cui ho lavorato, Brett, mi ha insegnato molto. Ha scritto il sistema di monitoraggio della rete che abbiamo utilizzato e ha diviso il suo tempo tra quello e mantenere la rete attiva e funzionante. A volte era anche un po' un burlone.

Alla fine di una giornata piuttosto tipica, mi trovavo sul cluster Unix. All'improvviso, la mia connessione non è riuscita e sono stato riavviato al mio sistema operativo locale. Questo è stato un po' strano, ma è successo di tanto in tanto, quindi ho semplicemente effettuato nuovamente l'accesso. Nel giro di pochi secondi, sono stato riavviato.

Ho iniziato a fare un po' di debug, cercando di capire cosa stesse succedendo. Non ricordo tutto quello che ho fatto, ma ricordo di aver messo insieme alcuni script rapidi per accedere, controllare vari processi e cercare di capire cosa stava succedendo. Ad un certo punto, ho scoperto che stavo per essere disconnesso dal sistema da un altro utente, Brett.

Una volta capito cosa stava succedendo, ho dovuto reagire. Quindi ho iniziato a giocare con gli script di shell, cercando di capire come identificare il PID della sua shell in modo da poterlo avviare offline. Questo è andato avanti e indietro per un po', ognuno di noi ha intensificato gli attacchi. Abbiamo iniziato a utilizzare altri servizi per riottenere l'accesso, lanciare attacchi, ecc.

Alla fine, ho lanciato quello che pensavo sarebbe stato l'attacco ULTIMATE. Ho scritto un piccolo script di shell che ha cercato il suo login, ha identificato la shell e successivamente ha ucciso il suo accesso. Abbastanza semplice, ma ho aggiunto la svolta definitiva. Dopo che lo script è stato eseguito, ha eseguito una copia di se stesso. BOOM. In nessun modo può tornare indietro ora.

E ha funzionato! Brett ha perso l'accesso e semplicemente non è riuscito a prendere piede nei successivi cinque minuti o giù di lì. E, naturalmente, avevo impostato il compito in background in modo da poter interagire con la console e verificare che fosse stato picchiato. avevo vinto. Avevo dimostrato di poter battere l'ingegnere esperto e, accidenti, mi sentivo bene.

Fino a...

ksh:fork:risorsa temporaneamente non disponibile

L'inizio della fine

Non avevo mai visto un errore del genere prima. Cos'era questo? Perché il sistema stava facendo questo? E perché lo streaming su tutta la mia console mi rendeva impossibile fare qualsiasi cosa?

[ Cheat sheet gratuito:suggerimenti per colloqui di lavoro IT ] 

Ci sono voluti alcuni istanti, ma anche Brett ha notato il problema. È uscito per vedere cosa era successo. Ho spiegato la mia brillante strategia e lui ha semplicemente sospirato, sorriso e mi ha detto che avrei dovuto occuparmi del riavvio e della risincronizzazione dei server. E poi si è preso il tempo di spiegarmi cosa avevo fatto di sbagliato. Quello è stato il giorno in cui ho appreso di "exec" e di quanto sia importante.

Sfortunatamente, Brett è morto circa un decennio dopo. Era un grande amico, un grande mentore e mi manca.


Linux
  1. Le carriere di Sysadmin:la correlazione tra tutor e successo

  2. Come ottenere l'indirizzo IP esterno in uno script di shell?

  3. Come crittografare o rendere illeggibile lo script della shell?

  4. Come sapere l'ultima volta che è stata utilizzata un'e-mail?

  5. Crontab Log:come registrare l'output di My Cron Script

Come gioco a Tetris sul mainframe

Come è cresciuto il desktop Linux

Come riprodurre le sessioni del terminale registrate con il comando di script Linux

Come rendere il desktop Plasma simile a Unity

Come copiare l'output del terminale?

Come ottenere il numero del display che mi è stato assegnato da X