UN*X

A Unix operációs rendszert két kutató írta egy kis sufniba bezárkózva az egyik híres kutatóintézet ("A Labor") padlásán, valamikor a hatvanas évek végén. A tervezők kezét nem kötötték meg holmi igazgatók, így történt, hogy ezúttal teljesen saját ízlésük szerinti rendszert készíthettek. Ennek az az oka, hogy a laborban mindenki, beleértve a vezetést is, azt hitte róluk, hogy ők a portások, és a padlást takarítják, vagy valami hasonlóval foglalatoskodnak.

A Unix első verziója egy játékprogram volt, amely a naprendszer bolygói és a föld körül keringő műholdak pályáját számította ki. Hamarosan olyan dolgokat is beépítettek, mint a fájlrendszer, vagy a felhasználói processzek. Az egész egy PDP-7 számítógépen futott, amit valaki egyszer valamiért felcipelt a padlásra, és aztán megfelejtkezett róla.

Később a tervezők elkövették azt a hibát, hogy a vezetéstől kértek egy nagyobb számítógépet a rendszer továbbfejlesztésére. Ezzel felhívták magukra a figyelmet. A vezetés fogta az operációs rendszert, és - mint olyan dolgot, aminek csak számítógépbuzik, (vagy padláson lakó számítógépbuzik) vehetik hasznát, elküldte Kaliforniába, a Berkeley egyetemre.

Lehetséges, hogy véletlen az egybeesés, de körülbelül ugyanebben az időben jelent meg San Franciscoban egy különös idegbetegség, az "Unirexia Nervosa". A betegség tünetei: a beteg érthetetlen szavakat (grep, awk, runrun, nohup, stb.) használ beszéd közben, bizonyos szavakat eredeti jelentésüktől eltérően alkalmaz (pl. rom, tarol, fast backup), írásban pedig nem használ nagybetűket.

Hamarosan a világ minden nagyobb egyetemén felbukkantak az "Unirexia Nervosa" betegség előrehaladott állapotában lévő betegek, a számítógép laborokban, ahol beesett szemű, ropit rágcsáló fiatalok merednek késő éjszaka a monitorokra, és olyasmiket motyognak, hogy "Csak még ezt az egy hibát találjam meg". Mivel a kórt főleg egyetemistákon figyelték meg, nem keltett országos pánikot. Nemrégiben azonban már közönséges embereket is találtak a betegséggel megfertőzve, olyanokat is, aki egyébként magas pozíciót töltenek be különféle ipari vállalatoknál.

Az "Unirexia Nervosa" terjedési mechanizmusa ismeretlen, feltételezhetően valamilyen köze van a Szakálhoz. A UN*X társadalom tagjai egy új és hatékony kommunikációs módszert találtak ki maguk számára. Tegyük fel, hogy egy Elemér nevű felhasználó, aki a Mezőkovácsháza-i "Lekvárzsibbasztó Gépgyár" vállalatnál dolgozik, elektronikus levelet szeretne küldeni Aladár nevű barátjának a Miskolci Egyetem "Anyagmozgatási és Logisztikai Tanszék"-ére. Bár számítógépeik nincsenek közvetlenül összekötve, az üzenet a közvetítő csatornákon mégis elküldhető. Elemérnek csak ennyit kell beírnia:

mail aladar@anygamozatasi-es-logisztikai-tanszek.university-of-miskolc.miskolc-egyetemvaros.hu

majd ezután begépelnie az üzenet szövegét. A levél megjelenik Aladár terminálján, vagy két nap múlva, vagy annyi idő múlva, ahányszor a telefonközpontok 73-szor oda-vissza kapcsolnak Magyarország nyugati és a keleti határa között, attól függően, hogy melyik tart tovább.

Bár sokan azt gondolják, hogy a "UNI*X" egy rövidítés, a szó a valóságban a következőképpen keletkezett: Amikor az igazgatóság felfedezte a padláson működő furcsa masinát, megállították az első útjukba eső mérnöknek látszó figurát és megkérdezték tőle, hogy mi ez. A sors szeszélye következtében az illető egyáltalán nem mérnök volt, hanem egy eltévedt ausztrál bennszülött, aki már évek óta bolyongott a labor épületében anélkül, hogy bárki felfigyelt volna rá. A tag nem beszélt angolul, és azt gondolta, arra kérik, segítsen odébb vinni a számítógépet. "UN*X (TM)" - válaszolta, ami bennszülött nyelven annyit tesz: "Nem az én dolgom!". Az ezt követő eseményeket jól ismerjük a történelemkönyvekből.

