IIS 7.5 App Pool Identity 权限未分配给文件夹,但应用程序仍然可以写入其文件夹?

Posted

技术标签:

【中文标题】IIS 7.5 App Pool Identity 权限未分配给文件夹,但应用程序仍然可以写入其文件夹?【英文标题】:IIS 7.5 App Pool Identity permission not assigned to folder, but application still can write to its folder? 【发布时间】:2011-05-15 03:41:47 【问题描述】:

我们已将现有应用程序放到具有 IIS 7.5 的新 R2 服务器上。

现在一切正常,应用程序可以写入它的文件夹...但是我们想知道...新的 IIS 是如何附带 IIS 应用程序池标识的故事,它为每个应用程序创建一个新的虚拟用户,所以它已经完成了这个。

文档中指出,必须将此用户分配到文件夹才能使一切正常工作......但在我们的例子中它不是?!而且它仍然有效,通过该用户的应用程序可以访问?

论坛上的某个地方有人提到这是因为在完全信任下运行的应用程序可以在任何地方写任何东西......但这没有意义吗?我所知道的 CAS 不能处理这个问题?

那么在 IIS 7.5 下,拥有自己的池的应用程序如何拥有文件夹安全设置下没有的写入权限?

弗拉丹

【问题讨论】:

如果您发布了 1) 应用程序池设置、2) 虚拟目录设置和 3) 应用程序/Web 配置设置,将会很有帮助... 【参考方案1】:

编辑

虽然我觉得下面概述的内容很好地讨论了信任级别如何影响 ASP.NET 中的文件系统访问,但我觉得原始问题的正确答案已发布here(是的,我不得不重新提出这个问题添加了更多信息的问题)。基本上,AppPoolIdentity 用户也是Users 组的成员,这就是该用户可以写入文件系统不同区域的方式。

原始答案

当您在 IIS 7.5 中创建新的应用程序池时,AppPoolIdentity 用户将添加到 IIS_IUSRS 组。该组“可以访问所有必要的文件和系统资源,以便帐户在添加到该组时可以无缝地充当应用程序池身份”(1)。 IIS_IUSRS 组有权写入绝大多数文件系统(在受保护的文件夹之外,如 C:\、C:\Users、C:\Windows 等)。不幸的是,我无法找到任何方法来明确地看到IIS_IUSRS 组可以使用 Windows 资源管理器访问给定的文件夹(编辑:上面引用的帖子概述了如何“查看”此访问权限) .但是,通过在尝试写入该文件夹之前授予对文件夹上的 IIS_IUSRS 组的 DENY 访问权限(这将导致 System.UnauthorizedAccessException),可以隐式看到此访问权限。

.NET 信任级别也会影响权限。在 IIS 7.5 中,如果 Web 应用程序在完全、高或中等信任下运行,则 IIS AppPoolIdentity 用户有权写入默认情况下应用程序运行的文件夹。在完全信任或高度信任下运行时,默认情况下 IIS AppPoolIdentity 用户可以写入除 C:\、C:\Windows 或 C:\Users 等文件夹之外的任何文件夹(除非授予用户对这些文件夹的特定访问权限)。在中等信任级别,默认情况下 IIS AppPoolIdentity 用户仍然可以写入 Web 应用程序文件夹,但尝试写入任何其他文件夹会导致以下异常:

System.Security.SecurityException: 请求类型的许可 'System.Security.Permissions.FileIOPermission, mscorlib,版本=4.0.0.0, 文化=中性, PublicKeyToken=b77a5c561934e089' 失败了。

当尝试以低或最低信任级别写入任何文件时,也会发生同样的异常。

这与您在尝试访问 AppPoolIdentity 用户在完全信任或高度信任下运行时无权访问的文件时收到的错误不同。在这种情况下抛出的异常是System.UnauthorizedAccessException,消息类似于:

System.UnauthorizedAccessException: 访问路径 'C:\test.txt' 是 拒绝。

在中等、低或最低信任级别 CAS 接管并拒绝访问文件创建方法,无论文件夹权限如何。

简短的故事是,如果您想确保您的 Web 应用程序不能写入 Web 应用程序文件夹以外的任何文件夹,您需要将应用程序设置为在中等信任或更低信任下运行。如果您这样做,那么您需要进行测试以确保应用程序需要执行的功能没有需要高于中等信任度的功能。

参考资料:

1 - http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis-7/

2 - http://technet.microsoft.com/en-us/library/dd163542.aspx

【讨论】:

这是一个很好的答案。如果有兴趣阅读更多内容,请查看此链接。除了其他一些有趣的读物外,本文还参考了这个答案。 medium.com/@ShamreshKhan/…

以上是关于IIS 7.5 App Pool Identity 权限未分配给文件夹,但应用程序仍然可以写入其文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

IIS让我对app pool用户感到困惑

停止从 IIS 7.5 中的父 ASP.NET 应用程序继承 web.config

确定哪个 w3wp.exe 进程属于 Windows 7 / IIS7.5 中的哪个 App Pool?

在 IIS 7.5 中托管的 .Net Remoting 服务中,如何删除“Server : IIS/7.5”标记表单响应头

无法从另一个 7.5 连接到 IIS 7.5

IIS 7.5 安装MVC