web-dev-qa-db-ja.com

偽装する必要がありますPHP FastCGIを介して?

私はPHPにIIS 7.5を介してFastCGIを介して最新バージョンをインストールしています。そして 説明 のすべてはFastCGIが設定によるクライアントの呼び出し

 fastcgi.impersonate = 1

私のウェブサイトにこの設定がある場合

  • 専用アプリケーションプール
  • applicationPoolIdentityのアプリケーションプールID
  • 匿名認証のみ(IUSRとして)

なぜ偽装したいのですか?

私はASP.NETのバックグラウンドで、IUSRは読み取り専用のアクセス許可を取得し、アプリケーションプールIDはすべての書き込みアクセス許可を取得しています。 IUSRへの書き込みアクセス権を付与すると、通常、WebDAVの脆弱性への扉が開かれます。したがって、私はPHPをIUSRとして実行することをためらっています。

この質問をする人はあまりいないので( 1 | 2 )、何かが足りないと思います。誰かがこれを明確にしてくれますか?

16
WimpyProgrammer

13か月後、自分自身の質問を再確認したいと思いました。その間に、私はIIS 6からIIS 7.5に)の6のウェブサイトを転送し、私の好みの方法でそれらを構成しました。動作し、セキュリティ上の問題はありません(これらは人気のあるサイトではありません)。私の意見では、設定はlearn.iis.netが推奨するものよりも安全です。

後世のために、関連する設定を以下に示します。 PHP INI:

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0

IISの場合:

  • アプリケーションプール> ID>ApplicationPoolIdentity
  • ウェブサイト>認証>匿名認証>特定のユーザー:[〜#〜] iusr [〜#〜]

NTFSアクセス許可とそれらを適用する場所:

  • [〜#〜] iusr [〜#〜]-読み取りの許可、書き込みの拒否
    • IIS Webサイトのルートディレクトリ。たとえば、Zend Frameworkプロジェクトでは、これは/ publicディレクトリになります。
    • アプリケーションがファイルをアップロードしてパブリックディレクトリに保存する場合は、この権限を一時アップロードディレクトリに適用する必要があります。 move_uploaded_file はアップロードディレクトリの権限を保持するためです。これは、私が見つけたこの権限設定の最大の欠点です。
  • ApplicationPoolIdentityIIS AppPool\<<YourApplicationPoolName>>)-読み取りとリストの付与
    • PHPアプリケーションのルート。たとえば、Zend Frameworkプロジェクトの場合、これはプロジェクト全体になります。
    • アプリケーションに含まれておらず、アプリケーションフォルダーに含まれていない外部ライブラリ(Zend、Doctrineなど)。
  • ApplicationPoolIdentity-変更の許可
    • アプリケーションが書き込む場所(upload_tmp_dirsession.save_patherror_logなど)。
    • Doctrineのプロキシの自動生成 のようなものをサポートするために、開発環境のPHPアプリケーションのルートにこの権限を追加する必要がある場合があります。
  • ApplicationPoolIdentity-許可リスト
    • アプリケーションが仮想ディレクトリにある場合は、この権限をWebサイトのルートに追加する必要があります。これにより、アプリケーションは親のweb.configを読み取ることができます。たとえば、アプリケーションルートが http://example.com/MyPHPApp の場合、example.com Webディレクトリにこの権限を設定します。具体的には、「このフォルダとファイル」、「このコンテナ内のみ」にのみ適用する必要があります。

これが、learn.iis.netの指示が理想的でないと判断した人にとって役立つことを願っています。

17
WimpyProgrammer

参照: http://www.php.net/manual/en/install.windows.iis6.php

偽装とファイルシステムアクセス

IISを使用する場合は、PHPでFastCGI偽装を有効にすることをお勧めします。これは、php.iniファイルのfastcgi.impersonateディレクティブによって制御されます。偽装が有効な場合、PHPは、IIS認証によって決定されたユーザーアカウントに代わってすべてのファイルシステム操作を実行します。

ドキュメントごとに、fastcgiがクライアントに代わってすべて同じ権限を使用することを許可します(この場合、IUSRアカウントのようになります)。言い換えると、クライアント(または匿名)自身の資格情報に対して通常許可されているすべてのアクションを実行することです。それ以上でもそれ以下でもありません。このセットがないと、貧しいfastcgiが機能しなくなると思います。

1