68user's page 掲示板

Prev< No. 2548〜2556> Next  [最新発言に戻る] [過去ログ一覧]
No. 2548 # 68user 2002/03/01 (金) 01:28:31
>>2546 小僧
> その場合、User1がhoge.fugu.comホストに対して
> rshを行った場合、実行ユーザはUser2になるのでしょうか?
そうです。foo.bar.com に user1 としてログインし、
    % rsh -l user2 hoge.fuga.com /usr/bin/id
などとすれば確認できます。

>>2547 CZ
ご指摘ありがとうございます。</P> を付けるようにしました。
    http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/unix/script/make-html

No. 2549 # CZ 2002/03/01 (金) 11:58:44
こんにちは。質問があります。

標準出力と標準エラー出力を画面に出力しつつ
エラー出力のみをファイルに保存したいのですが
shと標準的なUNIXのコマンドを使って実現可能な
ものなのでしょうか。

これまでに試したのは以下のような方法です。

--- test.sh ---
#!/bin/sh

echo stdout
echo stderr 1>&2
---

[その1]
        $ ./test.sh 2>error.log
    エラーが画面出力されないので×
    いざとなれば別の仮想端末で
        $ tail -f error.log
    としてもいいのですが。

[その2]
        $ ./tesu.sh 2>&1 | tee error.log
    エラー以外の出力も保存されるので×

No. 2550 # 68user 2002/03/01 (金) 12:44:49
>>2549 CZ
http://www.ainet.or.jp/~inoue/memo/sh-fd.html などを読みつつ
考えた結果、
    % (./test.sh > /dev/tty) 2>&1 | tee error.log
と、サブシェルを使わないとできないんじゃないか、という
結論になりましたがどうでしょう。

No. 2551 # CZ 2002/03/01 (金) 13:49:52
>>2550 68user さん
なるほど。
ttyでstdoutを出力してしまえば,
stderrが後に残るというわけですね。
(正しい表現が分かっていませんが。)

ありがとうございました。

No. 2552 # stone_free 2002/03/07 (木) 00:17:39
こんにちは。
今日、こちらのページをみて、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して動かすことは出来ない
ものでしょうか。
なにかよい方法がございましたらご教示ください。

宜しくお願い申し上げます。

No. 2553 # 68user 2002/03/07 (木) 13:33:42
>>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 付でコマンドラインから動作を確かめる
ようにして下さい。

No. 2554 # たこ。 2002/03/07 (木) 18:41:52
こんにちわ。早速なんですけど、教えて下さい。

以下のことを行った場合、
(1)javaのClassファイルをHP-UNIX上でコンパイル後、圧縮。
(2)windows2000にダウンロード後、CDに焼く。
(3)Solarisで解凍し、実行環境に投入。

で、Solarisで正常に動作するでしょうか?
javaだから出来るような気もするんですけど、やっぱりリコンパイルは必要な気もして。
よろしくお願いします。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 2555 # CZ 2002/03/07 (木) 21:45:24
ひとつ気づいたこと。

これまでずっと,tar + gzip 形式のファイルを展開するのに
    % tar zxvf hoge.tar.gz
といった順序でオプションを指定していました。

ところが,GNU Tar のマニュアルを見ると,
こんなことが書いてありました。

<http://www.linux.or.jp/JM/html/GNU_tar/man1/tar.1.html>
| tar への最初の引数は、オプション Acdrtux のいずれかでなくてはならない。
| この後にはどのオプション機能を指定する事も出来る。

最初の記述法は厳密に言うと間違いということに
なりそうなんですが,どんなものでしょうか。

No. 2556 # stone_free 2002/03/07 (木) 22:46:03
>>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の後にオプションをつける場合は、クオートか
なにかでくくらないといけないのでしょうか。

また、「汚染モード」という物騒な名前はなにか訳があるのでしょうか。
やはり、本来のユーザと違う権限で実行できてしまうから危険である
ということでしょうか。

Prev< No. 2548〜2556> Next  [最新発言に戻る] [過去ログ一覧]