<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>rendszergazda on Minden jobb, de</title>
    <link>https://mindenjobb.de/c%C3%ADmk%C3%A9k/rendszergazda/</link>
    <description>Recent content in rendszergazda on Minden jobb, de</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>hu</language>
    <lastBuildDate>Sun, 11 Apr 2021 13:19:05 +0200</lastBuildDate><atom:link href="https://mindenjobb.de/c%C3%ADmk%C3%A9k/rendszergazda/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Klasszikus rendszermentés unix sztori</title>
      <link>https://mindenjobb.de/blog/2021/04/klasszikus-rendszerment%C3%A9s-unix-sztori/</link>
      <pubDate>Sun, 11 Apr 2021 13:19:05 +0200</pubDate>
      
      <guid>https://mindenjobb.de/blog/2021/04/klasszikus-rendszerment%C3%A9s-unix-sztori/</guid>
      <description>&lt;p&gt;Ez egy klasszikus történet Mario Wolczkotól, a Useneten először 1986-ban jelent meg, angolul elérhető &lt;a href=&#34;https://www.ee.ryerson.ca/~elf/hack/recovery.html&#34;&gt;pl. itt&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Előfordult már, hogy otthagytad lezáratlanul, bejelentkezve a terminálod, és arra tértél vissza, hogy egy &lt;em&gt;barátod&lt;/em&gt; begépelte az &lt;code&gt;rm -rf ~/&lt;/code&gt; parancsot, és ott lebegtette a mutatóujját az &lt;kbd&gt;ENTER&lt;/kbd&gt; felett, fenyegetőzve: „&lt;em&gt;jobb ha kölcsönadsz egy ötezrest fizetésig, vagy…&lt;/em&gt;” Természetesen nem merné megnyomni, hisz miért is okozna ekkora traumát neked, csak viccelődne. Vagyis valószínűleg sosem voltál részese a legrosszabbnak ami történhet…&lt;/p&gt;
