|
>>2550 68user さん なるほど。 ttyでstdoutを出力してしまえば, stderrが後に残るというわけですね。 (正しい表現が分かっていませんが。) ありがとうございました。 |
|
こんにちは。 今日、こちらのページをみて、suidというものを使えば、 とあるCGIを「nobodyじゃない権限で実行させたい」と いう願いがかなうということがわかり、早速試してみました。 まず、こちらにサンプルでおいてあるwhoami.cgiをそのまま設置して パーミッションをrwsr-xr-xとしたところうまく動きました。 その後、自作のCGI(nobodyでは動かしたことがあるもの)を同様に nobodyでないユーザで動かそうと思ったら「Internal Server Error」 となってしまいました。 それで、うまくうごいた実績のあるwhoami.cgiを改造しながら原因を探した ところ、どうやら「require 'jcode.pl';」を書いてしまうと 「Internal Server Error」となってしまうということがわかりました。 require 'jcode.pl';行をコメントアウトすれば動きます。 なんとか、この一行を含んでいるものも、setuidして動かすことは出来ない ものでしょうか。 なにかよい方法がございましたらご教示ください。 宜しくお願い申し上げます。 |
|
>>2552 stone_free まず、 #!/usr/bin/perl require 'jcode.pl'; このスクリプトをコマンドラインから動かして下さい。カレント ディレクトリに jcode.pl があればちゃんと動くでしょう。 suid したスクリプトを実行すると、perl は自動的に汚染モード (taint mode) に切り替わります。いちいちスクリプトを suid して web 経由で実行するのは面倒なので、perl に -T オプションを付けて 汚染モードで動作させます。 #!/usr/bin/perl -T require 'jcode.pl'; 今度は jcode.pl が見付からない、と言われるはずです。 require がライブラリを探すパスは @INC で設定されていますので、今度は #!/usr/bin/perl print "@INC\n"; と #!/usr/bin/perl -T print "@INC\n"; で違いを調べます。 # perl -e 'print "@INC\n"' # perl -Te 'print "@INC\n"' # としてもいいです。 すると、上の方では @INC の最後に `.' (カレントディレクトリ) が含まれて いますが、-T を付けると `.' が含まれていないことがわかります。ドキュメント化 されていないのかもしれませんが、これは汚染モードの仕様なのでしょう。 というわけで、 require './jcode.pl'; require '/foo/bar/jcode.pl'; などと、@INC に頼らず require するか、require する前に push(@INC, '.'); すれば解決です。 その他、suidperl で動かすと PATH だとか umask だとかで文句を 言われることがあるかもしれませんが、いきなりブラウザ上で動作を 検証することはせず、必ず -T 付でコマンドラインから動作を確かめる ようにして下さい。 |
|
こんにちわ。早速なんですけど、教えて下さい。 以下のことを行った場合、 (1)javaのClassファイルをHP-UNIX上でコンパイル後、圧縮。 (2)windows2000にダウンロード後、CDに焼く。 (3)Solarisで解凍し、実行環境に投入。 で、Solarisで正常に動作するでしょうか? javaだから出来るような気もするんですけど、やっぱりリコンパイルは必要な気もして。 よろしくお願いします。 |
|
ひとつ気づいたこと。 これまでずっと,tar + gzip 形式のファイルを展開するのに % tar zxvf hoge.tar.gz といった順序でオプションを指定していました。 ところが,GNU Tar のマニュアルを見ると, こんなことが書いてありました。 <http://www.linux.or.jp/JM/html/GNU_tar/man1/tar.1.html> | tar への最初の引数は、オプション Acdrtux のいずれかでなくてはならない。 | この後にはどのオプション機能を指定する事も出来る。 最初の記述法は厳密に言うと間違いということに なりそうなんですが,どんなものでしょうか。 |
|
>>2553 68user 68userさん、有難うございました。 大変参考になりました。 おかげさまで、動かすことができました。 感謝感激です。 もうひとつ、教えていただいていいでしょうか。 今回の手順のひとつに > perl に -T オプションを付けて汚染モードで動作させます。 > #!/usr/bin/perl -T > require 'jcode.pl'; > 今度は jcode.pl が見付からない、と言われるはずです。 とありましたが、このとおりファイルに書いて # perl test.cgi としてコマンドラインで実行してみたのですが、 Too late for "-T" option at test.cgi line 1. と出てしまいました。 #!/usr/bin/perlの後にオプションをつける場合は、クオートか なにかでくくらないといけないのでしょうか。 また、「汚染モード」という物騒な名前はなにか訳があるのでしょうか。 やはり、本来のユーザと違う権限で実行できてしまうから危険である ということでしょうか。 |