IIS AppPoolIdentity和文件系统写入访问权限

这是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允许这些写入发生的方式,即使似乎没有授予明确的文件系统访问权限。


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

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

    关于你能够写入你的c:dump文件夹的意见。 如果您查看高级安全设置中的权限,您将看到以下内容:

    看到从c:继承的c:

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

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

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

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

    所以是的,乍一看,它看起来像ApplicationPoolIdentity拥有比它应该更多的权限,但它实际上没有比它的组成员身份要求更多的权限。

    可以使用SysInternals Process Explorer工具检查ApplicationPoolIdentity的组成员资格。 找到您感兴趣的应用程序池标识正在运行的工作进程(您将不得不将User Name名列添加到要显示的列列表中:

    在这里输入图像描述

    例如,我有一个名为900300的池,它具有IIS APPPOOL900300的应用程序池标识。 右键点击进程的属性并选择安全选项卡,我们看到:

    正如我们所看到的, IIS APPPOOL900300Users组的成员。


  • 右键点击文件夹。

  • 点击属性

  • 点击安全标签。 你会看到这样的东西:

  • 在这里输入图像描述

  • 点击上方屏幕中的“编辑...”按钮。 你会看到这样的东西:
  • 在这里输入图像描述

  • 点击上方屏幕中的“添加...”按钮。 你会看到这样的东西:
  • 在这里输入图像描述

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

  • 现在输入“iis apppool your_apppool_name”并点击“检查姓名”按钮。 如果该应用程序池存在,您将在带有下划线的文本框中看到您的应用程序池名称。 点击确定按钮。
  • 在这里输入图像描述

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

  • 点击应用按钮,然后确定。


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

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

    链接地址: http://www.djcxy.com/p/21417.html

    上一篇: IIS AppPoolIdentity and file system write access permissions

    下一篇: How can I get my webapp's base URL in ASP.NET MVC?