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

ali*_*lik 5 iis php permissions

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

  • 网站example.com
    • 基本设置 - 应用程序池 = example.com
    • 基本设置 - 连接身份 = 应用程序用户(直通身份验证)
  • 应用程序池example.com
    • 高级设置 - 流程模型 - 身份 - ApplicationPoolIdentity
  • 脚本尝试写入文件
    • C:\ABC\test.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 AUTHORITY\IUSR
  • 过程
    • 路径 ...\php-cgi.exe
    • 用户:IIS APPPOOL\example.com

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

ali*_*lik 5

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

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

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