当我添加IIS_IUSRS RW访问到一个文件夹,它不会自动允许ISUR RW访问?

我正在使用IIS7(Windows Server 2008 x64),我有一个使用匿名身份validation的网站设置。 匿名用户身份被configuration为IUSR。 应用程序将文件写入一个文件夹,我将IIS_IUSRS组的RW权限授予该文件夹。 这不起作用。 我必须明确地给IUSR RW烫发以允许应用程序写入文件夹。

我的理解是应用程序池标识会自动添加到IIS_IUSRS组中。 我认为,IUSR(或任何匿名用户身份)也是IIS_IUSRS组的隐含成员。 似乎并不是这种情况。

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

任何人都可以解释是否IUSR是或不是IIS_IUSRS组的成员?

我回顾了下面的文档,发现没有可靠的答案:

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

应用程序池标识

那是因为这是两回事。 IIS_IUSRS是IIS工作进程帐户的组。 这意味着应用程序池本身运行的身份。 IUSR是匿名用户身份。 这意味着IIS认为是访问该网站的用户的身份。

现在即使你没有说,让我猜 – 这个应用程序是经典的ASP? (否则,如果它是.Net那么你必须使用模拟)。 无论哪种方式,会发生什么是资源被访问为模仿的身份,这意味着,你的情况下,匿名用户,这意味着IUSR。 这就是为什么你必须授予它的权利。 在.Net中,如果closures模拟,您会发现IIS_IUSRS将按照您的预期进行操作。 在传统的ASP(和静态文件),你没有select,模仿总是“启用”; 所以它总是使用的用户标识,而不是标识池。 所以,因为IIS_IUSRS是用于池身份的,所以它不在游戏中。


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

因为他们的名字,容易混淆IUSR和IIS_IUSRS。 要看到他们不同的是要记住,IIS_IUSRS是IIS6中的IIS_WPG的替代品,它是工作进程组。 对于这些组,您添加您想要运行您的池的帐户,而不是匿名身份,匿名权限应该是更有限的。 例如。 有时您可能想使用域帐户来运行池,以将Kerberos委派给其他networking资源。 然后,您将该服务帐户添加到该组。

启用模拟时,池/进程假装为用户,因为它被告知。 在匿名身份validation(您的情况)的情况下,该用户是IUSR。 在Windows身份validation的情况下,这将是用户的Windows \域身份。 这也是为什么你的模拟性能受到影响,因为进程必须切换到不同的资源访问标识。

如果您使用.NET和匿名身份validation,那么我不明白为什么你会启用模拟。 如果你不使用或不需要模拟,你应该知道在IIS7的情况下更多的欺骗:你可以使你的IUSR完全消失,并消除混淆。 我想你会喜欢的,这也是我喜欢的方法。 你所要做的就是告诉它重用池身份作为匿名身份 。

所以在这之后你只需要处理IIS_IUSRS组。 但不要糊涂,这并不意味着这两个是一样的! 过程身份有可能替代IUSR,但不是相反的!

还有一些IIS7技巧需要注意:如果你看看IIS_IUSRS,它可能是空的。 那是因为当游泳池启动时,你的虚拟池身份被自动添加到它,所以你不必担心这些事情。

此表应该有助于更好地阐明线程执行标识是如何确定的:


 模仿匿名访问资源访问为

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