ChatGPT解决这个技术问题 Extra ChatGPT

IIS8 中的 IIS_IUSRS 和 IUSR 权限

我刚刚从 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 组的一部分吗?

更新与解决方案

请参阅my answer below。我不得不遗憾地这样做,因为最近的一些建议没有经过深思熟虑,甚至是安全的(IMO)。

为了让 WordPress 在 Azure 虚拟机(Windows Server 2012 Datacenter)上的 IIS 8 上运行,我需要将您为 IIS_IUSRS 列出的权限授予 IUSR 以访问 inetpub/wwwroot 中的博客目录
对于那些因为试图在 IIS 下运行 Joomla 并且遇到文件安全设置问题而来到这个线程的人,我写了一篇我认为是正确解决方案的博客文章。可能也适用于 WordPress 或其他基于 PHP 的 Web 服务器程序。 renniestechblog.com/index.php/information/…
为用户组 IIS_IUSRS 添加文件夹的完全权限后工作正常。
@Thulasiram 但是您已经为所有 IIS 用户授予了完全权限。从黑客的角度考虑一下。一个薄弱的站点,他们完全控制了所有其他站点

E
EvilDr

我讨厌发布自己的答案,但最近的一些答案忽略了我在自己的问题中发布的解决方案,提出的方法简直就是鲁莽。

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

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

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

https://i.stack.imgur.com/b237H.png

Security 标签下,您会看到 MACHINE_NAME\IIS_IUSRS 已列出。这意味着 IIS 自动对该目录具有只读权限(例如,在站点中运行 ASP.Net)。 您无需编辑此条目

https://i.stack.imgur.com/1Jnl7.png

单击编辑按钮,然后单击添加... 在文本框中,键入 IIS AppPool\MyApplicationPoolName,将 MyApplicationPoolName 替换为您的域名或访问您站点的任何应用程序池,例如 IIS AppPool\mydomain.com

https://i.stack.imgur.com/P4BQe.png

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

https://i.stack.imgur.com/cZDJK.png

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

https://i.stack.imgur.com/x3TXY.png


这在我的 IIS 8.5 服务器上不起作用。添加 IUSR 有效。添加 IIS AppPool\Cache(我的应用程序池的名称)产生 HTTP Error 401.3 - Unauthorized
@CharlesBurns 我有同样的问题,我发现这是我的根本原因:techras.wordpress.com/2016/03/09/…(匿名身份验证设置为使用 IUSR 而不是应用程序池标识)
我有一个仅用作虚拟目录的文件夹,它工作正常,直到我与另一个域帐户共享它(它指向的 windows 文件夹),所以它可以通过我们的 Intranet 查看文件。当我这样做时,虚拟目录中的文件突然变得无法访问。我最终不得不添加具有只读权限的 MyComputerName\IIS_IUSRSIUSR 才能再次工作。这仅适用于虚拟目录(不是 .net 应用程序),但有人可能会觉得它有用。
请注意:当您搜索用户并且计算机是域的成员时,可能找不到 IIS AppPool\MyApplicationPoolName。就我而言,我需要单击“位置”按钮并将位置更改为本地计算机。
在我的测试中,这里使用的特殊用户的名称与域名无关。它是在 IIS 中分配给站点的应用程序池的名称。此应用程序池的名称可能与您网站的域匹配,也可能不匹配。所以模式是:IIS AppPool\[APPLICATION POOL NAME]。接受应用程序池名称中的空白。另请注意,只有在“内置安全主体”被选中作为名称搜索的对象类型(“选择用户或组”对话框中的顶部字段)时,才会找到此用户。
M
Michael

IUSRIIS_IUSER 组的一部分,所以我想您可以放心地删除 IUSR 的权限。 Further reading

但是,随着越来越多的 Windows 系统服务开始以 NETWORKSERVICE 的形式运行,问题出现了。这是因为作为 NETWORKSERVICE 运行的服务可以篡改以相同身份运行的其他服务。因为 IIS 工作进程默认运行第三方代码(经典 ASP、ASP.NET、PHP 代码),所以是时候将 IIS 工作进程与其他 Windows 系统服务隔离,并以唯一身份运行 IIS 工作进程。

Windows 操作系统提供了一种称为“虚拟帐户”的功能,允许 IIS 为其每个应用程序池创建唯一身份。 DefaultAppPool 是分配给您创建的所有应用程序池的默认池。

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

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


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

当我将 IIS_IUSRS 的权限添加到站点文件夹时,JavaScript 和 CSS 等资源仍然无法访问(错误 401,禁止)。但是,当我添加 IUSR 时,它开始工作。因此,您肯定不能删除 IUSR 的权限。


不要忘记(如果您有 IIS7+)正确的解决方案是按照我更新的答案使用 IIS AppPool\MyApplicationPoolName。您无需再与IUSR(S)搞混了!
我已经尝试过你的建议,但它不起作用。我已经从权限中删除了 IUSR(S),并且只保留了池名称,应用程序正在运行。资源变得无法访问。 IIS 8.5。当我添加 IUSR - 它开始工作了。
您需要发布自己的问题,并尽可能多地了解您的情况。
@EvilDRr dotNet 代码将作为应用程序池用户运行(如果这是 appPool 的身份已配置为使用的用户)。否则,对(静态)资源(如图像)的匿名请求将通过匿名身份验证处理,IUSR 是其默认身份。
J
Jan Reilink

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

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

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

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


谢谢,但我没有使用 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,我一直认为IUSR默认是IIS_IUSRS组的一部分?您如何检查是否是这样,因为 IUSR 帐户是一个内置帐户。您是说我应该取消选中 IIS_USRS 的修改并改为检查 IUSR 吗?鉴于单一应用程序的要求,我认为它不会真的有所作为吗?
A
Ashburn RK

仅当您使用 ApplicationPool Identity 时,IIS_IUSRS 组才具有显着性。即使你有这个组在运行时看起来是空的,IIS 根据微软的文献添加到这个组来运行一个工作进程。


d
developer747

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