web-dev-qa-db-ja.com

ユーザーモードのプロセスをカーネルモードに切り替えます。次に、プロセスにはroot権限がありますか?

http://www.linfo.org/kernel_mode.html によると、段落7:

ユーザープロセスがシステムコールを介してカーネルコードの一部を実行すると、プロセスは一時的にカーネルプロセスになり、カーネルモードになります。カーネルモードでは、プロセスにはルート(つまり、管理)権限と主要なシステムリソースへのアクセス権があります。プロセスではなくプロセスのコントローラーであるカーネル全体は、カーネルモードでのみ実行されます。カーネルがプロセスによる要求を満たした場合、カーネルはプロセスをユーザーモードに戻します。

線については私にはまったくわかりませんが、

カーネルモードでは、プロセスにはルート(つまり、管理)権限と主要なシステムリソースへのアクセス権があります。

Rootとして実行されていないユーザースペースプロセスがroot権限を持つのはなぜですか? rootとして実行されているユーザースペースプロセスとどのように異なりますか?

7
Ron Vince

(簡潔にしようと思います。)

理論的には、特権には2つの側面があります。

  • コンピュータの命令セットアーキテクチャ(ISA)。これは、マシンの特定の情報や機能を保護します。

  • オペレーティングシステム(OS)アプリケーションと通信のためのエコシステムを作成します。その核となるのはカーネルです。カーネルは、ISAで、いかなる種類の依存関係もなく実行できるプログラムです。

今日のオペレーティングシステムは、今日と同じようにコンピューターを使用できるように、さまざまなタスクを実行します。非常に(、非常に、非常に)単純化されたビューでは、カーネルがコンピューターによって実行される唯一のプログラムであると想像できます。アプリケーション、プロセス、およびユーザーはすべて、OS、特にカーネルによって作成されたエコシステムの成果物です。

オペレーティングシステムに関するユーザー(スペース)特権について説明するときは、オペレーティングシステムによって管理、付与、および適用される特権について説明します。たとえば、特定のディレクトリからのデータのフェッチを制限するファイルのアクセス許可は、カーネルによって適用されます。ファイルに関連付けられているいくつかのIDを調べ、特権を表すいくつかのビットを解釈してから、データをフェッチするか、そうすることを拒否します。

ISA内の特権階層は、カーネルがその目的で使用するツールを提供します。具体的な詳細は大きく異なりますが、一般に、CPUによって実行されるプログラムが非常に多いカーネルモードがあります。自由にI/Oを実行し、ISAと、I/Oと命令が制約されているユーザーモードによって提供される命令を使用します。

たとえば、特定のメモリアドレスにデータを書き込む命令を読み取る場合、カーネルモードのCPUは単に特定のメモリアドレスにデータを書き込むことができますが、ユーザーモードでは、最初にいくつかのチェックを実行して、メモリアドレスがデータを書き込むことができる許可されたアドレスの範囲。アドレスが書き込まれない可能性があると判断された場合、通常、ISAはカーネルモードに切り替わり、カーネルの一部である別の命令ストリームの実行を開始し、正しいこと(TM)。

これは、あるプログラムが別のプログラムに干渉しないようにするための施行戦略の一例です...現在アクセスしているWebページのJavaScriptが、オンラインバンキングアプリケーションに疑わしいトランザクションを実行させないようにするためです...

カーネルモードでは、正しいことを実行するために他に何もトリガーされないことに注意してください。カーネルモードで実行されているプログラムが正しいことを実行していると想定されます。そのため、カーネルモードでは、プログラムにOSのエコシステムの抽象的なルールと概念を強制することはできません。そのため、カーネルモードで実行されているプログラムは、rootユーザーとして比較的強力です。

技術的には、カーネルモードは、OSのrootユーザーであるよりもはるかに強力です。

4
Bananguin

ルート権限と非ルート権限はすべて、ユーザースペースに関連するものです。たとえば、rootユーザーはアプリケーションをインストールできますが、通常のユーザーはインストールできません。

ただし、rootユーザーでさえいくつかの制限があります。これらの制限は、オペレーティングシステムの設計によって課せられ、ユーザースペースとカーネルスペースを区別します。たとえば、rootユーザーであっても、そのオプションがドライバーを介して提供されていない場合、ハードディスクの回転速度を変更することはできません(機能を許可するドライバーを作成することはできますが、次に、ハードウェアに直接アクセスするのではなく、ドライバーを介してアクセスします)。

これは、ハードウェアの実際の制御はすべてカーネルスペースで行われ、ユーザースペースがハードウェアにアクセスする方法はシステムコールを介して行われるためです。カーネルスペースはユーザーのための場所ではありません:)

あなたの質問に答えるために、それはルート特権を取得するプロセスではなく、すべてのシステムリソースへの無制限のアクセスを許可するカーネルモードへの切り替えです。ただし、その無制限のアクセスは、カーネルモードで実行されているコードでのみ利用できるため、プロセスにはアクセスできません。カーネルコードの呼び出しのみを使用します。

カーネルモードで実行されているコードは、システムに完全に無制限にアクセスできます。