【问题标题】:IIS AppPoolIdentity and file system write access permissionsIIS AppPoolIdentity 和文件系统写访问权限
【发布时间】:2011-07-23 04:53:15
【问题描述】:

这是一个关于 IIS 7.5 和 ASP.NET 的问题,我一直在研究它却一无所获。任何帮助将不胜感激。

我的问题是:在 IIS 7.5 中使用 ASP.NET,在完全信任的情况下,IIS 和/或操作系统如何允许 Web 应用程序写入 C:\dump 之类的文件夹?为什么我不必为应用程序池用户显式添加写入权限(在本例中为 ApplicationPoolIdentity)?

我知道的就这么多:

  • 在 IIS 7.5 中,应用程序池的默认标识为 ApplicationPoolIdentity
  • ApplicationPoolIdentity 代表一个名为“IIS APPPOOL\AppPoolName”的Windows用户账号,在创建应用程序池时创建,其中AppPoolName是应用程序池的名称。
  • 默认情况下,“IIS APPPOOL\AppPoolName”用户是IIS_IUSRS 组的成员。
  • 如果您在完全信任下运行,您的 Web 应用程序可以写入文件系统的许多区域(不包括 C:\UsersC:\Windows 等文件夹)。例如,您的应用程序将有权写入某些文件夹,例如 C:\dump
  • 默认情况下,IIS_IUSRS 组没有对C:\dump 的读取或写入访问权限(至少没有通过 Windows 资源管理器中的“安全”选项卡可见的访问权限)。
  • 如果您拒绝对IIS_IUSRS 的写入访问权限,您将在尝试写入文件夹时收到 SecurityException(如预期的那样)。

那么,考虑到所有这些,如何向“IIS APPPOOL\AppPoolName”用户授予写访问权限? w3wp.exe 进程以该用户身份运行,那么是什么允许该用户写入它似乎没有显式访问权限的文件夹?

请注意,我理解这可能是为了方便起见,因为如果您在完全信任下运行,授予用户访问它需要写入的每个文件夹的权限会很痛苦。如果您想限制此访问,您始终可以在中等信任下运行该应用程序。我有兴趣了解操作系统和/或 IIS 允许这些写入发生的方式,即使似乎没有明确授予文件系统访问权限。

