PHP FastCgi 作为 IUSR 而不是 IIS APPPOOL/xxx 运行

PHP FastCgi 作为 IUSR 而不是 IIS APPPOOL/xxx 运行

IIS 网站通过应用程序池运行,该应用程序池的 Identity 高级属性设置为 ApplicationPoolIdentity。该网站通过 FastCGI 处理程序运行 PHP 脚本。这些脚本尝试写入文件,但即使应用程序池用户具有足够的权限,访问也会被拒绝。我运行了 ProcMon,它显示脚本正在尝试使用 IUSR 而不是应用程序池用户打开文件。

  • 网站 example.com
    • 基本设置 - 应用程序池 = example.com
    • 基本设置 - 连接身份 = 应用程序用户(直通身份验证)
  • 应用程序池 example.com
    • 高级设置 - 进程模型 - 身份 - ApplicationPoolIdentity
  • 脚本尝试写入文件
    • C:\ABC\测试.txt
  • 目录 C:\ABC 具有权限
    • IIS APPPOOL\example.com - 完全控制,类型允许,应用于此文件夹、子文件夹和文件

当我打开脚本网址时,我得到 PHP Warning: fopen(C:\ABC\test.txt): failed to open stream: Permission denied

当我运行 Sysinternal 的 ProcMon 时,我看到:

  • 事件
    • 创建文件操作
    • 结果访问被拒绝
    • 路径 C:\ABC
    • 所需访问:读取数据/列出目录、同步
    • 共享模式:读取、写入、删除
    • 冒充:NT 权限\IUSR
  • 过程
    • 路径…\php-cgi.exe
    • 用户:IIS APPPOOL\example.com

如何修复它以便使用 example.com 用户访问该文件?

答案1

终于找到了,还有一个地方需要设置。

Site -> Authentication -> Anonymous Authentication -> Edit to "Application Pool Identity"

来源:关于php:IIS 7.5 / W2K8上使用IUSR帐户而不是IIS_APPPOOL \ DefaultAppPool的PHP

相关内容