这里涉及到一个我一直在研究但没有任何进展的IIS 7.5和ASP.NET的问题。真心感谢任何给予帮助的人。
我的问题是:当使用ASP.NET在IIS 7.5上运行时,操作系统和/或IIS如何允许Web应用程序在完全信任的情况下写入像C:\dump
这样的文件夹?为什么我不必明确添加应用程序池用户(在此情况下为ApplicationPoolIdentity
)的写入访问权限呢?
我知道的是:
- 在IIS 7.5中,应用程序池的默认标识是
ApplicationPoolIdentity
。 ApplicationPoolIdentity
代表一个名为“ IIS APPPOOL \ AppPoolName”的Windows用户帐户,该帐户在创建应用程序池时创建,其中AppPoolName是应用程序池的名称。- “IIS APPPOOL \ AppPoolName”用户默认是
IIS_IUSRS
组的成员。 - 如果您运行在完全信任下,则Web应用程序可以写入文件系统的许多区域(不包括
C:\Users
、C:\Windows
等文件夹)。例如,您的应用程序将能够访问某些文件夹,如C:\dump
。 - 默认情况下,
IIS_IUSRS
组没有读取或写入访问权限C:\dump
(至少不是通过Windows资源管理器中的“安全”选项卡显示的访问权限)。 - 如果您拒绝
IIS_IUSRS
的写入访问权限,则在尝试写入文件夹时将会抛出SecurityException异常(正如预期的那样)。
所以,考虑到所有这些,如何授予“IIS APPPOOL \ AppPoolName”用户写入访问权限呢?w3wp.exe进程以此用户身份运行,因此是什么允许该用户写入它似乎没有明确访问权限的文件夹呢?
请注意我理解这样做可能是出于方便考虑,因为如果在完全信任的情况下运行,授予用户访问所需写入的每个文件夹将是一件麻烦的事情。如果您想限制此访问权限,您可以始终在中间信任下运行应用程序。我对操作系统和/或IIS允许这些写入发生的方式很感兴趣,即使没有明确授予文件系统访问权限也是如此。