IIS Insider

2005 年 6 月

IIS Insider

Internet Information Services に関してよく寄せられる質問と答え

By Bernard CheahLead

トピック
401 カスタム エラーのオプションではない “URL”401 カスタム エラーのオプションではない “URL”
IIS  6.0 がサポートする  Web  サイトの数IIS 6.0 がサポートする Web サイトの数
IUSR_MachineName  のアカウントが認証されないIUSR_MachineName のアカウントが認証されない

401 カスタム エラーのオプションではない “URL”

Q

管理者としてリモート デスクトップ接続で Windows 2000 Server (Service Pack 4 を適用) でIIS 5 を使用しています。例えば URL でエラー 404 をカスタマイズし、うまく動作しています。しかし、すべての 401 のエラーに関して、URLがオプションとして挙げられていません (ファイルまたは既定のみ)。401.x のエラー ページをカスタマイズする方法はありますか? 私は、静的なページをホストしています。

A

すばらしい質問です! 仕様の動作 (「既定」 および 「ファイル」モードのみに対応する 401 カスタム エラーの動作の意味) によってこの件に関してお話する前に、ステータス コードを見てみましょう。
エラー 404 は、リクエストされたページが見つからない、ということを示します。一方 401 のエラーはセキュリティに関するエラーを示しています。401 のエラーはさまざまな理由によるアクセス拒否をあらわしますが、認証、承認エラーなども含まれます。下記の表は、401.X のサブステータス コードと、関連した説明です。

ステータスコード説明

401.1

ログインに失敗しました。

401.2

サーバー設定のためにログインに失敗しました。

401.3

リソースの ACL (アクセス制御リスト) のために、認証されませんでした。

401.4

フィルターによって認証が失敗しました。

401.5

ISAPI/CGI のアプリケーションにより認証に失敗しました。

401.7

Web サーバー (IIS6 のみ) の URL 承認ポリシーによりアクセスが拒否されました。

: IIS 6 で、これら特定のエラー コードは サブステータス コードとして知られており IIS ログ ファイルに取り込まれます。しかし、 IIS 5 とそれ以下のものでは、これらの特定のエラー コードはブラウザに表示され、IIS ログ ファイルに取り込まれません。IIS ステータス コードを完成させるには、以下の技術情報318380をご覧ください。

では、質問に戻りましょう。IIS は 404 カスタム エラー メッセージに関しては、「既定」、「ファイル」、および「URL」モードを提供するのに、なぜ 401 のエラーでは「既定」と「ファイル」だけなのでしょうか? 「既定」の設定では、標準の HTTP 1.1 のエラー メッセージが送られます。
例えば、401.3 は「リソースの ACL のために認証されませんでした」のエラー メッセージを送ります。
「ファイル」オプションにより、IIS のインストールに含まれる定義済みの静的 HTML ファイルを送ることが可能です。IIS カスタムエラー メッセージのための定義済み HTML ファイルは IIS 5.0 の %windir%/Help/iisHelp/common にあります。

