「最小権限の原則」の版間の差分
行30: | 行30: | ||
フロントエンド、ミドルエンド、バックエンド、オペレーションツールなどをコンポーネントごとにわけ、それぞれ、別のネットワーク([[VLAN]]) にし、必要最低限のアクセス(ポートを解放する)を許可することで、それぞれのコンポーネントに侵入された場合の汚染範囲や被害の範囲を最小化したり、切り離しが容易になります。 | フロントエンド、ミドルエンド、バックエンド、オペレーションツールなどをコンポーネントごとにわけ、それぞれ、別のネットワーク([[VLAN]]) にし、必要最低限のアクセス(ポートを解放する)を許可することで、それぞれのコンポーネントに侵入された場合の汚染範囲や被害の範囲を最小化したり、切り離しが容易になります。 | ||
+ | |||
+ | == OS での実装 == | ||
+ | |||
+ | [[OS]] での権限コントロールは、[[setuid]] や [[パーミッション]] などで行われます。 | ||
+ | |||
+ | * [[setuid]] / [[setgid]] | ||
+ | * [[任意アクセス制御]] (DAC) | ||
+ | ** [[パーミッション]] | ||
+ | * [[セキュアOS]] | ||
+ | ** [[SELinux]] | ||
+ | |||
+ | [[Webサーバ]] の [[Apache HTTP Server]] ([[httpd]]) では、HTTP のポート 80 を [[bind]] しますが、1024 以下の[[TCP]] のポートを [[bind]] するには、 [[root]] の権限を必要とします。 | ||
+ | [[httpd]] は、起動時に80ポートを[[bind]] するために[[root]] のユーザーの権限を必要ですが、ウェブコンテンツの配信に[[root]]の権限が必要ではありません。また、[[httpd]] のプロセスの[[脆弱性]]などをつく [[エクスプロイト]] によって、乗っ取られる可能性がありますが、[[root]] ユーザーで [[httpd]] が動作している場合、影響範囲が大きくなってしまいます。 | ||
+ | [[httpd]] は、デフォルトで、[[httpd]] の最初の[[プロセス]]は[[root]]で動作しますが、実際にクライアントに対応する子プロセスは、は、www ([[OS]]によってユーザーが変わるかもしれません) というユーザーで実行されます。 | ||
+ | |||
+ | [[httpd]] の[[子プロセス]]は、www のユーザーで実行されるため、www ユーザーの持つ権限でしか、[[ファイルシステム]]やリソースにアクセスができません。 | ||
== 関連項目 == | == 関連項目 == |
2013年9月14日 (土) 14:26時点における版
最小権限の原則 (Principle of least privilege) とは、情報セキュリティ において、ユーザーやプロセス、プログラムが正当な目的に必要とされる情報やリソースにのみアクセスを許可する制限をする設計原則です。
読み方
- 最小権限の原則
- Principle of least privilege
- ぷりんしぷる おぶ りーすと ぷりびれっじ
概要
最小権限の原則 は、障害や悪意のある挙動からデータと機能を保護する場合に、考慮するべき重要な設計観点です。
ユーザーの権限
ユーザーに対して、最小権限の原則 を適用する場合には、 最低限のユーザーアクセス ( least user access, LUA ) や 最小権限のユーザーアカウント (least-privileged user account, LUA ) と呼ばれます。
ユーザーには、必要最低限の権限を与えます。
システム管理者 の権限が不要なユーザーには、root のような権限は必要ありません。 コンピュータリソースを利用するために、不必要なコマンドの実行を許可する必要はありません。
ネットワークセグメントの分離と制限
サーバーは、そのサーバーが果たすべきサービスに不要なサーバーやネットワークへアクセスできる必要はありません。サーバーがサービスを提供したいサーバーやネットワーク以外にアクセスを許可する必要はありません。
インターネットに対して、ウェブサイトを提供するときに、HTTP のアクセスを許可する必要がありますが、sshd に対して、インターネット からのアクセスを許可する必要はありません(オペレーション・メンテナンスのために、アクセスが必要な構成になっているかもしれません)。
システムに侵入された場合、影響範囲は、そのシステムが属するネットワークに波及する恐れがあります。 お互いに関連性のないサーバーは、同じネットワークに属する理由はありません。
フロントエンド(Webサーバ) と バックエンドの データベース があるとき、フロントエンドは、データベース に対するアクセスは必要ですが、データベース の sshd にアクセスする必要はありません。
フロントエンド、ミドルエンド、バックエンド、オペレーションツールなどをコンポーネントごとにわけ、それぞれ、別のネットワーク(VLAN) にし、必要最低限のアクセス(ポートを解放する)を許可することで、それぞれのコンポーネントに侵入された場合の汚染範囲や被害の範囲を最小化したり、切り離しが容易になります。
OS での実装
OS での権限コントロールは、setuid や パーミッション などで行われます。
Webサーバ の Apache HTTP Server (httpd) では、HTTP のポート 80 を bind しますが、1024 以下のTCP のポートを bind するには、 root の権限を必要とします。 httpd は、起動時に80ポートをbind するためにroot のユーザーの権限を必要ですが、ウェブコンテンツの配信にrootの権限が必要ではありません。また、httpd のプロセスの脆弱性などをつく エクスプロイト によって、乗っ取られる可能性がありますが、root ユーザーで httpd が動作している場合、影響範囲が大きくなってしまいます。 httpd は、デフォルトで、httpd の最初のプロセスはrootで動作しますが、実際にクライアントに対応する子プロセスは、は、www (OSによってユーザーが変わるかもしれません) というユーザーで実行されます。
httpd の子プロセスは、www のユーザーで実行されるため、www ユーザーの持つ権限でしか、ファイルシステムやリソースにアクセスができません。
関連項目
- 多層防御
- 任意アクセス制御 (DAC)
- ロールベースアクセス制御 (RBAC, Role Base Access Control)
- セキュアOS
- 情報セキュリティ