IIS8中的IIS_IUSRS和IUSR权限

Evi*_*lDr 134 iis permissions asp.net-4.5 iis-8 windows-server-2012

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

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

访问路径'D:\ WebSites\myapp.co.uk\companydata\filename.pdf'被拒绝.

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

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

IUSR

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

IIS_IUSRS

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

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

更新和解决方案

请参阅下面的答案.我不得不遗憾地做到这一点,因为最近的一些建议没有经过深思熟虑,甚至是安全的(IMO).

Evi*_*lDr 141

我讨厌发表自己的答案,但最近有些答案忽略了我在自己的问题中发布的解决方案,提出的方法简直就是蛮干.

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

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

  1. 右键单击"站点"列表下显示的域,然后选择" 编辑权限"

    在此输入图像描述

    在" 安全"选项卡下,您将看到MACHINE_NAME\IIS_IUSRS列出的内容.这意味着IIS自动拥有该目录的只读权限(例如,在站点中运行ASP.Net). 您无需编辑此条目.

    在此输入图像描述

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

  3. 在文本框中,键入IIS AppPool\MyApplicationPoolName,替换MyApplicationPoolName为您的域名,例如IIS AppPool\mydomain.com

    在此输入图像描述

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

    在此输入图像描述

  5. 按" 确定"添加用户

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

    在此输入图像描述

  • @CharlesBurns我有同样的问题,我发现这是我的根本原因:https://techras.wordpress.com/2016/03/09/error-message-401-3-you-do-not-have-permission -to-view-this-directory-or-page-using-credentials-you-provided-access-denied-due-to-access-control-lists /(匿名auth被设置为使用IUSR而不是Application Pool Identity ) (12认同)
  • 只是注意:当您搜索用户并且计算机是域的成员时,可能找不到IIS AppPool\MyApplicationPoolName.就我而言,我需要单击"位置"按钮并将位置更改为本地计算机. (10认同)
  • 这在我的IIS 8.5服务器上不起作用.添加`IUSR`有效.添加"IIS AppPool\Cache"(我的应用程序池的名称)会产生"HTTP错误401.3 - 未经授权" (2认同)
  • 我有一个文件夹只用作虚拟目录,它工作正常,直到我与另一个域帐户共享它(它指向的Windows文件夹),所以它可以通过我们的内部网查看文件.当我这样做时,虚拟目录中的文件突然变得无法访问.我最终必须添加具有只读权限的"MyComputerName\IIS_IUSRS"和"IUSR"才能再次工作.这仅适用于虚拟目录(不是.net应用程序),但有人可能会发现它很有用. (2认同)
  • 在我的测试中,此处要使用的特殊用户的名称与域名无关。它是在IIS中分配给站点的应用程序池的名称。该应用程序池的名称可能与您的网站的域匹配,也可能不匹配。因此模式是:“ IIS AppPool \ [应用程序池名称]”。接受应用程序池名称中的空白。另请注意,只有在选择“内置安全主体”作为名称搜索的对象类型时才能找到该用户(“选择用户或组”对话框的顶部字段)。 (2认同)

Tra*_*s G 49

IUSR是IIS_IUSER组的一部分.所以我猜你可以删除IUSR的权限而不用担心.进一步阅读

但是,随着越来越多的Windows系统服务开始作为NETWORKSERVICE运行,随着时间的推移出现了一个问题.这是因为作为NETWORKSERVICE运行的服务可以篡改以相同标识运行的其他服务.由于IIS工作进程默认运行第三方代码(Classic ASP,ASP.NET,PHP代码),因此是时候将IIS工作进程与其他Windows系统服务隔离开来,并在唯一标识下运行IIS工作进程.Windows操作系统提供了一个名为"虚拟帐户"的功能,允许IIS为每个应用程序池创建唯一标识.DefaultAppPool是默认池,分配给您创建的所有应用程序池.

为了使其更安全,您可以将IIS DefaultAppPool标识更改为ApplicationPoolIdentity.

关于权限,"创建"和"删除"总结了可以给出的所有权限.因此,无论您分配给IIS_USERS组,他们都需要.没有更多,没有更少.

希望这可以帮助.

  • 当我为IUSR授予权限时,它起作用了.当我向IIS_IUSER授予权限时,它不起作用. (7认同)
  • IUSR是IIS_IUSER的一部分.不它不是!IUSR是无用的用户,IIS_IUSER是apppool用户的组 (6认同)
  • 我刚刚在Server Essentials 2012 R2下安装了IIS 8.这台机器也是一个域控制器.在AD用户和计算机中,IIS_IUSRS组为空 - 它不包含IUSR用户.我想我可以将它添加到组中,但对于匿名站点,我只会向IUSR用户授予权限. (3认同)
  • Iusr 不是 IIS_Iusrs 的成员。(或者windows有bug)一般Windows使用IIS_Iusrs。(执行动态页面或访问静态页面)但在某些情况下Windows使用Iusr,而不是IIS_Iusrs。使用 PHP 上传文件就是其中一种情况。(如果你只授予 iis_iusr,你会遇到权限异常)我认为 M$ 应该给出“最佳实践”来授予 Iusr 和 IIS_Iusrs 的权限...... (2认同)

Ale*_*der 6

当我向站点文件夹添加IIS_IUSRS权限时 - 资源(如js和css)仍然无法访问(错误401,禁止).但是,当我添加IUSR时 - 它变好了.所以肯定"你不能在不担心的情况下删除IUSR的权限",亲爱的@Travis G @

  • 不要忘记(如果你有IIS7 +)正确的解决方案是根据我更新的答案使用`IIS AppPool\MyApplicationPoolName`.你不需要再搞乱IUSR(S)了! (7认同)
  • 我已经尝试了你的建议,但它不起作用.我已经从权限中删除了IUSR(S)并且只保留了poolname,app正在运行.资源变得无法访问.IIS 8.5.当我添加IUSR时 - 它开始工作了. (2认同)

小智 5

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

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

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

现在,为 IUSR_[标识符] 授予对文件和文件夹适当的 NTFS 权限,例如:修改公司数据。