Unixリカバリの伝説

今、私たちを待ち望んでいるのは、2009年、そしてそれ以降です。 しかし、なぜ過去に戻って、当時のハードコアなUnixoidがどのようにねじれ、システムを復元したかを賞賛しませんか?



これは、1986年にUsenetで公開された Mario Wolczko による記事の翻訳です。





端末にログインしたまま、(疑いのある)友人がどのようにrm -rf〜/ *を書いてキーボードの近くに立っているかを確認するために、ログインしたままになったことがありますか?-木曜日まで5を貸すか、Enterキーを押します。



疑いもなく、この人は自分がどんな種類のトラウマを負わせることができるのか理解しておらず、すべてをいい冗談だと思っています。



静かな環境でした。 正確には-10月1日水曜日、午後3時15分、英国の夏時間。 同僚のピーターは、端末から離れて「マリオ、メールの送信に少し問題があります」と言いました。



そのようなメッセージが誰をも混乱させる可能性があることに気付いたので、私は彼の端末に歩いて何が間違っているのかを見ることにしました。



ターミナルに次のような奇妙なエラーメッセージがありました(詳細は覚えていません): ユーザーID 147の/ foo / barにアクセスできません



最初に考えたのは、userid 147を持っているのは誰ですか? メッセージの送信者、受信者、または他の何か? 次に、別の端末に切り替え、すでにログインしている端末にダイヤルしました

  grep 147 / etc / passwd 


ただ答えを得るために

  / etc / passwd:そのようなファイルまたはディレクトリはありません。 


すぐに、何かが足りないことを提案しました。 すべてに対応して確認された

  ls / etc 


わかった

  ls:見つかりません。 


Peterに今は何も触れないことをお勧めします。システム管理者を探しに行きました。



私が彼のオフィスに来たとき、彼のドアは半開きで、10秒以内に私たちの問題が何であるかを認識しました。 私たちのマネージャーであるジェームズは、世界が崩壊したばかりの男のように、両手で両頭を抱えて座っていました。 私たちの新しく任命されたシステムプログラマ、ニールは彼の後ろに立って、彼の画面上の端末で熱心に、無慈悲に見ました。 そして、私は画面の上部で次のようにスパイしました:

  #cd <br/>#rm -rf * 


たわごと、私は思った。 そして、これはすべてを説明します。



次の数分で何が起こったのかさえ覚えていません。 私の記憶がぼやけているようです。 私はls (もう一度)、 pswho、さらにいくつかのコマンドを試したことを覚えているだけです-それはすべて役に立たないです。 私が覚えている次のこと:私は再び自分の端末(マルチウィンドウグラフィック端末)にいる、私は入力

  cd / <br/>エコー* 


シェルにエコーが組み込まれているため、David Kornに感謝する必要があります。 バイナリファイル/ビン/すべての会社のビン/エコーが削除されたと言う必要はありません。 次の数分で解決したのは、 / dev/ etcおよび

/ libは完全に消滅しましたが、幸運なことに、Neilは/ news/ tmpの間にある間にrmを中断しました。 / usrおよび

/ユーザーはそのままです。



その間、ジェームズは私たちのカセットキャビネットに行き、それが4週間前にルートファイルシステムのバックアップであると言ったものを引き出しました。 宙に浮いた質問:-カートリッジの内容をどのように復元できますか?



結局、 / etc / restoreだけでなく、テープドライブコントローラデバイスのすべてのファイルが削除されました。 mknodはどこにありますか? そう、 /など 他のVAXからイーサネット経由でそれらを復元するのはどうですか? もちろん、 / bin / tarはなくなり、バークレーのrcpの人々は慎重に入れました

4.3ディストリビューションの/ bin 。 さらに、ネットワークが機能するためには、少なくとも/ etc / hostsが必要です。 cpioバージョンは/ usr / localにありますが、テープコントローラーがなければ、これは残念ながら役に立たない。



あるいは、ブートテープを引き出してルートファイルシステムを再構築することもできますが、ジェームズもニールもこれを行ったことはなく、これが必要なものかどうかはわかりませんでした-完全に再フォーマットされたディスクとすべてのユーザーファイル(毎週木曜日にユーザーファイルのバックアップを作成します。マーフィーの法律によれば、すべてが水曜日に行われることになっています)。

別の解決策は、別のVAXからディスクを借用し、そこから起動して、それを把握することです。 しかし、その後、私はDECエンジニアを呼び出す必要があります-これは最良の場合です。 多くのユーザーが学位論文を完成させるのに苦労しましたが、おそらく1週間の仕事を失うことは考えられませんでした。



