IIS7 访问网络共享

37
我在 Windows Server 2008 R2 上运行着安装了 PHP 5.4 的 IIS 7。我的一个 PHP 脚本尝试使用 UNC 路径访问受保护的网络共享文件。我该如何更改 IIS 服务帐户以便使用具有访问权限的帐户来访问此共享?在 Apache HTTP 服务器上,这个操作非常容易(只需要更改即可),但在 IIS 上并不清楚该怎么做。我能做什么?
更新:我通过网站“基本设置”中的“连接作为”选项,并指定具有访问网络共享的权限的帐户,使事情正常工作。看起来我的问题与此问题相关:https://serverfault.com/questions/366234/iis-identities-application-pool-vs-connect-as-in-basic-settings

Philip Tenn 是绝对正确的。微妙的澄清:您不想更改 IIS 用户。那将是“坏的”。相反,您想设置需要此特定资源的“应用程序池”的“标识”。Philip 告诉您如何做到这一点。 - paulsm4
@paulsm4 但是我无法让Philip的方法起作用...请查看我的评论。 - HydroPowerDeveloper
3个回答

54
对于在 Windows Server 2008 R2 上运行的 IIS 7… 在 IIS 管理器 中,选择您的网站所在的 应用程序池
单击 "高级设置"。 有一个条目为Identity(在进程模型部分下)。 单击它,提供具有访问共享权限的帐户凭据。 更新 如果使用的是活动目录域帐户,应确保在运行的应用程序池下正确提供了Identity。例如,MYDOMAIN\myAccount
进行此更改后,需要执行以下操作:
  1. 停止网站。
  2. 回收应用程序池。
  3. 启动网站。
更新 II 从这个答案的评论讨论中,@HydroPowerDeveloper 能够通过 WebSite -> 基本设置 -> "连接为" 并在那里设置凭据来使 PHP 脚本能够通过 UNC 路径访问网络共享。
过去,我总是使用通过 应用程序池 设置 Identity 的方法,并且代码可以通过 UNC 路径访问网络共享。
但是,我部署在 IIS 上的所有站点/应用程序都是基于 .NET 的 WCF 或 ASPX 站点。
我会推测(但不确定,需要进行研究/测试以确认)在应用程序池中指定的 Identity 被执行 .NET 代码使用,而 "Connect As" 被 PHP 脚本使用。

@HydroPowerDeveloper 我已更新了我的答案,请再试一次。请注意,我已经多次使用上述方法访问网络共享,并且效果很好。 - Philip Tenn
1
@HydroPowerDeveloper 我相信我现在明白了发生了什么。你今天教会了我关于IIS的新知识,感谢你回来并提供你的发现。我将用你的发现更新我的答案。 - Philip Tenn
2
@PhilipTenn 我认为你的第二次更新是正确的(至少对我来说是有很多意义的)。再次感谢你的所有帮助,我会接受你的答案。祝你有美好的一天!=) - HydroPowerDeveloper
对于经典ASP开发人员,请注意使用“Connect As”设置可以使此功能适用于ASP 2应用程序。 - Onkel-j
我正在通过IIS上的虚拟目录访问网络位置,在虚拟文件夹上单击高级设置,提供凭据,将凭据登录类型设置为交互式,在ASP.Net MVC应用程序上对我有效。 - sairfan
显示剩余5条评论

7
通常情况下,应用程序池应尽可能使用最少的权限。

http://msdn.microsoft.com/en-us/library/ff647402.aspx

最简单的方法是允许访问当前IIS帐户。
在资源管理器中,导航到共享目录。
右键单击->属性->安全。
如果您在列表(组或用户名)中看不到预期的IIS用户,请进行编辑并根据需要添加用户。
我使用了“NETWORK SERVICE”->检查名称。
详细说明在该网站上。
通过这种方式,系统仍然受限制,我们仅允许访问特定目录,无需创建任何新用户,也无需回收应用程序池,也无需执行任何聪明的模拟代码。

3
对于大多数使用情况,这是首选的方法。但是,只有在您确实能够/被授权设置有关网络共享的访问权限时,该方法才有效。如果您只有一个现有帐户来访问共享,则必须按照Philip Tenn所概述的方式进行。 - cemper93

2

为了解决一个旧问题...

我刚刚设置了一个使用Perl访问UNC共享的Win 2016服务器。我将应用程序池设置为一个我验证过在该共享上具有正确权限的帐户。然后,我设置我的网站在“基本设置”下的“连接为...”中使用相同的用户。我仍然无法使访问工作。

经过一番苦思冥想,我意识到我的“虚拟目录”cgi-bin正在以原始的“通过”帐户运行。然后,我设置虚拟目录在网站、应用程序池和相同帐户下的“连接为…”,完成!一切正常。

因此,请记得更新所有的虚拟目录以及网站和应用程序池...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接