IIS 7.5和ASP存在一个问题.我一直在研究却一无所获的网络.任何帮助都将不胜感激.

我的问题是:使用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:\UsersC:\Windows等文件夹).例如,您的应用程序将有权写入某些文件夹,如C:\dump.
  • 默认情况下,IIS_IUSRS组不被授予对C:\dump的读或写访问权限(至少不能访问通过Windows资源管理器中的"安全"选项卡可见的访问权限).
  • 如果拒绝对IIS_IUSRS的写入访问,则在try 写入文件夹时(如预期的那样)会出现SecurityException.

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

请注意,我理解这样做可能是为了方便,因为如果您在完全信任的情况下运行,那么授予用户对每个需要写入的文件夹的访问权限将是一件痛苦的事情.如果要限制此访问,可以始终在中等信任下运行应用程序.我感兴趣的是了解操作系统和/或IIS允许这些写入的方式,尽管似乎没有授予明确的文件系统访问权限.

推荐答案

ApplicationPoolIdentity人被分配为Users组和IIS_IUSRS组的成员.乍一看,这似乎有点令人担忧,然而Users group的NTFS权限有些有限.

例如,如果你try 在C:\Windows文件夹中创建一个文件夹,你会发现你做不到.ApplicationPoolIdentity仍然需要能够从windows系统文件夹中读取文件(否则工作进程将如何动态加载基本DLL).

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

在此处输入图像描述

查看从c:\继承的特殊权限:

在此处输入图像描述

这就是为什么你的网站的ApplicationPoolIdentity个可以读取和write到该文件夹.这项权利是从c:\硬盘继承的.

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

然后,您将分别为每IIS AppPool\[name]个站点的根文件夹分配所需的权限.

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

所以,是的,乍一看,ApplicationPoolIdentity人似乎拥有的权利比它应该拥有的更多,但实际上它的权利并不比它的团体成员资格所要求的更多.

ApplicationPoolIdentity的组成员身份可以使用SysInternals Process Explorer tool进行判断.查找使用您感兴趣的应用程序池标识运行的工作进程(您必须将User Name列添加到要显示的列列表中:

在此处输入图像描述

例如,我这里有一个名为900300的池,其应用程序池标识为IIS APPPOOL\900300.右键单击流程的属性并 Select Security选项卡,我们将看到:

在此处输入图像描述

正如我们所见,IIS APPPOOL\900300Users组的成员.

Asp.net相关问答推荐

使用 Owin 身份验证的服务器端声明缓存

WebAPI 请求流支持

如何使用 jQuery 设置 outerHTML

ASP.NET MVC4 jquery/javascript 包的使用

asp.net mvc 中的 RedirectToAction 用法

iOS 8 / Safari 8 不适用于 ASP.NET AJAX 扩展

没有回发的按钮?

Asp.net Identity 密码哈希

ASP.NET 中的 <%# Bind("") %> 和 <%# Eval("") %> 有什么区别?

在 asp.net 中为动态 PDF 指定文件名

修改 web.config 时如何防止 ASP.NET 应用程序重新启动?

您使用哪个 .NET Memcached 客户端,EnyimMemcached 与 BeITMemcached?

如何防止aspxerrorpath作为查询字符串传递给 ASP.NET 自定义错误页面

使用 ASP.NET 进行重定向后获取

如何在 .NET Core 中实现 DbContext 连接字符串?

您可以从 web.config 文件中的其他位置提取 log4net AdoNetAppender 的 connectionString 吗?

如何在 ASP.NET 响应中传递大文件?

Application_End global.asax

如何检索 X509Store 中的所有证书

ASP.NET MVC2/3 中runAllManagedModulesForAllRequests的正确用法是什么?