この質問の最初の回答の一部に基づいて:
ファイルから読み取る(カーネルは、アクセス許可により、そのファイルから読み取ることができることを確認する必要があります。その後、カーネルは、ファイルを読み取るためにディスクに実際の命令を実行します)
ファイルへのアクセス権を変更するには、root権限が必要です。root権限があれば、ユーザーは許可を気にせずに任意のファイルにアクセスできます。では、ルートとカーネルの間に何か関係がありますか?
この質問の最初の回答の一部に基づいて:
ファイルから読み取る(カーネルは、アクセス許可により、そのファイルから読み取ることができることを確認する必要があります。その後、カーネルは、ファイルを読み取るためにディスクに実際の命令を実行します)
ファイルへのアクセス権を変更するには、root権限が必要です。root権限があれば、ユーザーは許可を気にせずに任意のファイルにアクセスできます。では、ルートとカーネルの間に何か関係がありますか?
回答:
まず、説明:
ファイルへのアクセス権を変更するには、root権限が必要です。
man 2 chmodから、次の場合にchmod()システムコールがEPERM(アクセス権エラー)を返すことがわかります。
実効UIDがファイルの所有者と一致せず、プロセスに特権がありません(Linux:CAP_FOWNER機能がありません)。
これは通常、あなたがいることを意味いずれかのファイルまたはrootユーザーの所有者である必要があります。しかし、Linuxの状況はもう少し複雑になる可能性があることがわかります。
では、ルートとカーネルの間に何か関係がありますか?
あなたが引用したテキストが指摘したように、カーネルは、システムコールを実行しているプロセスのUID(つまり、プロセスを実行しているユーザー)が要求どおりの操作を実行できることを確認する責任があります。したがって、rootの超能力は、カーネルがrootユーザー(UID = 0)によって要求された操作を常に許可するようにプログラムされているという事実から来ています。
Linuxの場合、行われるさまざまな権限チェックのほとんどは、指定されたUIDに必要な機能があるかどうかをチェックします。機能システムにより、誰が何を実行できるかをより細かく制御できます。
ただし、「root」ユーザーの従来のUNIXの意味を維持するために、UIDが0で実行されるプロセスにはすべての機能があります。
UID = 0として実行されているプロセスはスーパーユーザー権限を持っていますが、システムコールインターフェイスを介してカーネルに要求を行う必要があることに注意してください。
したがって、ユーザースペースプロセスは、rootとして実行されている場合でも、「ユーザーモード」で実行され、カーネルが「カーネルモード」で実行されているため、CPU自体の実際の動作モードが異なるため、実行可能な処理が制限されています。カーネルモードでは、プロセスは任意のメモリにアクセスしたり、任意の命令を発行したりできます。ユーザーモード(x86 CPUでは実際にはさまざまな保護モードがいくつかあります)では、プロセスは自身のメモリにのみアクセスでき、一部の命令しか発行できません。したがって、ルートとして実行されているユーザー空間プロセスは、カーネルが公開しているカーネルモード機能にのみアクセスできます。