「URL」オプションについてはどうなのでしょうか? このオプションは、401、407 および 502 のエラーには利用可能ではありません。 401.X のエラーの場合には、IIS はリクエストを満たすための、ユーザーのコンテキストを持ちません。そしてほかの 401.X のエラーを生成してしまうので、ほかの動的コンテンツではなく、静的エラー メッセージで応答します。
例えば、匿名で Web サイトをブラウズする際に、既定のリクエスト ID のユーザー アカウントは、IUSR_COMPUTERNAME のアカウントです。
この匿名のアカウントで、ASP ページで「ログインに失敗しました」のエラー メッセージが出たと想定した場合、IIS にはそれ以上処理するユーザーのコンテキストはなく、カスタム エラー メッセージの取得に成功できません。(例: http://www.yourserver.com/customerror.aspなどの、ほかの URL ベースのアクセスにリクエストをリダイレクトする) その代わりに、IIS は「ファイル」オプションで指定された静的 HTML のエラー メッセージを送り返します。「URL」の機能は401.X のカスタム エラー メッセージの構成から意図的に削除されます。

ページのトップへページのトップへ

IIS 6.0 がサポートする Web サイトの数

Q

IIS 6.0 はいくつの Web サイトをサポートできますか?

A

2,111 の Web サイトです。実は、この数は私の車のライセンス プレートのナンバーで Web サイトの数ではありません。この質問にはあまりに多くのバリエーションがあるので、そんなに簡単に答えることはできないのです。
答えは「 IIS 6 はアプリケーション プールをいくつサポートできるのですか?」または、「私の IIS 6 コンピュータは何人のユーザーを処理できるのですか?」のような質問の答えと似たものになるかもしれません。
残念ながら、答えを導き出すためのはっきりした公式はありません。IIS 5 と同様に、運用環境で、 1,500 のサイトを実行しているサーバーを見ました。その一方で、私の Quad CPU のボックスには 2 つしかありません。
IIS 6 がリリースされる前は、マイクロソフトの IT の組織 が IIS 6 について 20,000 のサイトで、 100 のアプリケーション プールでストレス試験を行いました。
従って、回答は、「ハードウェアの構成 (CPU 、メモリ、ハード ドライブ、ネットワークなど)、そしてアプリケーション(複雑性、帯域など)による。」です。
あなたの特定のサーバーについてこれらの項目がわかると、いくつのサイトがサポート可能なのか、おおよその数が出ます。たとえば、もし、 T1 (1.5mbps) ラインを持っていて、平均のページ サイズの速度が 5Kbs であれば、ざっと見積もって 1 秒間に 27 ページのダウンロードの処理が可能です。
ざっと見積もったならば、その予測をテストしなければなりません。そして最適なパフォーマンスを得るために、どこに調節を行うかを考えます。このケース スタディは、
http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/caa232a0-80d2-48da-9699-9b06bf79440d.mspx (英語)、 ASP.NET のアプリケーションのための容量計画のプロセスに関するもので、チューニングとスケーリングのアドバイスを提供いたします。

また、ほかの ISAPI または CGI の拡張子のような ASP.NET コンテンツ以外を使用しているのであれば、 IIS 6 のコンピュータの最適化に役立つ Optimizing IIS 6.0 Performance (英語) のガイドを読んでください。

容量の限界はサーバーのハードウェアです。それぞれの作成されたアプリケーション プールに対して、 IIS はアプリケーション プールのためにある一定の量のリソースを割り当てます。
たとえば、ひとつのアプリケーション プールで 200 の静的な Web サイトをホストすることは、一般的に、 30 の別々のアプリケーション プールで 50 の ASP.NET のアプリケーションを実行するよりも消費するリソースは少なくなります。
IIS にはハード コーディングの制限はありません。ここでの技は容量管理です。容量管理に関する最善策のアドバイスについては、http://www.microsoft.com/technet/itsolutions/cits/mo/smf/smfcapmg.mspx(英語) をご覧いただき、 MOF (Microsoft Operations Framework) をお読みください。

ページのトップへページのトップへ

IUSR_MachineName のアカウントが認証されない

Q

Windows 2000 サーバーの IIS 5.0 から Windows Server 2003 の IIS 6.0 のサーバーにアップグレードしました。現在、いくつかの自分の Web サイトで IUSR_MachineName のアカウントの認証に失敗してしまいます。
この失敗が起こる原因、および修正方法がわかりません。

A

これは、別の大きな質問です。そして原因を聞いたら驚かれるかもしれません。これは、 IIS のレガシ バージョンに導入された機能で、一般的には IIS サブ認証と呼ばれています。
IIS 6.0 および新しい、非常にセキュアな既定の設定の導入とともに、マイクロソフトは、セキュリティを向上させるために、アップグレードを完了するもとで、この機能の中止を決定しました。
これが行われた理由は、修正はわずかである一方で、セキュリティの「リスク」が非常に高いからです。

まず、IIS サブ認証を理解してください。IIS のサブ認証は、%windir%\system32 にあるコンポーネントの iissuba.dllに実装されます。
このコンポーネントは、無効な攻撃者のログイン (例: サービス拒否攻撃) のために、匿名のユーザー アカウントがロック アウトされる、あるいは無効になるのを避けるために、 Active Directory 以前の環境で管理者を支援するために設計されました。
サブ認証の背後にある理論は、信頼できるものです。しかし、実行については多くの管理者またはマイクロソフトが満足に感じるには、依然としてセキュリティ上の懸念が少しあります。そのために、この機能は Windows Server 2003 のコンピュータで無効にされました。

コンポーネントを正しく動作させるために、それは昇格されたユーザー権限のある ID で実行されているプロセスに読み込まれる必要があります。
Trusted Computing Base (TCB) 特権と呼ばれるこの権限は、ローカルのシステム アカウントに保存されています。
この特権により、 IIS がユーザーとしてパスワードなしでログインを行うことができます。
あなたは、これを行うことができます。なぜならばプロセスは、この昇格された特権を持つローカル システムとして実行しているからです。

しかし、独自のテストを行ってください。これが IIS 6.0 の動作を再現する方法です。
(: まずこれをテスト環境で試してください)

1.

次のコマンドを使用して、IIS サブ認証のコンポーネントを登録してください。

%windir%\system32\inetsrv\rundll32 iissuba.dll, RegisterIISSUBA

: 大文字と小文字を区別してください。

2.

IIS 6.0 では、 IIS の既定のワーカー プロセス分離モードで実行していることを確認してください。これを行うために、コマンドラインから次のコマンドを実行してください。

cscript adsutil.vbs set w3svc/IIs5IsolationModeEnabled "false"

: アップグレードの既定は、アップグレードの完了時に最大の互換性を確保するために、プロパティを True にします。

3.

理ツール フォルダにある IIS Manager を開いてください。

4.

Application Pool フォルダの下にある DefaultAppPool に移動してください。右クリックをして [プロパティ] を選択します。Identity タブで、 Local Systemとして実行することを選択します。

5.

最後の設定のステップは、IIS の匿名パスワード同期機能を有効にすることです。これを行うために、コマンド プロンプトで、以下のコマンドを入力してください。

cscript adsutil.vbs set w3svc/anonymouspasswordsync true

: これは、 IIS マネージャのユーザー インターフェースのサービス タブで行うことも出来ます。この変更には、有効にする前に IIS を再起動する必要があります。

このテストを行うには、 IUSR_MachineName アカウントのパスワードをメタベースに掲載されていない別のものに変更します。これにより、パスワードが無効でもログインが正常に行われることを確認する動作がエミュレートされます。
以下のどちらかの方法で、これを行うことができます。

ローカル ユーザーの IUSR_MachineName のためのパスワードを Windows Server 2003 コンピュータ上で変更します。

AnonymousUserPass のメタベース プロパティを編集して、それに無効なパスワードを設定してください。

この例のためには、 Windows Server 2003 のコンピュータ上で、一番簡単な方法をとり、パスワードの変更を行います。以下の方法を行ってください。

1.

[コンピュータの管理] スナップイン MMC を開きます。そして、[ローカルユーザーとローカルグループ] を示して、[ユーザー] フォルダの を強調表示します。

2.

IUSR_MachineNameを右クリックして [パスワードの設定] を選択します。

3.

任意のパスワードに変更してください。

これは、効果的に匿名のユーザー アカウントを使用したログインの試行を失敗させることができます。それは、メタベースに保存されているユーザーのユーザー名とパスワードが正しくないからです。これは管理者、ユーザーまたはサービスによって変更されたパスワードをアカウントが持つ状況に似ています。

ここで、IIS のサブ認証を理解しました。アップグレードの完了でなぜ問題が出たのかを、より詳しく理解できます。
IIS 5.x の既定のメタベースの設定は、 AnonymousPasswordSync を 「true」 にすることです。これはこの機能を有効にします。 IIS 5.x では、コンポーネントの iissuba.dllは登録され、既定で有効になりました。そして中心の Web サーバーはローカル コンピュータ (Inetinfo) として動作していました。
これは、 IIS 6.0 での場合にはあてはまりません。 IIS 6.0 の場合、このコンポーネントは、登録されておらず、昇格された特権のローカル コンピュータとして動作しているワーカー プロセスでもありません。これを変更するには、サブ認証を有効にする、IUSR_MachineName または任意の匿名アカウントでパスワードの問題を修正する必要があります。

ほとんどの場合には、パスワードで状況を修正してサブ認証を有効にしないようにします。
サブ認証がまだ存在する理由は、レガシのアプリケーションをサポートするためだけです。そしてマイクロソフトは緊急のビジネス上での必要がない限りは、それをご使用にならないことを推奨いたします。

IIS 製品グループはツールを発表しましたが、その目的は認証と認証の失敗の原因を診断することです。
Authentication and Access Control Diagnostics 1.0 (AuthDiag) というツールは IIS 診断ツールキット (Microsoft ダウンロード センターからダウンロード可能です) の一部としてリリースされました。
http://www.microsoft.com/downloads/details.aspx?FamilyID=e90fe777-4a21-4066-bd22-b931f7572e9a&DisplayLang=en
AuthDiag を使用するために、IIS 診断ツールキット 1.0 を以下でダウンロードしてください。
IIS 診断ツールキットに関する詳細情報は、
http://www.microsoft.com/windowsserver2003/iis/diagnostictools/default.mspx をご覧ください。

IIS 6.0 のサブ認証についての詳細に関しては、Windows Server 2003 TechCenter (http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/22e38464-acb3-48cd-87e5-c554ef6e3ccd.mspx ) の文書を確認してください。


関連情報

これまでの IIS Insider コラムの質問と答えの一覧は、ここをクリック してください。

ページのトップへページのトップへ