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