ASP.NET の実行に使用するカスタム アカウントを作成する方法
公開日: 2004年9月7日 | 最終更新日: 2004年9月7日
トピック
目的
適用対象
モジュールの使用方法
要約
前提知識
新しいローカル アカウントを作成する
最低限の特権を割り当てる
NTFS 権限を割り当てる
新しいアカウントを使用して実行するように ASP.NET を構成する
目的
このモジュールの目的は次のとおりです。
適用対象
このモジュールは、次の製品およびテクノロジを対象としています。
-
Microsoft® Windows® XP または Windows 2000 Server (Service Pack 3) 以降のオペレーティング システム
-
Microsoft .NET Framework Version 1.0 (Service Pack 2) 以降
-
Microsoft Microsoft Internet Information Services (IIS) 5.0 または 6.0 (IIS 5.0 分離モードを使用している場合のみ)
モジュールの使用方法
このモジュールをよく理解するには、次の前提が必要です。
-
ASP.NET Web アプリケーションを開発した経験があり、machine.config ファイルの用途と構造について理解していること。
-
Windows 管理ツールを使用して、スタンドアロンまたはドメイン ベースの Windows ユーザー アカウントを作成および管理した経験があること。
-
「モジュール8 ASP.NET セキュリティ」を読んでいること。このモジュールでは、ASP.NET セキュリティの機能、ASP.NET ワーカー プロセス ID が実行中のアプリケーションへのアクセス許可に与える影響、偽装を使用して Web アプリケーションのユーザーに適切なレベルのアクセス許可を簡単に付与する方法について、詳しく説明しています。
要約
既定では、各 ASP.NET ワーカー プロセスは、ASPNET と呼ばれる最低限の特権を持つアカウントのコンテキストで実行されます。ASP.NET アプリケーションがドメイン ベースのサーバーに展開されている場合、または ASP.NET アプリケーションがリモート サーバー上のリソースにアクセスする必要がある場合は、別のアカウントのコンテキスト内で実行されるように ASP.NET を構成すると、管理を簡素化できます。
このモジュールでは、カスタムのローカル アカウントやドメイン アカウントのコンテキストで実行されるように ASP.NET を構成する方法と、アカウントが正しく動作するようにアクセス許可を構成して割り当てる方法について説明します。
前提知識
このモジュールの使用を開始するときには、以下の点に注意してください。
ASP.NET ワーカー プロセス ID
ASP.NET の実行に使用される既定のアカウントは、インストール時に、最低限の特権を持つローカル アカウントとして作成されます。このアカウントの情報は、次の形式で、machine.config で定義されます。
<processModel enable="true" userName="machine" password="AutoGenerate" />
このアカウントは、[ローカル ユーザーとグループ] に "ASPNET" という名前で存在します。また、LSA (ローカル セキュリティ機関) で強力なパスワードによりセキュリティ保護されています。
ASP.NET のプロセス ID を使用して、データベースなどのネットワーク リソースにアクセスするときは、次の選択肢があります。
-
ドメイン アカウントを使用する。
-
"ミラー" ローカル アカウント (2 つのコンピュータ上に存在するユーザー名とパスワードが同一のアカウント) を使用する。2 つのコンピュータのドメインが異なり、ドメイン間に信頼関係が設定されていない場合、または 2 つのコンピュータがファイアウォールによって分離されていて、NTLM または Kerberos 認証で必要なポートを開くことができない場合は、この方法を使用する必要があります。
最も簡単な方法は、ASPNET アカウントのパスワードを Web サーバー上で既知の値に変更し、アクセス先のコンピュータでも同じパスワードで ASPNET アカウントを作成することです。Web サーバーで、まず [ローカル ユーザーとグループ] の ASPNET アカウント パスワードを変更し、次に、machine.config の <processModel> 要素にある資格情報を置き換える必要があります。machine.config にはクリア テキストのパスワードは保存せず、代わりに aspnet_setreg.exe を使用して、暗号化したパスワードをレジストリに保存します。詳細については、「モジュール 8 ASP.NET セキュリティ」を参照してください。
<processModel enable="true"
userName="registry:HKLM\SOFTWARE\YourSecureApp\processModel\
ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\processModel\
ASPNET_SETREG,password" . . ./>
このモジュールで説明する手順に従うと、最低限の特権のみを持ったローカル アカウントを作成できます。
固定 ID を偽装する
web.config で次の設定を使用すると、特定の仮想ディレクトリ用の固定 ID を設定できます。暗号化した資格情報をレジストリに保存するには、aspnet_setreg.exe を使用します。
<identity impersonate="true"
userName="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,password" />
この方法は、基本的に、アプリケーション ホスティング環境など、1 つの Web サーバーで複数の Web サイトをホストし、それぞれのサイトで異なる ID を使用する必要がある場合に使用します。
このモジュールでは、最低限の特権を持ったローカル アカウントの作成方法について説明します。システム管理が主な関心事の場合は、最低限の特権のみを持ち、強力なパスワードが設定された制約付きドメイン アカウントを使用することもできます。
ASP.NET の実行に使用するアカウントを作成するときは、以下の点に留意してください。
-
既定では、ASP.NET は偽装を行いません。そのため、Web アプリケーションがリソースにアクセスするときは常に、ASP.NET プロセス ID が使用されます。このとき、Windows リソースには、ASP.NET プロセス アカウントにアクセス権を付与するアクセス制御リスト (ACL) が必要です。
-
偽装を有効にした場合、Web アプリケーションは、最初の呼び出し元のセキュリティ コンテキストを使用してリソースにアクセスします。IIS で匿名認証を有効にした場合は、匿名インターネット ユーザー アカウント (既定では IUSER_MACHINE) を使用してリソースにアクセスします。このとき、リソースには、最初の呼び出し元の ID (または IUSR_MACHINE) に基づいた ACL が必要です。
-
カスタム アカウントを作成するときは、必ず、最低限の特権とアクセス許可のみを与えてください。
-
SYSTEM アカウントを使用して ASP.NET を実行することは避けてください。
-
"オペレーティング システムの一部として動作する" 特権をアカウントに付与することは避けてください。
新しいローカル アカウントを作成する
この手順では、新しいローカル アカウントを作成します。既定では、このアカウントはローカルの Users グループに追加されます。
-
新しいローカル アカウントを作成するには
-
"CustomASPNET" などの名前で、ローカル アカウントを作成します。
アカウントには、必ず強力なパスワードを設定してください。強力なパスワードとは、大文字、小文字、数字、記号 (*、?、$ など) を組み合わせた 7 文字以上のパスワードのことです。
-
[ユーザーは次回ログオン時にパスワードの変更が必要] チェック ボックスをオフにします。
-
[パスワードを無期限にする] チェック ボックスをオンにします。
最低限の特権を割り当てる
この手順では、ASP.NET の実行に最低限必要な特権を割り当てます。
-
最低限の特権を割り当てるには
-
[管理ツール] プログラム グループから [ローカル セキュリティ ポリシー] ツールを起動します。
-
[ローカル ポリシー] を展開して、[ユーザー権利の割り当て] を選択します。
特権の一覧が右側のペインに表示されます。
-
以下の特権を新しいアカウントに割り当てます。
-
ネットワーク経由でコンピュータへアクセス
-
バッチ ジョブとしてログオン
-
サービスとしてログオン
-
ローカルでログオンを拒否する
-
ターミナル サービスを使ったログオンを拒否する
メモ: アカウントに特権を割り当てるには、特権をダブルクリックし、[ユーザーまたはグループの追加] をクリックして割り当て先のアカウントを選択します。
-
ツールを閉じます。
NTFS 権限を割り当てる
この手順では、作成した ASP.NET アカウントに、ローカル ファイル システムに対して必要な NTFS 権限を割り当てます。
メモ: ここでの手順は、Web サーバーのファイル システムに対して適用されます。リモート コンピュータには適用されません。リモート コンピュータでは、ネットワーク認証を目的として、アカウントを複製することもできます。
-
NTFS 権限を割り当てるには
-
Windows エクスプローラを起動し、表 1 に示すフォルダに、必要なアクセス許可を割り当てます。
表 1 内の "固定偽装アカウント" とは、以下のように、web.config で <identity> 要素を使用して任意に構成できるアカウントを指します。
<identity impersonate="true"
userName="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\YourSecureApp\
identity\ASPNET_SETREG,password" />
この例では、aspnet_setreg.exe を使用して、暗号化形式のカスタム アカウント資格情報をレジストリに保存しています。
表 1: 必要な NTFS 権限
場所必要なアクセス許可アカウントコメント一時 ASP.NET ファイル:
C:\WINNT\Microsoft.NET\
Framework\<バージョン>\
Temporary ASP.NET Filesフル コントロールプロセス アカウントおよび固定偽装アカウントASP.NET の動的なコンパイルに使用されるフォルダです。アプリケーション コードは、このフォルダの下にあるディレクトリに、アプリケーションごとに個別に生成されます。
この既定の場所は、<compilation> 要素の tempdir 属性を使用して変更できます。一時フォルダ:
C:\WINNT\temp読み取り、書き込み、削除プロセスシリアル化プロキシを生成するために Web サービスが使用する場所。
"削除" アクセス許可は、Windows エクスプローラの
フォルダのプロパティ ダイアログ ボックスにある
[セキュリティ] タブの [詳細設定] ボタンを使用して
設定します。
アプリケーションの仮想ディレクトリ:
C:\inetpub\wwwroot\webapp1
読み取りプロセスWeb アプリケーション ファイルの場所 (そのアプリケーションの仮想ルート ディレクトリ) の場所。既定では、User グループには適切なアクセス権が設定されています。インストール (%installroot) 階層:
(C:\WINNT\Microsoft.Net\
Framework\v1.0.3705)読み取りプロセス アカウントおよび固定偽装アカウントASP.NET では、.NET Framework アセンブリへのアクセスが必要です。
既定では、User グループには適切なアクセス権が設定されています。グローバル アセンブリ キャッシュ:
C:\WINNT\assembly読み取りプロセス アカウントおよび固定偽装アカウントグローバル アセンブリ キャッシュです。このフォルダについては、Windows エクスプローラを直接使用して ACL を編集することはできません。その代わりに、コマンド プロンプトを使用して、コマンド cacls %windir%\assembly /e/t /p domain\useraccount:R を実行します。
または、Windows エクスプローラを使用する前に、コマンド regsvr32 u shfusion.dll を使用して shfusion.dll の登録を解除します。Windows エクスプローラでアクセス許可を設定した後、コマンド regsvr32 shfusion.dll を使用して shfusion.dll を再登録します。Web サイトのルート:
C:\inetpub\
wwwroot または既定の Web サイトが示すパス読み取りプロセスASP.NET は、このフォルダ内の構成ファイルを読み取り、ファイルの変更の有無を監視します。SystemRoot:
C:\WINNT\system32読み取りプロセスFramework によってロードされるシステム DLL のフォルダ。アプリケーション フォルダ階層:
C:
\C:\inetpub\
C:\inetpub\wwwroot\
C:\inetpub\wwwroot\ mywebapp1フォルダ内容の一覧表示、読み取りプロセスファイル変更通知および C# コンパイラを実行してファイルを正規化する場合、プロセス アカウントには、アプリケーション フォルダ階層に対してフォルダの一覧表示とデータ読み取りを行うためのアクセス許可が必要です。つまり、ルートに至るまでのすべての親フォルダが対象となります。
新しいアカウントを使用して実行するように ASP.NET を構成する
この手順では、machine.config を編集し、新しいアカウントを使用して実行するように ASP.NET を構成します。