none
IUSR

    質問

  • お世話になります。

    IIS6、7、7.5のリソースへのアクセス権を勉強していているものです。

    1.IIS7以降からできたIUSRユーザー(グループ?)は、usersグループに所属していると聞いたのですが、
     なにか文献で記載されているものがありますでしょうか。

    2.匿名アクセス時ですが、ASP.NETでは、Worker Process Userの実行アカウントがリソースへのアカウントユーザーとなりますが、 静的コンテンツ(またはClassicASP)の場合、IUSR(IUSR_マシン名)がリソースへのアクセスユーザーとなります。この場合、後者(静的コンテンツor ClassicASP)では、各ISAPI拡張モジュール内で偽装処理を行っている認識でよろしいのでしょうか。

    教えてください。

     

     

    2011年2月8日 2:10

回答

  • これ難しいですよね。エバンジェリストでもよく話題になります。

    特に IIS7 からは SID インジェクションという実行時のセキュリティトークンに アプリケーションプールのSID を注射して実行する、アプリケーション プールの ID という新しい概念が登場します。
    ACL はアプリケーションプールのID で分けることで NETWORK SERVICE より厳密に管理できるようになります。

    IIS7.5 からは 明示的に ApplicationPoolIdentity という設定がアプリケーションプールの実行 ID の選択肢に登場するので、この仕組みを使うことが既定となります。

    残念ながら日本語になっていないのですが、下記の記事一覧に参考になる情報が多いです。

    http://learn.iis.net/page.aspx/88/configuring-security/

    特に下記です。

    Application Pool Identities
    http://learn.iis.net/page.aspx/624/application-pool-identities/

    Understanding Built-In User and Group Accounts in IIS 7
    http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis-7/

    IIS6 では ワーカープロセスを動作させるユーザーを IIS_WPG に含めるという考え方があり、IWAM というものもあったのですが、まったく IIS7 では考え方が違います。
    というか、IUSR_コンピュータ名が IUSR になり、これがビルトインアカウントになっています。
    そして IIS_IUSRS のグループに入っているのは正しいです。匿名ユーザーの既定はビルトインアカウントのIUSRです。

    しかし、通常は ApplicationPoolIdentity が既定になるように代わっているので w3wp.exe を実行しているユーザーをタスクマネージャーで見ていただくとわかりますが、DefaultAppPool を指定している場合は IIS APPPOOL\DefaultAppPool という特殊なユーザーが実行するようになっているのです。

    これとともにファイル ACL の親からの継承が絡んでかなり悩ましい状況ですが、飲み込めばあとはシンプルになりますし、よりセキュアに運用可能です。

    後者の質問は ASP.NET フォーラムの方がいいかもしれませんね。


    マイクロソフト株式会社 IT Pro エバンジェリスト 奥主 洋
    • 回答としてマーク 星 睦美 2011年2月23日 5:55
    2011年2月8日 13:48
    所有者

