IIS 7.5应用程序池标识权限未分配给文件夹,但应用程序仍可以写入其文件夹?

Vla*_*igo 17 asp.net iis

我们已将现有应用程序放入使用IIS 7.5的新R2服务器.

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

在文档中声明必须将此用户分配给文件夹才能使一切正常工作......但在我们的情况下,它不是?!它仍然有效,通过该用户的应用程序可以访问?

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

因此,在IIS 7.5下,具有自己的池的应用程序如何具有写入权限,而不是在该文件夹的安全设置下?

弗拉丹

rsb*_*rro 20

编辑:

虽然我觉得我在下面概述的是一个很好的讨论,信任级别如何在ASP.NET中的文件系统访问中发挥作用,我觉得原始问题的正确答案发布在这里(是的,我不得不重新考虑这个问题)信息补充).基本上,AppPoolIdentity用户也是该Users组的成员,这就是该用户可以如何写入文件系统的不同区域.

ORGINAL ANSWER:

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

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

System.Security.SecurityException:请求类型为'System.Security.Permissions.FileIOPermission,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败.

尝试在低或最小信任级别写入任何文件时发生相同的异常.

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

System.UnauthorizedAccessException:拒绝访问路径"C:\ test.txt".

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

简短的说法是,如果要确保Web应用程序无法写入Web应用程序文件夹以外的任何文件夹,则需要将应用程序设置为在Medium trust或更低版本下运行.如果这样做,那么您需要进行测试以确保应用程序不需要执行任何需要大于中等信任的功能.

参考文献:

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