Top過去ログ目次掲示板

作成日:2005年07月01日 作成:おやじ
掲示板で過去に質問された内容です。

No.4861 クライアントからサーバ上にあるバッチファイルを実行したいのです


No.4861 投稿時間:2005年07月01日(Fri) 10:27 投稿者名:koji URL:
タイトル:クライアントからサーバ上にあるバッチファイルを実行したいのです

初めまして。kojiといいます。

タイトルにもあるようにサーバ上にあるコマンドをクライアントから
実行させようと試行錯誤しています。

以下、私の環境です。

環境:
 Webサーバ
  OS :Windows2000 Professional SP3
  Apache:V1.3.33(Win32)
 別サーバ
  OS :Unix(IBM/AIX V4.3)
 クライアント
  OS :Windows98 SE
  IE :V5.5

どういうことをさせたいのかというと、
  クライアント上からWebサーバ上、あるいは別サーバ上の
  コマンド(バッチファイルなど)を実行させたい
のです。

そもそもWeb環境でコマンド(特にバッチファイルなど)を実行することが
出来るのか?といったセキュリティの根本的な部分に触れるかも
しれないのですが、出来たり出来なかったりとどうしても理解できないので、
どなたがご伝授ください。


今回質問したい内容は2つあります。
 1.Webサーバ上にあるCGIの中身で

     $command = `バッチファイル名`
           ・
           ・
           ・
     $command

   と記述し、そのCGIを実行する場合、
   バッチファイル名を指定するのではなく[DIR]や[VER]など
   比較的単純なコマンドを指定するなら、正常に動作する
   ([DIR]や[VER]がクライアントのIE上に表示される)が、
   バッチファイル名(XXX.batなど)を指定した場合、何も返ってこない
   (バッチファイル結果がクライアントのIE上に表示されない)のは、
   どこかに制限があるからなのでしょうか。

 2.同様にWebサーバ上にあるCGIの中身で、

     $command = `rsh 別サーバ -l ユーザID ls -l`
           ・
           ・
           ・
     $command

   と記述し、そのCGIを実行した場合動作しないのはなぜなのでしょうか。
   別サーバ上にあるコマンド(ls -l)をユーザIDで実行せよという意味
   なのですが、結果として何も返ってこず、実行されているかも定かでは
   ありません。(system関数でも試してみましたが、256という返値が
   返ってくるだけでどちらにしても何も返ってきません)
   最後の[ls -l]は別になんでも良く、単純なコマンドの1つという意味で
   [ls -l]と書きました。


私の考えとしましては、
 1..batや.cmdなどの拡張子はApacheのあるバージョンから
   指定できなくなった。そのためバッチファイルが実行されず、
   正しい結果が出てこない。

 2.[rsh 別サーバ -l ユーザID ls -l]をコマンドプロンプト上から実行
   した場合、正常に動作します。コマンドプロンプトに別サーバの
   ファイル名一覧(ls -lの結果)を出力します。
   なのに、CGIに記述したときは、何も表示されません。
   これはどうしてなんでしょう?
   考えというより、なぜ表示されないのかが分かりません。
   IEの制限か何かなのでしょうか。
といったところです。

Apacheがログインするユーザが関係しているのかとも思い、
ApacheはWindows版なので、以下の操作をしてみましたが、
変化なしでした。

 操作:
  「Apacheのプロパティ」−「ログオン」タブ−「アカウント」を選択。
   アカウント名、パスワード、パスワード確認入力を入れる。

つまり、2.にある「ユーザID」と指定した「アカウント名」を同じにしてみた、
ということです。

その他知りたい内容があれば、随時お知らせしますので、
どなたかご伝授ねがえないでしょうか。

よろしくお願いします。


No.4866 投稿時間:2005年07月02日(Sat) 06:38 投稿者名:おやじ URL:
タイトル:自分で処理を書かなければダメです。

