• ベストアンサー

シェルから起動するコマンドの一部をマスクする

シェルから起動するコマンドの一部にパスワードなどのセキュリティ情報が含まれている場合、それをpsコマンドなどによって見えなくするには、一般にどのような手法が採られているのでしょうか。 例えば、 #!/bin/sh USER=hoge PASS=hogehoge foo -u $USER -p $PASS というシェルを実行した時に、psコマンドで見ると foo -u hoge -p hogehoge と出ては困るわけで、 foo XXXXXXXX とかいう表示にできるとありがたいです。XXXXXXの部分は、ユーザ名やパスワードが表示されなければ、どんな表示でもいいんですけど…。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

 qmail で使われるコマンド群のように、環境変数を使って親プロセスから子プロセスに値を渡してやる、というのはいかがでしょうか?  あるいは OS 限定でもよければ FreeBSD 5.x で、System MIB の security.bsd.see_other_uids に 0 を設定することで、他人のプロセスを参照できなくすることができます。

m_hagizo
質問者

お礼

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

その他の回答 (1)

  • utf7
  • ベストアンサー率29% (11/37)
回答No.1

psで表示されるものはその時に動いているプロセスとなりますので、たとえシェルの中にユーザやパスワードを書いたとしても、psで表示されるのはそのシェルの名称など(下記参照)になると思いますので、そういった情報は表示されないと思います。 % ps -elf 8 S hoge 12345 1 0 99 20 ? 159 ? 12:34:56 ? 0:00 /bin/sh ./hoge.sh psコマンドの表示をマスクするのは多分不可能と思われます。 シェル内部で呼び出すsqlplusのように、本シェルとは別プロセスで実行されるプロセスもあると思いますが、シェルの処理時間は(処理内容にもよりますが)それほどかからないため、それほど気にしなくていいと思いますが・・・

m_hagizo
質問者

補足

ご意見ありがとうございます。 ちょっと説明不足でした。 今回、私がやろうとしているのは、親シェルから子シェルを呼び出して、その子シェルからプログラムを動かす、というものです。実際に動かすプログラムが、親シェルのプロセスとは別プロセスで動くものなのです。 a.sh → b.sh → programX という感じです。 親シェル(a.sh)から子シェル(b.sh)を呼び出すときに、実際に動くプログラム(programX)に渡すためのユーザ名とパスワードをb.shに渡さねばならず、さらにprogramXの動作時間は非常に長い…というわけです。 こんなときに、b.shのプロセスをpsで見ると、ばっちりとユーザ名とパスワードが出てしまっていて、どうにかならないかなぁ…といったところです。 b.shをいじってしまえば話は早いのですが、一般的にこういうことを回避する手段というのがないのか、勉強のために知りたかったのです。 #具体的には、smbtarにかぶせる親シェルを作っています。

関連するQ&A