シェルから起動するコマンドの一部にパスワードなどのセキュリティ情報が含まれている場合、それをpsコマンドなどによって見えなくするには、一般にどのような手法が採られているのでしょうか。

例えば、

#!/bin/sh
USER=hoge
PASS=hogehoge
foo -u $USER -p $PASS

というシェルを実行した時に、psコマンドで見ると

foo -u hoge -p hogehoge

と出ては困るわけで、

foo XXXXXXXX

とかいう表示にできるとありがたいです。XXXXXXの部分は、ユーザ名やパスワードが表示されなければ、どんな表示でもいいんですけど…。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

 qmail で使われるコマンド群のように、環境変数を使って親プロセスから子プロセスに値を渡してやる、というのはいかがでしょうか?



 あるいは OS 限定でもよければ FreeBSD 5.x で、System MIB の security.bsd.see_other_uids に 0 を設定することで、他人のプロセスを参照できなくすることができます。
    • good
    • 0
この回答へのお礼

なるほど、環境変数を使うのですか…。
これが一番簡単かつ効果的のようですね。
ありがとうございました。

お礼日時:2003/10/27 10:46

psで表示されるものはその時に動いているプロセスとなりますので、たとえシェルの中にユーザやパスワードを書いたとしても、psで表示されるのはそのシェルの名称など(下記参照)になると思いますので、そういった情報は表示されないと思います。



% ps -elf
8 S hoge 12345 1 0 99 20 ? 159 ? 12:34:56 ? 0:00 /bin/sh ./hoge.sh

psコマンドの表示をマスクするのは多分不可能と思われます。
シェル内部で呼び出すsqlplusのように、本シェルとは別プロセスで実行されるプロセスもあると思いますが、シェルの処理時間は(処理内容にもよりますが)それほどかからないため、それほど気にしなくていいと思いますが・・・

この回答への補足

ご意見ありがとうございます。

ちょっと説明不足でした。

今回、私がやろうとしているのは、親シェルから子シェルを呼び出して、その子シェルからプログラムを動かす、というものです。実際に動かすプログラムが、親シェルのプロセスとは別プロセスで動くものなのです。

a.sh → b.sh → programX
という感じです。

親シェル(a.sh)から子シェル(b.sh)を呼び出すときに、実際に動くプログラム(programX)に渡すためのユーザ名とパスワードをb.shに渡さねばならず、さらにprogramXの動作時間は非常に長い…というわけです。
こんなときに、b.shのプロセスをpsで見ると、ばっちりとユーザ名とパスワードが出てしまっていて、どうにかならないかなぁ…といったところです。

b.shをいじってしまえば話は早いのですが、一般的にこういうことを回避する手段というのがないのか、勉強のために知りたかったのです。

#具体的には、smbtarにかぶせる親シェルを作っています。

補足日時:2003/10/24 16:25
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報