这是IIS 7.5和ASP.NET的一个问题,我一直在研究并且无处可去。任何帮助将不胜感激。
我的问题是:在IIS 7.5中使用ASP.NET,在完全信任下运行时,IIS和/或操作系统如何允许Web应用程序写入C:\dump
这样的文件夹?我怎么没有为应用程序池用户显式添加写访问权限(在这种情况下是ApplicationPoolIdentity
)?
我知道这一点:
ApplicationPoolIdentity
。ApplicationPoolIdentity
表示名为“IIS APPPOOL \ AppPoolName”的Windows用户帐户,该帐户在创建应用程序池时创建,其中AppPoolName是应用程序池的名称。IIS_IUSRS
组的成员。C:\Users
,C:\Windows
等文件夹)。例如,您的应用程序可以写入某些文件夹,例如C:\dump
。IIS_IUSRS
组未获得C:\dump
的读取或写入权限(至少不能通过Windows资源管理器中的“安全”选项卡显示访问权限。)IIS_IUSRS
的写入权限,则在尝试写入文件夹时会出现SecurityException(如预期的那样)。因此,考虑到所有这些,如何授予“IIS APPPOOL \ AppPoolName”用户写入权限? w3wp.exe进程以此用户身份运行,那么是什么允许此用户写入它似乎没有显式访问权限的文件夹?
请注意,我理解这可能是为了方便起见,因为如果您在Full Trust下运行,授予用户访问它需要写入的每个文件夹是一件痛苦的事。如果要限制此访问权限,则始终可以在“中等信任”下运行该应用程序。我有兴趣了解操作系统和/或IIS允许进行这些写入的方式,即使似乎没有授予显式文件系统访问权限。
答案 0 :(得分:390)
ApplicationPoolIdentity
被分配了Users
群组和IIS_IUSRS
群组的成员资格。乍一看,这可能看起来有些令人担忧,但Users
组的NTFS权限有限。
例如,如果您尝试在C:\Windows
文件夹中创建一个文件夹,那么您会发现不能。 ApplicationPoolIdentity
仍然需要能够从Windows系统文件夹中读取文件(否则工作进程还能够动态加载必要的DLL)。
关于您对能够写入c:\dump
文件夹的观察。如果您查看高级安全设置中的权限,您将看到以下内容:
请参阅从c:\
继承的特殊权限:
这就是您的网站ApplicationPoolIdentity
可以阅读并写到该文件夹的原因。这项权利继承自c:\
驱动器。
在您可能拥有数百个站点的共享环境中,每个站点都有自己的应用程序池和应用程序池标识,您可以将站点文件夹存储在已删除Users
组的文件夹或卷中权限设置使得只有管理员和SYSTEM帐户具有访问权限(具有继承权)。
然后,您将在其站点根文件夹中单独分配每个IIS AppPool\[name]
所需的必要权限。
您还应确保在创建可能敏感文件或数据的位置创建的所有文件夹都删除了Users
组。您还应该确保您安装的任何应用程序都不会将敏感数据存储在c:\program files\[app name]
文件夹中,而是使用用户配置文件文件夹。
所以是的,乍一看,ApplicationPoolIdentity
看起来有更多的权利,但它实际上没有权利,而不是它的群组成员资格。
可以使用SysInternals Process Explorer tool检查ApplicationPoolIdentity
的群组成员资格。查找使用您感兴趣的应用程序池标识运行的工作进程(您必须将User Name
列添加到要显示的列列表中:
例如,我在这里有一个名为900300
的池,其应用程序池标识为IIS APPPOOL\900300
。右键单击该流程的属性,然后选择我们看到的“安全”选项卡:
我们可以看到IIS APPPOOL\900300
是Users
群组的成员。
答案 1 :(得分:25)
右键单击文件夹。
点击属性
单击“安全”选项卡。你会看到这样的东西:
答案 2 :(得分:0)
IIs中的每个应用程序池都会创建自己的安全用户文件夹,默认情况下在c:\ users下具有FULL读/写权限。打开“用户”文件夹,查看其中的应用程序池文件夹,单击右键,然后检查其分配的应用程序池虚拟帐户的权限。您应该看到已添加的应用程序池帐户已分配给其根目录和子文件夹的读/写访问权限。
因此,这种类型的文件存储访问是自动完成的,您应该能够在应用程序池用户帐户文件夹中编写您喜欢的任何内容,而无需更改任何内容。这就是创建每个应用程序池的虚拟用户帐户的原因。
答案 3 :(得分:0)
我试图通过此方法来解决对IIS网站的访问问题,该问题在事件日志→Windows→应用程序中显示为like the following:
Log Name: Application Source: ASP.NET 4.0.30319.0 Date: 1/5/2012 4:12:33 PM Event ID: 1314 Task Category: Web Event Level: Information Keywords: Classic User: N/A Computer: SALTIIS01 Description: Event code: 4008 Event message: File authorization failed for the request. Event time: 1/5/2012 4:12:33 PM Event time (UTC): 1/6/2012 12:12:33 AM Event ID: 349fcb2ec3c24b16a862f6eb9b23dd6c Event sequence: 7 Event occurrence: 3 Event detail code: 0 Application information: Application domain: /LM/W3SVC/2/ROOT/Application/SNCDW-19-129702818025409890 Trust level: Full Application Virtual Path: /Application/SNCDW Application Path: D:\Sites\WCF\Application\SNCDW\ Machine name: SALTIIS01 Process information: Process ID: 1896 Process name: w3wp.exe Account name: iisservice Request information: Request URL: http://webservicestest/Application/SNCDW/PC.svc Request path: /Application/SNCDW/PC.svc User host address: 10.60.16.79 User: js3228 Is authenticated: True Authentication Type: Negotiate Thread account name: iisservice
最后,我必须给Windows Everyone
组read access to that folder使其正常工作。