对 EVERYONE 的写访问有效,但 IUSR、IIS_IUSRS、DefaultAppPool 无效。为什么?

对 EVERYONE 的写访问有效,但 IUSR、IIS_IUSRS、DefaultAppPool 无效。为什么?

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

问题是,如果我授予 IUSR 写权限和 IIS_IUSRS 写权限或 DefaultAppPool 写权限,我会收到“访问路径‘E:..\websiteroot\dbc\filename.txt’被拒绝”

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

更多信息:该网站在经典管道模式下运行,启用了匿名身份验证(也许这是唯一启用的身份验证)。我尝试使用 IUSR 帐户以及应用程序池标识进行匿名身份验证。在我的例子中,ApplicationPoolIdentity 是网站身份验证的标识。我们使用 COM+ 进行文件 I/O。并使用经典 ASP Server.CreateObject 从中实例化一个对象。COM+ 作为网络服务运行。

有什么想法吗?我不想授予每个人写入权限。我是否遗漏了什么?

已解决:这是我所做的。

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

而实际执行文件 I/O 的 COM+ 是在网络服务标识下运行的。当我使用进程监视器跟踪访问被拒绝错误时,结果发现网络服务对该文件夹只有读取权限。

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

并解决了它。

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

答案1

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

授予该用户而不是所有人的访问权限(您需要在选择身份对话框中输入名称 - 它不会显示在查找功能中)。

有一个非常有用的页面互联网它涵盖的内容更加详细。

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

  • 您可以在高级设置中根据每个应用程序池设置应用程序池标识。
  • 没有 GUI 支持,因此您需要命令行来设置权限(icacls.exe)。

最后,SQL Server 的身份选择也不知道应用程序池身份:最初使用CREATE LOGINCREATE USER此后可以使用 GUI 授予角色等。

答案2

您可以通过 NTFS GUI 直接输入来添加帐户。名称格式为IIS APPPOOL\<<app pool name>>,例如IIS APPPOOL\DefaultAppPool。(请参阅此Microsoft 支持文章

替代解决方案:我一直使用“网络服务”帐户作为应用程序池用户,并授予其写权限。

答案3

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

相关内容