はじめに
ASP.NET では、管理者は、中程度の信頼などの部分的な信頼のモードでアプリケーションをホストできます。また、カスタム ポリシー ファイルにより、カスタムの部分的な信頼のレベルを構成することもできます。ASP.NET 2.0 で中程度の信頼を使用する方法の詳細については、以下の MSDN (Microsoft Developer Network) Web ページを参照してください。
How To: ASP.NET 2.0 で中程度の信頼を使用する方法以前、マイクロソフトは、ASP.NET の部分的な信頼を、信頼のレベルが異なる複数のアプリケーションが同一の Web サーバーでホストされる共有ホスト環境で、アプリケーションの分離を強制するためのメカニズムとして説明していました。マイクロソフトは、部分的な信頼で ASP.NET ページ フレームワーク アプリケーションを実行しても、同じプロセスまたは同じコンピューターで実行されている他のアプリケーションからの完全な分離が保証されないという事実を反映するために、部分的な信頼に関するガイダンスを更新しています。 同一の Web サーバー上の他の ASP.NET ページ フレームワーク アプリケーションからの分離を保証する推奨手順としては、(個別のアプリケーション プールを使用して) 独立した権限の低いプロセスで実行されるように ASP.NET ページ フレームワーク アプリケーションを構成します。以下のセクションでは、分離を実現するためにアプリケーションを構成する方法の詳細を説明します。マイクロソフトは、この資料に概要が記載されているポリシーの変更を反映するため、他のドキュメントの更新作業を行っています。
詳細
サーバー管理者は、共有ホスト環境でアプリケーションが分離されるようにするには、この資料のガイドラインを適用する必要があります。これらのガイドラインは、Windows Server 2003 SP2 以降での ASP.NET のホスティングに適用されます。ガイドラインの対象は、インターネット インフォメーション サービス (IIS) 6.0 ~ 7.5 です。AppCmd.exe IIS コマンド ライン ツールを使用するか、IIS 6.0 で IIS 管理スクリプトを使用すると自動化できます。
この資料に記載されている作業の多くは、IIS 7 および 7.5 で独立した IIS サイトにアプリケーションを配置する方法
共有ホスト環境では、アプリケーションを独立した IIS サイトに配置する必要があります。アプリケーションを独立した IIS サイトに配置すると、アプリケーション間で構成をより適切に分離できます。また、.NET Framework CLR ホストが独立したものになります。これにより、そのレベルでの分離が改善されます。
独立したサイトに各アプリケーションを配置するには、以下の手順を実行します。インターネット インフォメーション サービス 6.0 (Windows Server 2003 SP2) の場合
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
左側のウィンドウで、現在のサーバーのノードを展開します。
-
[Web サイト] ノードを右クリックし、[新規作成] をクリックし、[Web サイト] をクリックします。
-
[次へ] をクリックします。
-
新しい Web サイトの一意の名前を入力し、[次へ] をクリックします。
-
ホスト環境のサイトのバインドを構成します。
-
アプリケーション ファイルが格納されているフォルダーの物理パスを入力します。
-
[ASP などのスクリプトを実行する] チェック ボックスをオンにし、[次へ] をクリックします。
-
[完了] をクリックします。[Web サイト] ノードに新しいサイトが表示されます。
インターネット インフォメーション サービス 7 (Windows Vista SP2 および Windows Server 2008 SP1) およびインターネット インフォメーション サービス 7.5 (Windows 7 および Windows Server 2008 R2) の場合
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
[接続] ウィンドウで、現在のサーバーのノードを展開します。
-
[サイト] ノードを選択し、[操作] ウィンドウで [Web サイトの追加] リンクをクリックします。
-
[Web サイトの追加] ダイアログ ボックスで、新しい Web サイトの一意の名前を入力し、アプリケーション ファイルが格納されているフォルダーの物理パスを入力します。既定では、サイトと同じ名前を持つ新しいアプリケーション プールが作成され、サイトはこのアプリケーション プールを使用するように構成されます (これが推奨構成です)。
-
ホスト環境のサイトのバインドを構成します。
-
[Web サイトを直ちに開始する] チェック ボックスをオフにし、この資料に概要が記載されている分離のガイドラインが完了するまで、サイトを使用できないようにします。
-
[OK] をクリックします。[接続] ウィンドウの [サイト] ノードに、構成されたサイトが表示されます。
独立したアプリケーション プールにサイトを配置する方法
共有ホスト環境では、独立したアプリケーション プールにアプリケーションを配置する必要があります。これにより、固有の ID を持つ独立したオペレーティング システム プロセスにアプリケーションを分離できます。また、あるサイトと別のサイトを、あるレベルで分離できます (次のセクションでは、分離を実現するためにアプリケーション プールの ID を構成する方法を説明します)。
インターネット インフォメーション サービス 6.0 (Windows Server 2003 SP2) の場合
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
左側のウィンドウで、現在のサーバーのノードを展開します。
-
[アプリケーション プール] を右クリックし、[新規作成] をクリックし、[アプリケーション プール] をクリックします。
-
新しいアプリケーション プールの一意の名前を入力し、[OK] をクリックします。
-
[Web サイト] ノードを展開します。
-
対象の Web サイトを右クリックし、[プロパティ] をクリックします。
-
[ホーム ディレクトリ] タブをクリックします。
-
ダイアログ ボックスの下部にある [アプリケーション プール] フィールドで、新しいアプリケーション プールを選択します。
-
[OK] をクリックします。
インターネット インフォメーション サービス 7 (Windows Vista SP2 および Windows Server 2008 SP1) およびインターネット インフォメーション サービス 7.5 (Windows 7 および Windows Server 2008 R2) の場合
「独立した IIS サイトにアプリケーションを配置する方法」セクションの手順を実行した後、新しいサイトは、新しい独立したアプリケーション プールに自動的に配置されます。ただし、新しい独立したアプリケーション プールを使用するように既存のサイトを構成する必要がある場合は、以下の手順を実行します。
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
[接続] ウィンドウで、現在のサーバーのノードを展開します。
-
[アプリケーション プール] ノードを選択します。
-
[操作] ウィンドウの [アプリケーション プールの追加] リンクをクリックします。
-
新しいアプリケーション プールの一意の名前を入力し、対象の .NET Framework のバージョンとパイプライン モードを選択します。
-
[OK] をクリックします。一覧に新しいアプリケーション プールが表示されます。
-
[接続] ウィンドウで、[サイト] ノードを展開します。
-
この手順で既に作成したアプリケーション プールに移動させるサイトを選択します。
-
[操作] ウィンドウの [基本設定] リンクをクリックします。
-
[サイトの編集] ダイアログ ボックスで、[選択] をクリックします。
-
[アプリケーション プール] 一覧で、既に作成したアプリケーション プールを選択します。
-
[OK] をクリックします。
[サイトの編集] ダイアログ ボックスで、[OK] をクリックします。
分離を実現するためにアプリケーション プールを構成する方法 (プロセス ID)
アプリケーション プールは、Windows のプロセス (複数の場合あり) でアプリケーションとサイトをホストします。プロセスが実行される ID を構成することができます。共有ホスト環境では、アプリケーションごとに独立した ID が必要です。独立した ID により、各アプリケーションは一意のアカウントのコンテキストで実行されるようになります。これにより、ファイル システムの DACL (随意アクセス制御リスト) および基本のオペレーティング システムに組み込まれたプロセス分離の機能を使用して、適切に分離を行うことが可能になります。ユーザー アカウントを作成して、そのアカウントを使用するようにアプリケーション プールを割り当てるには、以下の手順を実行します。
インターネット インフォメーション サービス 6.0 (Windows Server 2003 SP2) の場合
アプリケーション プールの ID として使用するローカル ユーザー アカウントを作成する
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
左側のウィンドウで、[ローカル ユーザーとグループ] を展開します。
-
[ユーザー] ノードを右クリックし、[新しいユーザー] をクリックします。
-
新しいユーザー アカウント用の一意の名前と強力なパスワードを入力します。
-
[ユーザーは次回ログオン時にパスワード変更が必要] チェック ボックスをオフにします。
-
[ユーザーはパスワードを変更できない] チェック ボックスをオンにします。
-
[作成] をクリックし、[閉じる] をクリックします。
-
左側のウィンドウで、[ユーザー] ノードを選択します。一覧に新しいアカウントが表示されます。
新しいローカル ユーザー アカウントを使用するようにアプリケーション プールを構成する
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
左側のウィンドウで、現在のサーバーのノードを展開します。
-
[アプリケーション プール] ノードを展開します。
-
対象のアプリケーション プールを右クリックし、[プロパティ] をクリックします。
-
[ID] タブをクリックします。
-
[構成可能] オプション ボタンをオンにします。
-
新しいアカウントのユーザー名とパスワードを入力します。
-
[OK] をクリックします。
-
[パスワードの確認] ダイアログ ボックスで再度パスワードを入力して、[OK] をクリックします。
インターネット インフォメーション サービス 7 および 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 および Windows Server 2008 R2) の場合
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
[接続] ウィンドウで、現在のサーバーのノードを展開します。
-
[アプリケーション プール] ノードを選択します。
-
対象のアプリケーション プールを選択します。
-
[操作] ウィンドウの [詳細設定] リンクをクリックします。
-
[プロセス モデル] セクションで、[ID] プロパティを [ApplicationPoolIdentity] に設定します。この設定により、このアプリケーション プール用の一意の ID が自動的に作成されます。以下のセクションでは、この一意の ID を使用すると、アプリケーションでアクセスする必要があるファイルの場所に対して、DACL (随意アクセス制御リスト) を設定できます。
-
[OK] をクリックします。
アプリケーション コンテンツの場所に対して DACL を構成する方法
DACL (随意アクセス制御リスト) とは、オブジェクトに関連付けられ、オブジェクトへのアクセスの制御に使用できる、アクセス許可のリストです。DACL を使用してアプリケーション コンテンツへのアクセスを制限すると、同一の Web サーバー上でホストされるサイト間の分離を強化できます。ACL および IIS の ID の詳細については、「ファイル システムの ACL を介した IIS のコンテンツのセキュリティ保護 (英語)」を参照してください。
IIS のすべてのバージョン
-
コマンド プロンプトまたはエクスプローラーで、サイト コンテンツのルート フォルダーを開きます。
-
以下のいずれかの方法を使用して、この場所への管理者以外のアクセスのエントリを削除します (これには Users グループが含まれます)。
-
エクスプローラーで、フォルダーを右クリックし、[プロパティ] を選択し、[セキュリティ] タブをクリックし、アクセス制御リストを変更します。
-
コマンド プロンプトで、icacls.exe ユーティリティ (または古いバージョンの Windows オペレーティングシステムでは cacls.exe) を使用して、アクセス制御リストを変更します。
-
-
サイトに対して選択したプロセス ID 用の新しいエントリを追加します。
-
フォルダーに、新しい ID の "読み取りと実行" アクセス許可を付与します。
アプリケーションによる書き込みのアクセス許可が必要である特定のフォルダー ("Uploads" フォルダーなど) が存在する場合は、以下の手順を実行します。
インターネット インフォメーション サービス 6.0 (Windows Server 2003 SP2) の場合
-
エクスプローラーで、フォルダーを右クリックし、[プロパティ] を選択し、[セキュリティ] タブをクリックし、プロセス ID の [変更] アクセス許可を追加します。
-
静的コンテンツ (画像やテキスト ファイルなど) が含まれるフォルダーに対しては、以下の手順を実行します。
-
インターネット インフォメーション サービス (IIS) マネージャーを開きます。
-
左側のウィンドウで、適切なフォルダー名を右クリックし、[プロパティ] をクリックします。
-
[ディレクトリ] タブをクリックします。
-
[実行アクセス権] 一覧で、[なし] を選択します。
-
インターネット インフォメーション サービス 7 および 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 および Windows Server 2008 R2) の場合
-
エクスプローラーで、フォルダーを右クリックし、[プロパティ] を選択し、[セキュリティ] タブをクリックし、プロセス ID の [変更] アクセス許可を追加します。
-
静的コンテンツ (画像やテキスト ファイルなど) が含まれるフォルダーに対しては、次のように、accessPolicy 設定でスクリプトのアクセス許可を禁止する場所に関する、"web.config" ファイル エントリを追加します。<system.webServer> <handlers accessPolicy="Read,Write" /> </system.webServer>
Temporary ASP.NET Files フォルダーの場所を構成する方法、およびサイトごとに DACL を設定する方法
ASP.NET には、コンパイル済みファイルなどの一時データを格納するための、サーバー上の場所が必要です。これは、通常は Temporary ASP.NET Files というフォルダーです。既定では、このフォルダーは .NET Framework がインストールされているフォルダーの下にあります。サイトごとに異なる一時的な場所を割り当て、個別にフォルダーのセキュリティを保護すると、同一の Web サーバー上でホストされるサイト間の分離を適切に強化できます。Temporary ASP.NET Files フォルダーの詳細については、「ASP.NET の動的コンパイルの概要」を参照してください。
サイトごとに異なる Temporary ASP.NET Files フォルダーの場所を構成する方法
-
サイト用の一時的な ASP.NET のファイルを格納するために、サイトごとに新しいフォルダーを作成します。一時ファイルを格納するには、システム ドライブではないドライブを使用することをお勧めします。
-
サーバーのルートの web.config ファイルまたは applicationHost.config ファイルで、次のように <location> 要素を使用して、その特定のサイト用に新しいフォルダーの場所を指定する設定を追加します。<configuration> <location path="path"> <system.web> <compilation tempDirectory="temp-files-path" /> </system.web> </location> <!-- and so on --> </configuration>
Temporary ASP.NET Files フォルダーの場所に対して適切な DACL を設定する方法
-
コマンド プロンプトまたエクスプローラーを使用して、この場所への管理者以外のアクセスのアクセス許可を削除します (これには Users グループが含まれます)。
-
以前にこのサイトに対して選択したプロセス ID 用の新しいエントリを追加し、この ID にそのフォルダー用の [変更] アクセス許可を付与します。
ルート構成ファイルから重要な構成データを削除する方法
アプリケーションの web.config ファイルは、サービスされるアプリケーションのコンテンツ フォルダーにあります。ASP.NET はアプリケーションの web.config ファイルのサービスは行いませんが、実現可能である場合は、コンピューター キー設定や接続文字列などのセキュリティ上重要な情報は、アプリケーションの場所以外の構成ファイルに配置することを推奨します。これにより、情報漏えいに対する防御が改善されます。
インターネット インフォメーション サービス 6.0 (Windows Server 2003 SP2) の場合
セキュリティ上重要な構成情報をルートの web.config ファイルに格納することは、さまざまなサイト間でのデータの分離に適したオプションではありません。これは、すべてのサイトがこのファイルへの読み取りアクセス許可を持っているためです。そのため、IIS 6 では、重要な構成をアプリケーションの web.config ファイルに格納する必要があります。これにより、サイトで重要な構成を相互に分離することができます。この場合、アプリケーションでは ASP.NET の防御に依存して、アプリケーションの web.config ファイルがサービスされないようにして、重要な情報が漏えいしないようにします。
インターネット インフォメーション サービス 7 および 7.5 (Windows Vista SP2、Windows Server 2008 SP1、Windows 7 および Windows Server 2008 R2) の場合
IIS 7 および以降のバージョンの場合は、IIS applicationHost.config ファイルにある重要な構成を、その適用先であるサイトに構成をスコープする <location> 要素内に移動します。詳細については、「IIS 7.0 の構成でロックを使用する方法 (英語)」を参照してください。マイクロソフトは、お客様を保護するための共同作業に関して、次の方に謝意を表します。