|
大変お騒がせしている、M.Masudadです。 こんどこそやっと解決マークがつけられそうです。(^^ゞ >なんか、うちの環境system関数が変です。 この件に関しては、原因はsystem関数実行時に、指定コマンドの パスが通って無いのが原因と判明しました。 フルパス指定するとsystem関数はちゃんと動きました。 今までsystemでコマンドを使ったサーバーのnobodyにはたまたま コマンドのパスが通っていただけみたいですね。 #いままでぜんぜん気が付かなかった....。 #なんか一人で大騒ぎしてますね。←私(>_<) まとめるとsuidスクリプトを、実行したい権限のオーナーにして chmod 4755 を設定。 $|=1; でバッファリングを止めて、systemで使うコマンドはフルパ スで指定するか、パスをあらかじめ指定しておく。 closeはどうですか?、ファイルハンドルを指定しなくとも最後に openしたハンドルのみクローズされると、思っていたのですが。 suidな時、STDOUTまでクローズされませんか? $|=1; は、保険と考えて全てのperlスクリプトに入れた方が、悩む 回数が減りそうですね。 やはりperlもosと密接に関係しているのが改めて分かりました。 こういうケースは、UNIXのシステムを十分理解していないとデバック しきれなかったかも知れないですね。 http://www.excel-net.co.jp/~masuda/su/ にある su.cgi に試験スクリプトを置きました。 これで見ると、だいぶ嘘ついてましたね。(^^ゞ 今までの件が判明しました。 実験に付き合ってもらってすいませんでした。 wrapper.cgiもありがとうございます。 非常に勉強になりました。m(_ _)m ところで、wrapper.cgiでのurl指定方法のwrapper.cgi/hoge.cgi は、知ってはいたのですがどういう動作になるのですか? ># だって、「いいページだ」と書かれるより、「ひどいページだ」と ># 書いてある方がうれしいから。悔しいので、ページを よりよいものに ># しよう、という気が起こりますよね。 いや〜こういう前向きな考え方をできる人って、今時なかなかいな いですよ。 #68UserさんってもしかしてA型? |
|
> ファイルハンドルを指定しなくとも最後に openしたハンドルのみ > クローズされると、思っていたのですが。suidな時、STDOUTまで > クローズされませんか? suidかどうか/httpd経由かコマンドラインか に関わらず、STDOUTが クローズされました。そもそもcloseってファイルハンドルを省略 すべきでないし、仮に省略した場合はselectで指定されたファイル ハンドル(デフォルトはSTDOUT)がクローズされるんじゃないですかね? # perl4、perl5.004で試しました。 > ところで、wrapper.cgiでのurl指定方法のwrapper.cgi/hoge.cgi > は、知ってはいたのですがどういう動作になるのですか? print文を埋め込んで試してみませう ;-) |
|
>suidな時、STDOUTまでクローズされませんか? ホントだぁ...これまた私の勘違い。 いままで作ったスクリプトを見直したら、ちゃんとやってました。 意識していたわけではなく、性格的な問題?からそうしていたの ですが、これって案外重要だったのですね。 この件でのスクリプトでの試験では、安易にそうしていただけでし た。#お恥ずかしい。(*^_^*;;; closeのみだとSTDOUTまでクローズされ、結果スクリプトが終了して しまうのですね。 >パスが通って無いのが原因と判明しました。 よく考えたら、スクリプト内で$ENV{PATH}=''としてるのに、何を 言ってるんでしょう私は。(; ;) でもなんで、$ENV{PATH}=''としなければいけないのでしょうか。 新たな疑問! #まるで小学生のガキが、なぜなぜ攻撃してるみたいですが..(^^ゞ #最近、私を含め周りにUNIX信者が増えている模様です。 #だって面白いんだもん。 >print文を埋め込んで試してみませう ;-) すいません、オバカでよく分からないのですが具体的にどうすれば 私にも理解できるでしょうか。 ↑完全に開きなおってるかもしれない(^_^)V これだけいろいろ御世話になっているので、何かお礼がしたいとこ ろですが、なにか出来る事が有れば言って下さい。 と、いっても何が出来るわけでは無いし....でも気持ちだけは有り ます。(本気度=120%) |