IIS8中的IIS_IUSRS和IUSR权限


146

我刚刚从Win2003上的IIS6迁移到Win2012上的IIS8,用于托管ASP.NET应用程序。

在我的应用程序的一个特定文件夹中,我需要创建和删除文件。将文件复制到新服务器后,尝试删除文件时,我不断看到以下错误:

拒绝访问路径“ D:\ WebSites \ myapp.co.uk \ companydata \ filename.pdf”。

当我检查IIS时,我看到该应用程序在DefaultAppPool帐户下运行,但是,我从未在此文件夹上设置Windows权限以包括IIS AppPool \ DefaultAppPool

相反,为了停止尖叫客户,我授予了该文件夹以下权限:

研究所

  • 读取并执行
  • 列出文件夹内容

IIS_IUSRS

  • 修改
  • 读取并执行
  • 列出文件夹内容

这似乎奏效,但我担心设置了太多特权。我在网上阅读了有关是否真的需要IUSR的相互矛盾的信息。任何人都可以澄清哪些用户/权限足以在此文件夹中创建和删除文档吗?另外,IUSR是IIS_IUSRS组的一部分吗?

更新与解决方案

在下面查看我的答案。我不得不悲伤地做这件事,因为最近的一些建议还没有被深思熟虑,甚至还不够安全(IMO​​)。


为了使WordPress在Azure虚拟机(Windows Server 2012 Datacenter)上的IIS 8上运行,我需要将您为IIS_IUSRS列出的权限授予IUSR inetpub / wwwroot中的博客目录
dumbledad 2013年

对于那些因为试图在IIS下运行Joomla并遇到文件安全性设置问题而进入此线程的人,我写了一篇博客文章,其中提供了我认为合适的解决方案。可能也适用于WordPress或其他基于PHP的Web服务器程序。renniestechblog.com/index.php/information/…–
RenniePet


为用户组IIS_IUSRS添加文件夹的完全权限后,工作正常。
图拉西兰

@Thulasiram,但是您已经为所有IIS用户赋予了完全特权。从黑客的角度考虑。一个弱的网站,他们获得所有其余的总量控制
EvilDr

Answers:


146

我不愿发表自己的答案,但最近有一些答案却忽略了我在自己的问题中发布的解决方案,暗示了绝无仅有的方法。

简而言之,您根本不需要编辑任何Windows用户帐户特权。这样做只会带来风险。使用继承的权限完全在IIS中管理该过程。

将修改/写入权限应用于正确的用户帐户

  1. 当域出现在“站点”列表下时,右键单击该域,然后选择“ 编辑权限”

    在此处输入图片说明

    在“ 安全性”选项卡下,您将看到MACHINE_NAME\IIS_IUSRS列出了。这意味着IIS自动对目录具有只读权限(例如,在站点中运行ASP.Net)。 您不需要编辑此条目

    在此处输入图片说明

  2. 单击编辑按钮,然后单击添加...。

  3. 在文本框中,键入IIS AppPool\MyApplicationPoolNameMyApplicationPoolName用您的域名或正在访问您站点的任何应用程序池替换,例如IIS AppPool\mydomain.com

    在此处输入图片说明

  4. 检查名称按钮。您键入的文本将转换(注意下划线):

    在此处输入图片说明

  5. 确定添加用户

  6. 选择新用户(您的域)后,现在您可以安全地提供任何“ 修改”或“ 写入”权限

    在此处输入图片说明


2
这在我的IIS 8.5服务器上不起作用。添加IUSR作品。添加IIS AppPool\Cache(我的应用程序池的名称)将产生HTTP Error 401.3 - Unauthorized
Charles Burns

14
@CharlesBurns我有同样的问题,我觉得这是我的根本原因:techras.wordpress.com/2016/03/09/...(匿名AUTH被设置为使用IUSR,而不是应用程序池标识)
乔恩·

2
我有一个仅用作虚拟目录的文件夹,在我与另一个域帐户共享该文件夹(它指向的Windows文件夹)之前,它可以正常工作,因此它可以在我们的Intranet上查看文件。当我这样做时,虚拟目录中的文件突然变得无法访问。我最终不得不同时添加两者MyComputerName\IIS_IUSRSIUSR具有只读权限,这样它才能再次工作。这仅适用于虚拟目录(不适用于.net Apps),但有人认为它可能有用。
MikeTeeVee

13
仅需注意:在搜索用户并且计算机是域的成员时,可能找不到IIS AppPool \ MyApplicationPoolName。就我而言,我需要单击“位置”按钮,然后将位置更改为本地计算机。
Statler

3
在我的测试中,此处要使用的特殊用户的名称与域名无关。它是在IIS中分配给站点的应用程序池的名称。此应用程序池的名称可能与您的网站的域匹配,也可能不匹配。因此模式是: IIS AppPool\[APPLICATION POOL NAME]。接受应用程序池名称中的空白。另请注意,只有在选择“内置安全主体”作为名称搜索的对象类型时才能找到该用户(“选择用户或组”对话框的顶部字段)。
Jpsy