【问题讨论】:

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


    【解决方案1】:

    ApplicationPoolIdentity 被分配了Users 组以及IIS_IUSRS 组的成员资格。乍一看,这可能有点令人担忧,但是Users 组的 NTFS 权限有些有限。

    例如,如果您尝试在C:\Windows 文件夹中创建一个文件夹,那么您会发现您做不到。 ApplicationPoolIdentity 仍然需要能够从 Windows 系统文件夹中读取文件(否则工作进程将如何能够动态加载必要的 DLL)。

    关于您对能够写入c:\dump 文件夹的观察。如果您查看高级安全设置中的权限,您会看到以下内容:

    查看从c:\ 继承的特殊权限:

    这就是您网站的ApplicationPoolIdentity 可以读取和写入该文件夹的原因。该权利是从c:\ 驱动器继承而来的。

    在您可能有数百个站点的共享环境中,每个站点都有自己的应用程序池和应用程序池标识,您可以将站点文件夹存储在已删除 Users 组并设置权限的文件夹或卷中这样只有管理员和 SYSTEM 帐户才能访问(通过继承)。

    然后,您将单独分配每个IIS AppPool\[name] 对其站点根文件夹所需的必要权限。

    您还应确保您创建的用于存储潜在敏感文件或数据的任何文件夹都已删除 Users 组。您还应确保您安装的任何应用程序不会将敏感数据存储在其c:\program files\[app name] 文件夹中,而是使用用户配置文件文件夹。

    所以是的,乍一看,ApplicationPoolIdentity 似乎拥有比它应有的更多的权利,但实际上它没有比它的组成员资格规定的更多的权利。

    可以使用 SysInternals Process Explorer tool 检查 ApplicationPoolIdentity 的组成员身份。找到使用您感兴趣的应用程序池标识运行的工作进程(您必须将 User Name 列添加到要显示的列列表中:

    例如,我在这里有一个名为900300 的池,其应用程序池标识为IIS APPPOOL\900300。右键单击进程的属性并选择我们看到的安全选项卡:

    我们可以看到IIS APPPOOL\900300Users 组的成员。

    【讨论】:

    • @Kev [+1] 我在这里发布了一个关于应用程序池身份的 NTFS 权限的类似问题:stackoverflow.com/questions/11232675/… - 如果您能看一下,我将不胜感激。
    • @one.beat.consumer - 抱歉,我从未看到您的评论。你还在纠结这个问题吗?
    • @Kev - 是的,这已不再是一个问题,因为我已经被拉到一边去其他废话,但它仍然没有解决。有什么想法吗?
    • 让我们投票决定将此部分包含在 MSDN 中。从来没有花时间解决这个问题,所以这是一个很大的帮助(我很惭愧我从来不知道)。
    • 不清楚为什么这个 Microsoft IIS 核心文档在 SO 而不是 MSDN 上。
    【解决方案2】:
    1. 右键单击文件夹。

    2. 点击属性

    3. 单击安全选项卡。你会看到这样的东西:

    1. 单击上方屏幕中的“编辑...”按钮。您将看到如下内容:

    1. 单击上方屏幕中的“添加...”按钮。您将看到如下内容:

    1. 单击上方屏幕中的“位置...”按钮。你会看到这样的东西。现在,转到此树结构的最顶部并选择您的计算机名称,然后单击“确定”。

    1. 现在键入“iis apppool\your_apppool_name”并单击“检查名称”按钮。如果 apppool 存在,您将在带有下划线的文本框中看到您的 apppool 名称。点击确定按钮。

    1. 选中/取消选中您需要授予帐户的任何访问权限

    2. 单击应用按钮,然后单击确定。

    【讨论】:

      【解决方案3】:

      IIs 中的每个应用程序池默认在 c:\users 下创建自己的具有完全读/写权限的安全用户文件夹。打开您的用户文件夹并查看那里有哪些应用程序池文件夹,右键单击并检查他们对分配的应用程序池虚拟帐户的权限。您应该会看到已添加您的应用程序池帐户,并为其根和子文件夹分配了读/写访问权限。

      所以这种类型的文件存储访问是自动完成的,您应该能够在应用程序池用户帐户文件夹中写入您喜欢的任何内容,而无需更改任何内容。这就是为每个应用程序池创建虚拟用户帐户的原因。

      【讨论】:

      • 只有在“加载用户配置文件”设置为 True 时才会发生这种情况。
      • 没错,这意味着如果不是真的 AppPool 用户的文件夹不会被创建,对吧?这就是他们以这种方式构建它的原因.....以防止 II 访问和存储垃圾在 windows/temp 和整个硬盘驱动器中,而不是仅用于该帐户的托管安全文件夹。
      【解决方案4】:

      我尝试使用此方法解决对 IIS 网站的访问问题,该问题在事件日志 → Windows → 应用程序中显示为 like the following

      日志名称:应用程序 来源:ASP.NET 4.0.30319.0 日期:2012 年 1 月 5 日下午 4:12:33 事件编号:1314 任务类别:网络事件 级别:信息 关键词:经典 用户:不适用 电脑:SALTIIS01 描述: 事件代码:4008 事件消息:请求的文件授权失败。 活动时间:1/5/2012 4:12:33 PM 活动时间(UTC):1/6/2012 12:12:33 AM 事件 ID:349fcb2ec3c24b16a862f6eb9b23dd6c 事件顺序:7 事件发生:3 事件详细代码:0 应用信息: 应用域:/LM/W3SVC/2/ROOT/Application/SNCDW-19-129702818025409890 信任级别:完全 应用程序虚拟路径:/Application/SNCDW 应用程序路径:D:\Sites\WCF\Application\SNCDW\ 机器名称:SALTIIS01 处理信息: 进程 ID:1896 进程名称:w3wp.exe 账户名:iisservice 索取资料: 请求网址:http://webservicestest/Application/SNCDW/PC.svc 请求路径:/Application/SNCDW/PC.svc 用户主机地址:10.60.16.79 用户:js3228 已通过身份验证:真 身份验证类型:协商 线程账户名:iisservice

      最后我不得不给 Windows Everyoneread access to that folder 让它正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-04
        • 2017-03-23
        • 1970-01-01
        • 2013-10-14
        • 2012-07-12
        • 2011-10-29
        • 1970-01-01
        相关资源
        最近更新 更多