1. ホーム
  2. asp.net

[解決済み] IISのAppPoolIdentityとファイルシステムの書き込みアクセス権

2022-03-22 14:30:08

質問

IIS 7.5とASP.NETに関する問題で、これまで調べても解決しなかったことがあります。何か助けがあれば、とてもありがたいです。

私の質問は、IIS 7.5 で ASP.NET を使用して、IIS および/またはオペレーティング システムが、Web アプリケーションが次のようなフォルダに書き込むことを許可する方法です。 C:\dump 完全な信頼関係のもとで実行されているのでしょうか?アプリケーションプールユーザーに明示的に書き込み権限を追加する必要がないのはなぜでしょうか(この場合は ApplicationPoolIdentity )?

これだけはわかる。

  • IIS 7.5では、アプリケーションプールのデフォルトのIdentityは ApplicationPoolIdentity .
  • ApplicationPoolIdentity は、アプリケーションプールの作成時に作成される、"IIS APPPOOLttpoolName"というWindowsユーザーアカウント(AppPoolNameはアプリケーションプールの名前)を表します。
  • IIS APPPOOL のユーザーは、デフォルトで IIS_IUSRS グループに所属しています。
  • 完全信頼の下で実行している場合、Webアプリケーションはファイルシステムの多くの領域に書き込むことができます。 C:\Users , C:\Windows など)。例えば、あなたのアプリケーションは、次のようないくつかのフォルダに書き込むアクセス権を持っています。 C:\dump .
  • デフォルトでは IIS_IUSRS グループには、読み取りまたは書き込みのアクセス権が与えられません。 C:\dump (少なくともWindowsエクスプローラーの[セキュリティ]タブから見えるアクセスではありません)。
  • への書き込みアクセスを拒否した場合 IIS_IUSRS の場合、そのフォルダに書き込もうとすると SecurityException が発生します (予想通り)。

では、これらのことを考慮した上で、"IIS APPPOOL﹑AppPoolName" ユーザーへの書き込みアクセスはどのように許可されているのでしょうか。w3wp.exeプロセスはこのユーザーとして実行されるので、このユーザーが明示的なアクセス権を持っていないフォルダに書き込むことができるのはなぜでしょうか?

完全な信頼関係の下で実行している場合、書き込みが必要なすべてのフォルダーへのアクセスをユーザーに許可するのは面倒なので、これはおそらく利便性のために行われたと理解していることに留意してください。このアクセスを制限したい場合は、常にMedium Trustの下でアプリケーションを実行することができます。私は、明示的なファイル システム アクセスが付与されていないように見えるにもかかわらず、オペレーティング システムと IIS がこれらの書き込みを許可する方法について調べることに関心があります。

解決方法は?

その ApplicationPoolIdentity のメンバーシップが割り当てられます。 Users グループと同様に IIS_IUSRS というグループです。一見すると、これはやや心配に見えるかもしれません。 Users グループは、NTFSの権限がやや制限されています。

例えば、フォルダを作成しようとすると C:\Windows フォルダーを使用すると、それができないことがわかります。そのため ApplicationPoolIdentity Windows システムフォルダからファイルを読み込める必要があります (そうでなければ、ワーカープロセスで必要な DLL を動的にロードすることができません)。

への書き込みが可能かどうかという点については、「1. c:\dump フォルダーを使用します。セキュリティの詳細設定のパーミッションをご覧いただくと、以下のようになります。

から継承されている特別な許可を見てください。 c:\ :

それが、あなたのサイトの ApplicationPoolIdentity を読み取ることができ 書く をそのフォルダにコピーします。その権利は c:\ ドライブを使用します。

数百のサイトがあり、それぞれにアプリケーションプールとアプリケーションプールアイデンティティがある共有環境では、サイトフォルダは、アプリケーションプールアイデンティティを持つフォルダまたはボリュームに格納されます。 Users グループを削除し、AdministratorsとSYSTEMアカウントのみがアクセスできるように権限を設定します(継承あり)。

その後、それぞれの IIS AppPool\[name] は、そのサイトのルート・フォルダーに必要です。

また、潜在的な機密ファイルやデータを保存するために作成したフォルダには、必ず Users グループは削除してください。また、インストールしたアプリケーションが、機密データをその c:\program files\[app name] フォルダを使用し、代わりにユーザープロファイルフォルダを使用するようにしました。

そうそう、一見すると ApplicationPoolIdentity には必要以上の権限がありますが、実際にはグループメンバーシップで決められた以上の権限はありません。

ApplicationPoolIdentity のグループメンバーシップを調べるには、SysInternals の プロセスエクスプローラーツール . 興味のあるアプリケーションプールアイデンティティで実行されているワーカープロセスを検索します。 User Name カラムを表示するようにします。

例えば、ここに 900300 のアプリケーションプールアイデンティティを持っています。 IIS APPPOOL\900300 . このプロセスのプロパティを右クリックして、セキュリティタブを選択すると、次のようになります。

このように IIS APPPOOL\900300Users というグループがあります。