<processModel> 要素
Microsoft Internet Information Services (IIS) Web サーバーでの ASP.NET プロセス モデルの設定値を構成します。<processModel> セクションは Machine.config ファイル内だけで設定でき、サーバー上で実行されるすべての ASP.NET アプリケーションに適用されます。
**注意 **この要素については、解説を参照してください。
<configuration>
<system.web>
<processModel>
<processModelenable="true|false" timeout="hrs:mins:secs|Infinite" idleTimeout="hrs:mins:secs|Infinite" shutdownTimeout="hrs:mins:secs|Infinite" requestLimit="hrs:mins:secs|Infinite" requestQueueLimit="num|Infinite" restartQueueLimit="num|Infinite" memoryLimit="percent" cpuMask="num" webGarden="true|false" userName="username" password="password" logLevel="All|None|Errors" clientConnectedCheck="hrs:mins:secs|Infinite" responseDeadlockInterval="hrs:mins:secs|Infinite" responseRestartDeadlockInterval="hrs:mins:secs|Infinite" comAuthenticationLevel="Default|None|Connect|Call| Pkt|PktIntegrity|PktPrivacy" comImpersonationLevel="Default|Anonymous|Identify| Impersonate|Delegate" maxWorkerThreads="num" maxIoThreads="num"/>
省略可能属性
属性 | オプション | 説明 |
---|---|---|
clientConnectedCheck | ASP.NET がクライアント接続チェックを実行するまでに要求がキューに置かれている時間を指定します。 | |
comAuthenticationLevel | DCOM セキュリティの認証のレベルを指定します。既定値は Connect です。 | |
Default | DCOM が通常のセキュリティ ネゴシエーション アルゴリズムを使用して認証レベルを決定することを指定します。 | |
None | 認証を指定しません。 | |
Connect | クライアントがサーバーとの関係を確立したときだけ DCOM がクライアントの資格情報を認証することを指定します。 | |
Call | サーバーが各リモート プロシージャ コールの開始時に要求を受信したときに、DCOM がクライアントの資格情報を認証することを指定します。 | |
Pkt | 受信したデータがすべて予測されたクライアントからのデータであることを DCOM が認証することを指定します。データグラム トランスポートでは、常に Pkt 認証を使用します。 | |
PktIntegrity | クライアントとサーバーの間で転送されたデータがまったく変更されていないことを DCOM が認証および検査することを指定します。 | |
PktPrivacy | DCOM が先行するレベルをすべて認証し、各リモート プロシージャ コールの引数値を暗号化することを指定します。 | |
comImpersonationLevel | COM セキュリティの認証レベルを指定します。 | |
Default | DCOM が通常のセキュリティ ネゴシエーション アルゴリズムを使用して偽装レベルを決定することを指定します。 | |
Anonymous | クライアントがサーバーに対して匿名であることを指定します。サーバーはクライアントを偽装できますが、偽装トークンに格納される情報はありません。Anonymous は、バージョン 1.1 ではサポートされていません。 | |
Identify | サーバーがクライアントの ID を取得できることを指定します。サーバーは ACL (アクセス制御リスト) チェックのためにクライアントを偽装できますが、システム オブジェクトにクライアントとしてアクセスすることはできません。 | |
Impersonate | サーバー プロセスがクライアントの代わりに動作しているときに、クライアントのセキュリティ コンテキストを偽装できることを指定します。このレベルの偽装は、ファイルなどのローカル リソースにアクセスするために使用できます。このレベルで偽装する場合は、1 つのマシン境界だけを通過して偽装トークンを渡すことができます。 | |
Delegate | サーバー プロセスがクライアントの代わりに動作しているときに、クライアントのセキュリティ コンテキストを偽装できることを指定します。サーバー プロセスがクライアントの代わりに動作しているときに、クローク設定を使用して、他のサーバーへ発信する呼び出しを作成することもできます。サーバーは、他のコンピュータ上でクライアントのセキュリティ コンテキストを使用して、ローカル リソースおよびリモート リソースにクライアントとしてアクセスできます。このレベルで偽装する場合は、任意の数のマシン境界を通過して偽装トークンを渡すことができます。 | |
cpuMask | マルチプロセッサ サーバー上で ASP.NET プロセスを実行するプロセッサを指定します。cpuMask 値は、ASP.NET スレッドを実行する CPU を示すビット パターンを指定します。たとえば、cpuMask の 16 進値 0x0d は、ビット パターン 1101 を表します。4 個の CPU のあるコンピュータでは、この値は、CPU 0、2、および 3 上では ASP.NET プロセスをスケジュールできるけれども、CPU 1 上ではスケジュールできないことを示します。ASP.NET は、実行する各 CPU に対して 1 つのワーカー プロセスを起動します。webGarden 属性 (下記参照) が true に設定されている場合、cpuMask は、ワーカー プロセス数を、実行する CPU の数以下に制限します。許可されるワーカー プロセスの最大数は、CPU の数と同じです。既定では、すべての CPU が有効になり、ASP.NET は各 CPU に対して 1 つのプロセスを起動します。webGarden が false に設定されている場合、cpuMask 属性は無視され、1 つのワーカー プロセスだけが実行されます。 | |
enable | プロセス モデルが有効かどうかを指定します。 | |
true | プロセス モデルが有効であることを示します。 | |
false | プロセス モデルが有効でないことを示します。 | |
idleTimeout | ASP.NET がワーカー プロセスを自動的に終了するまでに動作のない状態を持続できる時間を、hr:min:sec の文字列形式で指定します。既定値は Infinite です。 | |
logLevel | イベント ログに記録されるイベントの種類を指定します。 | |
All | すべてのプロセス イベントのログを記録することを指定します。 | |
None | イベントのログを記録しないことを指定します。 | |
Errors | 予測不可能なシャットダウン、メモリ制限シャットダウン、およびデッドロック シャットダウンのログだけを記録することを指定します。Errors は、既定の設定です。 | |
maxWorkerThreads | 5 から 100 | プロセスで使用される、CPU ごとのワーカー スレッドの最大数を設定します。たとえば、プロセッサが 1 個のサーバー上でこの値が 25 である場合、ASP.NET はランタイム API を使用してプロセス制限値を 25 に設定します。プロセッサが 2 個のサーバー上では、制限値は 50 に設定されます。既定値は 20 です。maxWorkerThreads の値は、<httpRuntime> 構成セクションの minFreeThread 属性の値以上であることが必要です。 |
maxIoThreads | 5 から 100 | プロセスで使用される、CPU ごとの I/O スレッドの最大数を設定します。たとえば、プロセッサが 1 個のサーバー上でこの値が 25 である場合、ASP.NET はランタイム API を使用してプロセス制限値を 25 に設定します。プロセッサが 2 個のサーバー上では、制限値は 50 に設定されます。既定値は 20 です。maxIoThreads の値は、<httpRuntime> 構成セクションの minFreeThread 属性の値以上であることが必要です。 |
memoryLimit | ASP.NET が新しいプロセスを起動して既存の要求を再割り当てするまでにワーカー スレッドが消費できる最大メモリ サイズを、システム メモリ全体に対する割合として指定します。既定値は 60% です。 | |
password | この属性および userName が存在する場合は、この 2 つの属性の組み合わせにより、設定された Windows ID を使用してワーカー プロセスが実行されます。既定値は AutoGenerate です。パスワードを必要としない特殊なユーザー名 System および Machine と、レジストリ内の暗号化されたワーカー プロセスの資格情報の詳細については、userName の説明を参照してください。 | |
pingFrequency | ワーカー プロセスが実行されているかどうかを確認するために ISAPI 拡張機能がワーカー プロセスを ping する時間間隔を標準プロセス モデル形式 (hr:min:sec) で指定します。ワーカー プロセスが pingTimeout 間隔内で実行されていない場合は、ワーカー プロセスが再起動されます。既定値は 30 秒です。 | |
pingTimeout | 非応答型ワーカー プロセスが再起動されるまでの時間間隔を標準プロセス モデル形式 (hr:min:sec) で指定します。ISAPI 拡張機能は、ワーカー プロセスを pingFrequency 間隔ごとに ping します。ワーカー プロセスが pingTimeout 間隔内に応答しない場合は、ワーカー プロセスが再起動されます。既定値は 5 秒です。 | |
requestLimit | ASP.NET が現在のワーカー プロセスに代わる新しいワーカー プロセスを起動するまでに許可される要求の数を指定します。既定値は Infinite です。 | |
requestQueueLimit | ASP.NET が "503 - サーバーがビジー状態です" というエラーを新しい要求に返し始めるまでに、キューに置くことができる要求の数を示します。既定値は 5000 です。 | |
responseDeadlockInterval | 次に示す条件と一致した場合にワーカー プロセスが再起動されるまでの時間間隔を標準プロセス モデル形式 (hr:min:sec) で指定します。
既定値は 3 分です。 |
|
responseRestartDeadlockInterval | この属性は ASP.NET では現在使用されておらず、下位互換性のためだけに用意されています。この属性が構成ファイルに存在する場合でも、構成エラーは発生しません。デッドロック状態のイベントでのすべてのリサイクルは、現在 responseDeadlockInterval 属性によって制御されています。 | |
serverErrorMessageFile | この属性が存在する場合は、致命的なエラーが発生したときに既定の "サーバーを使用できません" というメッセージの代わりに使用するファイルの内容を指定します。ファイルの位置は、Machine.config を基準にした相対ファイル パスまたは絶対ファイル パスで指定できます。この属性が存在しない場合は、既定の "サーバーを使用できません" というメッセージが使用されます。 | |
shutdownTimeout | ワーカー プロセスが自動的にシャットダウンするまでの時間 (分の値) を指定します。タイムアウトの時間が経過すると、ASP.NET はワーカー プロセスをシャットダウンします。時間は、hr:min:sec 文字列形式で表されます。既定値は 5 秒 (0:00:05) です。 | |
timeout | ASP.NET が現在のワーカー プロセスに代わる新しいワーカー プロセスを起動するまでの時間 (分の値) を指定します。既定値は Infinite です。 | |
userName | userName 属性が存在する場合は、既定のプロセスの Windows ID とは異なる Windows ID を使用してワーカー プロセスが実行されます。既定では、userName には特殊な値 Machine が設定され、プロセスは、ASP.NET のインストール時に自動的に作成された ASPNET というユーザー アカウント名で実行されます。ASPNET アカウントのパスワードは、インストール時に暗号化されて生成されます。userName 属性と password 属性に有効な資格情報が存在する場合は、指定されたアカウントを使用してプロセスが実行されます。userName の他の特殊な値として、AutoGenerate というパスワードを持つ System があります。この値を設定すると、プロセスが管理者アカウントとして実行され、プロセスで実行されるすべての ASP.NET ユーザー コードに完全な管理者権限を割り当てることができます。ドメイン コントローラになっているサーバーでの ASP.NET の使用については、下記の解説を参照してください。
userName と password は、クリア テキストで構成ファイルに格納されます。インターネット インフォメーション サービス (IIS: Internet Information Services) では、ユーザー エージェントの要求に対する応答として構成ファイルが送信されませんが、別の手段で構成ファイルを読み取ることができます。たとえば、サーバーが参加しているドメイン上で適切な資格情報を持つ認証されたユーザーなどは構成ファイルを読み取ることができます。セキュリティの向上のために、processModel セクションは、暗号化された userName 属性と password 属性をレジストリに格納することをサポートします。資格情報は、Windows 2000 および Windows XP のデータ保護 API 暗号化関数によって REG_BINARY 形式で暗号化されている必要があります。詳細については、下記の解説と例を参照してください。 |
|
webGarden | cpuMask 属性と共に使用された場合に CPU アフィニティを制御します。マルチプロセッサ Web サーバーのことを Web ガーデンと呼びます。 | |
true | ASP.NET プロセスを実行する許可をどの CPU に与えるかを指定するために、cpuMask 属性を使用することを指定します。 | |
false | CPU の使用が Windows オペレーティング システムによってスケジュールされていることを示します。cpuMask 属性は無視され、1 つのワーカー プロセスだけが実行されます。既定値は false です。 |
解説
マネージ コード構成システムは、<processModel> 構成設定を読み取りません。<processModel> 構成設定は、aspnet_isapi.dll アンマネージ DLL によって直接読み取られます。このセクションへの変更は、IIS の再起動後に適用されます。
ASP.NET をドメイン コントローラにインストールする場合は、インストールを正しく行うために特別な手順に従う必要があります。詳細については、https://support.microsoft.com にある Microsoft サポート技術情報の文書 Q315158、「ドメイン コントローラで管理者以外のドメイン アカウントを使用すると ASP.NET が動作しない」を参照してください。
ASP.NET が IIS バージョン 6 でネイティブ モードで実行されている場合は、IIS 6 プロセス モデルが使用され、<processModel> セクションでの設定は無視されます。プロセス ID、サイクル、または他のプロセス モデルの値を構成するには、インターネット サービス マネージャのユーザー インターフェイスを使用して、アプリケーションの IIS ワーカー プロセスを構成します。
時間の値は "時:分:秒" の形式で入力します。コロンのない単一の数値が入力されると、その値は分と見なされます。このため、timeout="4" は timeout="00:04:00" と等価になります。
ASP.NET アプリケーションが原因で、デッドロック状態と考えられるため再起動が必要なことを示すメッセージが表示され、ASP.NET ワーカー プロセス (Windows 2000 および Windows XP Professional の aspnet_wp.exe、Windows Server 2003 の w3wp.exe) を再起動する必要がある場合は、responseDeadlockInterval 設定値を増加させてください。
ユーザー名とパスワードのレジストリへの格納
ユーザー名とパスワードを暗号化し、レジストリに格納するには、userName と password を次のように設定します。
userName="registry:HKLM\Software\AspNetProcess,Name"
password="registry:HKLM\Software\AspNetProcess,Pwd"
キーワード registry とコンマの間の文字列は ASP.NET が開くレジストリ キーの名前を示します。コンマの後ろの部分には ASP.NET が資格情報を読み取る文字列値の名前が 1 つ含まれます。コンマが必要であり、資格情報が HKLM ハイブに格納されている必要があります。構成形式が不正な場合、ASP.NET ではワーカー プロセスが起動されず、現在のアカウント作成エラー コード パスが表示されます。
資格情報は REG_BINARY 形式で、Windows API 関数 CryptProtectData の呼び出しの出力を含んでいる必要があります。ASP.NET レジストリ設定コンソール アプリケーション (Aspnet_setreg.exe) を使用して、暗号化された資格情報を作成し、レジストリに格納できます。ASP.NET レジストリ設定コンソール アプリケーションでは、暗号化を実行するために CryptProtectData が使用されます。Visual C++ ソース コードおよびドキュメントと共に Aspnet_setreg.exe をダウンロードするには、www.asp.net の Web サイトで "aspnet_setreg" を検索してください。
暗号化された資格情報を格納するキーに対するアクセス権を設定して、Administrators および SYSTEM だけがアクセス権を持つようにしてください。キーは SYSTEM として実行されている ASP.NET プロセスによって読み取られるため、次のアクセス許可を設定してください。
Administrators:F
SYSTEM:F
CREATOR OWNER:F
ProcessAccount:R
これにより、データを保護するために二重の防御手段が取られることになります。
- ACL アクセス許可では、データにアクセスする ID が Administrator である必要があります。
- アカウントの資格情報を復元するには、攻撃者はサーバー上で CryptUnprotectData コードを実行する必要があります。
例
いくつかの <processModel> 構成設定を指定する例を次に示します。
<configuration>
<system.web>
<processModel
enable="true"
timeout="15"
idleTimeout="25"
shutdownTimeout="5"
requestLimit="1000"
requestQueueLimit="500"
responseDeadlockInterval="00:03:00"
responseRestartDeadlockInterval="Infinite"
memoryLimit="20"
webGarden="true"
maxWorkerThreads="25"
maxIoThreads="25"/>
</system.web>
</configuration>
暗号化したユーザー名とパスワードをレジストリのユーザー定義のキー AspNetProcess
に格納する例を次に示します。
<configuration>
<system.web>
<processModel>
userName="registry:HKLM\Software\AspNetProcess,Name"
password="registry:HKLM\Software\AspNetProcess,Pwd"
</processModel>
</system.web>
</configuration>
必要条件
格納されている場所 : <system.web>
Web プラットフォーム**** : IIS 5.0、IIS 5.1、IIS 6.0
構成ファイル : Web.config、Machine.config
構成セクション ハンドラ : System.Web.Configuration.ProcessModelConfigurationHandler