我在 IIS 7 上安装了一个 ASP.NET 应用程序,该应用程序将信息存储在 Windows 网络共享上。它已成功安装并在共享上创建了所有必要的文件夹。该应用程序在网络服务帐户下运行。通常会在这些文件夹上设置权限,但这次没有,所以我为它们分配了权限。
问题是,当我尝试导航到该页面时,我收到拒绝访问错误,因为应用程序无法访问其中一个文件夹。我已将所有人的权限分配给共享,现在问题已经解决,但删除它后问题又出现了。我显然不想只保留此文件夹的所有人权限。
有谁知道问题可能是什么,或者可以用什么来代替所有人帐户?
我不是 IIS 专家,因此如果本文在某些地方含糊或不明确,请谅解!
答案1
我假设您为整个网络共享分配了“每个人的完全控制权”,而不仅仅是共享内的特定文件夹。
您可能已经知道这一点,但 Windows 管理两种共享权限 - 文件安全和共享设置。必须设置这两项权限才能访问网络共享。如果右键单击共享文件夹,则需要在“共享”和“安全”选项卡中设置权限。
我怀疑问题实际上与使用 NETWORK SERVICE 帐户有关,而不是您的共享权限。服务级别帐户(SYSTEM 和 NETWORK SERVICE)是您所在机器的本地帐户,这会产生一些后果。例如,考虑如何使用完全限定名称设置您的权限:
在您的应用服务器上,运行 ASP.NET 应用程序的帐户是“5lovak 的服务器\NETWORK SERVICE”。在另一台计算机上的网络共享上,本地帐户实际上是“5lovak 的网络共享服务器\NETWORK SERVICE”。
尽管帐户名相同,但它们是不同的帐户,因此您无法通过这种方式访问共享。
我认为设置此设置的最合适方法是创建一个新的 Windows 用户帐户,并将其专门用于此目的。Windows 传统上有一种“廉价”的方式来伪造类似域的用户:只需在两台计算机上创建一个本地用户,并确保它们都具有相同的密码。我不确定为什么这不适用于 NETWORK SERVICE 和 SYSTEM,但我怀疑有充分的理由。
那么,尝试一下这个:
- 在您的 IIS 机器上,创建一个名为 IUSR_SHARE(或其他)的用户。设置密码!
- 在您的网络共享机器上,创建一个名为 IUSR_SHARE 的用户并设置相同的密码。
- 在 IIS 管理器中,选择您的 Web 应用正在使用的应用程序池(如果您使用默认应用程序池,请创建一个新的)。单击右侧操作栏中的高级设置。在进程模型下,将用户更改为 IUSR_SHARE。
我这里没有可以轻松测试它的设置,但我认为它会起作用。
答案2
正确的方法应该是
用于ApplicationPoolIdentity
应用程序池
并授予指定机器 ID 的访问权限,如 domain\machinename$(“$”是机器名所需的后缀)
如果共享文件夹位于同一台机器上,IIS_IUSRS
也请设置该文件夹的访问权限。