2010-11-24 50 views
16

我们已经把现有的应用程序放到了IIS 7.5的新R2服务器上。IIS 7.5应用程序池标识权限未分配给文件夹,但应用程序仍然可以写入其文件夹?

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

它在该用户必须为了一切工作被分配到文件夹,文档说明...但是对我们来说这不是?!它仍然有效,通过该用户的应用程序可以访问?

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

所以IIS 7.5下如何与它自己的游泳池有写权限的应用程序文件夹下的安全设置,它不?

弗拉丹

+2

这将是有益的,如果你发布你1)应用程序池设置,2)虚拟目录设置,以及3)应用程序/ Web配置设置... – bitxwise 2011-03-13 04:48:47

回答

19

编辑

虽然我觉得我的概述如下是如何信任水平发挥到ASP.NET文件系统的访问商量好了,我正确的答案感到原来的问题发布here(是的,我不得不重新提出这个问题,增加一点信息)。基本上,AppPoolIdentity用户也是Users组的成员,这就是该用户可以如何写入文件系统的不同区域。

原单ANSWER

当您在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用户可以访问写入应用程序缺省运行的文件夹。在Full或High信任下运行时,默认情况下,IIS AppPoolIdentity用户可以写入除C:\,C:\ Windows或C:\ Users之类的文件夹以外的任何文件夹(除非用户被授予对这些文件夹的特定访问权)。在中等信任水平,IIS AppPoolIdentity用户仍然可以编写到系统默认的Web应用程序文件夹,但试图写入以下异常任何其他文件夹的结果:

System.Security.SecurityException: 请求为 'System.Security.Permissions.FileIOPermission, mscorlib,Version = 4.0.0的许可。0, 文化=中性 公钥= b77a5c561934e089' 失败。

尝试写入低或最小信任级别的ANY文件时发生同样的异常。

这不是您试图访问一个文件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