ApplicationHost.config コンテキスト
<!-- App Pool -->
<add name="Site - Intranet" autoStart="true" managedRuntimeVersion="v4.0" />
<add name="App - App1" autoStart="true" managedRuntimeVersion="v4.0" />
<add name="App - App2" autoStart="true" managedRuntimeVersion="v2.0" />
<!-- Site -->
<site name="Intranet" id="1" serverAutoStart="true">
<application path="/" applicationPool="Site - Intranet">
<virtualDirectory path="/" physicalPath="D:\Web\Sites\Intranet" />
</application>
<application path="/Apps/App1" applicationPool="Application - App1">
<virtualDirectory path="/" physicalPath="D:\Web\Apps\App1" />
</application>
<application path="/Apps/App2" applicationPool="Application - App2">
<virtualDirectory path="/" physicalPath="D:\Web\Apps\App2" />
</application>
</site>
ご覧のとおり、独自の 4.0 CLR アプリ プールと ID を持つ 1 つのサイトがあり、それぞれ独自のアプリ プールと ID を持つ 2 つの個別のアプリケーションをホストしています。3 つすべてが、個別のファイル システムの場所にサンドボックス化されます。
AppPoolIdentity アカウントの NTFS アクセス許可
それぞれのフォルダーの各 AppPoolIdentity にアクセス許可を付与する必要があります (例:IIS AppPool\Site - Intranet
に対する読み取り/実行アクセス許可が必要D:\Web\Sites\Intranet
です)。
この時点で、アプリケーション App1 は、その親サイトの物理フォルダー構造内のファイルを読み取り/実行できないはずです。逆に、ホスティング サイトのイントラネットは、App1 の物理フォルダー構造内のファイルを読み取り/実行できないようにする必要があります。私はそれを正しく理解していますか?
子アプリケーション (例) にアクセスすると、アクセス許可が不十分なためhttp://intranet/apps/app1
、親サイトのファイルを読み取ることができないというサーバー エラーが表示されます。web.config
アプリケーションの ID アカウントに、親サイトの物理フォルダー構造に対する読み取り/実行アクセス許可 (例:へのIIS AppPool\App - App1
アクセスD:\Web\Sites\Intranet
) を付与すると、問題は解決されます。
質問
web.config
子アプリケーションが親サイトからその他のファイルを読み取る必要があるのはなぜですか?注:親サイトの web.config は、この手法を使用して子アプリ/vdir の継承を既に中断してい
<location path="." inheritInChildApplications="false">
ます。この ID アカウントには本来、多くのフォルダーに対する書き込みアクセス許可 ( IIS AppPoolIdentity およびファイル システムの書き込みアクセス許可) があるため、セキュリティ リスクは発生しませんか? たとえば、子アプリケーションが親サイトの App_Data フォルダーやその他の場所に書き込む可能性はありませんか?