Unixでは、
ゲストユーザーで、次のことを行った場合:
chmod 777 /
それは失敗するでしょう。
しかし、これはハードウェアレベルで内部的にどのように発生しますか?
これまでのところ、これが起こると思います:
これはどのように起こるのですか、それともそのような状況が発生したときに割り込みが発生しますか?非特権命令に対応するメインメモリのISRテーブルにルーチンがありますか?
chmod
はファイルシステム操作であり、特権命令ではありません。 ファイルシステムのアクセス許可はハードウェアレベルでは処理されません。ソフトウェア(具体的にはOS)は、システムコールを呼び出すプロセスがファイルシステムオブジェクトで操作を実行するための十分な権限がなく、システムコールが権限エラーで返されます。
実際、あなたは2つの異なる質問をしています。
chmod 777 /
_を呼び出せないのはなぜですか?2の答え:
chmod
は、libcから関数を内部的に呼び出します(便利なことにchmod()
とも呼ばれます)。この関数は、呼び出し元が操作に対して十分な特権を持っているかどうかをチェックします。持っていない場合は、エラーEPERM
を返します。
1の答えはもっと興味深いです:
正確なメカニズムはOSとハードウェアプラットフォームによって異なりますが、基本的には次のようになります。最新のプロセッサにはすべてセキュリティ機能が組み込まれています。これにより、OSはプロセッサに「このプログラムを実行しますが、これらの特権命令を実行させないでください」と伝えることができます。したがって、プロセッサ自体が許可された命令に制限を適用します。プログラムが特権命令を実行しようとすると、プロセッサは制御をOSに戻します。これにより、通常、誤動作しているプログラムが終了します。詳細については、例えばを参照してください。 https://en.wikipedia.org/wiki/Ring_%28computer_security%29