EVERYONEへの書き込みアクセスは機能し、IUSR、IIS_IUSRS、DefaultAppPoolは機能しません。どうして?


10

OK。ここでは、Windows Server 2008 R2のIIS 7.5でクラシックASP Webサイトをセットアップしようとしています。Webサイトのルートの下にdbcという名前のフォルダーがあり、すべてのページの処理中に特定の情報の読み取りと書き込みに使用されるファイルがあります。

問題は、IUSR書き込み権限、IIS_IUSRS書き込み権限、またはDefaultAppPool書き込み権限を付与すると、「パス「E:... \ websiteroot \ dbc \ filename.txt」へのアクセスが拒否されます」

しかし、そのdbcフォルダーに対するすべてのユーザーに書き込みアクセスを許可した場合、エラーは発生しませんが、すべてが完璧に見えます。

詳細情報:Webサイトはクラシックパイプラインモードで実行され、匿名認証が有効になっています(おそらく唯一の認証が有効になっています)。そして、IUSRアカウントとアプリケーションプールIDを使用して匿名認証を試しました。私の場合、ApplicationPoolIdentityはWebサイトの認証のIDです。ファイルI / OにはCOM +を使用します。クラシックASP Server.CreateObjectを使用して、オブジェクトをインスタンス化します。COM +はネットワークサービスとして実行されます。

考え?すべての人に書き込み権限を付与したくない。何か不足していますか?

解決しよう:これが私がしたことです。

CipherDemoという名前のWebサイトは、IIS 7.5のAppPoolIdentityの下で実行されていました。これは、Identity IIS AppPool \ CipherDemoによって見つけることができました。ICACLSを使用して、そのフォルダーにRWアクセス許可を与えました。

そして、実際にファイルI / Oを実行していたCOM +は、ネットワークサービスIDで実行されていました。プロセスモニターを使用してアクセス拒否エラーをトレースしていたところ、ネットワークサービスにはそのフォルダーに対する読み取りアクセス許可しかありませんでした。

ICACLS "フォルダ名" / grant:r "NT AUTHORITY \ NETWORKSERVICE" :( OI)(CI)RXW / Tを使用して、そのフォルダへの書き込みアクセスを許可しました。

そしてそれを解決しました。

私はWebサイトがCipherDemo Identityとして実行されるため、これがCOM +経由でファイルにアクセスするために使用されるアカウントになると考えていました。しかし、COM +が独自のID境界で機能することを確認するのは恥ずかしいことです。

回答:


5

IIS 7.5(およびオプションでIIS 7)では、すべてのワーカーはアプリケーションプールID:ユーザー「IIS AppPool * PoolName *」で実行されます。

Everyoneではなく、そのユーザーにアクセス権を付与します(ID選択ダイアログに名前を入力する必要があります。検索機能には表示されません)。

詳細については、iis.netに非常に役立つページがあります。

また、注意:IIS7(Server 2008)の下:

  • 詳細設定で、アプリプールごとにアプリプールIDを設定します。
  • GUIサポートはないため、権限を設定するにはコマンドラインが必要です(icacls.exe)。

最後に、SQL ServerのID選択はアプリプールIDについても認識しません。使用CREATE LOGINしてCREATE USER最初に、この後、GUIを使用してロールなどを付与できます。


@リチャード-はい。迅速な対応ありがとうございます。最近、msdnフォーラムは非常に役に立たなくなりました。戻ってきます...私は数日間IIS.net Webサイトとserverfaultの周りを盗聴しています。IIS 7.5 / Winサーバー2008 R2でデフォルトのアプリケーションプールIDを使用しています。そのため、「dbc」フォルダに対するIIS APPPOOL \ DefaultAppPool Wite権限を付与しました。さらに、そのフォルダーに対するIUSRおよびIIS_IUSRS書き込みアクセス許可を付与しました。それは私がすべての人に書き込み権限を与えるまではまだ機能しません。何か足りないものがあることを知っています。
gmaran23

@ gmaran23:明白な手順がうまくいかない場合、プロセスモニターを使用して、何が失敗しているのかを正確に確認します(多くの場合、開いているファイルがアクセスを要求しすぎているか、ACLを正しく設定できていないか、何かが原因です)それ以外の場合はファイルが開いています)。
Richard

@Richard-私は、FileMode.Open、FileAccess.ReadWriteを使用して、c#のファイルリーダーで読み取り/書き込み操作を行います。-その部分は良いと思います。他の何かがファイルを開いています -可能性がないため、これは除外される可能性があります。ACLに何か問題があります。それをチェックしてここに投稿します。また、プロセスモニターを試します。助けてくれてありがとう:)
gmaran23 '16年

@ gmaran23:それが機能しない場合は、常にテストしていることを知っていると想定しないでください。私は何かが真実かそうでないかを知っていたので、何年にもわたって多くの時間を無駄にしてきました。
リチャード

1
@ gmaran23:ツールを使用して、何が起こっているかを正確に確認します。推測していて、問題を体系的に処理していないことになります。(1)Process Explorerを使用して、ファイルが開いていないことを確認します。(2)プロセスモニターを使用して、要求されているアクセスとIDを確認します(適切なファイルを持っている)。(3)ファイルのACLに対して#2の結果を再確認します(詳細については、高度なセキュリティプロパティを開きます)。(4)1つの調整を行い、修正されるまで#1に進みます。それでも数回繰り返しても行き詰まっている場合は、Qを詳細に展開します(具体的に)。
リチャード

5

NTFS GUIから直接入力して、アカウントを追加できます。名前の形式はIIS APPPOOL\<<app pool name>>、たとえばIIS APPPOOL\DefaultAppPoolです。(このMicrosoftサポート記事を参照

代替ソリューション:私は「ネットワークサービス」アカウントをアプリケーションプールユーザーとして使用して、それに書き込み権限を付与しています。


正解、そのヒントは良いですが、私はすでにそれをしました。アプリケーションプールにはデフォルトの「ApplicationPoolIdentity」を使用しています。また、フォルダー 'dbc'については、IIS AppPool \ DefaultAppPoolに対する書き込みアクセス許可を既に付与しています。しかし、私がすべての人に書き込み許可を与えるまで、それはまだ機能しません。
gmaran23

1

特定のユーザーにフォルダーの書き込み権限のみを付与する場合は、サイトの「匿名ユーザーID」を「アプリケーションプールID」ではなく「特定のユーザー」に変更する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.