> 環境:
>  Webサーバ
>   OS    :Windows2000 Professional SP3
>   Apache:V1.3.33(Win32)
>  別サーバ
>   OS    :Unix(IBM/AIX V4.3)
>  クライアント
>   OS    :Windows98 SE
>   IE    :V5.5
> 
> どういうことをさせたいのかというと、
>   クライアント上からWebサーバ上、あるいは別サーバ上の
>   コマンド(バッチファイルなど)を実行させたい
> のです。
> 
> そもそもWeb環境でコマンド(特にバッチファイルなど)を実行することが
> 出来るのか?といったセキュリティの根本的な部分に触れるかも
> しれないのですが、出来たり出来なかったりとどうしても理解できないので、
> どなたがご伝授ください。
> 
> 
> 今回質問したい内容は2つあります。
>  1.Webサーバ上にあるCGIの中身で
> 
>      $command = `バッチファイル名`
>            ・
>            ・
>            ・
>      $command
> 
>    と記述し、そのCGIを実行する場合、
>    バッチファイル名を指定するのではなく[DIR]や[VER]など
>    比較的単純なコマンドを指定するなら、正常に動作する
>    ([DIR]や[VER]がクライアントのIE上に表示される)が、
>    バッチファイル名(XXX.batなど)を指定した場合、何も返ってこない
>    (バッチファイル結果がクライアントのIE上に表示されない)のは、
>    どこかに制限があるからなのでしょうか。

それで正常です。何も帰ってこないのではなく、batの実行結果、すなわち正常終了したか
否かが帰ってきているはずです。
bat内で実行したコマンドの結果はbatに帰っているので見えません。
必要ならbatの中でファイルに出力する等の処理が必要です。


>  2.同様にWebサーバ上にあるCGIの中身で、
> 
>      $command = `rsh 別サーバ -l ユーザID ls -l`
>            ・
>            ・
>            ・
>      $command
> 
>    と記述し、そのCGIを実行した場合動作しないのはなぜなのでしょうか。
>    別サーバ上にあるコマンド(ls -l)をユーザIDで実行せよという意味
>    なのですが、結果として何も返ってこず、実行されているかも定かでは
>    ありません。(system関数でも試してみましたが、256という返値が
>    返ってくるだけでどちらにしても何も返ってきません)
>    最後の[ls -l]は別になんでも良く、単純なコマンドの1つという意味で
>    [ls -l]と書きました。

上記と同じ理由です。例えば、下記のように自分で処理を書かなければダメです。

$command = `rsh 別サーバ -l ユーザID ls -l`;
print "Content-type: text/html\n\n";
print $command;

又は

open(PROC,"rsh 別サーバ -l ユーザID ls -l |");  # 実行
print "Content-type: text/html\n\n";
while (<PROC>) {                                # 結果を読み出す
   print $_;
}
close(PROC);


No.4875 投稿時間:2005年07月04日(Mon) 08:56 投稿者名:koji URL:
タイトル:Re: 記述してはいるのですが・・・返ってこないのです。

kojiです。お返事遅くなりました。
おやじさん、レスありがとうございます!!

> 上記と同じ理由です。例えば、下記のように自分で処理を書かなければダメです。
>
> $command = `rsh 別サーバ -l ユーザID ls -l`;
> print "Content-type: text/html\n\n";
> print $command;
>
> 又は
>
> open(PROC,"rsh 別サーバ -l ユーザID ls -l |"); # 実行
> print "Content-type: text/html\n\n";
> while (<PROC>) { # 結果を読み出す
> print $_;
> }
> close(PROC);

質問時、記述してはいなかったのですが、おやじさんのおっしゃる形で
私も記述していました。言葉足らずですみません。
で、おやじさんのレスにある内容を試した結果なのですが、
2つの方法ともIE上に何も返ってきませんでした。
実行結果が返ってくるのはsystem関数利用時のみで、`(バックスラッシュ)で
囲んだときは特に実行結果には何も返ってきませんでした。

質問時も記述しましたが、[DIR]とか[VER]などの単純なコマンドなら
IE上に結果を返してくれるのです・・・なのにbatファイル実行や、
[rsh]コマンドだと結果を返さないっていうのが悩みの種です。

う〜ん。他に何か理由があるのでしょうか??


No.4877 投稿時間:2005年07月04日(Mon) 19:50 投稿者名:おやじ URL:
タイトル:rsh側に「SYSTEM」ユーザを追加してみてください。

> > 上記と同じ理由です。例えば、下記のように自分で処理を書かなければダメです。
> >
> > $command = `rsh 別サーバ -l ユーザID ls -l`;
> > print "Content-type: text/html\n\n";
> > print $command;
> >
> > 又は
> >
> > open(PROC,"rsh 別サーバ -l ユーザID ls -l |"); # 実行
> > print "Content-type: text/html\n\n";
> > while (<PROC>) { # 結果を読み出す
> > print $_;
> > }
> > close(PROC);
>
> 質問時、記述してはいなかったのですが、おやじさんのおっしゃる形で
> 私も記述していました。言葉足らずですみません。
> で、おやじさんのレスにある内容を試した結果なのですが、
> 2つの方法ともIE上に何も返ってきませんでした。
> 実行結果が返ってくるのはsystem関数利用時のみで、`(バックスラッシュ)で
> 囲んだときは特に実行結果には何も返ってきませんでした。
>
> 質問時も記述しましたが、[DIR]とか[VER]などの単純なコマンドなら
> IE上に結果を返してくれるのです・・・なのにbatファイル実行や、
> [rsh]コマンドだと結果を返さないっていうのが悩みの種です。
>
> う〜ん。他に何か理由があるのでしょうか??

