![ルートとカーネルの関係は何ですか?](https://rvso.com/image/52099/%E3%83%AB%E3%83%BC%E3%83%88%E3%81%A8%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%3F%20.png)
最初の回答の一部に基づいてこの質問:
ファイルから読み取ります (カーネルは、そのファイルからの読み取りが許可されているかどうかを確認する必要があり、その後、カーネルはディスクに対して実際の指示を実行してファイルを読み込みます)
ファイルの権限を変更するには、ルート権限が必要です。ルート権限があれば、ユーザーは権限を気にせずに任意のファイルにアクセスできます。では、ルートとカーネルの間には何か関係があるのでしょうか?
答え1
まず、明確にしておきます。
ファイルへの権限を変更するには、root 権限が必要です。
から男2chmod次の場合、chmod() システム コールは EPERM (権限エラー) を返すことがわかります。
有効な UID がファイルの所有者と一致せず、プロセスに特権がありません (Linux: CAP_FOWNER 機能がありません)。
これは通常、どちらかファイルの所有者またはルート ユーザーである必要があります。ただし、Linux では状況が少し複雑になる可能性があることがわかります。
それで、ルートとカーネルの間には何らかの関係があるのでしょうか?
あなたが引用したテキストが指摘しているように、カーネルは、システム コールを実行するプロセスの UID (つまり、そのプロセスを実行しているユーザー) が要求している操作を実行できるかどうかを確認する責任があります。したがって、root のスーパーパワーは、カーネルが root ユーザー (UID=0) によって要求された操作を常に許可するようにプログラムされているという事実から生まれます。
Linuxの場合、さまざまな権限チェックのほとんどは、与えられたUIDに必要な権限があるかどうかをチェックします。能力機能システムにより、誰が何を実行できるかをより細かく制御できます。
ただし、従来の UNIX における「root」ユーザーの意味を維持するために、UID 0 で実行されるプロセスにはすべての機能が付与されます。
UID=0 として実行されているプロセスはスーパーユーザー権限を持ちますが、システム コール インターフェイスを介してカーネルに要求を行う必要があることに注意してください。
したがって、ユーザー空間プロセスは、たとえルートとして実行されていても、「ユーザーモード「カーネルは「カーネルモードこれらは実際には CPU 自体の異なる動作モードです。カーネル モードでは、プロセスは任意のメモリにアクセスしたり、任意の命令を発行したりできます。ユーザー モード (x86 CPU には実際にはさまざまな保護モードがあります) では、プロセスは独自のメモリにのみアクセスでき、一部の命令のみを発行できます。したがって、ルートとして実行されているユーザー空間プロセスは、カーネルが公開するカーネル モード機能にのみアクセスできます。