A UN*X operációs rendszer egymást követő verzióit logikus számozással jelölik: 5, 6, 7, 2, 2.9, 3, 4.0, III, 4.1, V, 4.2, V.2, végül 4.3

A C programozási nyelv a B és a BCPL nyelvekből származik. (Bucephalusnak hívták Nagy Sándor lovát, ennek a rövidítése a BCPL). A C nagyon szigorúan strukturált nyelv. A következő strukturált programot például minden C programozó ismeri, egy jól ismert üzenetet jelenít meg a képernyőn (ki lehet próbálni, tényleg működik!):

#define TWENTYNINE 29
int ll, L1, l0, h_1,q,h1,h;
main(){
        for(putchar(putchar((h=7)*10+2)+TWENTYNINE);
                l0?putchar(l0):!h_1;
                putchar (ll),L1==2?ll=' ':0){
        L1++==0?(ll=l0=54<<1):
                ll=='l'&&L1<3?(ll+=1L|
                1L<<1L,l0=0)
        :L1==sizeof L1&&ll==' '
                ?(ll=19+h1):(q-=h1);
                L1==5?ll-=8:q&& &
        h_1;L1==sizeof ll+2?
                (ll+=3):1L;ll==(h<<4)+2
                &&L1!=6?(ll=ll-
        6):(h1=100L);L1!=1L<<3?q--
                :(h_1=ll=h1);
        }
printf("%s\n",0);
}

A programban egyetlen goto utasítás sincs, ez ugyanis rontaná a kód áttekinthetőségét. Figyeljük meg, hogyan tehető a program hordozhatóvá a C preprocesszor és a sizeof operátor átgondolt használatával. Az utolsó sorban található nullpointer-hivatkozás biztosítja, hogy a programunk futás után biztosan leálljon.

A UN*X leggyakrabban használt interaktív parancsértelmezője a bourne shell. (A programot nemrégiben újraírták, azóta Bourne-again shell néven lehet találkozni vele.) A parancsértelmező egységes szintaxist használ, a felhasználó tehát ugyanolyan módon tud kommunikálni az operációs rendszer magjával, mint a segédprogramokkal. A segédprogramok szintén az egységes szintaxis szerint értelmezik a parancssori paramétereket és kapcsolókat. A segédprogramok tipikus példája az ar program, amely mínusz jellel kezdődő egybetűs kapcsolókat vár, a kapcsolók többi argumentum előtt kell állniuk, és több kapcsoló is megadható egyetlen mínusz jel után; vagy a find program, amelynek kapcsolói több betűből állnak, az argumentumok után kell megadni őket, és a kapcsolók nem vonhatók össze egyetlen mínusz jel mögé.

Az interaktív használaton kívül a shellt programozni is lehet. Bár a shell programok lassabbak, mint a C nyelvűek, rövidebbek és könnyebb őket olvasni, illetve hibát keresni bennük. Ha például az a nevű változó értékéhez hozzá szeretnénk adni egyet, azt C-ben a következőképpen tehetjük meg:

a = a + 1;

vagy

a += 1;

esetleg

a++;

Ezzel szemben, a shell programban mindössze ennyit írunk:

a=`expr $a + 1`

Ne feledkezzünk meg róla, hogy a + jel elé és mögé kötelező szóközt tenni, másképp a $ operátor az a+1 nevű változóra vonatkozna az a helyett, valamint arról, hogy balra dőlő egyszeres idézőjelet kell használni a szokásos jobbra dőlő helyett. A UN*X programozók gyakran használnak shell programokat, amikor gyorsan meg kell írniuk valamit, annak kényelmes és egyszerű szintaxisa miatt.

