プロセッサレベルとオペレーティングシステムで発生する権限については、いくつかの概念があります。プロセッサの場合、一部の命令はスーパープログラムモードでのみ実行できます。同様に、オペレーティングシステムはカーネル(システムコール)を介さないと一部の操作を実行できません。
Q:これら2つの概念はどのようにして互いにマッピングされますか?ユーザー空間でシステムコールを完全に書き直すことはできますか?それ以外の場合は、システムコールが上記の特権コマンドを非表示にするためですか?
ベストアンサー1
簡単に言えば、特権命令は通常、ハードウェアデバイスのI / Oまたはメモリ保護に関連する命令です。いくつかの中央ロジックを介さずに任意のプロセスからこれらのプロセスにアクセスすると、プロセスは他のプロセスのメモリを破壊し、ファイルシステムを混乱させる可能性があります。偶然にも意図的にでも。
open()
、ファイルにアクセスし、最終的にディスクや他のデバイスへのI / Oを発生させるその他の呼び出しなど、いくつかの一般的なシステム呼び出しを検討してくださいread()
。write()
あるいは、fork()
これはmmap()
あるプロセスまたは別のプロセスのメモリに影響を与える可能性があります。
もちろん、プロセスを定式化するなど、いいえシステムコールの呼び出しには権限は必要なく、ライブラリを介して実行できます。偽造されたシステムコールの結果も同様です。もちろん、2週間前のすべてのタイムスタンプを変更するなどのlibfaketime
作業(例を参照)を実行するには、まず正確な時間を把握する必要があります。これはシステムコールを介して行う必要があります。libfaketime
他にも、プロセスがUID 0で実行されるふりをするlibeatmydata
ことがあります。fakeroot