オペレーティングシステムは、非特権プロセスが特権命令を実行するのをどのように防止しますか?


8

Unixでは、

あなたがゲストユーザーである場合:

chmod 777 /

それは失敗するでしょう。

しかし、これは内部的にハードウェアレベルでどのように行われるのでしょうか。

これまでのところ、私はこれが起こると思います:

  • OSはその命令を実行しようとします。
  • 権限に関する情報は、おそらく2次メモリのどこかにあります。したがって、書き込み命令を発行します。
  • 2より前は、ユーザーがこれを実行する特権があるかどうかをチェックします。そうでない場合は、エラーメッセージが表示されます。

これはどのように発生するのですか、またはそのような状況が発生したときに割り込みが発生しますか?非特権命令に対応するルーチンがメインメモリのISRテーブルにありますか?

回答:


10

chmodあるファイルシステム操作ではなく、特権命令。ファイルシステムのアクセス許可は、ハードウェアレベルでは処理されません。ソフトウェア(特にOSは)システムコールを呼び出したプロセスがパーミッションエラーでファイルシステムオブジェクトとシステムコールのリターンで操作を実行するための十分な権限を持っていないことを見ています。


5

実際、あなたは2つの異なる質問をしています。

  1. オペレーティングシステムは、非特権プロセスが特権命令を実行するのをどのように防止しますか?
  2. 非特権プロセスが呼び出せないのはなぜchmod 777 /ですか?

2の答え:

chmod内部的にlibcから関数を呼び出します(便宜的にとも呼ばれますchmod())。この関数は、呼び出し元が操作に対して十分な特権を持っているかどうかを確認しますEPERM。そうでない場合は、エラーを返します。

1の答えはより興味深いものです。

正確なメカニズムはOSとハードウェアプラットフォームによって異なりますが、基本的には次のようになります。すべての最新のプロセッサには、セキュリティ機能が組み込まれています。これにより、OSはプロセッサに「このプログラムを実行しますが、これらの特権命令を実行させません」と伝えます。したがって、プロセッサ自体が許可された命令に制限を適用します。プログラマが特権付き命令を実行しようとすると、プロセッサは制御をOSに戻し、通常は動作不良のプログラムを終了します。詳細については、たとえばhttps://en.wikipedia.org/wiki/Ring_%28computer_security%29を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.