会社でサーバトラブル。
Windows 2000 Server のIISでイントラサイトを作っており、IISサーバとADサーバが同一筐体という環境。イントラサイトは利用者を制限しており、その認証にIISの基本認証(BASIC認証)機能を利用している。
(IISで基本認証を選択し、実際のフォルダのアクセス権をアクセス許可するユーザやグループだけに設定すれば、必然的に基本認証が行われる)
それが突然、基本認証が通らなくなった。認証ダイアログが表示され、正しいIDとパスワードを入力しても、再び認証ダイアログが表示され、ページが401エラーで表示できない状態。
ただ、同じサーバの共有フォルダは認証が通り、きちんと読み書きできる状態。
色々調べてみると、ドメインコントローラセキュリティポリシーの設定に問題があることが分かった。
- ドメイン コントローラ上の IIS 5.0 に接続すると匿名認証および基本認証に失敗する
- http://support.microsoft.com/kb/263140/ja
原因
セキュリティ上の理由により、Windows 2000 ドメイン コントローラ上では、アカウント オペレータ、管理者、バックアップ オペレータ、プリント オペレー...セキュリティ上の理由により、Windows 2000 ドメイン コントローラ上では、アカウント オペレータ、管理者、バックアップ オペレータ、プリント オペレータ、サーバー オペレータ、インターネット ゲスト アカウント、およびターミナル サービス ユーザー アカウントだけがローカル ログオンのユーザー権限を持ちます。匿名認証および基本認証には、この権限が必要です。
回避策
この問題を回避するには、次の手順を実行します。
- MMC で Active Directory ユーザーとコンピュータ スナップインを読み込みます。
- [Users] コンテナを右クリックし、[新規作成] をクリックして、[Group] をクリックします。
- このグループを次のように構成します。
- グループ名 : WebUsers
- グループの範囲 : ドメイン ローカル
- グループの種類 : セキュリティ
- [OK] をクリックして完了し、WebUsers グループを作成します。
- この Web サイトへのアクセス権が必要なユーザーおよびグループを WebUsers グループに追加します。
- ドメイン コントローラ セキュリティ ポリシーを読み込みます。
- 左側のウィンドウで、[Windows の設定]、[セキュリティの設定]、[ローカル ポリシー] の順に展開し、[ユーザー権利の割り当て] をクリックします。
- [ローカル ログオン] のユーザー権限をダブルクリックします。
- 手順 4. で作成した WebUsers グループを追加します。
- 次のコマンドを実行して、このポリシーを有効にします。
- secedit /refreshpolicy machine_policy /enforce
これで、WebUsers グループに属するすべてのアカウントまたはグループが、基本認証を使用して IIS 5.0 サーバーにログオンできるようになります。
早い話、
- ドメインコントローラセキュリティポリシーを開く
- [Windows の設定]→[セキュリティの設定]→[ローカル ポリシー]→[ユーザー権利の割り当て]を展開
- [ローカル ログオン]を開き、基本認証の利用を許可するADユーザ(またはグループ)を追加する
- 『secedit /refreshpolicy machine_policy /enforce』でポリシーの即時反映
をするということ。ここに定義されていないADユーザ(またはグループ)は、いくら正しいユーザIDとパスワードを入力しようとも、IISの基本認証を通過することができない。*1
この[ローカル ログオン]に追加するADユーザ(またはグループ)には、ADユーザ全員を指定したいなら「Domain Users」を入れればいいし、特定のユーザだけにしたいなら、例にあるようにグループを一つ作ってそこにユーザを追加すれば、後々の管理がしやすい。
んで、自分の場合。
原因は不明だが、何かの拍子でここが初期状態に戻っており、ADアカウントがグループを含め一切設定されていない状態となっていた。ここに「Domain Users」を追加してやったら、すんなり基本認証が通るようになった。
これが分かるまで約5時間・・・ググってもなかなか出てこなかったのか、あまり例がないのかな?とりあえず備忘録までに。*1:ファイル共有や統合認証は可能