提问



这是IIS 7.5和ASP.NET的一个问题,我一直在研究和无处可去。任何帮助将不胜感激。


我的问题是:在IIS 7.5中使用ASP.NET,在完全信任下运行时,IIS和/或操作系统如何允许Web应用程序写入C:\dump这样的文件夹?如何不必为应用程序池用户显式添加写访问权限(在本例中为ApplicationPoolIdentity)?


我知道的很多:



  • 在IIS 7.5中,应用程序池的默认标识为ApplicationPoolIdentity

  • ApplicationPoolIdentity表示名为IIS APPPOOL \\ AppPoolName的Windows用户帐户,该帐户在创建应用程序池时创建,其中AppPoolName是应用程序池的名称。

  • IIS APPPOOL \\ AppPoolName用户默认为IIS_IUSRS组的成员。

  • 如果您在完全信任下运行,您的Web应用程序可以写入文件系统的许多区域(不包括C:\UsersC:\Windows等文件夹)。例如,您的应用程序将有权写入某些文件夹,例如C:\dump

  • 默认情况下,IIS_IUSRS组未获得C:\dump的读或写访问权限(至少不能通过Windows资源管理器中的安全选项卡显示访问权限。)

  • 如果您拒绝对IIS_IUSRS的写访问权限,则在尝试写入文件夹时会出现SecurityException(如预期的那样)。



因此,考虑到所有这些,如何授予IIS APPPOOL \\ AppPoolName用户写入权限? w3wp.exe进程以此用户身份运行,那么是什么允许此用户写入它似乎没有显式访问权限的文件夹?


请注意,我理解这可能是为了方便起见,因为如果您在Full Trust下运行,授予用户访问它需要写入的每个文件夹将是一件痛苦的事。如果要限制此访问权限,则始终可以在中等信任下运行该应用程序。我有兴趣了解操作系统和/或IIS允许这些写入的方式,即使似乎没有授予显式文件系统访问权限。

最佳参考


ApplicationPoolIdentity被分配Users组和IIS_IUSRS组的成员资格。乍一看,这可能看起来有些令人担忧,但Users组的NTFS权利有限。


例如,如果您尝试在C:\Windows文件夹中创建一个文件夹,那么您将发现您不能。 ApplicationPoolIdentity仍然需要能够从Windows系统文件夹中读取文件(否则工作进程将如何能够动态加载必要的DLL)。


关于能够写入c:\dump文件夹的观察结果。如果您查看高级安全设置中的权限,您将看到以下内容:





请参阅c:\继承的特殊权限:





这就是您的网站ApplicationPoolIdentity可以阅读并写到该文件夹​​的原因。这项权利继承自c:\驱动器。


在可能有数百个站点的共享环境中,每个站点都有自己的应用程序池和应用程序池标识,您可以将站点文件夹存储在已删除Users组并将权限设置为此类的文件夹或卷中。只有管​​理员和SYSTEM帐户才能访问(具有继承)。


然后,您将在其[[s]]站点根文件夹中单独分配IIS AppPool\[name]所需的必要权限。


您还应确保在存储可能敏感文件或数据的位置创建的任何文件夹都删除了Users组。您还应该确保您安装的任何应用程序都不会将敏感数据存储在c:\program files\[app name]文件夹中,而是使用用户配置文件文件夹。


所以,是的,乍一看,ApplicationPoolIdentity看起来有更多的权利,但它实际上没有权利,而不是它的集团成员资格。


可以使用SysInternals Process Explorer工具检查ApplicationPoolIdentity的组成员资格。查找使用您感兴趣的应用程序池标识运行的工作进程(您必须添加User Name列到要显示的列的列表:[33]





例如,我在这里有一个名为900300的池,其应用程序池标识为IIS APPPOOL\900300。右键单击该进程的属性,然后选择Security选项卡,我们看到:





我们可以看到IIS APPPOOL\900300Users组的成员。

其它参考1



  1. 右键单击文件夹。

  2. 单击属性

  3. 单击安全选项卡。你会看到这样的东西:



[34]



  1. 点击上方屏幕中的编辑...按钮。你会看到这样的东西:



[35]



  1. 点击上方屏幕中的添加...按钮。你会看到这样的东西:



[36]



  1. 点击上方屏幕中的位置...按钮。你会看到这样的东西。现在,转到此树结构的顶部并选择您的计算机名称,然后单击确定。



[37]



  1. 现在输入iis apppool \\ your_apppool_name并单击检查名称按钮。如果apppool存在,您将在文本框中看到您的apppool名称,并在其中加下划线。单击确定按钮。



[38]



  1. 选中/取消选中您需要授予该帐户的任何访问权限

  2. 单击应用按钮,然后单击确定


其它参考2


IIs中的每个应用程序池都创建自己的安全用户文件夹,默认情况下在c:\\ users下具有FULL读/写权限。打开用户文件夹,查看其中的应用程序池文件夹,右键单击,然后检查其分配的应用程序池虚拟帐户的权限。您应该看到已添加的应用程序池帐户已分配给其根目录和子文件夹的读/写访问权限。


因此,这种类型的文件存储访问是自动完成的,您应该能够在应用程序池用户帐户文件夹中编写您喜欢的任何内容,而无需进行任何更改。这就是创建每个应用程序池的虚拟用户帐户的原因。