none
CGIがUsersグループで実行される? RRS feed

  • 質問

  • WINDOWS-XP、IIS5.1で以下の質問をします。

     

    まず、インターネットユーザのIUSR_hostnmが、Guestsグループです。
    そして、C:\Inetpubフォルダ配下<em>以外</em>にCGIファルダを作成し、仮想ディレクトリの実体ディレクトリとします。
    CGIファルダにある、「とあるCGI」は、カレントディレクトリ(実体ディレクトリ)にtmpファイルを作成するプログラムです。
    また、実体ディレクトリのプロパティ(ACL)には、Guestsグループありません。

     

    この条件で、「とあるCGI」は、tmpファイルを作成することが可能なのです。
    つまり、IUSR_hostnmがGuestsグループなのに、Guestsグループがない実体ディレクトリでファイル作成がされるのです。
    いろいろ調査するとインターネットユーザがGuestsグループでなく、Usersグループで動いているようなのです。

    なぜ、このようになるのでしょうか?

    • 移動 Wang Huang 2012年10月2日 1:44 (移動元:Internet Information Services 5.x, 6.0 - 全般)
    2008年4月3日 4:02

回答

  • ちゃっぴさん、回答ありがとうございます。

     

    早速、Process Explorerをダウンロードして確認してみました。
    確かに、IUSR_hostname account は Guests, Users, Everyone group が含まれていました。

     

    これからは、あるプロセスがどのグループに属するのかは、Process Explorerで確認してみます。
    ありがとうございました。

    2008年4月23日 4:50

すべての返信

  • お世話になっています。追記です。

     

    以下のユーザ&グループがCGIフォルダのACL(許可チェック)にあるとアクセスがOKでした。
    ・Users
    ・Guests
    ・Everyone
    ・インターネットユーザIUSR_hostnm


    ちなみに、今回に関して以下は無関係のようです。
    ・SYSTEM
    ・CREATOR OWNER
    ・Administrators
    ・Power Users


    結果として、インターネットユーザIUSR_hostnmがGuestsの時、仮想ディレクトリの実体CGIフォルダのACLで
    ・Users
    ・Guests
    ・Everyone
    ・インターネットユーザIUSR_hostnm
    のいずれかがあれば、tmpファイルが作成できました。

    2008年4月7日 6:50
  • どの user でどんな logon 方法で動作しているか?知ることが重要です。

     

    IIS で CGI を動かすことはまずありませんが、worker process 内で動作しているのはまず間違いないでしょう。

    Worker process の起動 account は Network Service で network logon しています。

     

    その上で、動いている thread で偽装しているかがまた関係します。

    2008年4月8日 10:27
  • ちゃっぴさん。回答ありがとうございます。
    問題は、もっと単純なのかもしれません。

    たとえば、usersグループ以外のAグループのBユーザが、Cフォルダ内のファイルをコピー&ペーストしたとします。
    Cフォルダには、BユーザとAグループのACLはありません。
    すると、コピー&ペーストする以前に、Cフォルダへのアクセスができません。


    つぎに、CフォルダのACLへusersグループを書き込み許可で追加します。
    すると、コピー&ペーストができるのです。
    つまり、Bユーザはusersグループでないのに、Cフォルダでコピー&ペーストができるのです。
    ということは、ログインユーザは、デフォルトでは、Usersグループになるっていると思われるのです。

    あっていますでしょうか?

    2008年4月9日 1:59
  • 皆さん、お問合わせ・返信 ありがとうございます。

     

    さて、私もちゃっぴさんがおっしゃられているようにIISがどういう状態で実行されているか気になります。IIS5.xの場合には実行プロセス分離について、Webサイト/アプリケーション単位のプロパティ、ホームディレクトリタブで「アプリケーション保護」という項目で制御されています。これが取っ付きにくいかもしれませんが、これが「低」だとINETINFO.EXEプロセスの実行アカウント、これ以外の場合だと管理ツール - コンポーネントサービス - IIS Out-Of-Process Pooled Applicationsのプロパティで定義されたアカウント(通常IWAM_)が実行アカウントと変わります。もっとクリアに判断できる材料としてお伝えしておきます。アクセスする際にタスクマネージャを開いておいて、そこで新規起動するDLLHOST.EXEのユーザー名を見れば一発です。そっか、とあるCGIでしたね。まあCGIがどのユーザーで動いているかを確認するのも必要でしょう。。。

     

    一方でACLの方はファイルシステム(NTFS、FAT32...)でも違いますし、ちょっと判断するに条件が足りないですが、どうなんでしょ? そんな簡単な話してないよ、と思うかもしれませんが、フォーラムで見ている人にはわからないですし。

     

    2008年4月11日 20:42
  • 奥主さん、アドバイスありがとうございます。

     

    「アプリケーション保護」をいろいろ変えてテストしてみましたが、今回に関しては関係なさそうです。
    タスクマネージャを開いておいて見ていましたが、上記どのケースも「Perl.exeがIUSR_hostnm」で動いていました。

     

    GuestsグループのIUSR_hostnmで動いていることは、確かなようです。
    また、ファイルシステムはNTFSです。

     

    私が今把握している事実は、以下のいずれかが書き込み許可でACLに入っていると、tmpファイルが作成可能ということです。
    ・Users
    ・Guests
    ・Everyone
    ・インターネットユーザIUSR_hostnm

     

    そして私が想像するには、UsersとGuestsは同等で、Everyoneは誰でも、IUSR_hostnmは自分。
    なので、上記いずれかが、書き込み許可でACLに入っいれば、tmpファイル作成可能なのかなと思う次第です。
    間違っているかもしれませんが…。

    2008年4月14日 1:25
  • Process Explorer で access token の groups を確認してください。

    Process の TokenIntegrityLevel を簡単に識別する方法

    これで、どの group に所属しているか一目瞭然でしょう。

     

    なお、Windows XP では IUSR_hostname account は Guests, Users, Everyone group に含まれます。

    ただの Guest account とは違います。

    2008年4月22日 8:31
  • ちゃっぴさん、回答ありがとうございます。

     

    早速、Process Explorerをダウンロードして確認してみました。
    確かに、IUSR_hostname account は Guests, Users, Everyone group が含まれていました。

     

    これからは、あるプロセスがどのグループに属するのかは、Process Explorerで確認してみます。
    ありがとうございました。

    2008年4月23日 4:50