• ベストアンサー

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

シェルから起動するコマンドの一部にパスワードなどのセキュリティ情報が含まれている場合、それを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

  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------

  • AIX/HP-UXでパスワード変更シェルを作成したい

    AIX/HP-UXで一括でパスワード変更を実行するシェルを 作成したいと考えております。 (最終的には複数サーバの複数ユーザのパスワードを  一括変更したい) そこで、AIXで以下の様なシェルを作成したのですが、 パスワード変更することができませんでした。 -------------------------------------- PASS=$1   "新パスワード USER=$2   "パス変するアカウント名 passwd $USER sleep 5 $PASS sleep 5 $PASS -------------------------------------- passwdコマンド自体は実行されるのですが、 その後の新パスワードが入力されておらず、 passwdコマンドタイムアウト後に新パスワードが 実行され、"新パスワードの文字列"が見つかりません。 となってしまいます。 インターネット等で検索した結果、linuxであれば expectコマンドを使用して、passwdコマンドを実行した 際に出力される「新パスワード:」を待ってから 入力すればよいということがわかったのですが、 linuxでexpectコマンドに相当するものを、AIXでは 見つけることができませんでした。 AIX/HP-UXにおいて、シェルスクリプトにてパスワード 変更を実現する方法をご存知の方がいましたら、 教えてください。 よろしくお願いします。

  • 複数コマンドを実行するには

    一回で完結しないコマンドはどのように書けば、実行できるのでしょうか? たとえば、下記のようにコマンドを実行して、受信メールを表示させたいのですが、方法が分かりません。 ------------------------- telnet localhost pop3 user hoge@hoge.com pass hoge retr 1 ------------------------- 一回で完結していないので、当たり前かもしれませんが、 下記のようにやっても、エラーがでてしまいます。 ------------------------- shell_exec('telnet localhost pop3'); shell_exec('user hoge@hoge.com'); shell_exec('pass hoge'); echo shell_exec('retr 1'); -------------------------

    • ベストアンサー
    • PHP
  • 可変長コマンドとその中のファイル名を変数に格納するには?

    宜しくお願い致します。 可変長のコマンド(空白が可変個ある文字列)とそのコマンド文字列内のtxtファイル やdivファイルやpsファイルやtexファイル名(ひとコマンドにファイル名は1つだ け)を取り出し 変数に代入するスクリプトtest.shを考えています。 #!/bin/bash -x COMMAND= FILE= のイコールの右辺には何と記述すればいいのでしょうか? 具体的には $ ./test.sh hoge foo hoe.dvi hoehoe hogehoge … とした時(コマンド分の長さは可変) COMMANDに「hoge foo hoe.dvi hoehoe hogehoge …」という文字列、 FILEに「hoe.dvi」 を代入したいのです。

  • Linuxでの質問。(echoコマンドなど)

    Linuxでの質問。 1.echoコマンドで* $home=' home ' (ただし home はシェル変数homeの値)と表示したい。echoコマンドにどのようは引数を渡せばよいのでしょうか。 実行例 % echo 適切な引数 * $home='/home/gbu/myname' 答えは echo \* "\home="\'$home\' でよろしいですか。 echo \* '$home='\'$home\' と入力しても同じ結果が出るのですが、どっちでいいでしょうか。 2.次の2つのコマンドラインは実行結果が異なる。その違いが生じる理由は何でしょうか。 % cd ; (cd / ; pwd) ; pwd % cd ; cd / ; pwd ; pwd まったく初心者です。manコマンドを使って調べたのですが。。 man () って入力しても、何にも出なくて、ぜひ教えてください。お願いします。 3.演習課題にならって、 エイリアスが子プロセスのシェル(サブシェル)に引き継がれるかどうかを確かめる手順の例を示しなさい。っていう課題が出ました。どういうふうにやればいいでしょうか。教えてください。 演習課題 シェル変数と環境変数の違いの確認 % set foo=1 シェル変数fooに値を設定する。 % setenv FOO 1 環境変数FOOに値を設定する。 % echo $foo シェル変数fooの値を表示する。 % echo $FOO 環境変数FOOの値を表示する。 % tcsh 子プロセスとしてシェルを起動する。 (ここから、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値の表示を試みる。(引き継がれていない。) % echo $FOO 環境変数FOOの値を表示する。(引き継がれている。) % set foo=2 シェル変数fooに値を設定する。 % setenv FOO 2 環境変数FOOに値を設定する。 % exit 子プロセスとしてシェルを起動したシェルを終了する。 (ここまで、子プロセスのシェル上での操作) % echo $foo シェル変数fooの値を表示する。(子プロセスでの変更は影響しない。) % echo $FOO 環境変数FOOの値を表示する。(子プロセスでの変更は影響しない。) エイリアスの意味を調べたのですが、「コマンドを別名で登録したもの」と解釈されていて、これはどういうことなんでしょうか。 この問題の意味は、課題にならって set alias=1 と設定して、次は setenv ALIAS 1 そして、課題のように、fooのとこをalias、FOOのとこをALIASと変えて、最後echo $ALIAS を調べればいいのですか。 学校の宿題ですが、やってもぜんぜん意味不明なので、助けてください。

  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • ログインシェルと対話型シェルの区別について

    ログインシェルと対話型シェルの区別について理解していません。  ログインシェルはpsコマンドで見たときに-bashと表示されると書籍にありました。  テキストログイン(init 3)してpsコマンドをうっても-bashになっていません。  ご存知の方、いらっしゃいますでしょうか?

  • PHPからシェルコマンドの実行

    PHPからシェルコマンドを実行したいのですが SSHやSCPコマンドが使えません。 phpからlsなどは問題なく実行できます。 具体的には以下のように書いています。 `scp test.log user@host:/home/hoge`; shell_exec()を使っても実行されませんでした。 環境は以下のとおりです。 PHP 5.4.17 CentOS 5.8 sshやscpコマンドをphpから実行するには何か特別な方法が必要なのでしょうか。 ご存知の方、教えてください。

    • ベストアンサー
    • PHP
  • df コマンドで表示される Filesystem の none とは?

    df コマンドで表示される Filesystem の none とは何でしょうか? ↓は、df コマンドの出力例です。 Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda2 XXXXXXXX XXXXXXX XXXXXXXX 13% / /dev/hda1 XXXXXX XXXXX XXXXX 15% /boot none XXXXXX 0 XXXXXX 0% /dev/shm

  • シェルプログラミングで文字列分割

    みなさま始めまして。 非常に困っておりますのでよろしくお願いします。 ユーザ名とパスワードが記述された、CSVファイルがあります。 このファイルから、ユーザ名とパスワードを読み出し コマンドに渡したいと考えております。 例: user1,pass1 user2,pass2 user3,pass3 user1がユーザ名、pass1がuser1のパスワードです。 このようなファイルを読み込み $command user1 pass1 のように、実行したいと考えています。 awkやperlのページを見てみましたが よくわかりませんでした。 よろしくお願いします。