编辑:
虽然我觉得我的概述如下是如何信任水平发挥到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
这将是有益的,如果你发布你1)应用程序池设置,2)虚拟目录设置,以及3)应用程序/ Web配置设置... – bitxwise 2011-03-13 04:48:47