web-dev-qa-db-ja.com

PHP FastCgiがIIS APPPOOL / xxxの代わりにIUSRとして実行されている

IIS Webサイトは、Identity詳細プロパティがApplicationPoolIdentityに設定されているアプリケーションプールを介して実行されます。Webサイトは、FastCGIハンドラーを介してPHPスクリプトを実行します。これらのスクリプトは、ファイルに書き込むことはできますが、アプリケーションプールユーザーに十分な権限がある場合でもアクセスが拒否されます。ProcMonを実行したところ、スクリプトがアプリケーションプールユーザーの代わりにIUSRを使用してファイルを開こうとしていることがわかります。

  • ウェブサイトexample.com
    • 基本設定-アプリケーションプール= example.com
    • 基本設定-接続方法=アプリケーションユーザー(パススルー認証)
  • アプリケーションプールexample.com
    • 詳細設定-プロセスモデル-ID-ApplicationPoolIdentity
  • スクリプトがファイルへの書き込みを試みます
    • C:\ ABC\test.txt
  • ディレクトリC:\ ABCには権限があります
    • IIS APPPOOL\example.com-フルコントロール、タイプ許可、このフォルダ、サブフォルダ、およびファイルに適用

スクリプトのURLを開くと、PHP Warning: fopen(C:\ABC\test.txt): failed to open stream: Permission deniedが表示されます

SysinternalのProcMonを実行すると、次のようになります。

  • イベント
    • 操作CreateFile
    • 結果アクセスが拒否されました
    • パスC:\ ABC
    • 必要なアクセス:データ/リストディレクトリの読み取り、同期
    • ShareMode:読み取り、書き込み、削除
    • なりすまし:NT AUTHORITY\IUSR
  • 処理する
    • パス…\ php-cgi.exe
    • ユーザー:IIS APPPOOL\example.com

Example.comユーザーを使用してファイルにアクセスできるように修正するにはどうすればよいですか?

3
alik

最後にそれを見つけました。それを設定する必要があるもう1つの場所があります。

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

ソース: PHP on IIS 7.5/W2K8 using IUSR Account not IIS_APPPOOL\DefaultAppPool

2
alik