dd がアクティブ ディスクへの書き込みに対して保護されないのはなぜですか?

dd がアクティブ ディスクへの書き込みに対して保護されないのはなぜですか?

私は dd をよく使います。ある日、たとえば sdb (USB ディスク) ではなく sda (コンピュータ ディスク) に書き込んで、コンピュータ上のすべてのデータを消去してしまうなど、間違いを犯すのではないかと常に不安を感じています。

dd はパワー ユーザー向けのツールであることはわかっていますが、間違ったキーを押すことでコンピューター全体を台無しにしてしまうというのは、私には理解できません。

dd がコマンドを取得したディスクに書き込むことを防ぐセキュリティ対策がないのはなぜですか? 誰かが意図的にこれを行う方法がわかりません。

なお、私はこれを自分で試したわけではなく、読んだだけなので、間違っている可能性もあります。

答え1

dd はパワー ユーザー向けのツールであることはわかっていますが、間違ったキーを押すことでコンピューター全体を台無しにしてしまうというのは、私には理解できません。

土木工事で使用される電動工具の種類を考えてみましょう。ちょっとしたミスで何が起こり得るか考えてみましょう。こうした事故をもっと予防可能にできるでしょうか。おそらくできるでしょう。しかし、問題は事故を予防可能にすることで、どの程度まで工具の使い勝手が悪くなるか、あるいは扱いにくくなるかということです。

自動車の運転も、潜在的にもっと悲惨な結果をもたらす類似の例えですが、それでも人間はこれをしょっちゅう行っています (実際、あまりにも頻繁に行っています)。もちろん、ゆっくり運転すればより安全ですが、どのようなリスクを取る価値があるかは、私たち全員が決めています。同様に、コンピューターはdd存在しない方が安全ですが、その有用性がリスクを上回ると考えられるため、存在しています。

dd がコマンドを取得したディスクに書き込むことを防ぐセキュリティ対策がないのはなぜですか?

実際には、デフォルトではデバイス ファイル ( など) への書き込みにはスーパーユーザー権限が必要なので、スーパーユーザー権限はあります。したがって、 として、または 経由で/dev/sda1作業していない限り、 を使って 1 つのボタンでコンピュータ全体を台無しにすることはできません。rootsudodd

そこでスーパーユーザー権限でコマンドを実行する場合、なぜすべての注意事項が存在するのか。 これらの警告は非常に一般的であり、それを見ずに*nixシステムを運用することは難しいと思います。まるで、建設現場に侵入したときに警告に気付かないようなものです。ヘルメットエリア標識。

工事現場にいる理由がなければ、その場を立ち去ってください。もしいる場合は、適切な安全対策を講じてください。世界は危険な場所であり、場所によっては他の場所よりも危険な場所もあります。考えずに行動しないでください。悪いことが起こらないと保証される程度の安全性は、考える必要がないことを意味しますが、それはあまり多くのことができないことを意味します。時にはそれが望ましいこともあれば、そうでないこともあります。

答え2

dd コマンドが、まずターゲットにマウントされたファイルシステムが含まれているかどうかをチェックし、確認を求めたり、特別なフラグを要求したりしないのはなぜか、と疑問に思うのは当然です。 1 つの簡単な答えは、このように dd を使用できることを想定しているスクリプトで、対話型入力を処理するように設計されていないスクリプトが壊れてしまうことです。 たとえば、同じデバイスのパーティションがマウントされているときに、raw デバイスのパーティション テーブルを変更することは合理的です。最初のセクターのみを変更するように注意する必要があります。

世の中には膨大な数の Linux システムが存在し、人々がどのような奇妙な設定を思いついたかを知ることは不可能です。そのため、dd のメンテナーが、未知の数の環境で問題を引き起こすような下位互換性のない変更を加える可能性はほとんどありません。

答え3

「オプションや確認メッセージなどの小さなステップを追加する」には、質問のコメントで artm が提案したように、ラッパー スクリプトを使用します。

つまり、dd のやや厄介なコマンドライン引数を直接扱うのではなく、より使い慣れたオプション構文を使用して、関心のある dd 引数を受け取るスクリプトを bash (または Python など) で作成します。スクリプトは引数が適切かどうかを確認し、引数 (および最終的な dd コマンドライン) を印刷して、すべてが適切であることを確認できます。次に、スクリプトは「続行しますか? [y/N]」と尋ねるので、yスクリプトが作成した dd コマンドラインを実際に実行する場合は、入力する必要があります。

したがって、スクリプトが /dev/sda またはそのパーティションに書き込むことを望まない場合は、書き込みを不可能にすることができます。意図した入力デバイスと出力デバイスを実際に選択したかどうかを確認するために、スクリプトは blkid コマンドを使用して、それらのデバイスの UUID とディスク ラベルを取得できます。など。

関連情報