为什么当我向文件夹添加 IIS_IUSRS RW 访问权限时,它不会自动允许 ISUR RW 访问权限?

为什么当我向文件夹添加 IIS_IUSRS RW 访问权限时,它不会自动允许 ISUR RW 访问权限?

我正在使用 IIS7(Windows Server 2008 x64),并且我有一个使用匿名身份验证的网站。匿名用户身份配置为 IUSR。应用程序将文件写入文件夹,我授予 IIS_IUSRS 组对该文件夹的 RW 权限。这不起作用。我必须明确授予 IUSR RW 权限才能允许应用程序写入文件夹。

据我了解,应用程序池标识会自动添加到 IIS_IUSRS 组。我假设 IUSR(或任何匿名用户标识)也是 IIS_IUSRS 组的隐含成员。但事实并非如此。

在进行故障排除时,我使用进程监视器查看对该文件夹的访问权限,并确定网络服务(应用程序池标识)正在模拟 IUSR(这是我所期望的),但向 IIS_IUSRS 组提供 RW 权限不允许 IUSR 访问该文件(拒绝访问)。

有人能解释一下 IUSR 是否是 IIS_IUSRS 组的成员吗?

我查阅了以下文档但未找到可靠的答案:

了解 IIS 7 中的内置用户和组帐户

应用程序池标识

答案1

这是因为这是两个不同的东西。IIS_IUSRS 是IIS 工作进程帐户。这表示应用程序池本身以该身份运行。IUSR 是匿名用户身份。这表示 IIS 认为是正在访问站点的用户的身份。

现在,即使您没有说,让我猜一下 - 这个应用程序是经典的 asp?(否则,如果它是 .Net,那么您必须使用模拟)。无论哪种方式,都会发生的情况是资源以模拟身份访问,也就是说,在您的情况下是匿名用户,即 IUSR。这就是为什么您必须授予它权限的原因。在 .Net 中,如果您关闭模拟,您会发现 IIS_IUSRS 将按您的预期发挥作用。在经典 ASP(以及静态文件)中,您别无选择,模拟始终处于“启用”状态;因此始终使用用户身份,而不是池身份。因此,由于 IIS_IUSRS 用于池身份,因此它不起作用。


在 OP 添加更多信息后进行编辑:

由于名称不同,很容易混淆 IUSR 和 IIS_IUSRS。要了解它们的不同,只需记住 IIS_IUSRS 是 IIS6 中 IIS_WPG 的替代品,后者是工作进程组。向这些组添加要在其下运行池的帐户,而不是匿名身份,匿名权限应该受到更多限制。例如,有时您可能希望使用域帐户来运行池,以便将 Kerberos 委派给其他网络资源。然后,您可以将该服务帐户添加到此组。

启用模拟后,池/进程会假装是用户,因为它被告知要这样做。如果是匿名身份验证(您的情况),该用户是 IUSR。如果是 Windows 身份验证,则该用户是用户的 Windows\domain 身份。这也是模拟会导致性能下降的原因,因为进程必须切换到不同的身份才能访问资源。

如果您使用的是 .NET 和匿名身份验证,那么我不明白您为什么要启用模拟。如果您不使用或不需要模拟,您应该知道 IIS7 中还有一些技巧:您可以完全取消 IUSR 并结束所有混乱。我想您会喜欢这个,这也是我喜欢的方法。您所要做的就是告诉它将池身份重用为匿名身份

因此,在此之后,您只需要处理 IIS_IUSRS 组。但不要混淆,这并不意味着这两个是相同的!进程身份可能可以替代 IUSR,但反过来不行!

还有一些 IIS7 技巧需要注意:如果您查看 IIS_IUSRS,它可能是空的。这是因为您的虚拟池身份会在池启动时自动添加到其中,因此您不必担心这些事情。

该表有助于更好地阐明如何确定线程执行身份:

冒充匿名访问以以下身份访问的资源

在 IIS5/6 中启用 IUSR_computer 或,
                                       IIS7 中的 IUSR 或
                                       如果你更改了匿名用户账户
                                       在 IIS 中,无论您在那里设置什么
已启用 已禁用 MYDOM\MyName
已禁用 已启用 NT Authority\Network Service(池标识)
已禁用 已禁用 NT Authority\Network 服务(池标识)

相关内容