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

Posted

技术标签:

【中文标题】应用程序对父站点文件夹结构的 AppPool 权限【英文标题】:Application's AppPool permisions on parent Site folder structure 【发布时间】:2012-06-29 06:24:10 【问题描述】:

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 已经使用 &lt;location path="." inheritInChildApplications="false"&gt; 技术破坏了子 app/vdir 继承。

    鉴于此身份帐户本质上对许多文件夹具有写入权限 - IIS AppPoolIdentity and file system write access permissions - 这不会带来安全风险吗?例如,现在不能有任何子应用程序写入父站点的 App_Data 文件夹或其他位置吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于应用程序对父站点文件夹结构的 AppPool 权限的主要内容,如果未能解决你的问题,请参考以下文章

新创建的 IIS AppPool 标识的权限集

使用C#远程设置IIS AppPool用户的文件权限

授予给定文件夹上的本地应用程序池组的写入权限

访问报表服务器的 AppPool 权限问题

IIS AppPool 检查域组成员的权限?

IIS 7:身份“IIS APPPOOL\DefaultAppPool”没有足够的权限来访问临时目录