49

IUSR是IIS_IUSER group。一部分,所以我想您可以删除IUSR的权限而不必担心。进一步阅读

但是,随着时间的流逝,随着越来越多的Windows系统服务开始以NETWORKSERVICE的身份出现问题。这是因为以NETWORKSERVICE身份运行的服务可能会篡改以相同身份运行的其他服务。由于IIS工作进程默认情况下运行第三方代码(经典ASP,ASP.NET,PHP代码),因此是时候将IIS工作进程与其他Windows系统服务隔离开来,并以唯一身份运行IIS工作进程。Windows操作系统提供了一种称为“虚拟帐户”的功能,该功能使IIS可以为其每个应用程序池创建唯一的标识。默认情况下,DefaultAppPool是分配给您创建的所有应用程序池的默认池。

为了使其更加安全,您可以将IIS DefaultAppPool身份更改为ApplicationPoolIdentity。

关于权限,“创建和删除”总结了可以授予的所有权限。因此,您分配给IIS_USERS组的所有内容都是它们所需要的。仅此而已。

希望这可以帮助。


3
我刚刚在Server Essentials 2012 R2下安装了IIS 8。该计算机也是域控制器。在“ AD用户和计算机”中,IIS_IUSRS组为空-它不包含IUSR用户。我想可以将其添加到组中,但是对于匿名站点,我将仅授予IUSR用户权限。
马克·贝里

7
当我授予IUSR权限时,它起作用了。当我授予IIS_IUSER的权限时,它不起作用。
ihebiheb 2014年

Iusr不是IIS_Iusrs的成员。(或者Windows有一个错误)通常,Windows使用IIS_Iusrs。(执行动态页面或访问静态页面),但是在某些情况下Windows使用Iusr而不是IIS_Iusrs。使用PHP上传文件就是这种情况之一。(如果您仅授予iis_iusr,则将遇到特权异常)我认为M $应该为授予Iusr和IIS_Iusrs的权限提供“最佳实践” ...
finejustice

我认为现在将其更改为应用程序池组,即(IWGP)。我已授予IWGP许可,并且它可以正常工作。
罗希特·阿罗拉

6
IUSR是IIS_IUSER的一部分。不它不是!IUSR是匿名用户,IIS_IUSER是apppool用户组
giammin 2015年

6

当我向站点文件夹添加IIS_IUSRS权限时-诸如js和css之类的资源仍然不可访问(错误401,禁止访问)。但是,当我添加IUSR时-一切正常。因此,可以肯定的是:“亲爱的@Travis G @,您不能不用担心就删除IUSR的权限”


7
不要忘记(如果您有IIS7 +),正确的解决方案是IIS AppPool\MyApplicationPoolName按照我更新的答案使用。您无需再为IUSR(S)烦恼了!
EvilDr

2
我已经尝试过您的建议,但是没有用。我已将IUSR(S)从许可中删除,仅保留了池名,应用程序在其下运行。资源变得不可访问。IIS 8.5。当我添加IUSR时-它开始工作。
亚历山大

您需要发布自己的问题,并提供有关您情况的尽可能多的信息。
EvilDr '19

4

@EvilDr您可以在AD环境中创建IUSR_ [identifier]帐户,并让特定的应用程序池在该IUSR_ [identifier]帐户下运行:

“应用程序池”>“高级设置”>“身份”>“自定义帐户”

在“高级设置”中,将您的网站设置为“ Applicaton用户(通过身份验证)”,而不是“特定用户”。

现在为IUSR_ [identifier]赋予文件和文件夹适当的NTFS权限,例如:对companydata进行修改。


谢谢,但我没有使用AD。另外,根据最近的MS文档,IIS 7&8已经配置为可以按照您的描述工作。问题实际上是实际上是否需要指定的帐户之一,以及该公司从事哪一个业务?
邪恶博士

@EvilDr感谢您澄清您没有使用广告。好吧,IIS_IUSRS不是用户,而是一个组。就像IIS 6.0上的IIS_WPG。您可以在此处阅读有关IIS_IUSRS和IUSR的信息:link。您可以为IUSR帐户设置对companydata *的修改权限,并且可以将此用户添加到IIS_IUSRS组,并使用该用户帐户在其下运行您的应用程序池。如果您有多个IUSR_accounts,则只需要对共享文件夹(例如TMP)上的IIS_IUSRS授予大权限。
Jan Reilink

Jan,我一直认为默认情况下IUSR是IIS_IUSRS组的一部分?由于IUSR帐户是内置帐户,您如何检查是否是这样。您是在说我应该取消选中“为IIS_USRS修改”,然后为IUSR选中它吗?考虑到单一应用程序的要求,我认为这不会真正起作用吗?
EvilDr


0

我会使用特定的用户(而不是应用程序用户)。然后,我将在应用程序中启用模拟。完成此操作后,无论将哪个帐户设置为特定用户,这些凭据都将用于访问该服务器上的本地资源(不适用于外部资源)。

特定用户设置专门用于访问本地资源。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.