- PR -

ASP.NETネットワークリソースへの書込み

1
投稿者投稿内容
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-08-04 11:00
すみませんが、完全に行き詰まってしまい、ご存知の方どうか知恵をかしてください。

ASP.NETで開発環境にはVB.NETを使用しています。
元々、Windows2000Server上でVS.NET Betaにて開発していた案件なんですが、
現在製品版に移行している途中です。

ASP.NETのプログラムからネットワーク上の他のPCにある共有フォルダに専用のフォルダを
プログラムから生成し、EXCELをオートメーションで操作してファイルを出力するという
プログラムです。
ベータ版では共有ドライブをASP.NETが動作しているWebServerにドライブを(F:に)
マッピングして以下の処理を行っていました。

1.Dir関数で指定のフォルダがあるかを確認
2.なければMkDir関数で生成
3.EXCELのオートメーションでSaveAs関数を使用しファイルを保存。

行き詰まっている問題点はズバリ2箇所ありまして、

ベータで当初は気づかなかったのですが、共有フォルダがVisual Studio.NET Betaを
インストールしたPCのものの場合、書込みが成功していたのですが今回、製品版に移行するに
当たってテストしているのですがVS.NETのBetaをインストールしていないPCの共有フォルダを
マッピングさせるとアクセス権がないと表示されます(当然、手動では読書き可能です)。

(ASP.NETでなく)ASPの場合、マイクロソフトの資料があったのですが、
それによると共有フォルダのあるPCにIUSR_WEBSERVERNAMEというWEBSERVERに
あるのと全く同じユーザーを作成し、そのユーザーへの読み書きの権利を
共有フォルダに設定すればいけるとかかれていたので、一応試したのですが
どうもうまくいきません(やはりASPとは使われているユーザーが違うのでしょう。
そもそも、VS.NET Betaがインストールされていた当初の共有フォルダがあった
PCにはそんなユーザなかったですし)。

そこで、とりあえずBeta版に関してはどうでもいいのですが、ASP.NET(製品版)で
他のPCの共有フォルダにアクセスするにはどうすればいいか、情報をどなたかご存知ないで
しょうか。
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2002-08-04 14:09
↓このへんが参考になるかと。

http://www.microsoft.com/japan/msdn/net/bda/authaspdotnet.asp
ASP.NET における認証 : .NET セキュリティ ガイド


http://www.microsoft.com/japan/msdn/netframework/support/kbASPNet.asp
http://support.microsoft.com/default.aspx?scid=kb;ja;JP317012
[INFO] ASP.NET のプロセス ID と要求 ID
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-08-04 15:08
biacさん。貴重な情報、本当にありがとうございました。

とりあえず月曜日に会社にいっていろいろと試してみたいと思います。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-04 18:54
ASPの時にはIUSR_WEBSERVERNAMEでしたが、ASP.NETになってからは、.NETFRAMEWORKがインストールされているWEBサーバのローカルユーザである「ASPNET」という名前のユーザーにリソースに対する書き込み権限が必要になります。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-08-05 04:55
うりゅうさん。情報ありがとうございます。

少し質問させていただきたいんですが、実はうりゅうさんが言われている
ローカルユーザー「ASPNET」については着目はしていたんです。
といいますのも、ベータを使ったシステムではEXCELのオートメーションが
動作していましたが、製品版で試したところEXCEL.Applicationを
CreateObjectした時点で「アクセス権がありません」とでていたので
ASPNETにローカルグループAdministratorsを割り当てたという経緯が
ありました。
ところが実際、共有フォルダを持つ側のPCにアクセス権設定を
しようとした場合、リストに上がってこなかったのです。
セキュリティの項目に上がってきたリストはそのローカルPCのユーザー
そしてドメインユーザーのみで、ドメインサーバーでもないWebサーバーの
ユーザーは上がってきませんでした。

そこで質問なのですが、

>「ASPNET」という名前のユーザーにリソースに対する書き込み権限が必要になります。

この場合、共有フォルダを持つマシンに「ASPNET」というローカルユーザーの作成が
必要なのでしょうか。それとも他の方法があるのでしょうか。
そしてもし、ローカルユーザーの作成が必要であるとすれば、そのパスワードはどのように
設定したらよいのでしょうか。(ASPNETのパスワードは知らないので)

すみませんがいま少し教えていただけると助かります。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-05 11:01
確かに、ASPNETアカウントはローカルマシンユーザーですので、共有フォルダに割り当てるには問題があります。ヘルプ文中にそれを解消させるための文章がありましたので、長文ですが以下に抜粋しました。参考になれば幸いです。

