コンピュータプログラミングとコンピュータセキュリティにおいて、特権分離(privsep )は、最小特権の原則を実装するためのソフトウェアベースの手法の一つです。[ 1 ] [ 2 ]特権分離では、プログラムは特定のタスクを実行するために必要な特定の特権に限定された部分に分割されます。これは、コンピュータセキュリティの脆弱性による潜在的な被害を軽減するために使用されます。
特権分離を実現する一般的な方法の一つは、コンピュータプログラムを2つのプロセスに分岐させることです。メインプログラムは特権を放棄し、小さい方のプログラムは特定のタスクを実行するために特権を保持します。そして、この2つのプログラムはソケットペアを介して通信します。こうすることで、メインプログラムに対する攻撃が成功したとしても、得られるアクセスは最小限に抑えられます。たとえ、分岐した2つのプログラムが特権操作を実行できたとしてもです。
権限の分離は従来、POSIXで規定されたsetuid (2)/ setgid (2)および関連するシステムコールを使用して、実際のユーザーID /グループIDと有効なユーザーID/グループIDを区別することによって実現されてきました。これらの設定が誤っていると、隙間が生じて広範囲にわたるネットワーク侵入を許してしまう可能性があります。
多くのネットワークサービスデーモンは、既知のポート範囲で生ソケットやインターネットソケットを開くなど、特定の特権操作を実行する必要があります。管理ユーティリティも、実行時に特定の特権を必要とする場合があります。このようなソフトウェアは、クリティカルセクションの実行後に特権を完全に取り消し、実行ユーザーを特権のないアカウントに変更することで、特権を分離する傾向があります。この動作は、Unix系オペレーティングシステムでは「root権限の削除」として知られています。特権のない部分は通常、「 nobody」ユーザーまたはそれに相当する別のユーザーアカウントで実行されます。
権限の分離は、単一のプログラムの機能を複数の小さなプログラムに分割し、ファイルシステムのパーミッションを使用して特定の部分に拡張権限を割り当てることによっても実現できます。このようにして、異なるプログラムはオペレーティングシステムを介して相互に通信する必要があるため、潜在的な脆弱性の範囲が限定されます(権限の低い部分でのクラッシュは、権限取得に悪用されることはなく、単にサービス拒否攻撃を引き起こすだけだからです)。
権限分離とセキュリティを念頭に置いて設計された別のメールサーバーソフトウェアはDovecotです。[ 3 ]
権限の分離は、OpenBSD の主要なセキュリティ機能の 1 つです。[ 4 ] [ 5 ]
OpenSSHは特権分離を使用して、擬似端末(pty)の作成がネットワークアクセスを持つ接続ごとのプロセスから離れた、プロセスの安全な部分で行われるようにします。[ 6 ]
Postfixの実装は、包括的な権限分離の実装に重点を置いていた。[ 7 ] [ 8 ]