我正在使用 PHP 5.4 在 Windows Server 2008 R2 上运行 IIS 7。我的一个 PHP 脚本正在尝试使用 UNC 路径访问受保护网络共享上的文件。如何将 IIS 服务帐户更改为有权访问共享的帐户?这在 Apache HTTP 服务器上很容易做到(您只需更改它),但不清楚如何使用 IIS。我能做些什么?
更新:
我能够使用我网站的“基本设置”中的“连接为”选项让事情正常工作,然后指定一个可以访问网络共享的帐户。看来我的问题与这个问题有关:
我正在使用 PHP 5.4 在 Windows Server 2008 R2 上运行 IIS 7。我的一个 PHP 脚本正在尝试使用 UNC 路径访问受保护网络共享上的文件。如何将 IIS 服务帐户更改为有权访问共享的帐户?这在 Apache HTTP 服务器上很容易做到(您只需更改它),但不清楚如何使用 IIS。我能做些什么?
更新:
我能够使用我网站的“基本设置”中的“连接为”选项让事情正常工作,然后指定一个可以访问网络共享的帐户。看来我的问题与这个问题有关:
对于在 Windows Server 2008 R2 上运行的 IIS 7 ... 在 中IIS Manager
,选择Application Pool
您的网站正在运行的位置。
单击“高级设置”。将有一个条目Identity
(在该Process Model
部分下)。单击它,为您有权访问共享的帐户提供凭据。
更新
如果您使用的是 Active Directory 域帐户,则应确保Identity
在运行的应用程序池下正确提供了该帐户。例如,MYDOMAIN\myAccount
。
进行此更改后,您需要执行以下操作:
更新二
从对此答案的评论讨论中,@HydroPowerDeveloper 能够使用 WebSite -> Basic Settings -> "Connect As" 并在此处设置凭据,使 PHP 脚本能够通过 UNC 路径访问网络共享。
过去,我一直使用设置Identity
via的方法Application Pool
,这允许我的代码通过 UNC 路径访问网络共享。
但是,我部署的所有站点/应用程序IIS
都是基于 .NET 的 WCF 或 ASPX 站点。
我推测(但对此不是 100% 确定,需要研究/测试来确认)在 .NET 代码中Identity
指定的Application Pool
内容是通过执行 .NET 代码使用的,而 PHP 脚本使用“Connect As”。
通常,应用程序池设置使用尽可能少的权限。
http://msdn.microsoft.com/en-us/library/ff647402.aspx
最简单的方法是允许访问当前的 IIS 帐户。
在资源管理器中,导航到共享目录。
右键单击-> 属性-> 安全
如果在列表中看不到预期的 IIS 用户(组或用户名),请根据需要编辑并添加用户。
我使用“网络服务”-> 检查名称。
详细说明在那个网站上。
这样,系统仍然是受限的,我们只允许访问特定目录,我们不需要创建任何新用户,我们不需要回收应用程序池,我们不需要执行任何操作漂亮的模拟代码。
复活一个老问题...
我刚刚设置了一个使用 Perl 访问 UNC 共享的 Win 2016 服务器。我将应用程序池设置为我验证对该共享具有正确权限的帐户。然后我将我的网站设置为“连接为...”(在“基本设置”下)同一用户。我仍然无法访问工作。
挠头之后,我意识到我的“虚拟目录”cgi-bin 是在原来的“通过”帐户下运行的。然后,我将虚拟目录设置为“连接为...”与站点和应用程序池相同的帐户,宾果游戏,一切正常。
因此,请记住更新任何虚拟目录以及站点和应用程序池...