文章タイトル:ASP.NETのプロセスID
---------------------------------------------------------------------
セキュリティを強化するために、ローカル システム アカウントよりも権限の弱いアカウントで ASP.NET アプリケーション ワーカー プロセス (aspnet_wp.exe) を実行します。そうすることによって、セキュリティが破られたとき、侵入者が管理者アクセス権を持つことはありません。これは、特別にアクセスを拒否されたリソース以外は、ローカル システム アカウントがローカル コンピュータのほとんどすべてのリソースにアクセスできるためです。

特定のアカウントでワーカー プロセスを実行するには、\%windows%\Microsoft.NET\Framework\Version\Config フォルダにあるルート設定ファイル (machine.config) に <processModel> 要素を次のように追加します。

<!-- machine.config file -->
<system.web>
<processModel
enable="true"
username="domain\user"
password="password"
/>
</system.web>
username 属性には、特定のユーザー アカウント以外に、指定可能な 2 つの特別な値である "SYSTEM" と "MACHINE" のどちらかを設定できます。どちらの場合も、特定の資格情報を要求しないため、password 属性には AutoGenerate を設定します。既定の設定は "SYSTEM" であり、ワーカー プロセスをローカル システムのアカウントで実行します。"MACHINE" を指定する場合、ワーカー プロセスは ASPNET というローカル アカウントを使用します。このアカウントは、IWAM_machinename アカウントに似ています。IWAM_machinename アカウントは、IIS が ASP 3.0 以前のアプリケーションを管理するときに dllhost.exe のインスタンスを実行するために使用します。ASPNET アカウントは、.NET Framework のインストール時に作成されます。

カスタム アカウントを使用する場合は、アカウントに次のアクセス権限が必要です。

%installroot%\ASP.NET Temporary Files ディレクトリへの読み取り/書き込み権限。このルートの下にあるサブディレクトリは、動的にコンパイルされる出力のために使用されます。
%temp% ディレクトリへの読み取り/書き込み権限。動的コンパイルのとき、コンパイラによって使用されます。
アプリケーション ディレクトリへの読み取り権限。
%installroot% ディレクトリへの読み取り権限。システム アセンブリへのアクセスを可能にします。
ASP.NET ワーカー プロセスのためにカスタム アカウントを使用する場合、偽装の使用が制限される点に注意してください。認証されたクライアントの ID は偽装できます。これは、IIS がログオン セッションを作成し、偽装トークンをワーカー プロセスに直接渡すためです。しかしアプリケーションの Web.config ファイルで定義されたアカウントを偽装することはできません。偽装するには、プロセスのアカウントが信頼関係のあるコンピュータ ベースの一部であること、つまり、アカウントがオペレーティング システムの一部として動作できることが必要です。ASP.NET ワーカー プロセスのために設定するアカウントは、通常の場合、この権限を持ちません。

メモ この制限は、Windows 2000 と Windows NT 4.0 にだけ適用されます。Windows XP には、この権限がなくても特定のログオン セッションを生成できる拡張機能があります。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2002-08-06 12:54
biacさん、うりゅうさん。貴重な情報ありがとうございました。

本日会社の方で、いろいろ試した結果、ASP.NET専用のドメインアカウントを
作成することでなんとかリモートリソースへの書込みを実現することが
できました。

まず、machine.configのprocessModelのユーザーがmachineとなっていたのを
SYSTEMに変更しました(規定値はSYSTEMとドキュメントにはあったのになんで
やろ??)。
これにより、以前.NET FrameworkをインストールしてあったPCへの書込みが
可能となりました。しかし、やはり以前のように、.NET Frameworkを
インストールした事の無いPCへの書込みはうまく行きませんでした。
そこで、システム管理者に頼んで、仮のドメインユーザーを作成してもらい
前述のPCのアクセス権を更新し、やっとうまくいきましたといいたかったの
ですが、正直machine.configを書き換えた後、再起動しなかったのが悪かった
のか状態が変化せず丸半日ほど試行錯誤してしまいました。
結局、単なる偶然からマシンを再起動したあと、やっとアプリケーション
ユーザーが設定されていることを確認した次第です。

本当にいろいろとありがとうございました。

でも実際ドメインユーザーを作成する方法は面白かったですが、お客さんの側の
ユーザーアカウントを消費することになるので最終的には顧客とのご相談と
いうことになりそうです(頭いたいな)。
1

スキルアップ/キャリアアップ(JOB@IT)