IIS 7.5 と ASP.NET に関する問題があり、調査していますが、解決に至っていません。ご協力いただければ幸いです。
私の質問は、IIS 7.5 で ASP.NET を使用する場合、IIS やオペレーティング システムはどのようにして、完全な信頼の下で実行されているときのように、Web アプリケーションがフォルダーに書き込むことを許可するのでしょうか。アプリケーション プール ユーザー (この場合は)C:\dump
に書き込みアクセスを明示的に追加する必要がないのはなぜでしょうか。ApplicationPoolIdentity
私が知っているのはこれだけです。
- IIS 7.5 では、アプリケーション プールの既定の ID は です
ApplicationPoolIdentity
。 ApplicationPoolIdentity
「IIS APPPOOL\AppPoolName」という Windows ユーザー アカウントを表します。これは、アプリケーション プールの作成時に作成されます。ここで、AppPoolName はアプリケーション プールの名前です。- 「IIS APPPOOL\AppPoolName」ユーザーは、デフォルトでグループのメンバーになります
IIS_IUSRS
。 - Full Trust で実行している場合、Web アプリケーションはファイル システムの多くの領域に書き込むことができます (
C:\Users
、C:\Windows
などのフォルダーは除く)。たとえば、アプリケーションには、などの一部のフォルダーへの書き込みアクセス権が付与されますC:\dump
。 - デフォルトでは、
IIS_IUSRS
グループには読み取りまたは書き込みアクセス権は付与されませんC:\dump
(少なくとも、Windows エクスプローラーの [セキュリティ] タブに表示されるアクセス権は付与されません)。 - への書き込みアクセスを拒否すると
IIS_IUSRS
、フォルダーへの書き込みを試行したときに SecurityException が発生します (予想どおり)。
では、これらすべてを考慮すると、「IIS APPPOOL\AppPoolName」ユーザーに書き込みアクセスはどのように付与されるのでしょうか? w3wp.exe プロセスはこのユーザーとして実行されますが、このユーザーが明示的なアクセス権を持っていないと思われるフォルダーに書き込むことを許可するのは何でしょうか?
完全な信頼で実行している場合、書き込みが必要なすべてのフォルダーへのユーザー アクセスを許可するのは面倒なので、これはおそらく利便性のために行われたと理解しています。このアクセスを制限したい場合は、いつでもアプリケーションを中程度の信頼で実行できます。明示的なファイル システム アクセスが許可されていないように見える場合でも、オペレーティング システムや IIS がこれらの書き込みを許可する方法について知りたいです。
ベストアンサー1
には、グループとグループApplicationPoolIdentity
のメンバーシップが割り当てられます。一見すると、これは少し心配に思えるかもしれませんが、グループには NTFS 権限が多少制限されています。Users
IIS_IUSRS
Users
たとえば、C:\Windows
フォルダー内にフォルダーを作成しようとすると、作成できないことがわかります。WindowsApplicationPoolIdentity
システム フォルダーからファイルを読み取ることができる必要があります (そうでない場合、ワーカー プロセスはどのようにして重要な DLL を動的に読み込むことができるでしょうか)。
フォルダーへの書き込みが可能であるというご意見に関してですが、c:\dump
高度なセキュリティ設定の権限を確認すると、次のようになります。
特別な権限が以下から継承されていることを確認しますc:\
:
これが、サイトがそのフォルダのApplicationPoolIdentity
読み取りと書き込みを行える理由です。その権限はドライブから継承されますc:\
。
数百のサイトがあり、それぞれに独自のアプリケーション プールとアプリケーション プール ID がある共有環境では、グループがUsers
削除され、管理者と SYSTEM アカウントのみがアクセスできるようにアクセス許可が設定されたフォルダーまたはボリュームにサイト フォルダーを保存します (継承を使用)。
IIS AppPool\[name]
次に、各サイトのルート フォルダーに必要な権限を個別に割り当てます。
また、機密性の高いファイルやデータを保存するフォルダーを作成する場合は、グループが削除されていることを確認する必要があります。また、インストールするアプリケーションがフォルダーに機密データを保存せず、代わりにユーザー プロファイル フォルダーを使用していることUsers
を確認する必要があります。c:\program files\[app name]
確かに、一見すると、ApplicationPoolIdentity
必要以上の権限を持っているように見えますが、実際には、グループのメンバーシップで規定されている以上の権限はありません。
のグループメンバーシップApplicationPoolIdentity
はSysInternalsを使用して調べることができます。プロセスエクスプローラーツール関心のあるアプリケーション プール ID で実行されているワーカー プロセスを見つけます (User Name
表示する列のリストに列を追加する必要があります)。
たとえば、ここに という名前のプールがあり900300
、そのアプリケーション プール ID は ですIIS APPPOOL\900300
。プロセスのプロパティを右クリックし、[セキュリティ] タブを選択すると、次の画面が表示されます。
ご覧のとおり、グループIIS APPPOOL\900300
のメンバーですUsers
。