情報セキュリティ、コンピュータサイエンス、その他の分野では、最小権限の原則(PoLP)、別名最小権限の原則(PoMP)または最小権限の原則(PoLA)は、コンピューティング環境の特定の抽象化レイヤーにおいて、すべてのモジュール(対象に応じて、プロセス、ユーザー、プログラムなど)が、正当な目的に必要な情報とリソースのみにアクセスできることを要求する。[ 1 ]
この原則は、ユーザーアカウントやプロセスに対して、その本来の機能を実行するために不可欠な権限のみを与えることを意味します。例えば、バックアップ作成のみを目的とするユーザーアカウントは、ソフトウェアをインストールする必要がないため、バックアップおよびバックアップ関連アプリケーションを実行する権限のみを持ちます。新しいソフトウェアのインストールなど、その他の権限はすべてブロックされます。この原則は、通常は通常のユーザーアカウントで作業を行い、どうしても必要な場合にのみ特権付きのパスワード保護アカウントを開く個人用コンピュータユーザーにも適用されます。
ユーザーに適用する場合、「最小ユーザーアクセス」または「最小権限ユーザーアカウント(LUA)」という用語も使用され、これはすべてのユーザーアカウントが可能な限り少ない権限で実行され、アプリケーションも可能な限り少ない権限で起動されるべきであるという概念を指します。
(最小権限の)原則は、障害(フォールトトレランス)や悪意のある動作からデータと機能を保護するために必要不可欠な「ブースト」を与えるための重要な設計上の考慮事項として広く認識されています。
この原則の利点は以下のとおりです。
実際には、真の(最小権限)の定義は複数存在し、それぞれが競合しています。プログラムの複雑さが増すにつれて、潜在的な問題の数も急速に増加し、予測的なアプローチは非現実的になります。例えば、処理する可能性のある変数の値、必要なアドレス、あるいはそれらが必要になる正確な時間などが挙げられます。オブジェクト機能システムでは、例えば、一度だけ使用する権限の付与を、実際に使用される時まで延期することができます。現状では、最も現実的なアプローチは、手動で不要と判断できる権限を削除することです。その結果として得られる権限のセットは、通常、プロセスに必要な真の最小権限を超えています。
もう1つの制限は、オペレーティング環境が個々のプロセスに対する権限を制御する粒度です。[ 4 ]実際には、プロセスが必要とする権限の正確なセットのみを可能にするために必要な精度で、プロセスのメモリ、処理時間、I/O デバイスのアドレスまたはモードへのアクセスを制御することはほとんど不可能です。
元の定式化はジェローム・ソルツァーによるものです: [ 5 ]
システム上のすべてのプログラムおよびすべての特権ユーザーは、業務を完了するために必要な最小限の特権のみを使用して動作すべきである。
ピーター・J・デニングは、論文「フォールトトレラント・オペレーティング・システム」の中で、フォールトトレラントを「フォールトトレラントの4つの基本原則」というより広い視点の中に位置づけた。
「権限の動的な割り当て」については、1972年にロジャー・ニーダムが既に論じている。 [ 6 ] [ 7 ]
歴史的に見て、(最小権限の)最も古い例はおそらくlogin.cのソースコードでしょう。これはスーパーユーザー権限で実行を開始し、不要になった瞬間に、バージョン6のUnixソースコードで示されているように、ゼロ以外の引数を持つsetuid()を使用して権限を解除します。
カーネルはオペレーティングシステムのコアであり、ハードウェアへのアクセス権を持つため、常に最高権限で実行されます。オペレーティングシステム、特にマルチユーザーオペレーティングシステムの主要な責務の一つは、ハードウェアの可用性を管理し、実行中のプロセスからのアクセス要求に対応することです。カーネルがクラッシュすると、カーネルが状態を維持するメカニズムも機能しなくなります。そのため、ハードリセットなしでCPUが回復する方法があったとしても、セキュリティは引き続き適用されますが、障害を検出できなかったため、オペレーティングシステムは障害に適切に対応できません。これは、カーネルの実行が停止したか、プログラムカウンタが無限ループ(通常は機能しないループ)のどこかから実行を再開したためです。これは、記憶喪失(カーネル実行障害)を経験するか、常に開始点に戻る閉じた迷路に閉じ込められる(閉じたループ)のに似ています。

クラッシュ後にトロイの木馬コードをロードして実行することで実行が再開された場合、トロイの木馬コードの作成者はすべてのプロセスを乗っ取ることができます。最小権限の原則により、コードは可能な限り低い権限/許可レベルで実行されます。つまり、コード実行を再開するコード(トロイの木馬であろうと、単に予期しない場所から実行が再開されたコードであろうと)は、悪意のあるプロセスや望ましくないプロセスを実行する能力を持たないことになります。これを実現する方法の1つは、マイクロプロセッサのハードウェアに実装できます。たとえば、Intel x86アーキテクチャでは、メーカーは防衛機関や諜報機関のセキュリティクリアランスシステムと同様に、段階的なアクセス権限を持つ4つの実行「モード」(リング0からリング3まで)を設計しました。
一部のオペレーティングシステムで実装されているように、プロセスは潜在的な特権セットとアクティブな特権セットで実行されます。このような特権セットは、 fork ()のセマンティクスによって決定される親から継承されます。特権機能を実行する実行可能ファイル(技術的にはTCBのコンポーネントを構成し、同時に信頼できるプログラムまたは信頼できるプロセスと呼ばれる)にも、特権セットが付与される場合があります。これは、set user IDおよびset group IDの概念の論理的な拡張です。プロセスによるファイル特権の継承は、 exec ()ファミリーのシステムコールのセマンティクスによって決定されます。潜在的なプロセス特権、実際のプロセス特権、およびファイル特権がどのように相互作用するかの正確な方法は複雑になる可能性があります。実際には、最小特権は、タスクに必要な特権のみでプロセスを実行するように強制することによって実践されます。このモデルに従うことは非常に複雑で、エラーが発生しやすいです。
信頼できるコンピュータシステム評価基準(TCSEC)の信頼できるコンピューティングベース(TCB)最小化の概念は、はるかに厳格な要件であり、機能的に最も強力な保証クラス(信頼できるコンピュータシステム評価基準の「区分とクラス」セクションへのリンク)にのみ適用されます。具体的には、クラスB3とA1 (機能的には同一ですが、必要な証拠と文書化の点で異なります)です。
最小特権は、特権の括弧化と関連付けられることが多い。つまり、必要な特権は可能な限り最後の瞬間に取得し、厳密には不要になった時点で速やかに放棄することで、本来必要以上の特権を意図せず悪用する誤ったコードによる悪影響を軽減する。最小特権は、裁量アクセス制御(DAC)権限の分配という文脈でも解釈されており、例えば、ユーザーUが読み取り権限のみで許可されたタスクを完了できる場合、ファイルFへの読み取り/書き込みアクセスをユーザーUに与えることは最小特権に違反すると主張する。