web-dev-qa-db-ja.com

IIS AppPoolIdentityとファイルシステムの書き込みアクセス許可

これは私が研究してどこにも手に入らなかった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グループのメンバーです。
  • 完全信頼で実行している場合、Webアプリケーションはファイルシステムの多くの領域(C:\UsersC:\Windowsなどのフォルダを除く)に書き込むことができます。たとえば、C:\dumpのように、アプリケーションはいくつかのフォルダに書き込むためのアクセス権を持ちます。
  • デフォルトでは、IIS_IUSRSグループには、C:\dumpへの読み取りまたは書き込みアクセス権は与えられていません(少なくとも、Windowsエクスプローラの[セキュリティ]タブで表示されるアクセス権は与えられていません)。
  • IIS_IUSRSへの書き込みアクセスを拒否した場合、フォルダに書き込もうとするとSecurityExceptionが発生します(予想通り)。

それでは、これらすべてを考慮して、 "IIS APPPOOL\AppPoolName"ユーザーに書き込みアクセス権を付与するにはどうすればよいでしょうか。 w3wp.exeプロセスはこのユーザーとして実行されます。そのため、このユーザーが明示的なアクセス権を持っていないと思われるフォルダーに書き込むことができますか。

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

380
rsbarro

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

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

あなたのc:\dumpフォルダに書き込めることについてのあなたの観察に関しては。 [セキュリティの詳細設定]の権限を確認すると、次のようになります。

enter image description here

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

enter image description here

それが、あなたのサイトのApplicationPoolIdentityがそのフォルダに対して読み取りおよびwriteを実行できる理由です。その権利はc:\ドライブから継承されています。

それぞれが独自のアプリケーションプールとアプリケーションプールIDを持つ数百のサイトがある可能性がある共有環境では、Usersグループが削除され、管理者だけがSYSTEMアカウントは(継承を使用して)アクセスできます。

その後、IIS AppPool\[name]がサイトのルートフォルダに対して必要とする必要な権限を個別に割り当てます。

また、機密性の高い可能性のあるファイルやデータを格納する場所に作成したフォルダは、Usersグループが削除されていることを確認する必要があります。また、インストールするアプリケーションが機密データをc:\program files\[app name]フォルダに格納しないようにし、代わりにユーザプロファイルフォルダを使用するようにする必要があります。

一見すると、ApplicationPoolIdentityは必要以上の権限を持っているように見えますが、実際にはグループメンバーシップが要求する以上の権限はありません。

ApplicationPoolIdentityのグループメンバーシップはSysInternals Process Explorerツール を使って調べることができます。目的のアプリケーションプールIDで実行されているワーカープロセスを探します(表示する列の一覧にUser Name列を追加する必要があります。

enter image description here

たとえば、ここでは900300という名前のプールを使用します。このプールのアプリケーションプールIDはIIS APPPOOL\900300です。プロセスのプロパティを右クリックして、[セキュリティ]タブを選択します。

enter image description here

ご覧のとおり、IIS APPPOOL\900300Usersグループのメンバーです。

389
Kev
  1. フォルダを右クリックしてください。

  2. プロパティをクリック

  3. セキュリティタブをクリックします。あなたはこのようなものを見るでしょう:

enter image description here

  1. 上の画面で[編集]ボタンをクリックしてください。あなたはこのようなものを見るでしょう:

enter image description here

  1. 上の画面で[追加]ボタンをクリックしてください。あなたはこのようなものを見るでしょう:

enter image description here

  1. 上の画面で[場所]ボタンをクリックします。あなたはこのようなものを見るでしょう。それでは、このツリー構造の一番上に移動してコンピュータ名を選択し、[OK]をクリックします。

enter image description here

  1. 「iis apppool\your_apppool_name」と入力して、[名前の確認]ボタンをクリックします。アプリプールが存在する場合は、テキストボックスに自分のアプリプール名が下線付きで表示されます。 OKボタンをクリックしてください。

enter image description here

  1. アカウントに付与する必要があるすべてのアクセス権を確認または選択解除します。

  2. 適用ボタンをクリックしてからOKをクリックします。

24
Krishna

IIsの各アプリケーションプールは、デフォルトでc:\ usersの下に、完全な読み取り/書き込み権限を持つ独自の安全なユーザーフォルダを作成します。 [ユーザー]フォルダを開き、そこにあるアプリケーションプールフォルダを確認し、右クリックして、割り当てられたアプリケーションプール仮想アカウントに対する権利を確認します。アプリケーションプールアカウントに、そのルートとサブフォルダに割り当てられた読み取り/書き込みアクセス権がすでに追加されているはずです。

そのような種類のファイルストレージアクセスは自動的に行われ、何も変更することなく、アプリケーションプールのユーザーアカウントフォルダーに好きなものを書き込むことができるはずです。そのため、各アプリケーションプールの仮想ユーザーアカウントが作成されました。

0
Stokely