なぜ、rootのセキュリティは強制されるのに、$HOMEは一般的に保護されないのですか?

この質問なぜrootでログインするのが悪いのかのコメントから来るものです。

sudoの仕組みは、管理者以外のツールが "システムに害を及ぼさないようにするために使われています。しかし、デスクトップPCではどうなのでしょうか?同じgithubのコードが、一度実行されると、sudo権限なしで、私のホームフォルダ全体を消去したり、自動起動セッションにキーロガーを入れたり、~`で好きなことをすることができるのです。

バックアップを取っていない限り、ホームフォルダは通常一意であり、機密データではないにしろ、貴重なデータを含んでいます。しかし、ルートディレクトリはシステムを構築し、システムを再インストールするだけで回復できることが多いのです。var` などに保存されている設定もありますが、ユーザーにとっては2011年の休日の写真ほど重要でない傾向があります。root 権限システムは理にかなっていますが、デスクトップシステムでは、間違ったデータを保護しているように感じられます。

悪意のあるコードが $HOME で発生するのを防ぐ方法はないのでしょうか?そして、なぜ誰もそれを気にしないのでしょうか?

**UNIXベースのセキュリティモデルは50年前のものだからです。

UNIXは広く普及しているOSの根底にあり、大きな例外であるWindowsでさえ、見かけ以上にその影響を受けている。UNIXは、コンピュータが大きく、高価で、遅い機械で、難解な専門家だけが使っていた時代に由来しています。

当時は、大学のサーバーでもなく、個人のパソコンでもなく(もちろん携帯電話でもなく)、どんなパソコンにも膨大な個人データを保存しているわけではありません。ユーザーごとに異なるデータは、典型的には科学的な計算処理の入出力データであり、それを失うことは損失かもしれませんが、大部分は再計算することで補えるもので、今日のデータ漏洩のような結果にはならないでしょう。

日記や銀行情報、ヌード写真などをコンピュータに保存している人はいなかったでしょうから、悪意のあるアクセスから守ることは優先度が高くありません。実際、70年代のほとんどの学部生は、自分の研究データに他人が興味を示したら、おそらく「大喜び」したでしょう。したがって、データの損失を防ぐことがコンピュータセキュリティの最優先事項であり、アクセス制御よりも定期的なバックアップによって十分に確保されると考えられていたのです。

解説 (7)

これは非常に鋭い観察です。 確かに、自分のユーザーとして実行されるマルウェアは、ホームディレクトリのデータを破損/破壊/変更することができます。 確かに、シングルユーザーシステムにおけるユーザー分離は、サーバーに比べてあまり有用ではありません。 しかし、rootユーザー(またはそれに相当するユーザー)だけができることがまだいくつかあるのです。

  • カーネルにルートキットをインストールする。
  • カーネルにルートキットをインストールする。ブートローダを変更し、永続化のための初期バックドアを含むようにする。
  • ハードディスクの全ブロックを消去し、データを復元不可能にする。

正直なところ、私はワークステーションの特権分離が、ワークステーションを最大の敵である自分から守るために最も有用だと考えています。 それは、私のシステムを台無しにしたり壊したりすることを難しくします。

さらに、root で cron ジョブをセットアップして、(例えば rsnapshot で) ホームディレクトリのバックアップを取り、自分のユーザが書き込めないように保存しておくことも可能です。 これは、あなたが言うような状況において、あるレベルの保護となるでしょう。

省略可能な xkcd

解説 (1)

Unix/Linuxのセキュリティの元々の設計は、ユーザを他のユーザから、システムファイルをユーザから保護することでした。 30-40年前、ほとんどのUnixシステムはマルチユーザーセットアップで、多くの人が同時に同じマシンにログインしていたことを思い出してください。 これらのシステムは何万ドルもしましたし、自分専用のマシンを持つことは極めて稀でしたから、マルチユーザーログイン環境でマシンを共有していたのです。

この設計は、ユーザーやユーザーのファイルを悪意のあるコードから守ることを目的としておらず、ただ、ユーザーを他のユーザーから守ること、ユーザーが基本システムを変更しないこと、ユーザーがシステムリソースを使い過ぎないことを目的としていました。 誰もが自分のコンピュータを持っている現代では、この設計は、1つのプロセスがあまりにも多くのシステムリソースを占有しないように保護するシングルユーザーマシンに(ほとんど)変換されました。

このため、ユーザーが実行するプログラムは、そのユーザーが所有するすべてのファイルにアクセスすることができます。 ユーザー自身のファイルに対して、それ以上アクセスする概念はありません。 言い換えれば、ユーザーAとして実行されるプロセスは、ユーザーAに属するすべてのファイルの読み取り、変更、および削除へのアクセス権を持ちます。

より現代的なアプローチでは、特定のファイルに対してさらに何らかの制御を行うことが必要かもしれません。 例えば、これらのファイルにアクセスするためには再認証が必要であるとか、あるプログラムのファイルを他のプログラムのファイルから保護するといったことです。 AFAIKは、Linuxデスクトップの世界では、このようなものは(現在)ありません。 もし私が間違っていたら、訂正してください。

解説 (4)