166

我刚刚从 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)。

4

6 回答 6

173

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

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

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

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

    在此处输入图像描述

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

    在此处输入图像描述

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

  3. 在文本框中,键入IIS AppPool\MyApplicationPoolName,替换MyApplicationPoolName为您的域名或正在访问您的站点的任何应用程序池,例如IIS AppPool\mydomain.com

    在此处输入图像描述

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

    在此处输入图像描述

  5. OK添加用户

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

    在此处输入图像描述

于 2016-04-13T11:39:39.450 回答
50

IUSR是该IIS_IUSER组的一部分,所以我想您可以删除权限IUSR而不必担心。进一步阅读

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

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

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

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

于 2013-02-28T09:37:48.973 回答
8

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

于 2014-07-11T11:37:32.257 回答
4

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

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

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

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

于 2013-02-21T13:23:56.483 回答
4

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

于 2017-06-29T14:56:48.470 回答
0

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

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

于 2013-02-24T01:20:48.853 回答