セキュリティ保護された ASP.NET アプリケーションの構築 : 認証、認定、および通信のセキュリティ保護 ASP.NET の実行に使用するカスタム アカウントの作成方法
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 を実行することは避けてください。
- "オペレーティング システムの一部として機能" 特権をアカウントに付与することは避けてください。
まとめ
ここでは、次の手順について説明します。
- 新しいローカル アカウントを作成する。
- 最低限の特権を割り当てる。
- NTFS アクセス許可を割り当てる。
- 新しいアカウントを使用して実行するように ASP.NET を構成する。
1. 新しいローカル アカウントを作成する
この手順では、新しいローカル アカウントを作成します。既定では、ローカルの Users グループに追加されます。
■ 新しいローカル アカウントを作成するには
- "CustomASPNET" などの名前で、ローカル アカウントを作成します。アカウントには、必ず強力なパスワードを設定してください。強力なパスワードとは、7 文字以上で、大文字、小文字、数字、記号 (*、?、$ など) を組み合わせたパスワードをいいます。
- [ユーザーは次回ログオン時にパスワードの変更が必要] チェック ボックスをオフにします。
- [パスワードを無期限にする] チェック ボックスをオンにします。
2. 最低限の特権を割り当てる
この手順では、ASP.NET の実行に最低限必要な特権を割り当てます。
■最低限の特権を割り当てるには
[管理ツール] プログラム グループから [ローカル セキュリティ ポリシー] ツールを起動します。
[ローカル ポリシー] を展開して、[ユーザー権利の割り当て] を選択します。特権の一覧が右側のペインに表示されます。
以下の特権を新しいアカウントに割り当てます。
- ネットワーク経由でコンピュータへアクセス
- ローカルでログオンを拒否する
- バッチ ジョブとしてログオン
- サービスとしてログオン
メモ アカウントに特権を割り当てるには、特権をダブルクリックし、[追加] をクリックして割り当て先のアカウントを選択します。
ツールを閉じます。
3. NTFS アクセス許可を割り当てる
この手順では、作成した ASP.NET アカウントに、ローカル ファイル システムに対して必要な NTFS アクセス許可を割り当てます。
メモ ここでの手順は、Web サーバーのファイル システムに対して適用されます。リモート コンピュータには適用されません。リモート コンピュータでは、ネットワーク認証を目的として、アカウントを複製することもできます。
■ NTFS アクセス許可を割り当てるには
Windows エクスプローラを起動し、表 1 に示すフォルダに、必要なアクセス許可を割り当てます。
表 1 内の "固定偽装アカウント" とは、web.config で以下のように <identity> 要素を使用して構成できるアカウントを指します。
<identity impersonate="true" userName="YourImpersonatedIdentity"
password="YourStrongPassword" />
表 1 必要な NTFS アクセス許可
フォルダ | 必要なアクセス許可 | アカウント | コメント |
---|---|---|---|
C:\WINNT\Microsoft.NET\ Framework\
または、Windows エクスプローラを使用する前に、次のコマンドを実行して、shfusion.dll の登録を解除します。
この後 Windows エクスプローラで必要なアクセス許可を設定したら、次のコマンドを実行して、もう一度 shfusion.dll を登録します。
| |||
Web サイトのルート C:\inetpub\ wwwroot または既定の Web サイトが参照するパス | 読み取り | プロセス | ASP.NET は、このフォルダ内の構成ファイルを読み取り、ファイルの変更の有無を監視します。 |
C:\WINNT\system32 | 読み取り | プロセス | Framework が読み込むシステム DLL のフォルダ。 |
コンテキストの親ディレクトリ | フォルダ内容の一覧表示、読み取り | プロセス | ファイル変更の通知および C# コンパイラ用。 |
4. 新しいアカウントを使用して実行するように ASP.NET を構成する
この手順では、machine.config を編集し、新しいアカウントを使用して実行するように ASP.NET を構成します。
■新しいアカウントを使用して実行するように ASP.NET を構成するには
- Visual Studio .NET またはメモ帳を使用して machine.config を開きます。
machine.config は、次のフォルダに置かれています。
C:\WINNT\Microsoft.NET\Framework\v1.0.3705\CONFIG
- <processModel> 要素を探し、ユーザー名とパスワードの属性に、新しく作成したアカウントのユーザー名とパスワードを指定します。
既定 : <!-- userName="machine" password="AutoGenerate" -->
変更後 : <!-- userName="CustomASPNET" password="YourStrongPassword" -->
machine.config の変更内容を保存します。
メモ .NET Framework の現在のリリースでは、クリア テキスト以外でパスワードを格納することはできません。クリア テキストで資格情報を格納することは一般的に推奨されませんが、machine.config ファイルは Web 空間の外にあるため、安全性が高いと考えることができます。適切に ACL を構成することによって、不要なアクセスから machine.config を保護してください。
Windows Server 2003 では、暗号化した状態で資格情報を格納でき、安全性が高まっています。