それではどうしますか? 次のアイデアは、テープドライブコントローラーのデバイスハンドルを作成するプログラムを作成することでしたが、 ccasldがどこにあるかは誰もが知っています。 または、 / usr / bin / ftpが機能するように、 / etc / passwd/ etc / hosts などの最小限の外観にすることもできます。 幸いなことに、私はgnuemacsを私のウィンドウの1つで開いたままにしてしまいました-これを使用してpasswdなどを作成できましたが、最初のステップはディレクトリを作成してそこに置くことです。 もちろん、 / bin / mkdirは削除されました。同じことが/ bin / mvでも発生したため、 / tmpの名前を/ etcに変更できませんでした ただし、これは明らかに正しい攻撃ラインでした。



その時までに、私たちの地元のUNIXの第一人者であるAlasdairが、知識豊富なVAXアセンブラーであることが判明しました。 そのため、計画は次のようになりました。

  1. / tmpの名前を/ etcに変更したり、 / etcを作成したりできるプログラムをアセンブラで記述します。
  2. 別のVAXでアセンブルし、 uuencodeを実行します。
  3. GNUを使用してuuエンコードファイルに書き込み、 uudecodeを作成します (一部の賢い人はuudecode/ usr / binに入れると推測しました)。


プログラムを実行するために残ります。 もう一つの奇跡:ダメージを与えるために使用された端末はsuの後もスーパーユーザーでした( suがin / binであることを覚えておいてください)ので、少なくとも動作する可能性があります。



そして今、私たちはすでに成功への魅力的な道を歩んでいます。 1時間を費やした後、アセンブラーで約12行を作成して/を作成しました 切り取られたバイナリの長さはわずか76バイトであることが判明したため、HEXに変換し( uuencode出力よりも少し読みやすい)、エディターを使用して記録しました。 このような問題が発生したことがある場合、将来の16進数を次に示します。
  <br/>
 070100002c000000000000000000000000 <br/>
 0000000000000000000000000000000000 <br/>
 dd8fff010000dd8f27000000fb02ef0700 <br/>
 0000fb01ef070000000000bc8f88000400 <br/>
 00bc012f65746300 




私は即興のプログラムを持っていました(そして、何が、それを持っていなかったのですか?)ASCII HEXをバイナリに変換するために、 / usr / bin / sumの出力が元のバイナリファイルと一致しました。 しかし、ちょっと待ってください- / bin / chmodなしで実行権をどのように設定しますか? 数秒で、形成された思考(通常、数分間の思考を完了する)が問題の解決策をもたらしました。私が所有者である既存のファイルの上にバイナリファイルを書き込む必要があります。 いいですね



スーパーユーザー権限で端末に戻り、umaskを0に設定することを念頭に置いて(GNUを使用して内部にファイルを作成できるように)、バイナリファイルを起動しました。 今では/ etcがあり 、全員に書き込みアクセスが許可されています。 これで、いくつかの手順が残りました。passwdhostsservicesprotocolsなどを作成する必要があり、その後、 ftpを使用する準備が整いました。 次に、ネットワーク経由で/ binの内容を復元し(それなしでほんの数時間後にlsを見逃すなんて信じられないほど信じられません)、 /などからファイルを取得しました キーファイルは/ etc / rrestoreで、バックアップテープから/ devを復元しました。 これでおとぎ話は終わります。



そして今、私たちは自分自身にこの物語の教訓は何かという質問をします。 まあ、初心者にとっては、永遠の言葉をよく覚えておく価値があります。 パニックに陥らないでください 。 結局のところ、最初はコンピューターを再起動し、すべてをシングルユーザーとして試してみたかったのですが、残念ながら、システムはブート時に/ etc / initおよび/ bin / shを見つけられませんでした。 健全な思考はそのような行動から私たちを救った。



次に覚えておかなければならないのは、UNIXユーティリティを真に典型的でない目的に使用できることです。 私のgnuemacsがなくても、たとえば/ usr / bin / grep/ bin / catの代わりに使用しても生き残ることができます。



そして最後のこと。 システムの巨大な部分を完全に破壊することなくどれだけ削除できるかは信じられません。 誰もログインできない( / bin / login ?)という事実にもかかわらず、そして必要なコマンドはほとんどすべてなくなってしまいましたが、他のすべては問題なく見えました。 当然、 / etc / termcap/ dev / kmem、または/ etc / utmpなしでは生き残れないものもありますが、最終的にはすべてが平和と調和で機能します。



私は質問を残します:一度同じ状況になって、考える能力があれば、今得られた経験を考えると、この問題はより簡単に解決できますか?




All Articles