Share via


セキュリティ保護された ASP.NET アプリケーションの構築 : 認証、認定、および通信のセキュリティ保護 ASP.NET の実行に使用するカスタム アカウントの作成方法

patterns and practices home

ASP.NET の実行に使用するカスタム アカウントの作成方法

J.D. Meier, Alex Mackman, Michael Dunner, and Srinath Vasireddy
Microsoft Corporation

November 2002
日本語版最終更新日 2003 年 3 月 17 日

適用対象:
    Microsoft® ASP.NET

全体の概要については、「セキュリティ保護された ASP.NET アプリケーションの構築」の開始ページを参照してください。

要約 : ASP.NET の Web アプリケーションは、通常、組み込みの ASPNET アカウントを使用して実行します。他のアカウントを独自に作成して使用することもできます。ここでは、ASP.NET Web アプリケーションの実行に使用するローカル アカウントを作成し、最低限の特権を与える方法について説明します。

ここでは、ASP.NET ワーカー プロセス (aspnet_wp.exe) の実行に使用するローカル アカウント、または仮想ディレクトリで偽装 ID に使用するローカル アカウントを作成し、最低限の特権を与える方法について説明します。ここでは、ローカル アカウントを作成する手順について説明しますが、ドメイン アカウントの場合も同様の手順で作成できます。

目次

ASP.NET ワーカー プロセス ID
固定 ID を偽装する
メモ
まとめ

ASP.NET ワーカー プロセス ID

ASP.NET の実行に使われる既定のアカウントは、インストール時に、最低限の特権を持つローカル アカウントとして作成されます。このアカウントの情報は、次の形式で、machine.config で定義されます。

<processModel enable="true" userName="machine" password="AutoGenerate" />

このアカウントは、[ローカル ユーザーとグループ] に "ASPNET" という名前で存在します。また、LSA (ローカル セキュリティ機関) で強力なパスワードによりセキュリティ保護されています。 ASP.NET のプロセス ID を使用して、データベースなどのネットワーク リソースにアクセスするときは、次の選択肢があります。

  • ドメイン アカウントの使用。

  • "ミラー" ローカル アカウント (2 つのコンピュータでユーザー名とパスワードが同一のアカウント) の使用。2 つのコンピュータのドメインが異なり、ドメイン間に信頼関係が設定されていない場合、または 2 つのコンピュータがファイアウォールによって分離されていて、NTLM または Kerberos 認証で必要なポートを開くことができない場合は、この方法を使用する必要があります。

    最も簡単な方法は、Web サーバーの ASPNET アカウントのパスワードを明示的に設定し、アクセス先のコンピュータでも同じパスワードで ASPNET アカウントを作成することです。最初に、Web サーバーの [ローカル ユーザーとグループ] で ASPNET アカウントのパスワードを変更し、machine.config で "AutoGenerate" の部分を、設定したパスワードで書き換えます。

<processModel enable="true" userName="machine" 
              password="YourStrongPassword" />
    
後に説明する手順に従うと、最低限の特権のみを持ったローカル アカウントを作成できます。

固定 ID を偽装する

特定の仮想ディレクトリに対して固定 ID を設定することもできます。この場合は、web.config に次のように指定します。

<identity impersonate="true" userName="YourAccount" 
          password="YourStrongPassword" />

この方法は、基本的に、アプリケーション ホスティング環境など、1 つの Web サーバーで複数の Web サイトをホストし、それぞれのサイトで異なる ID を使用する必要がある場合に使用します。

ここでは、最低限の特権を持ったローカル アカウントの作成方法について説明します。システム管理が主な関心事の場合は、最低限の特権のみを持ち、強力なパスワードが設定された制約付きドメイン アカウントを使用することもできます。

メモ

ASP.NET の実行に使用するアカウントを作成するときは、以下の点に留意してください。

  • ASP.NET では、既定で偽装は有効になっていません。この結果、Web アプリケーションがリソースにアクセスするときは常に、ASP.NET プロセスの ID が使用されます。このとき、Windows リソースには、ASP.NET プロセスのアカウントにアクセス許可を付与する ACL (Access Control List) が設定されている必要があります。
  • 偽装を有効にした場合、Web アプリケーションは、元の呼び出し側のセキュリティ コンテキストを使用してリソースにアクセスします。匿名アクセスを使用するように IIS が構成されている場合は、匿名インターネット ユーザー アカウント (既定では IUSER_MACHINE) を使用してリソースにアクセスします。この場合、リソースには、元の呼び出し側の ID (または IUSR_MACHINE) に基づいた ACL が設定されている必要があります。
  • カスタム アカウントを作成するときは、必ず、最低限の特権とアクセス許可のみを与えてください。
  • システム アカウントを使用して ASP.NET を実行することは避けてください。
  • "オペレーティング システムの一部として機能" 特権をアカウントに付与することは避けてください。

