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

标签 asp.net iis

我们已经将一个现有的应用程序放到了一个带有 IIS 7.5 的新 R2 服务器上。

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

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

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

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

弗拉丹

最佳答案

编辑 :

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

原始答案 :

在 IIS 7.5 中创建新的应用程序池时,AppPoolIdentity 用户将添加到 IIS_IUSRS团体。该组“可以访问所有必要的文件和系统资源,以便帐户在添加到该组时可以无缝地充当应用程序池身份”(1)。 IIS_IUSRS组有权写入绝大多数文件系统(在 protected 文件夹之外,如 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: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.



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

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

System.UnauthorizedAccessException: Access to the path 'C:\test.txt' is denied.



在中、低或最低信任级别下,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

关于asp.net - IIS 7.5 App Pool Identity 权限未分配给文件夹,但应用程序仍然可以写入其文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267941/

相关文章:

javascript - 如何在 Javascript 中向用户显示是/否消息框?

asp.net - 如何在 ASP.NET MVC 中实现 Disqus?

c# - 如何在C#中序列化一个对象并防止被篡改?

windows - 我正在使用 Window Server 2008 VPS,当用户输入 IP 地址时,如何使它转到 Tomcat 页面而不是 IIS 页面?

powershell - 在 Powershell 中启用 IIS 应用程序的身份验证

asp.net - 如何在单元测试中使用Redis?

c# - 如何找到 Visual Studio Web 服务器应用程序池模式?

asp.net - 在 WCF 中支持 Mtom 和 Text 作为 MessageEncoding

node.js - 在 IISNode 上运行的 Azure Node.js 应用程序中未定义端口

ASP.NET - 以编程方式控制下拉列表回发