GNU/Linux >> Linux の 問題 >  >> Linux

偶発的なフォークボム:*nixスクリプトがどのように悪くなるか

私が最初に経験した業界の仕事の1つは、小さな地域のISPでした。当時、56kモデムは光沢があり新しいものでした。数十のPoP(Point of Presence)があり、モデムのバンクをインストールし、一連の完全なT1回線と部分的なT1回線を介してデータを本社にフィードバックしました。

メール、ネットニュース、一般的なインターネットアクセスなど、多くの典型的なサービスを提供しました。もちろん、これらのサービスを提供するには、独自のサーバーが必要でした。解決策は、SCOUnixシステムのクラスターをセットアップすることでした。はい、*その*SCOです。かなり久しぶりですが、このようなクラスター設定は忘れがたいものです。サーバーは、相互に依存関係を持つようにセットアップされました。 1つが失敗しても、すべてがクラッシュすることはありませんでしたが、その1つのサーバーをバックアップするには、通常、すべてを再起動する必要がありました。

一般的な設定では、サーバーのNFSは起動時に相互にマウントされていました。もちろん、これは起動時に競合状態を引き起こします。エンジニアは、障害後にクラスター全体を起動するために必要な手順を説明する詳細なドキュメントを作成しました。通常、プロセス全体には30〜45分かかりました。

当時、私はテクニカルサポートのメンバーではなく、オンラインになるために必要なソフトウェアをインストールするプロセスを通じて、ほとんどの時間を新規顧客の手に持っていました。私はUnixと高速ネットワークの世界に比較的慣れておらず、できるだけ多くの知識を吸収していました。

[次のこともお勧めします:Linuxターミナルのハイライト:cowsayを超えて]

私が一緒に働いた人の一人、ブレットは私にたくさん教えてくれました。彼は私たちが使用したネットワーク監視システムを作成し、その間で時間を分割してネットワークを稼働させ続けました。彼は時々少しいたずら好きでもありました。

かなり典型的な一日の終わりに、私はたまたまUnixクラスターにいました。突然、接続に失敗し、ローカルOSに再起動しました。これは少し奇妙でしたが、たまに発生したので、ログインし直しました。数秒以内に、再び起動されました。

何が起こっているのかを理解しようとして、少しデバッグを始めました。私がしたことすべてを覚えているわけではありませんが、ログインし、さまざまなプロセスをチェックし、何が起こっているのかを理解するための簡単なスクリプトをまとめたのを覚えています。ある時点で、別のユーザーであるブレットによってシステムから起動されていると判断しました。

何が起こっているのかを理解したら、私は反撃しなければなりませんでした。そこで、シェルスクリプトを試して、彼をオフラインで起動できるように、シェルのPIDを特定する方法を見つけようとしました。これは少し前後し、私たち一人一人が攻撃をエスカレートさせました。アクセスを回復したり、攻撃を開始したりするために、他のサービスの使用を開始しました。

最後に、ULTIMATE攻撃だと思っていたものを起動しました。私は彼のログインを検索し、シェルを識別し、その後彼のアクセスを強制終了する小さなシェルスクリプトを作成しました。とてもシンプルですが、究極のひねりを加えました。スクリプトが実行された後、スクリプトはそれ自体のコピーを実行しました。ブーム。彼は今、元に戻すことはできません。

そしてそれはうまくいきました!ブレットはアクセスを失い、次の5分ほどで足場を固めることができませんでした。そしてもちろん、コンソールを操作して彼が殴打されたことを確認できるように、タスクのバックグラウンドを設定しました。私は勝った。私は経験豊富なエンジニアを打ち負かすことができることを証明しました、そしてくそー、私はそれについて気分が良かったです。

まで...

ksh:フォーク:リソースが一時的に利用できません

終わりの始まり

私はこれまでそのようなエラーを見たことがありませんでした。これは何でしたか?なぜシステムはこれを行ったのですか?そして、なぜそれが私のコンソール全体にストリーミングされ、私が何もできないようにしたのですか?

[無料のチートシート:IT面接のヒント]

少し時間がかかりましたが、ブレットも問題に気づきました。彼は何が起こったのかを見に出てきた。私は私の素晴らしい戦略を説明しました、そして彼はただため息をつき、微笑んで、そして私がサーバーの再起動と再同期を処理しなければならないと私に言いました。そして、彼は私が間違ったことを私に説明するのに時間をかけました。その日、私は「幹部」とその重要性について学びました。

残念ながら、ブレットはこの後約10年ほどで亡くなりました。彼は素晴らしい友達であり、素晴らしいメンターでした。私は彼がいなくて寂しいです。


Linux
  1. シェルスクリプトで外部IPアドレスを取得する方法は?

  2. 電子メールが最後に使用された時間を知る方法は?

  3. Crontab ログ:私の Cron スクリプトの出力をログに記録する方法

  1. Linux サーバーで Spfile がいつ作成されたかを確認する方法

  2. Bash スクリプトのスクリプト ファイル名を知るにはどうすればよいですか?

  3. ターミナル出力をコピーするには?

  1. 独自のIPアドレスを取得し、シェルスクリプトの変数に保存する方法は?

  2. シェルスクリプトを暗号化またはレンダリングして判読不能にする方法は?

  3. Xによって割り当てられたディスプレイ番号を取得する方法