Az adatbiztonság nagyon fontos kérdés a UN*X operációs rendszerek világában. Egy átlagos UN*X rendszer gyártó a világ minden kincséért sem adná ki a kezéből az operációs rendszer forráskódját, keveset tudva arról, hogy minden nagyobb városban találni olyan buherátorokat, akik akár ölni is képesek lennének a kernel forráskódjáért. Lehetséges, hogy ezek az emberek pechesek, de semmiképpen sem buták. Miközben ezeket a sorokat olvasod, valaki éppen 1200 baudos sebességű uucp parancsokat próbál fütyülni a modemednek egy belvárosi telefonfülkéből, hogy a huszonötmillió lehetséges füttyjelből eltalálja azt az egyet, amelyikkel behatolhat a számítógépedbe.

Egy becsületes rendszergazda ezért szemmel tartja a UN*X operációs rendszereken ellen elkövetett betörési kísérleteket. A legegyszerűbb, legelegánsabb és legismertebb betörési módszer a következő: A behatoló egyszerűen a rendszer konzol közelében lófrál, kilesi azt a pillanatot, amikor a rendszergazda kimegy pisilni, vagy kávét főzni. Ekkor odaszalad a konzolhoz, és mielőtt bárki le tudná fogni, villámgyorsan begépeli az

 rm -rf / 

parancsot. Az amatőröket onnan lehet megismerni, hogy az ls vagy a pwd parancsot gépelik be ehelyett. Egy tapasztalt UN*X adatvédelmi szakértő kineveti ezeket a kísérleteket. Gyakorta a "Trójai faló" stratégiát használják a UN*X rendszerek feltöréséhez. Ez általában a következőképpen zajlik: a UN*X rendszeradminisztrátor kora délután megérkezik a munkahelyére és felfedez egy új X terminált a nyilvános laborban. Mivel ez sokkal jobb, mint a rendszer konzol, magával viszi a gépterembe. Pár perc használat után a berendezés által termelt hő hatására csótányok hada tör elő az X terminál hátuljából, elárasztva a géptermet. A rendszergazda kiszalad a gépteremből, hogy csótányirtót kérjen a takarítónőtől, miközben a betörő behatol a gépterembe.

Hogyan lehet az ilyesfajta cselekményeket megelőzni? A UN*X rendszerek legnagyobb gyengéje, hogy a rendszergazdának (root) mindenhez van joga. A legegyszerűbb módszer ezért az, ha csökkentjük a root accunt használatát. Egy ügyes módszer erre az, ha megengedjük a rendszernek, hogy maga válasszon egy véletlenszerű karaktersorozatot root jelszóként (ezt sok UN*X rendszer lehetővé teszi). Fontos, hogy ne nézzünk a képernyőre, amikor a gép a jelszót kiírja, és semmi esetre se jegyezzük meg, pláne ne írjuk le a jelszót! Ha most level 2 futási szintet állítunk be a /etc/inittab fájlban, akkor minden egyes újraindítás után a számítógép ezt az (ismeretlen) jelszót fogja bekérni. A rendszer most már biztonságos. Jelentkezzünk ki.

Mi tehet a rendszergazda, ha az a gyanúja támad, hogy valaki betört a root accountra? A megoldás egyszerű. Mihelyt akár a legkisebb gyanú is felmerül, hogy valaki illetéktelenül behatolt a rendszerbe, azonnal pecsételjük le a gépterem ajtaját, kapcsoljuk be a tűzjelzőt, eresszünk semleges halon gázt a légtérbe, és indítsuk el az automatikus tűzoltó berendezést. Ezután gépeljük be a shutdown 0 parancsot, majd vágjuk el a hálózati zsinórokat. Kalapáccsal törjünk össze minden olyan mágnesszalagot, amelyet valaha is használtunk, vagy bármilyen más módon kapcsolatba hozható a megtámadott rendszerrel. Rendeljünk egy új példányt az operációs rendszerből, és indítsuk újra a számítógépet. Az a rendszergazda, aki betartja ezeket a szabályokat, éppen eléggé paranoiás ahhoz, hogy a rendszerét biztonságban tartsa.

Van egy olyan nézet, miszerint ha Istennek szakálla lenne, biztosan UN*X programozó lenne. Ez ugyan némileg túlzás, de az igaz, hogy a UN*X hamarosan kiszorítja a piacról a 3-5 éves elavult operációs rendszereket, és megállíthatatlanul halad a világuralom felé.


Eredeti: Alan Filipski (http://www.cs.bgu.ac.il/~omri/humor/unix-history.htm)
Magyar fordítás: Mörk Péter, 1996