我刚刚从 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)。
我讨厌发布自己的答案,但最近的一些答案忽略了我在自己的问题中发布的解决方案,提出的方法简直就是鲁莽。
简而言之 - 您根本不需要编辑任何 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
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
组的所有内容都是他们需要的。
当我将 IIS_IUSRS
的权限添加到站点文件夹时,JavaScript 和 CSS 等资源仍然无法访问(错误 401,禁止)。但是,当我添加 IUSR
时,它开始工作。因此,您肯定不能删除 IUSR
的权限。
IIS AppPool\MyApplicationPoolName
。您无需再与IUSR(S)搞混了!
@EvilDr 您可以在 AD 环境中创建一个 IUSR_[identifier] 帐户,并让特定的应用程序池在该 IUSR_[identifier] 帐户下运行:
“应用程序池”>“高级设置”>“身份”>“自定义帐户”
在高级设置中将您的网站设置为“应用程序用户(通过身份验证)”而不是“特定用户”。
现在为 IUSR_[identifier] 赋予文件和文件夹适当的 NTFS 权限,例如:修改公司数据。
仅当您使用 ApplicationPool Identity 时,IIS_IUSRS 组才具有显着性。即使你有这个组在运行时看起来是空的,IIS 根据微软的文献添加到这个组来运行一个工作进程。
我会使用特定用户(而不是应用程序用户)。然后我将在应用程序中启用模拟。一旦您这样做,无论帐户设置为特定用户,这些凭据都将用于访问该服务器上的本地资源(不适用于外部资源)。
特定用户设置专门用于访问本地资源。
不定期副业成功案例分享
IUSR
有效。添加IIS AppPool\Cache
(我的应用程序池的名称)产生HTTP Error 401.3 - Unauthorized
MyComputerName\IIS_IUSRS
和IUSR
才能再次工作。这仅适用于虚拟目录(不是 .net 应用程序),但有人可能会觉得它有用。IIS AppPool\[APPLICATION POOL NAME]
。接受应用程序池名称中的空白。另请注意,只有在“内置安全主体”被选中作为名称搜索的对象类型(“选择用户或组”对话框中的顶部字段)时,才会找到此用户。