写访问EVERYONE工作,IUSR,IIS_IUSRS,DefaultAppPool不起作用。 为什么?

好。 这里我们试图在Windows Server 2008 R2的IIS 7.5中设置一个经典的ASP网站。 在网站的根目录下有一个名为dbc的文件夹,它具有一个用于在处理每个页面时读取和写入某些信息的文件。

问题是,如果我授予IUSR写权限,IIS_IUSRS写权限,或DefaultAppPool写权限,我得到“访问path'E:.. \ websiteroot \ dbc \ filename.txt'被拒绝”

但是,如果我授予每个人在该dbc文件夹的写访问权限,那么我不会得到任何错误,一切似乎完美。

更多信息:网站以经典stream水线模式运行,匿名身份validation已启用(也许这是唯一的身份validation启用)。我尝试使用IUSR帐户以及应用程序池标识的匿名身份validation。 在我的情况下,ApplicationPoolIdentity是网站的身份validation。 我们使用COM +作为文件I / O。 和经典的ASP Server.CreateObject来实例化一个对象。 COM +作为networking服务运行。

思考? 我不想授予所有人的写入权限。 我错过了什么吗?

解决:这是我做的。

我的网站名为CipherDemo运行在IIS 7.5中的AppPoolIdentity下,可以通过Identity IIS AppPool \ CipherDemofind。 我用ICACLS在该文件夹上给RW权限。

而实际上正在执行文件I / O的COM +正在networking服务标识下运行。 当我使用进程监视器来跟踪访问拒绝错误时,它变成了networking服务只有该文件夹的读取权限。

我使用ICACLS“foldername”/ grant:r“NT AUTHORITY \ NETWORKSERVICE”:( OI)(CI)RXW / T授予对该文件夹的写入权限。

解决了。

我的意图是,因为网站作为CipherDemo身份运行,这将是用于通过COM +访问该文件的帐户。 但是,发现COM +仍然可以在自己的身份界限上工作,这是令人尴尬的。

在IIS 7.5(以及可选的IIS 7)下,所有工作者都使用应用程序池标识运行:用户“IIS AppPool * PoolName *”。

授予对该用户的访问权限,而不是每个人(您需要在select标识对话框中键入名称 – 它不会显示在查找function中)。

在iis.net上有一个非常有用的页面,它涵盖了更多细节。

另请注意:在IIS7(Server 2008)下:

  • 您可以在高级设置中以每个应用程序池为基础设置应用程序池标识。
  • 没有GUI支持,所以你需要命令行设置权限( icacls.exe )。

最后,SQL Server的身份select不知道应用程序池标识:最初使用CREATE LOGINCREATE USER ,之后可以使用GUI来授予angular色等。

您可以直接input,通过NTFS GUI添加帐户。 该名称格式为IIS APPPOOL{app pool name} ,例如IIS APPPOOL \ DefaultAppPool。 (请参阅此Microsoft支持文章 )

另一种解决scheme:我一直使用“networking服务”帐户作为应用程序池用户授予它的写权限。

如果您只想将文件夹WRITE权限授予特定用户,则还应该将站点的“匿名用户标识”更改为“特定用户”,而不是“应用程序池标识”。