&lt;p&gt;Egy csendes szerda délután történt – október elsején, 15:15-kor a brit nyári idő szerint, hogy pontosak legyünk –, hogy Peter, a munkatársam a idehajolt a termináljától, és azt mondta: „&lt;em&gt;Mario, mintha gond lenne a mail-küldéssel.&lt;/em&gt;” Mivel tudtam, hogy a &lt;code&gt;msg&lt;/code&gt; parancs könnyedén összezavarta még a hozzáértőket is, átsétáltam a termináljához hogy megnézzem mi a probléma. Egy furcsa hibaüzenetet láttam (a pontos szövegre nem emkékszem): „&lt;code&gt;a /foo/bar nem elérhető a 147-s felhasználónak&lt;/code&gt;” (&amp;quot;&lt;code&gt;cannot access /foo/bar for userid 147&lt;/code&gt;&amp;quot;). Az első gondolatom az volt: ki az a &lt;code&gt;147&lt;/code&gt;s felhasználó? A küldő? A címzett? Vagy ki? A másik, szintén bejelentkezett terminálhoz léptem, és beírtam:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;grep &lt;span style=&#34;color:#ae81ff&#34;&gt;147&lt;/span&gt; /etc/passwd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;… hogy ezt a választ kapjam:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;/etc/passwd: No such file or directory.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Azonnal arra gyanakodtam, hogy valami valóban nem stimmel, amit az is megerősített, hogy a&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;ls /etc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;… kiadása után ezt a választ kaptam:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;ls: not found.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Azt javasoltam Peternek, hogy jobb, ha most egy darabig semmivel sem próbálkozik, és elmentem megkeresni a menedzserünket.&lt;/p&gt;
&lt;p&gt;Amikor az irodájához értem, az ajtaja nyitva volt, és tíz másodpercen belül rájöttem a probléma okára. Ott ült James, a managerünk, tenyerébe temetve az arcát, összegörnyedve, mint aki már csak a világ végére vár. A frissen kinevezett rendszer programozónk Neil állt mellete, a termináljára bámulva. A kijelző tetején pedig a következő sorok látszottak:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# cd&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# rm -rf * &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;„&lt;em&gt;A francba, ez sok mindent megmagyaráz&lt;/em&gt;”  – gondoltam.&lt;/p&gt;
&lt;p&gt;Már nem emlékszem, mi történt a következő néhány percben pontosan, egy kicsit homályosak a dolgok. Próbáltkoztam az &lt;code&gt;ls&lt;/code&gt;sel (újra), &lt;code&gt;ps&lt;/code&gt;-vel, &lt;code&gt;who&lt;/code&gt;-val, és még néhány más paranccsal, de sikertelenül. A következő amire emlékszem, hogy újra a saját terminálomnál ülök (egy több ablakos grafikus terminálnál), és begépelem:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;cd /
echo * 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Elképesztően hálásak lehetünk David Korn-nak, hogy az &lt;code&gt;echo&lt;/code&gt; beépített parancs a shell-jében, hisz a &lt;code&gt;/bin&lt;/code&gt; a &lt;code&gt;/bin/echo&lt;/code&gt;-val együtt hiányzott a törlés után. A következő néhány percben kiderült, hogy emellett hiányzott a teljes &lt;code&gt;/dev&lt;/code&gt;, &lt;code&gt;/etc&lt;/code&gt; és  &lt;code&gt;/lib&lt;/code&gt; könyvtár is, Neil körülbelül a &lt;code&gt;/news&lt;/code&gt; és a &lt;code&gt;/tmp&lt;/code&gt; törlése közben szakította félbe a törlést, így a &lt;code&gt;/usr&lt;/code&gt; és a &lt;code&gt;/users&lt;/code&gt; könyvtárak érintetlenek voltak.&lt;/p&gt;
&lt;p&gt;Ezalatt James elért a szalagos mentéseinket tároló szekrényhez, és már hozta is a négy héttel korábbi teljes mentést. A kérdés már csak az volt: „&lt;em&gt;Hogyan töltsük vissza a szalag tartalmát?&lt;/em&gt;” Hisz nem csak az &lt;code&gt;/etc/restore&lt;/code&gt; veszett el, de az összes eszköz leíró is a &lt;code&gt;/dev&lt;/code&gt; könyvtárban, ami a szalagos meghajtó kezeléséhez kell. És hol volt a &lt;code&gt;mknod&lt;/code&gt;? Talált, süllyedt, az &lt;code&gt;/etc&lt;/code&gt; alatt. Persze megpróbálhatnánl egy mentés-visszaállítást Ethernet hálózaton át egy másik működő VAX-ról … Azt
leszámítva, hogy hiányzik a &lt;code&gt;/bin/tar&lt;/code&gt;, és persze a Berkley rendszermérnökei az &lt;code&gt;rcp&lt;/code&gt;-t is a &lt;code&gt;/bin&lt;/code&gt;-ben tárolták a 4.3-s verzióban. Természetesen a hálózati elérés sem működne az &lt;code&gt;/etc/hosts&lt;/code&gt; nélkül. Az &lt;code&gt;/usr/local&lt;/code&gt; alatt találtunk egy &lt;code&gt;cpio&lt;/code&gt; verziót, de a szalagos meghajtó nélkül nem sokra mennénk vele.&lt;/p&gt;
&lt;p&gt;Megpróbálhatnánk a &lt;code&gt;boot&lt;/code&gt; mentéssel újraépíteni a teljes &lt;code&gt;root&lt;/code&gt; fájlrendszert, de sem James, sem Neil nem csinált még ilyent, és nem voltunk biztosak benne, hogy ez nem formázná újra a teljes lemezt, és így a még meglévő felhasználói fájlokat is elveszítenénk. (A felhasználók fájljairól csütörtökönként készült biztonsági mentés, Murphy törvénye miatt a katasztrófa természetesen szerdán történt.) Kivehetnénk egy másik VAX merevlemezét, bootolhatnánk arról, és rendet rakhatnánk, de ahhoz ki
kellene hívni a DEC mérnökeit. Jó néhány felhasználónk épp a PhD-jét írja, és egy heti munkájuk elvesztése (nem is beszélve a kiesett gép-időről) elfogadhatatlan lett volna.&lt;/p&gt;
&lt;p&gt;Szóval mit tehetünk? A következő ötlet az volt, hogy írjunk egy programot, ami létrehozza a szalagos-meghajtó eszközleíróját, de mind tudtok, hol található a &lt;code&gt;cc&lt;/code&gt;, &lt;code&gt;as&lt;/code&gt; és &lt;code&gt;ld&lt;/code&gt;. Vagy létrehozhatnánk egy kezdetleges &lt;code&gt;/etc/passwd&lt;/code&gt;-t, &lt;code&gt;/etc/hosts&lt;/code&gt;-t és így tovább, amíg nem működne a &lt;code&gt;/usr/bin/ftp&lt;/code&gt;. Szerencsénkre még mindig futott egy &lt;code&gt;gnuemacs&lt;/code&gt; példány az egyik nyitott ablakomban, amiben létrehozhatjuk a fájlokat, de az első probléma az volt, hogy nem léteztek a könyvtárak amibe le kellene
menteni őket: természetesen az &lt;code&gt;mkdir&lt;/code&gt; is a &lt;code&gt;/bin&lt;/code&gt;-nel együtt tünt el, akárcsak az &lt;code&gt;mv&lt;/code&gt;, szóval mégcsak átnevezni sem tudtuk a &lt;code&gt;/tmp&lt;/code&gt;-t &lt;code&gt;/etc&lt;/code&gt;-re. Mindezek ellenére már közelebb voltunk a megoldáshoz.&lt;/p&gt;
&lt;p&gt;Ekkora már csatlakozott hozzánk Alasdair, a helyi UNIX guru, aki – szerencsénkre – a VAX assemblerhez is értett. A tervünk ez volt: írjunk egy programot assemblerben egy másik VAXon, ami vagy át tudja nevezni a &lt;code&gt;/tmp&lt;/code&gt;-t &lt;code&gt;/etc&lt;/code&gt;-re vagy létrehozza az &lt;code&gt;etc&lt;/code&gt; könyvtárat. A másik VAXon megírt program UUENCODE-lt verzióját begépeljük az &lt;code&gt;emacs&lt;/code&gt;ban, dekódoljuk (szerencsére egy ragyogó elme az &lt;code&gt;uudecode&lt;/code&gt; bináris helyét az &lt;code&gt;/usr/bin&lt;/code&gt;-be tervezte), lefuttatjuk és onnét már csak apróságok vannak
hátra. Szerencsénkre a terminál, ahonnan a katasztrófa útjára indult, még mindig &lt;code&gt;root&lt;/code&gt;ként volt bejelentkezve (hisz a &lt;code&gt;su&lt;/code&gt; is elveszett a &lt;code&gt;/bin&lt;/code&gt;-nel) így volt esélyünk rá, hogy működni fog!&lt;/p&gt;
&lt;p&gt;Körülbelül egy órával később készen állt a pár tucat soros assembler ami létrehozza az &lt;code&gt;/etc&lt;/code&gt;-t! A „lecsupaszított” bináris csak 76 byte volt, így hexadecimálásra konvertáltuk (könnyebben is olvasható mint az uuencode), és begépeltük a szövegszerkesztőmben. Ha valaha szükség lenne rá:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;070100002c000000000000000000000000000000000000000000000000000000
0000dd8fff010000dd8f27000000fb02ef07000000fb01ef070000000000bc8f
8800040000bc012f65746300 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Persze volt kéznél egy ügyes kis programom (kinek ne lenne), hogy az ASCII hexadecimálist binárissá konverteljuk, és szerencsére a &lt;code&gt;/usr/bin/sum&lt;/code&gt; szerint is egyeztek a fájlok. De várjunk csak… hogyan teszel egy fájlt végrehajthatóvá a &lt;code&gt;/bin/chmod&lt;/code&gt; nélkül? Pár perc gondolkodás után arra jutottunk, hogy egyszerűen felül kell írnunk egy futtatható fájlt aminek én vagyok a tulajdonosa – és már mehettünk is a &lt;code&gt;root&lt;/code&gt; terminálhoz. Beállítottuk az &lt;code&gt;umask&lt;/code&gt;-t &lt;code&gt;0&lt;/code&gt;-ra, hogy én is létrehozhassak fájlokat,
és lefuttattuk a programot. Most már volt &lt;code&gt;/etc&lt;/code&gt;-nk, amit bárki írhatott. Már csak néhány lépés, és létrehoztuk a &lt;code&gt;passwd&lt;/code&gt;-t, &lt;code&gt;hosts&lt;/code&gt;-t, &lt;code&gt;services&lt;/code&gt;-t, &lt;code&gt;protocols&lt;/code&gt;-t és más szükséges fájlokat, és működött az &lt;code&gt;ftp&lt;/code&gt;! Visszaállítottuk a &lt;code&gt;/bin&lt;/code&gt; tartalmát a hálózaton keresztül – hihetetlen mennyire tud hiányozni az &lt;code&gt;ls&lt;/code&gt; pár óra után –, és további fájlokat az &lt;code&gt;/etc&lt;/code&gt;-ben. A legfontosabb persze az &lt;code&gt;/etc/rrestore&lt;/code&gt; volt, aminek segítségével újra létrehoztuk a &lt;code&gt;/dev&lt;/code&gt;-t a szalagos mentésről, a többi pedig
már történelem…&lt;/p&gt;
&lt;p&gt;Most persze megkérdezhetitek magatoktól (ahogy én is tettem), hogy mi a tanulság? Nos, először is, mindig jusson eszedbe ez az örök tanács: NE PÁNIKOLJ. Az első ötletünk a gép újraindítása volt, hogy mindent egy-felhasználós üzemmódban próbáljunk meg visszaállítani, de szinte biztos, hogy ez nem működött voltna az &lt;code&gt;/etc/init&lt;/code&gt; és a &lt;code&gt;/bin/sh&lt;/code&gt; nélkül – még szerencse, hogy átgondoltuk.&lt;/p&gt;
&lt;p&gt;A következő, ami mindig jusson eszetekbe: a UNIXos eszközeket szokatlan dolgokra is lehet használni. Még &lt;code&gt;gnuemacs&lt;/code&gt; nélkül is megoldhattuk voltna, mondjuk a &lt;code&gt;/usr/bin/grep&lt;/code&gt;-t használva &lt;code&gt;/bin/cat&lt;/code&gt; helyett.&lt;/p&gt;
&lt;p&gt;És végül, elképesztő, hogy a rendszer milyen nagy része törölhető, anélkül, hogy teljesen szétesne. Azt leszámítva, hogy új felhasználó nem tudott bejelentkezni (hisz hiányzott a &lt;code&gt;/bin/login&lt;/code&gt;), és hogy hiányzott néhány nagyon hasznos parancs, minden más normálisnak tünt. Persze néhány program nem működik &lt;code&gt;/etc/termcap&lt;/code&gt;, &lt;code&gt;/dev/kmem&lt;/code&gt;, vagy &lt;code&gt;/etc/utmp&lt;/code&gt; nélkül, de a legtöbb igen!&lt;/p&gt;
&lt;p&gt;Végül pedig egy kérdés: ha te lettél volna a helyünkben, az okos gondolataiddal, meg tudtad volna oldani egyszerűbben? Bátran küld el a válaszod:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;Mario Wolczko
------------------------------------------------------------------------
Dept. of Computer Science       ARPA:   miw%uk.ac.man.cs.ux@cs.ucl.ac.uk
The University                  USENET: mcvax!ukc!man.cs.ux!miw
Manchester M13 9PL              JANET:  miw@uk.ac.man.cs.ux
U.K.                            061-273 7121 x 5699
------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hacker&amp;rsquo;s Wisdom: Unix Recovery Legend
Last modified: Thu Mar 7 13:47:40 EST 1996&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
