GNU/Linux >> Znalost Linux >  >> Linux

Náhodná vidlicová bomba:Jak se pokazí *nixový skript

Jedna z prvních pracovních pozic v oboru, kterou jsem měl, byla u malého regionálního ISP. V té době byly 56k modemy nablýskané a nové. Měli jsme několik desítek PoP (bodů přítomnosti), kde jsme nainstalovali banky modemů a přiváděli data zpět do naší hlavní kanceláře prostřednictvím řady plných a zlomkových linek T1.

Poskytovali jsme typické množství služeb – e-mail, zprávy ze sítě a obecný přístup k internetu. K poskytování těchto služeb jsme samozřejmě potřebovali vlastní servery. Řešením bylo vytvořit cluster systémů SCO Unix. Ano, *to* SCO. Už je to docela dlouho, ale na takové nastavení clusteru je těžké zapomenout. Servery byly nastaveny tak, aby na sobě byly závislé. Pokud jeden selhal, nezpůsobilo to, že by se všechno zhroutilo, ale obnovení toho jednoho serveru obecně vyžadovalo restartování všeho.

Obecné nastavení bylo, že NFS serverů se při spuštění navzájem připojovaly. To samozřejmě způsobí konflikt při spouštění. Inženýři napsali podrobný dokument, který vysvětloval kroky potřebné k uvedení celého clusteru do provozu po selhání. Celý proces obvykle trval 30–45 minut.

V té době jsem byl podřadným členem technické podpory a většinu času jsem trávil držením nových zákazníků během procesu instalace softwaru potřebného k připojení k internetu. Ve světě Unixu a vysokorychlostních sítí jsem byl relativně nový a vysával jsem tolik znalostí, kolik jsem mohl.

[ Také by se vám mohlo líbit: Nejdůležitější informace o linuxovém terminálu:Překračování cowsay ]

Jeden z lidí, se kterými jsem pracoval, Brett, mě hodně naučil. Napsal systém monitorování sítě, který jsme používali, a rozdělil svůj čas mezi to a udržování sítě v provozu. Občas byl také trochu vtipálek.

Na konci jednoho docela typického dne jsem se náhodou ocitl v unixovém clusteru. Z ničeho nic se mi nezdařilo připojení a byl jsem nabootován zpět do místního operačního systému. Bylo to trochu divné, ale občas se to stalo, takže jsem se jednoduše přihlásil. Během několika sekund jsem byl znovu spuštěn.

Začal jsem trochu ladit a snažil jsem se zjistit, co se děje. Nepamatuji si všechno, co jsem dělal, ale pamatuji si, že jsem dal dohromady nějaké rychlé skripty, abych se přihlásil, zkontroloval různé procesy a pokusil se zjistit, co se děje. V určitém okamžiku jsem zjistil, že mě ze systému zavádí jiný uživatel – Brett.

Jakmile jsem zjistil, co se děje, musel jsem se bránit. Začal jsem si tedy hrát se skriptováním shellu a snažil jsem se přijít na to, jak identifikovat PID jeho shellu, abych ho mohl spustit offline. Chvíli to šlo tam a zpět, každý z nás eskaloval útoky. Začali jsme používat další služby, abychom znovu získali přístup, zahájili útoky atd.

Nakonec jsem spustil to, o čem jsem si myslel, že bude ULTIMÁTNÍ útok. Napsal jsem malý shell skript, který hledal jeho přihlašovací jméno, identifikoval shell a následně zabil jeho přístup. Docela jednoduché, ale přidal jsem ultimátní zvrat. Po spuštění skriptu spustil kopii sebe sama. VÝLOŽNÍK. V žádném případě se teď nemůže vrátit.

A povedlo se! Brett ztratil přístup a během následujících zhruba pěti minut se prostě nemohl uchytit. A samozřejmě jsem měl na pozadí úkolu, abych mohl komunikovat s konzolí a ověřit, že byl poražen. Měl jsem vyhráno. Dokázal jsem, že dokážu porazit zkušeného inženýra, a sakra, měl jsem z toho dobrý pocit.

Do...

ksh:fork:Zdroj dočasně nedostupný

Začátek konce

Nikdy předtím jsem takovou chybu neviděl. co to bylo? Proč to systém dělal? A proč se to streamovalo po celé mé konzole, takže mi nebylo možné nic dělat?

[ Bezplatný cheat:tipy na pracovní pohovor v IT ] 

Chvíli to trvalo, ale Brett si problému všiml také. Vyšel se podívat, co se stalo. Vysvětlil jsem mu svou brilantní strategii a on si jen povzdechl, usmál se a řekl mi, že se budu muset postarat o restart a znovu synchronizaci serverů. A pak si našel čas, aby mi vysvětlil, co jsem udělal špatně. To byl den, kdy jsem se dozvěděl o „exec“ a o tom, jak je důležitý.

Bohužel, Brett zemřel asi deset let poté. Byl to skvělý přítel, skvělý mentor a chybí mi.


Linux
  1. Jak získat externí IP adresu ve skriptu Shell?

  2. Jak získat vlastní IP adresu a uložit ji do proměnné ve skriptu Shell?

  3. Jak číst celý skript Shell před jeho spuštěním?

  1. Jak spustíte skript při přihlášení v *nix?

  2. Jak zkopírovat výstup terminálu?

  3. Jak získat číslo displeje, které mi přidělil X

  1. Jak zašifrovat nebo vykreslit skript Shell jako nečitelný?

  2. Jak zastavit skript Loop Bash v terminálu?

  3. Jak zjistit, kdy byl naposledy použit e-mail?