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 应用程序池和身份的站点,它托管两个独立的应用程序,每个应用程序都有自己的应用程序池和身份。这三个都被沙箱化到单独的文件系统位置。
AppPoolIdentity 帐户的 NTFS 权限
必须授予每个 AppPoolIdentity 对其各自文件夹的权限(例如,IIS AppPool\Site - Intranet
需要对 的读取/执行权限D:\Web\Sites\Intranet
)。
此时,应用程序 App1 应该无法读取/执行其父站点的物理文件夹结构中的文件。反之亦然,托管站点 Intranet 不应该能够读取/执行 App1 的物理文件夹结构中的文件。我理解对了吗?
当我访问子应用程序(例如)时,我收到一个服务器错误,指出由于权限不足http://intranet/apps/app1
,它无法读取父站点的文件。web.config
如果我授予应用程序的身份帐户对父站点的物理文件夹结构的读取/执行权限(例如IIS AppPool\App - App1
访问D:\Web\Sites\Intranet
),问题就解决了。
问题)
为什么子应用程序需要
web.config
从父站点读取或任何其他文件?注意:我的父站点的 web.config 已经使用该
<location path="." inheritInChildApplications="false">
技术破坏了子 app/vdir 继承。鉴于此身份帐户本质上对许多文件夹具有写入权限 - IIS AppPoolIdentity 和文件系统写入访问权限- 这不会带来安全风险吗?例如,现在不能有任何子应用程序写入父站点的 App_Data 文件夹或其他地方吗?