应用程序在父站点文件夹结构上的AppPool权限

时间:2012-06-27 18:25:27

标签: asp.net permissions windows-server-2008 iis-7.5 application-pool

ApplicationHost.config Context

<!-- 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上的读取/执行权限)。

此时,Application App1应该无法读取/执行其父网站的物理文件夹结构中的文件。反之亦然,托管站点Intranet不应该能够在App1的物理文件夹结构中读取/执行文件。 我理解是吗?

当我访问子应用程序(ex http://intranet/apps/app1)时,由于权限不足,我收到服务器错误,指出它无法读取父网站的web.config文件。

如果我授予应用程序的身份帐户对父网站的物理文件夹结构的读/执行权限(例如IIS AppPool\App - App1访问D:\Web\Sites\Intranet),问题就解决了。

问题(S)

  1. 为什么子应用程序需要从父站点读取web.config或任何其他文件?

    注意:我的父网站的web.config已经使用<location path="." inheritInChildApplications="false">技术破坏了子app / vdir继承。

  2. 鉴于此身份帐户本身具有许多文件夹的写权限 - IIS AppPoolIdentity and file system write access permissions - 这是否会带来安全风险?例如,现在任何子应用程序都无法写入父站点的App_Data文件夹或其他地方吗?

1 个答案:

答案 0 :(得分:0)

对于#1,子文件夹/应用程序默认继承其父文件夹的web.config设置。我会假设ASP.NET在尝试访问这些父web.config文件之前不检查您的元素。对我有意义,虽然这不是你想要的。

对于#2,不太确定。如果您的应用程序池标识是用户的成员(作为您的参考答案状态),那么它确实具有对许多地方的读取权限,但不会写入太多。我不会听那个提问者说的话。不确定孩子写到父文件夹。您应该能够使用适当的文件系统权限来阻止它(请记住您的应用程序池标识所属的任何组)。我从来没有这个配置,所以我不确定。