トップ回答者
2003Server Webサーバの処理で匿名ユーザだとエラーになる

質問
-
2000Serverで動かしていたWebサイトを2003ServerR2へ移行する作業をしているのですが、
ある処理が匿名ユーザアクセスだとエラーになってしまい、対応方法が分からず困っております。
IISの設定を匿名ユーザアクセスではなく認証ユーザアクセス(Windows統合)にして、ユーザ名、パスワードを入力すればエラーになりません。
また、認証ユーザアクセスの状態で、匿名ユーザ(IUSR_コンピュータ名)でWindowsにログオンして、
Webサイトのログオンも匿名ユーザのユーザ名/パスワードを入力すると問題なく動作します。
なので、どのユーザでアクセスするかではなく、匿名ユーザアクセスか否かが問題のようです。
処理というのは、ASPで作成した画面からVBで作成したdllをコールしていて、
そのdllは他システムと通信(OPC通信)するocxの処理をコールしています。
VBのDLLはASPからこのOCXの機能を利用するためだけに作成されたもので、このOCXの処理をコールしているだけです。
OCXのほうの処理については自分で開発したものではないため、詳細を把握していませんが、
OPCのプロトコルにしたがってタグの読み書きをしているのではないかと思います。
エラーは実行時エラー(OnErrorイベントで拾える)でErr.Discriptionは「書き込み出来ません」という内容が格納されていました。
おそらくDCOMか何かセキュリティ設定をいじれば解消するのではないかという気がするのですが、どこを触ったらよいのか分かりません。
対応方法をご存知のかたいらしたら、情報をお願いいたします。
よろしくお願い致します。
- 移動 Wang Huang 2012年10月1日 13:57 (移動元:Internet Information Services 5.x, 6.0 - 全般)
2010年11月26日 4:21
回答
-
なかなか的を射た回答ができず申し訳ございません。
>権限がらみじゃないとなると、またどうしたらいいのかさっぱり分からないのですが。
かなり力技になりますが、Process Moniterを眺めてAccess Dinedがどこで発生しているのかを眺めてみた方が速いかもしれません。
「Process Monitor」
http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx- 回答としてマーク 星 睦美 2010年12月3日 9:32
2010年11月30日 6:17
すべての返信
-
OCXの起動などにアクセス権が足りないのだと思います。
状況は下記の資料
「Windows Server 2003 Service Pack 1 (SP1) 早わかりガイド - 分散コンポーネント オブジェクト モデル (DCOM) のセキュリティ強化」
http://www.microsoft.com/japan/windowsserver2003/downloads/servicepacks/sp1/sp1guide/page5.mspx#EEE対応策は、下記の資料をご覧ください。画面付きでわかりやすく作ってありました。
「121ware.com > サービス&サポート > Q&A > 情報番号 007065」
http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=0070652010年11月26日 5:03 -
Chuki様
回答ありがとうございます。
dcomconfigで該当のOCXの起動とアクティブ化の許可をIUSR_***に与えれば良いということでしょうか。
そのOCXに対応するアプリケーション名が見つけられないので、
それらしいところを変更してみたのですが、結果は同じでした。
もし、アクセス権が足りなくて起動できない場合はイベントログにDCOMのエラーのログが残るのではないのでしょうか。
問題のエラーが発生したときにはイベントログにはエラーは出ていませんでした。
個別のアプリケーションではなく全体のセキュリティ設定を緩くすることが出来ればそれでもいいのですが。
よろしくお願いいたします。
2010年11月26日 7:25 -
レジストリでOCX名を検索していただければ、コンポーネントサービスに登録されている名前がが取得できます。
開発環境があるのであれば、オブジェクトブラウザなどで名前が確認できます。>dcomconfigで該当のOCXの起動とアクティブ化の許可をIUSR_***に与えれば良いということでしょうか。
起動とアクティブ化の許可とアクセス許可の両方をご確認ください。
>個別のアプリケーションではなく全体のセキュリティ設定を緩くすることが出来ればそれでもいいのですが。
コンポーネントサービスのヘルプを見たら既定のレベルの変更方法も書いていますが、セキュリティ上の観点からやらない方が良いと思います。
今回の件が、セキュリティの問題かどうかを切り分けるために一時的に行ってみるのであればアリかもしれません。>アクセス権が足りなくて起動できない場合はイベントログにDCOMのエラーのログが残るのではないのでしょうか。
念のためにアクセス権限をきつくして、動かなくしてみてどうなるかをお確かめください。セキュリティがらみの問題はその時々なので何とも言えません。また、適切なセキュリティログを取得していれば、イベントビューアーのセキュリティに結果が出ているはずです。
私は、現象から見る限り、OSの違いによるセキュリティ強化の変更で、既定ではリモートで匿名ユーザーがアクティブ化できないようになったためだと思ったのですが、その限りかどうかはわかりませんのでまずは切り分けをしっかり行ってください。
もし、問題がDCOMのセキュリティがらみであれば、検索してみればお分かりの通り、多くの方が頭を抱えるややこしい問題です。ゆっくりと慎重に対応してみてください。
#時間がなければ、MSの有料サポートも有効にご活用ください。
#チェックツール一式渡していただけて、かなりの速度で解決ができる時もあります。2010年11月27日 2:28 -
Chuki様
返信ありがとうございます。
>レジストリでOCX名を検索していただければ、コンポーネントサービスに登録されている名前がが取得できます。
>開発環境があるのであれば、オブジェクトブラウザなどで名前が確認できます。HKEY_CLASSESROOT\CLSIDをOCX名で検索すると
既定のプロパティに問題のOCXのクラス名が設定されているレジストリが見つかりますが、
コンポーネントサービスのDCOMの構成にはそのアプリケーション名のコンポーネントサービスはありませんでした。
また、キー名とアプリケーションIDが一致するものもありませんでした。
DCOMとは関係ないということでしょうか?
あるいはOCXのインストールが正しく行われていないということなのでしょうか。
よろしくお願いいたします。
2010年11月29日 6:05 -
ocxというより、VBで記述されたDLLの問題かもしれません。
このDLLはコンポーネントサービスでどのようになっていますか?
また、ocxとのやりとりで、どこかテンポラリにファイルを吐きだしたりしていませんでしょうか。どこで蹴られているか、構成が分からないので申し訳ございませんが想像の彼方です。
ところで、運用として、IUSR_のアカウントではなく、特定のユーザーとして固定することは無理なのでしょうか?
なお、IUSR_のパスワードが分からなくあった場合、以下のスクリプトで表示できます。
「IIS Insider - 2002 年 1 月」
http://technet.microsoft.com/ja-jp/library/bb877971.aspx2010年11月29日 6:44 -
Chuki様
ありがとうございます。
VBのDLLのほうはコンポーネントサービスにありましたので、「起動とアクティブ化の許可」、「アクセス許可」に
ユーザIUSR_***を追加し、ローカルからの起動、アクティブ化にチェックを入れましたが
状況は変わりませんでした。
DLL自体は試しに作ったVBのアプリから呼んでみたら正常に動作します。
ASPから匿名アクセスで呼んだときのみエラーになるのです。
IUSRのアカウントではなく特定のユーザとして固定することでも問題ないのですが、
ディレクトリセキュリティの設定でIUSR_ではなく、Administratorなどを設定してもやはりエラーになります。
認証方法を「認証済みアクセス」-「統合Windows認証」にすればエラーは起きませんが、
ブラウザを起動するたびにユーザ名、パスワードを入力しなければなりません。
最悪、「2003Serverになってセキュリティの設定が厳しくなったので、
ユーザ名、パスワードを入力しないといけなくなりました」
とユーザに説明しようかと思っております。
2010年11月29日 8:24 -
>IUSRのアカウントではなく特定のユーザとして固定することでも問題ないのですが、
>ディレクトリセキュリティの設定でIUSR_ではなく、Administratorなどを設定してもやはりエラーになります。これは、匿名アクセスにチェックを入れ、匿名アクセスで使用されるアカウントに以下の設定をしてもダメということでしょうか。
ユーザー名:<コンピューター名>or<ドメイン名>\administrator
パスワード:上記ユーザーのパスワード
※さすがにadministratorアカウントは権限が強すぎるので、匿名アクセス用に適切な権限を持つユーザーを設定してください。匿名アクセス:誰がアクセスしてきても、「匿名アクセスで使用されるカウント」として実行される。
(既定では、IUSR_という非常に権限の低いユーザーが使われる設定になっていますが、適宜変更してください。余り権限を与え過ぎると、悪意を持ったユーザーの餌食になりますので、そこはリスク見合いで^^;)IUSR_というより、IWAM_にアクセス権限がないからエラーが起きている気がしなくでもないです^^;
ASPによるプロセスをどのユーザーで立ち上げていますか?
DCOMがらみのアクセス拒否かどうかは、ひとまずEveryoneにアクセス権限を与えてご確認ください。
#Windows 2000が出たころはEveryoneに権限が割当たっていましたし^^;2010年11月29日 9:16 -
Chuki様
返信ありがとうございます。
>これは、匿名アクセスにチェックを入れ、匿名アクセスで使用されるアカウントに以下の設定をしてもダメということでしょうか。
はい、そのとおりです。
権限の問題か確かめるために一時的にAdministratorにして見ましたが結果は同じでした。
また、IUSR_、IWAM_ユーザはAdministraotrsグループに所属させていますが、それでもだめです。
「ASPによるプロセスの起動ユーザ」というのはIISのアプリケーションプールの設定のアプリケーションプールIDの部分のことでしょうか。
これはLocalSystemにしてみました。
デフォルトのNetwork ServiceだとシステムログにDCOMの権限エラー(MachineDebugManager)が発生していたためです。
その他、コンポーネントサービスの設定でマイコンピュータのプロパティで制限の編集、既定値の編集で
Everyoneにすべての権限を与えてみましたが、それでもだめでした。
権限、セキュリティ関連については出来ることはすべてやったのではないかという気がしてるのですが、
まだなにか見るべきところはありますでしょうか。
権限がらみじゃないとなると、またどうしたらいいのかさっぱり分からないのですが。
よろしくお願いいたします。
2010年11月30日 5:59 -
なかなか的を射た回答ができず申し訳ございません。
>権限がらみじゃないとなると、またどうしたらいいのかさっぱり分からないのですが。
かなり力技になりますが、Process Moniterを眺めてAccess Dinedがどこで発生しているのかを眺めてみた方が速いかもしれません。
「Process Monitor」
http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx- 回答としてマーク 星 睦美 2010年12月3日 9:32
2010年11月30日 6:17 -
cozycone さん、こんにちは。Chuki さん、回答ありがとうございます。
フォーラム オペレーターの星 睦美です。
今回は一般的な情報では解決しにくい事象なのかも知れませんね。
私も調べてみた中で、同様の情報をお探しでこのスレッドを見る方にもIIS の匿名ユーザーに関連したエラーを理解する手がかりになりそうな情報かなと思うものがありましたので追記させていただきますね。・IIS 7 のアクセス許可: 「1.IISの既定の匿名ユーザーID等の歴史」
http://awoni.net/tips/iis_acl・Windows Server 2003(IIS 6.0)にWebアプリケーションを配備するときの確認事項
http://www.ilovex.co.jp/Division/ITD/archives/2008/03/windows_server.html
マイクロソフト株式会社 フォーラム オペレーター 星 睦美2010年12月2日 8:23