PHP FastCgi running as IUSR instead of IIS APPPOOL/xxx
An IIS website is run via an Application Pool which has its Identity advanced property set to ApplicationPoolIdentity. The website runs PHP scripts via a FastCGI handler. These scripts try to write to a file but the access is denied even the application pool user has enough permission. I have run ProcMon and it shows that the scripts are trying to open the files using IUSR instead of the application pool user.
- Website example.com
- Basic Settings - Application Pool = example.com
- Basic Settings - Connect As = Application user (pass-through authentication)
- Application Pool example.com
- Advanced Settings - Process Model - Identity - ApplicationPoolIdentity
- Script tries to write to a file
- C:\ABC\test.txt
- The directory C:\ABC has permission
- IIS APPPOOL\example.com - Full control, Type Allow, Applies to This folder, subfolders and files
When I open the scripts url, I get
PHP Warning: fopen(C:\ABC\test.txt): failed to open stream: Permission denied
When I run Sysinternal's ProcMon I see:
- Event
- Operation CreateFile
- Result Access Denied
- Path C:\ABC
- Desired Access: Read Data/List Directory, Syncchronize
- ShareMode: Read, Write, Delete
- Impersonating: NT AUTHORITY\IUSR
- Process
- Path …\php-cgi.exe
- User: IIS APPPOOL\example.com
How to fix it so the file is accessed using the example.com user?
Solution 1:
Finally found it. There is one more place that it needs to be set it up.
Site -> Authentication -> Anonymous Authentication -> Edit to "Application Pool Identity"
Source: PHP on IIS 7.5/W2K8 using IUSR Account not IIS_APPPOOL\DefaultAppPool