【问题标题】:IIS 7 / PHP 5.3.6 Permission denied when accessing network fileIIS 7 / PHP 5.3.6 访问网络文件时权限被拒绝
【发布时间】:2011-05-23 18:50:01
【问题描述】:

ServerA-> 64 位 Windows 2008 (IIS 7 && PHP 5.3.6)

ServerB-> 32 位 Windows 2003(文件服务器)

我正在尝试通过托管在 ServerA 上的站点通过 fopen 访问 \ServerB\directory1\directory2\file.abc 并收到 Permission Denied 错误。它是使用默认应用程序池的默认网站。

我尝试在 AD 中为以下帐户或组授予对目录(和通过继承的文件)的完全权限,但它仍然给出了错误:

  • 手动创建了一个 IUSR_SERVERA 帐户(以前不存在)
  • IIS_WPG
  • 大家
  • 网络服务
  • 匿名访问
  • 经过身份验证的用户

DefaultAppPool 的标识是 NetworkService,并启用了 32 位应用程序。

IUSR_SERVERA 拥有本地 php 目录的完全权限。

感谢任何帮助。我已经通过将本地所需的文件复制到 SERVERA 的 wwwroot 文件夹来暂时解决了这个问题,但这根本不是永久的解决方案。

谢谢

-迈克

【问题讨论】:

    标签: php iis


    【解决方案1】:

    感谢 ProcMon 的建议,它让我得到了答案。我没有正确设置默认应用程序。

    我一遍又一遍地阅读我能找到的所有内容,但没有具体说明:

    如果您需要通过 IIS 7 使用 PHP 访问网络文件,请在您正在处理的站点的应用程序默认设置中设置一个具有适当凭据的帐户。

    为此,请进入 IIS 管理器

    1. 从“连接”窗格中选择您的站点
    2. 单击“操作”窗格(屏幕最右侧)中的“查看应用程序”链接
    3. 在新屏幕的“操作”窗格中单击“设置应用程序默认值”
    4. 从应用程序池部分选择 DefaultAppPool
    5. 在“物理路径凭据”部分输入正确的凭据

    知道在默认应用程序池的高级设置中更改流程模型 -> 身份对允许它发生没有影响。

    【讨论】:

    • 当我因为 file_exists 返回 false 而无法让 fopen 工作时,这正是我所需要的。
    【解决方案2】:

    IUSR_SERVERA 帐户不会有太大用处,因为 PHP 在默认应用程序池下执行,您说它作为 NetworkService 运行。

    您需要做的是将 ServerB 上的权限授予 SERVERA\NetworkService,因为这是本地帐户,而不是 AD 帐户。

    否则,您可以将默认应用程序池更改为以 IUSR_SERVERA 运行,然后它应该可以工作,假设该帐户是 AD 帐户而不是本地帐户。

    如果您仍然无法弄清楚,请获取 ProcMon 的副本,并监视包含所需路径的访问消息,并查看实际的操作系统拒绝原因是什么,以及它试图使用的帐户。

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 1970-01-01
      • 2015-07-03
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      相关资源
      最近更新 更多