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

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

私はddをたくさん使っています。いつかはsdb(USBディスク)の代わりにsda(コンピュータディスク)に書き込んで、コンピュータのすべてを消去するなどの間違いを起こすかどうか常に心配です。

私はddが高度なユーザーツールであることを知っていますが、間違ったキーを押すと基本的にコンピュータ全体が壊れる可能性があることは私にはわかりません。

ddがコマンドを受け取るディスクに書き込むのを防ぐセキュリティ対策がないのはなぜですか?誰かが故意にどのようにこれを行うことができるのか分かりません。

私が自分でやったことはなく、グローだけ読んだので間違っているかもしれないことを参考にしてください。

答え1

私はddが高度なユーザーツールであることを知っていますが、間違ったキーを押すと基本的にコンピュータ全体が壊れる可能性があることは私にはわかりません。

土木建築に使われる電動工具の種類と、小さなこと一つでも間違えば、どんなことが起こり得るか考えてみてください。このようなことがより予防可能になるのでしょうか?そうかもしれませんが、バランスは事故を防止しやすくすることでツールの使いやすさを落としたり、恥ずかしいものにすることです。

自動車を運転することも同様の例えであり、潜在的に深刻な結果をもたらす可能性がありますが、人間はいつもそうしてきました(実際にはあまりにも多く)。もちろん、ゆっくりとすればより安全になりますが、私たちはどのようなリスクを取る価値があるかを一緒に決定します。同様に、コンピュータがdd存在しない場合は安全ですが、リスクよりも有用性が高いと考えられるため、コンピュータは存在します。

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

実際にそうです。デフォルトでは、デバイスファイル(例/dev/sda1:)に書き込むにはスーパーユーザー権限が必要です。したがって、asrootまたはviaを使用しないsudo限り、ワンクリックで.NETを使用してコンピュータ全体を台無しにすることはできませんdd

これは私たちを次に導くスーパーユーザー権限でコマンドを実行することに関するすべての警告が表示されるのはなぜですか? これらの警告はあまりにも一般的で、これを見ないと* nixシステムを操作するのが難しいと思います。まるで工事区域に気づかずに入るのと同じです。セーフティゾーン兆候。

工事区域に理由がない場合は、出発してください。この場合は、適切な安全予防措置を講じてください。世界は危険な場所である可能性があり、ある場所は他の場所よりも危険です。思わず行動しないでください。悪いことが起こらないほどのセキュリティレベル(それほど難しく考える必要はありません)は、これができることはあまりありません。時にはこれが望ましい場合もありますが、そうでない場合もあります。

答え2

ddコマンドにターゲットにマウントされたファイルシステムが含まれていることを最初に確認してから、確認メッセージを表示するか、特別なフラグを要求しない理由を尋ねることが合理的です。簡単な答えは、ddがこの方法で使用できると予想されるすべてのスクリプトを破損し、そのスクリプトが対話型入力を処理するように設計されていないことです。たとえば、パーティションをマウントするときに、RAWデバイスのパーティションテーブルを変更するのが妥当である可能性があります。最初のセクターのみを変更してください。

市場には多くのLinuxシステムがあり、人々がどんなクレイジーな設定を思いついたかを知ることは不可能です。したがって、ddの管理者が未知の数の環境で問題を引き起こす可能性がある以前のバージョンと互換性のない変更を行う可能性はほとんどありません。

答え3

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

つまり、やや難しいddコマンドライン引数を直接処理するのではなく、興味のあるオプション構文を使用して、興味のあるdd引数を取得するbash(またはPythonなど)からスクリプトを生成します。より快適です。スクリプトは引数が妥当であることを確認し、引数(および最終ddコマンドライン)を印刷するので、すべてが正しいことを確認できます。その後、スクリプトは「続行しますか?[y / N]」と尋ねます。したがって、yスクリプトに実際に構築されたddコマンドラインを実行させるには、それを入力する必要があります。

したがって、スクリプトが/ dev / sdaまたはそのパーティションに書き込もうとしない場合は、それを無効にすることができます。必要な入出力デバイスが実際に選択されていることを確認するのに役立つように、スクリプトはblkidコマンドを使用してこれらのデバイスのUUIDおよびディスクラベルを取得できます。など。

関連情報