IIS8 中的 IIS_IUSRS 和 IUSR 权限
Posted
技术标签:
【中文标题】IIS8 中的 IIS_IUSRS 和 IUSR 权限【英文标题】:IIS_IUSRS and IUSR permissions in IIS8 【发布时间】:2013-02-18 10:22:38 【问题描述】:我刚刚从 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 AppPoolIdentity and file system write access permissions的可能重复 为用户组 IIS_IUSRS 添加文件夹的完全权限后工作正常。 @Thulasiram 但是您已经为所有 IIS 用户授予了完全权限。从黑客的角度考虑一下。一个薄弱的站点,他们完全控制了所有其他站点 【参考方案1】:我讨厌发布自己的答案,但最近一些答案忽略了我在自己的问题中发布的解决方案,建议的方法简直是鲁莽。
简而言之 - 您根本不需要编辑任何 Windows 用户帐户权限。这样做只会带来风险。该进程完全在 IIS 中使用继承的权限进行管理。
将修改/写入权限应用于正确用户帐户
当域出现在站点列表下时,右键单击它,然后选择编辑权限
在安全选项卡下,您将看到MACHINE_NAME\IIS_IUSRS
已列出。这意味着 IIS 自动对该目录具有只读权限(例如,在站点中运行 ASP.Net)。 您无需编辑此条目。
点击编辑按钮,然后点击添加...
在文本框中,输入IIS AppPool\MyApplicationPoolName
,将MyApplicationPoolName
替换为您的域名或访问您网站的任何应用程序池,例如IIS AppPool\mydomain.com
按检查名称按钮。您输入的文本会发生变化(注意下划线):
按确定添加用户
选择新用户(您的域)后,现在您可以安全地提供任何修改或写入权限
【讨论】:
这在我的 IIS 8.5 服务器上不起作用。添加IUSR
有效。添加IIS AppPool\Cache
(我的应用程序池的名称)产生HTTP Error 401.3 - Unauthorized
@CharlesBurns 我遇到了同样的问题,我发现这是我的根本原因:techras.wordpress.com/2016/03/09/…(匿名身份验证设置为使用 IUSR 而不是应用程序池标识)
我有一个仅用作虚拟目录的文件夹,它工作正常,直到我与另一个域帐户共享它(它指向的 windows 文件夹),所以它可以通过我们的 Intranet 查看文件。当我这样做时,虚拟目录中的文件突然变得无法访问。我最终不得不添加具有只读权限的MyComputerName\IIS_IUSRS
和IUSR
才能再次工作。这仅适用于虚拟目录(不是 .net 应用程序),但可能有人会觉得它有用。
请注意:当您搜索用户并且计算机是域的成员时,可能找不到 IIS AppPool\MyApplicationPoolName。就我而言,我需要单击“位置”按钮并将位置更改为本地计算机。
在我的测试中,这里使用的特殊用户名与域名无关。它是在 IIS 中分配给站点的应用程序池的名称。此应用程序池的名称可能与您网站的域匹配,也可能不匹配。所以模式是:IIS AppPool\[APPLICATION POOL NAME]
。接受应用程序池名称中的空白。另请注意,只有在“内置安全主体”被选中作为名称搜索的对象类型(“选择用户或组”对话框中的顶部字段)时,才会找到此用户。【参考方案2】:
IUSR
是IIS_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 i.e (IWGP) 。我向 IWGP 授予了权限,它起作用了。 IUSR 是 IIS_IUSER 的一部分。不它不是! IUSR是匿名用户,IIS_IUSER是apppool用户组【参考方案3】:当我将IIS_IUSRS
的权限添加到站点文件夹时,javascript 和 CSS 等资源仍然无法访问(错误 401,被禁止)。但是,当我添加IUSR
时,它开始工作了。所以你肯定不能删除IUSR
的权限。
【讨论】:
不要忘记(如果您有 IIS7+)正确的解决方案是根据我更新的答案使用IIS AppPool\MyApplicationPoolName
。你不需要再纠结IUSR(S)了!
我已经尝试过您的建议,但它不起作用。我已经从权限中删除了 IUSR(S),并且只保留了池名称,应用程序正在运行。资源变得无法访问。 IIS 8.5。当我添加 IUSR - 它开始工作了。
您需要发布自己的问题,并尽可能多地了解您的情况。
@EvilDRr dotNet 代码将作为应用程序池用户运行(如果已将 appPool 的身份配置为使用该用户)。否则,对(静态)资源(如图像)的匿名请求将通过匿名身份验证处理,IUSR 是其默认身份。【参考方案4】:
@EvilDr 您可以在 AD 环境中创建一个 IUSR_[identifier] 帐户,并让特定的应用程序池在该 IUSR_[identifier] 帐户下运行:
“应用程序池”>“高级设置”>“身份”>“自定义帐户”
在高级设置中将您的网站设置为“应用程序用户(传递身份验证)”而不是“特定用户”。
现在为 IUSR_[标识符] 赋予文件和文件夹的适当 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 吗?鉴于单一应用程序的要求,我认为它不会真正有所作为吗?【参考方案5】:IIS_IUSRS 组只有在您使用 ApplicationPool Identity 时才会突出。即使你有这个组在运行时看起来是空的,IIS 根据微软的文献添加到这个组来运行一个工作进程。
【讨论】:
不知道为什么这被否决了。 docs.microsoft.com/en-us/iis/get-started/planning-for-security/…【参考方案6】:我会使用特定用户(而不是应用程序用户)。然后我将在应用程序中启用模拟。一旦您执行此操作,无论帐户设置为特定用户,这些凭据都将用于访问该服务器上的 本地资源(不适用于外部资源)。
特定用户设置专门用于访问本地资源。
【讨论】:
以上是关于IIS8 中的 IIS_IUSRS 和 IUSR 权限的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 和 SQL Server 2008 中的错误“用户 'NT AUTHORITY\IUSR' 登录失败”