我刚从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)。
答案 0 :(得分:126)
我讨厌发表自己的答案,但最近的一些答案忽略了我在自己的问题中发布的解决方案,提出的方法简直就是蛮干。
简而言之 - 您根本不需要编辑任何Windows用户帐户权限。这样做只会带来风险。使用继承的权限在IIS中完全管理该过程。
答案 1 :(得分:48)
IUSR是IIS_IUSER组的一部分。所以我想你可以删除IUSR的权限而不用担心。 Further Reading
然而,随着越来越多的Windows系统服务开始作为NETWORKSERVICE运行,出现了一个问题。这是因为作为NETWORKSERVICE运行的服务可以篡改以相同标识运行的其他服务。由于IIS工作进程默认运行第三方代码(Classic ASP,ASP.NET,PHP代码),因此是时候将IIS工作进程与其他Windows系统服务隔离开来,并在唯一标识下运行IIS工作进程。 Windows操作系统提供了一个名为“虚拟帐户”的功能,允许IIS为每个应用程序池创建唯一标识。 DefaultAppPool是默认池,分配给您创建的所有应用程序池。
为了使其更安全,您可以将IIS DefaultAppPool标识更改为ApplicationPoolIdentity。
关于权限,“创建”和“删除”汇总了可以给出的所有权限。因此,无论您分配给IIS_USERS组,他们都需要。没有更多,没有更少。
希望这会有所帮助。
答案 2 :(得分:5)
当我向站点文件夹添加IIS_IUSRS权限时 - 资源(如js和css)仍然无法访问(错误401,禁止)。但是,当我添加IUSR时 - 它变好了。所以肯定“你不能在不担心的情况下删除IUSR的权限”,亲爱的@Travis G @
答案 3 :(得分:3)
@EvilDr 您可以在AD环境中创建IUSR_ [identifier]帐户,并让特定应用程序池在该IUSR_ [identifier]帐户下运行:
“应用程序池”> “高级设置”> “身份”> “自定义帐户”
在高级设置中将您的网站设置为“Applicaton user(传递身份验证)”而不是“特定用户”。
现在为IUSR_ [identifier]赋予文件和文件夹相应的NTFS权限,例如:在companydata上修改。
答案 4 :(得分:2)
只有在使用ApplicationPool Identity时,IIS_IUSRS组才会突出显示。即使你有这个组在运行时看起来是空的IIS根据微软文献添加到这个组来运行一个工作进程。
答案 5 :(得分:0)
我会使用特定用户(而非应用程序用户)。然后我将在应用程序中启用模拟。无论将哪个帐户设置为特定用户,这些凭据都将用于访问该服务器上的本地资源(不适用于外部资源)。
特定用户设置专门用于访问本地资源。