まとめ

ここでは、次の手順について説明します。

  1. 新しいローカル アカウントを作成する。
  2. 最低限の特権を割り当てる。
  3. NTFS アクセス許可を割り当てる。
  4. 新しいアカウントを使用して実行するように ASP.NET を構成する。

1. 新しいローカル アカウントを作成する

この手順では、新しいローカル アカウントを作成します。既定では、ローカルの Users グループに追加されます。

■ 新しいローカル アカウントを作成するには

  1. "CustomASPNET" などの名前で、ローカル アカウントを作成します。アカウントには、必ず強力なパスワードを設定してください。強力なパスワードとは、7 文字以上で、大文字、小文字、数字、記号 (*、?、$ など) を組み合わせたパスワードをいいます。
  2. [ユーザーは次回ログオン時にパスワードの変更が必要] チェック ボックスをオフにします。
  3. [パスワードを無期限にする] チェック ボックスをオンにします。

2. 最低限の特権を割り当てる

この手順では、ASP.NET の実行に最低限必要な特権を割り当てます。

■最低限の特権を割り当てるには

  1. [管理ツール] プログラム グループから [ローカル セキュリティ ポリシー] ツールを起動します。

  2. [ローカル ポリシー] を展開して、[ユーザー権利の割り当て] を選択します。特権の一覧が右側のペインに表示されます。

  3. 以下の特権を新しいアカウントに割り当てます。

    • ネットワーク経由でコンピュータへアクセス
    • ローカルでログオンを拒否する
    • バッチ ジョブとしてログオン
    • サービスとしてログオン

    メモ アカウントに特権を割り当てるには、特権をダブルクリックし、[追加] をクリックして割り当て先のアカウントを選択します。

  4. ツールを閉じます。

3. NTFS アクセス許可を割り当てる

この手順では、作成した ASP.NET アカウントに、ローカル ファイル システムに対して必要な NTFS アクセス許可を割り当てます。

メモ ここでの手順は、Web サーバーのファイル システムに対して適用されます。リモート コンピュータには適用されません。リモート コンピュータでは、ネットワーク認証を目的として、アカウントを複製することもできます。

■ NTFS アクセス許可を割り当てるには

  1. Windows エクスプローラを起動し、表 1 に示すフォルダに、必要なアクセス許可を割り当てます。

    表 1 内の "固定偽装アカウント" とは、web.config で以下のように <identity> 要素を使用して構成できるアカウントを指します。

<identity impersonate="true" userName="YourImpersonatedIdentity"
          password="YourStrongPassword" />
    

表 1 必要な NTFS アクセス許可

フォルダ 必要なアクセス許可 アカウント コメント
C:\WINNT\Microsoft.NET\
Framework\
cacls %windir%\assembly /e /t /p domain\useraccount:R

または、Windows エクスプローラを使用する前に、次のコマンドを実行して、shfusion.dll の登録を解除します。

regsvr32 -u shfusion.dll

この後 Windows エクスプローラで必要なアクセス許可を設定したら、次のコマンドを実行して、もう一度 shfusion.dll を登録します。

regsvr32 shfusion.dll
Web サイトのルート
C:\inetpub\
wwwroot または既定の Web サイトが参照するパス
読み取り プロセス ASP.NET は、このフォルダ内の構成ファイルを読み取り、ファイルの変更の有無を監視します。
C:\WINNT\system32 読み取り プロセス Framework が読み込むシステム DLL のフォルダ。
コンテキストの親ディレクトリ フォルダ内容の一覧表示、読み取り プロセス ファイル変更の通知および C# コンパイラ用。

4. 新しいアカウントを使用して実行するように ASP.NET を構成する

この手順では、machine.config を編集し、新しいアカウントを使用して実行するように ASP.NET を構成します。

■新しいアカウントを使用して実行するように ASP.NET を構成するには

  1. Visual Studio .NET またはメモ帳を使用して machine.config を開きます。
    machine.config は、次のフォルダに置かれています。
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\CONFIG
  1. <processModel> 要素を探し、ユーザー名とパスワードの属性に、新しく作成したアカウントのユーザー名とパスワードを指定します。
既定 : <!-- userName="machine" password="AutoGenerate" -->
変更後 : <!-- userName="CustomASPNET" password="YourStrongPassword" -->
  1. machine.config の変更内容を保存します。

    メモ .NET Framework の現在のリリースでは、クリア テキスト以外でパスワードを格納することはできません。クリア テキストで資格情報を格納することは一般的に推奨されませんが、machine.config ファイルは Web 空間の外にあるため、安全性が高いと考えることができます。適切に ACL を構成することによって、不要なアクセスから machine.config を保護してください。
    Windows Server 2003 では、暗号化した状態で資格情報を格納でき、安全性が高まっています。

patterns and practices home