すべての返信

  • これ難しいですよね。エバンジェリストでもよく話題になります。

    特に IIS7 からは SID インジェクションという実行時のセキュリティトークンに アプリケーションプールのSID を注射して実行する、アプリケーション プールの ID という新しい概念が登場します。
    ACL はアプリケーションプールのID で分けることで NETWORK SERVICE より厳密に管理できるようになります。

    IIS7.5 からは 明示的に ApplicationPoolIdentity という設定がアプリケーションプールの実行 ID の選択肢に登場するので、この仕組みを使うことが既定となります。

    残念ながら日本語になっていないのですが、下記の記事一覧に参考になる情報が多いです。

    http://learn.iis.net/page.aspx/88/configuring-security/

    特に下記です。

    Application Pool Identities
    http://learn.iis.net/page.aspx/624/application-pool-identities/

    Understanding Built-In User and Group Accounts in IIS 7
    http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis-7/

    IIS6 では ワーカープロセスを動作させるユーザーを IIS_WPG に含めるという考え方があり、IWAM というものもあったのですが、まったく IIS7 では考え方が違います。
    というか、IUSR_コンピュータ名が IUSR になり、これがビルトインアカウントになっています。
    そして IIS_IUSRS のグループに入っているのは正しいです。匿名ユーザーの既定はビルトインアカウントのIUSRです。

    しかし、通常は ApplicationPoolIdentity が既定になるように代わっているので w3wp.exe を実行しているユーザーをタスクマネージャーで見ていただくとわかりますが、DefaultAppPool を指定している場合は IIS APPPOOL\DefaultAppPool という特殊なユーザーが実行するようになっているのです。

    これとともにファイル ACL の親からの継承が絡んでかなり悩ましい状況ですが、飲み込めばあとはシンプルになりますし、よりセキュアに運用可能です。

    後者の質問は ASP.NET フォーラムの方がいいかもしれませんね。


    マイクロソフト株式会社 IT Pro エバンジェリスト 奥主 洋
    • 回答としてマーク 星 睦美 2011年2月23日 5:55
    2011年2月8日 13:48
    所有者
  • ご返事ありがとうございます。

    なかなか難しそうです。頂いたURLで勉強させていただきます。
    ※2.の質問はASP.NETフォーラムにて質問させていただきます。

    といいながら、参考にさせてもらい自分なりにまとめてみましたので
    確認していただけるとありがたいです。かなりわかったふりをしているので、
    とんでもなく間違っている可能性は大ですが。

    たとえば、静的コンテンツを匿名認証でアクセスした場合、
    IIS7以降の場合IUSRアカウントが使用されます。
    ワーカプロセスアカウントは、既定では「IIS APPPOOL\DefaultAppPool」です。
    WASがワーカプロセスを起動するとき、プロセストークンには、
    「IIS APPPOOL\DefaultAppPool」のSIDや「IIS APPPOOL\DefaultAppPool」が
    所属するSIDが登録されます。


    w3wp.exe-Token
              |-(SID)IIS APPPOOL\DefaultAppPool(Owner SID)
              |-(SID)IIS APPPOOL\DefaultAppPoolが所属するSID群

    ■静的コンテンツへのアクセス

     静的コンテンツを処理するモジュールがw3wp.exeに読み込まれ、
     ワーカスレッドが生成され、そのときのスレッドトークンには、
     IISで認証されたアカウントのSID(匿名ならば、IUSR)が登録され
     そのSIDが所属するグループすべてのSIDが登録されます。
     ※これがSIDインジェクションというものなのか?

     WorkerThread-Token
              |-(SID)IUSR
              |-(SID)Users
              |-(SID)Authenticated Users


     検証するために、対象の静的コンテンツファイルのアクセスリストを
     以下のように設定したところ、
     ①-×②-×③-○④-○※×アクセス失敗 ○アクセス成功
     という結果となった。
     上記のワーカスレッドのトークンと比較してみると納得できる。
     

     ①aaa.jpg
        |-Administrators
        |-System

     ②aaa.jpg
        |-Administrators
        |-System
         |-IIS APPPOOL\DefaultAppPool

     ③aaa.jpg
        |-Administrators
        |-System
         |-IUSR

     ④aaa.jpg
        |-Administrators
        |-System
         |-Users(or Authenticated Users)


    ■ClassicASPから対象のファイルを削除してみる
     この場合も、静的コンテンツと同じ結果となる。
      スレッドトークンは、以下のようになっていたと思われる。

     WorkerThread-Token
              |-(SID)IUSR
              |-(SID)Users
              |-(SID)Authenticated Users

    ■ASP.NETから対象のファイルを削除してみる
     この場合、①-×②-○③-×④-○という結果となった。
      このときのスレッドのトークンは以下のようになっているはず

     WorkerThread-Token
              |-(SID)IIS APPPOOL\DefaultAppPool
              |-(SID)Users
              |-(SID)Authenticated Users


    ■(IISアカウントで偽装)ASP.NETから対象のファイルを削除してみる
     この場合、①-×②-×③-○④-○という結果となった。
      このときのスレッドのトークンは以下のようになっているはず

     WorkerThread-Token
              |-(SID)IUSR
              |-(SID)Users
              |-(SID)Authenticated Users


    総論
     IUSRは、Users,Authenticated Users所属ということになる
     IIS APPPOOL\DefaultAppPoolもUsers,Authenticated Users所属ということになる

     結局、拡張子と関連付けられたモジュールが、なにをオーナーSIDにしてスレッドを作成しているか
     がわかれば、そのSIDが所属するSID群をリストアップすることで、
     設定するアクセスがわかりやすいのではとおもうのですが・・・

     
     静的コンテンツ:IIS認証アカウント(+所属するSID)
     ClassicASP:IIS認証アカウント(+所属するSID)
     ASP.NET:Worker Process User(既定:ApplicationPoolIdentity)(+所属するSID)
     PHP:未調査

    ※Windows7上での調査結果です。

    2011年2月9日 8:22
  • こんにちは、OTAKA さん
    フォーラム オペレーターの星 睦美です。

    とても丁寧にまとめられていますね。弊社の奥主からの回答を参考にしていただけたと思います。

    今回は私のほうで[回答としてマーク] をさせていただきました。
    また、アクセス許可に関する日本語の情報を探してみましたので、
    こちらもお役立ていただければ幸いです。

    TechNet ライブラリ: IIS 7.0 セキュリティを構成する

    Windows 7/Vista で Web サイトを構築
      http://awoni.net/tips/iis_acl

    今後ともTechNet フォーラムをよろしくお願いします。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美
    2011年2月23日 5:55