2011-03-25 114 views
359

这是IIS 7.5和ASP.NET的一个问题,我一直在研究和获取无处可去。任何帮助将不胜感激。IIS AppPoolIdentity和文件系统写入权限

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

回答

375

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

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

关于你对能够写信给你c:\dump文件夹的意见。如果你看一看在高级安全设置的权限,您将看到以下内容:

enter image description here

请参阅特殊的权限是从c:\继承:

enter image description here

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

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

你会再单独分配必要的权限,每个IIS AppPool\[name]需要在它的网站根目录。

你也应该确保创建您存储潜在的敏感文件或数据的任何文件夹有Users组中删除。你还应该确保你安装任何应用程序不敏感数据存储在他们的c:\program files\[app name]文件夹和它们使用的用户配置文件夹代替。

所以是的,乍一看,它看起来像ApplicationPoolIdentity有比它应该更多的权利,但它实际上没有更多的权利比它的组员资格指定。可以使用SysInternals Process Explorer tool检查ApplicationPoolIdentity的组成员资格。查找与应用程序池标识您感兴趣的运行工作进程(你必须将User Name列添加到列的列表中显示:

enter image description here

例如,我有一个游泳池。这里命名900300其中有IIS APPPOOL\900300应用程序池标识右击该进程的属性,然后选择安全选项卡,我们看到:

enter image description here

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

+0

@Kev [+1]我张贴的应用程序池标识regardin NTFS权限类似的问题在这里:http://stackoverflow.com/questions/11232675/applications-apppool-permisions-on-parent-site-文件夹结构 - 如果你看一看,我将不胜感激。 – 2012-06-27 19:09:06

+0

@ one.beat.consumer - 抱歉,我从未看到您的评论。你仍然坚持这个问题? – Kev 2012-09-19 03:10:27

+0

@Kev - 是的,它已经不再成为一个问题了,因为我已经被撇到其他废话,但它仍然没有解决。有什么想法吗? – 2012-09-20 17:15:29

0

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

那么该类型的文件存储的访问是自动完成的,你应该能够编写无论你在应用程序池的用户帐户文件夹像有在不改变任何东西。这就是为什么创建每个应用程序池的虚拟用户帐户的原因。

+0

仅当“加载用户配置文件”设置为True时才会发生这种情况。 – JamesQMurphy 2017-10-20 15:49:14

+0

那是对的,这意味着AppPool用户的文件夹不会被创建,如果它不正确的话?这就是为什么他们这样构建它.....以防止II在windows/temp和整个硬盘驱动器访问和存储垃圾,而不是仅仅为该帐户使用托管安全文件夹。 – Stokely 2017-10-22 22:24:18

12
  1. 右键单击文件夹。

  2. 单击属性

  3. 点击安全标签。你会看到这样的事情:

enter image description here

  • 点击 “编辑...”,在上面的屏幕按钮。你会看到这样的事情:
  • enter image description here

  • 点击 “添加...” 按钮,在上面的屏幕。你会看到这样的事情:
  • enter image description here

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

  • 现在键入 “IIS程序池\ your_apppool_name” 并点击 “检查名称” 按钮。如果该应用程序池存在,您将在带有下划线的文本框中看到您的应用程序池名称。点击确定按钮。
  • enter image description here

  • 选中/取消选中您需要授予帐户

  • 点击应用按钮,然后确定任何访问。