batは前レスのとおり自分でbat側で何とかしないと無理なはずですが、
rshは、rshサーバ側(Unix)の設定が原因と思います。
許可するユーザIDに「SYSTEM」を追加してみてください。
恐らくこれでいくはずですが、もしいかない場合はetherealあたりで
パケットを見てください。CGI経由でrshにログインしようとしている
ユーザIDが「$command = `rsh 別サーバ -l ユーザID ls -l`;」で指定
したユーザIDと違っているはずです。


No.4883 投稿時間:2005年07月05日(Tue) 15:09 投稿者名:koji URL:
タイトル:Re: rsh側に「SYSTEM」ユーザを追加してみたところ動作しました。

お世話になります。kojiです。

> batは前レスのとおり自分でbat側で何とかしないと無理なはずですが、
> rshは、rshサーバ側(Unix)の設定が原因と思います。
> 許可するユーザIDに「SYSTEM」を追加してみてください。
> 恐らくこれでいくはずですが、もしいかない場合はetherealあたりで
> パケットを見てください。CGI経由でrshにログインしようとしている
> ユーザIDが「$command = `rsh 別サーバ -l ユーザID ls -l`;」で指定
> したユーザIDと違っているはずです。

試しました。rshサーバ側(Unix)にユーザIDの「SYSTEM」を追加したところ
rshが動作しました。結果がIE上に表示されます。
Etherealはダウンロードしてきて実行してみました・・・が、
見方がわからずバタバタしてます。
使い方を調べてパケットの確認をしておきます。

解決策をご伝授いただき本当にありがとうございます。
助かりました。

CGI経由で実行するIDがSYSTEMになるということは、ここは変更できない
のでしょうね。安易に出来てしまっては「なりすまし」が当然のように
できてしまいますものね。

では。


No.4886 投稿時間:2005年07月05日(Tue) 21:42 投稿者名:おやじ URL:
タイトル:申し訳ないです。

> > batは前レスのとおり自分でbat側で何とかしないと無理なはずですが、
> > rshは、rshサーバ側(Unix)の設定が原因と思います。
> > 許可するユーザIDに「SYSTEM」を追加してみてください。
> > 恐らくこれでいくはずですが、もしいかない場合はetherealあたりで
> > パケットを見てください。CGI経由でrshにログインしようとしている
> > ユーザIDが「$command = `rsh 別サーバ -l ユーザID ls -l`;」で指定
> > したユーザIDと違っているはずです。

申し訳ないです。ここの一文はとっ散らかっているので無視してください。クライアントのユーザではなく、「SYSTEM」になってしまうと言いたかったのですが、片手間でカキコしていたので、おかしな記述になってしまいました。

> 試しました。rshサーバ側(Unix)にユーザIDの「SYSTEM」を追加したところ
> rshが動作しました。結果がIE上に表示されます。
> Etherealはダウンロードしてきて実行してみました・・・が、
> 見方がわからずバタバタしてます。
> 使い方を調べてパケットの確認をしておきます。
>
> 解決策をご伝授いただき本当にありがとうございます。
> 助かりました。
>
> CGI経由で実行するIDがSYSTEMになるということは、ここは変更できない
> のでしょうね。安易に出来てしまっては「なりすまし」が当然のように
> できてしまいますものね。

 これは、おやじにはわかりませんが、この状況では家庭内ならいざ知らず、会社や学校等ではセキュリティ上は使ってはいけない方法でしょうね。



掲示板▲頁先頭