これは私が研究してどこにも手に入らなかったIIS 7.5とASP.NETに関する問題です。任意の助けは大歓迎です。
私の質問は、IIS 7.5でASP.NETを使用する場合、完全信頼状態で実行しているときにIISやオペレーティングシステムがWebアプリケーションからC:\dump
のようなフォルダへの書き込みを許可する方法です。アプリケーションプールユーザーに書き込みアクセス権を明示的に追加する必要がないのはどうしてですか(この場合はApplicationPoolIdentity
)。
これだけ私は知っています:
ApplicationPoolIdentity
です。ApplicationPoolIdentity
は、 "IIS APPPOOL\AppPoolName"という名前のWindowsユーザーアカウントを表します。これは、アプリケーションプールの作成時に作成されます。AppPoolNameはアプリケーションプールの名前です。IIS_IUSRS
グループのメンバーです。C:\Users
、C:\Windows
などのフォルダを除く)に書き込むことができます。たとえば、C:\dump
のように、アプリケーションはいくつかのフォルダに書き込むためのアクセス権を持ちます。IIS_IUSRS
グループには、C:\dump
への読み取りまたは書き込みアクセス権は与えられていません(少なくとも、Windowsエクスプローラの[セキュリティ]タブで表示されるアクセス権は与えられていません)。IIS_IUSRS
への書き込みアクセスを拒否した場合、フォルダに書き込もうとするとSecurityExceptionが発生します(予想通り)。それでは、これらすべてを考慮して、 "IIS APPPOOL\AppPoolName"ユーザーに書き込みアクセス権を付与するにはどうすればよいでしょうか。 w3wp.exeプロセスはこのユーザーとして実行されます。そのため、このユーザーが明示的なアクセス権を持っていないと思われるフォルダーに書き込むことができますか。
フルトラストで実行している場合、書き込みが必要なすべてのフォルダへのアクセス権をユーザーに付与するのは面倒なので、これはおそらく便利さのために行われたと理解してください。このアクセスを制限したい場合は、いつでもMedium Trustの下でアプリケーションを実行できます。明示的なファイルシステムアクセスが許可されていないように見えても、オペレーティングシステムやIISがこれらの書き込みを許可する方法について調べることに興味があります。
ApplicationPoolIdentity
には、IIS_IUSRS
グループと同様にUsers
グループのメンバーシップが割り当てられています。一見するとこれはやや心配に思えるかもしれません、しかしUsers
グループはNTFSの権利を幾分制限しました。
たとえば、C:\Windows
フォルダーにフォルダーを作成しようとすると、できないことがわかります。 ApplicationPoolIdentity
は、Windowsシステムフォルダからファイルを読み取ることができる必要があります(そうでなければ、ワーカープロセスが重要なDLLを動的に読み込むことができる方法は他にあります)。
あなたのc:\dump
フォルダに書き込めることについてのあなたの観察に関しては。 [セキュリティの詳細設定]の権限を確認すると、次のようになります。
その特別な許可がc:\
から継承されているのを見てください。
それが、あなたのサイトのApplicationPoolIdentity
がそのフォルダに対して読み取りおよびwriteを実行できる理由です。その権利はc:\
ドライブから継承されています。
それぞれが独自のアプリケーションプールとアプリケーションプールIDを持つ数百のサイトがある可能性がある共有環境では、Users
グループが削除され、管理者だけがSYSTEMアカウントは(継承を使用して)アクセスできます。
その後、IIS AppPool\[name]
がサイトのルートフォルダに対して必要とする必要な権限を個別に割り当てます。
また、機密性の高い可能性のあるファイルやデータを格納する場所に作成したフォルダは、Users
グループが削除されていることを確認する必要があります。また、インストールするアプリケーションが機密データをc:\program files\[app name]
フォルダに格納しないようにし、代わりにユーザプロファイルフォルダを使用するようにする必要があります。
一見すると、ApplicationPoolIdentity
は必要以上の権限を持っているように見えますが、実際にはグループメンバーシップが要求する以上の権限はありません。
ApplicationPoolIdentity
のグループメンバーシップはSysInternals Process Explorerツール を使って調べることができます。目的のアプリケーションプールIDで実行されているワーカープロセスを探します(表示する列の一覧にUser Name
列を追加する必要があります。
たとえば、ここでは900300
という名前のプールを使用します。このプールのアプリケーションプールIDはIIS APPPOOL\900300
です。プロセスのプロパティを右クリックして、[セキュリティ]タブを選択します。
ご覧のとおり、IIS APPPOOL\900300
はUsers
グループのメンバーです。
フォルダを右クリックしてください。
プロパティをクリック
セキュリティタブをクリックします。あなたはこのようなものを見るでしょう:
アカウントに付与する必要があるすべてのアクセス権を確認または選択解除します。
適用ボタンをクリックしてからOKをクリックします。
IIsの各アプリケーションプールは、デフォルトでc:\ usersの下に、完全な読み取り/書き込み権限を持つ独自の安全なユーザーフォルダを作成します。 [ユーザー]フォルダを開き、そこにあるアプリケーションプールフォルダを確認し、右クリックして、割り当てられたアプリケーションプール仮想アカウントに対する権利を確認します。アプリケーションプールアカウントに、そのルートとサブフォルダに割り当てられた読み取り/書き込みアクセス権がすでに追加されているはずです。
そのような種類のファイルストレージアクセスは自動的に行われ、何も変更することなく、アプリケーションプールのユーザーアカウントフォルダーに好きなものを書き込むことができるはずです。そのため、各アプリケーションプールの仮想ユーザーアカウントが作成されました。